接上篇文章。虽然部署好了网络,通过VLC能播放视屏,但是离简单好用的道路还很远,在这期间查了很多资料,对整个系统有了不扫了解。首先引用一下,关于实现web播放的几种方法和优缺点(以下来自网络):
IPC视频流怎么实时在WEB浏览器播放,视频流格式是RTSP。
一、FFmpeg + nginx 将转 hls 通过 video.js 在支持h5浏览器播放
不足:hls延迟较rtmp、http-flv大
二、FFmpeg + nginx-rtmp-module + h5 video,rtsp转rtmp播放
注:通过video.js播放rtmp流。需要将代码放到服务器,本地windows电脑无法播放
不足:需要浏览器开启flash
三、FFmpeg + nginx-http-flv-module + flv.js,rtsp转rtmp,直接播放flv格式
基于nginx-rtmp-module,通过配置将rtmp转为flv,最后通过flv.js播放。
这种方式是最理想的,我目前找到的方案。当然单指不想花钱买收费方案的。
四、WebRTC
五、streamedian
六、h5stream
七、liveqing
开始的我也使用了网络的介绍,用ffmpeg转成rmtp流,但最后发现如果要播放rmtp流是需要flash支持的,现在的flash的支持度很差,显然不行,网上现在能找到的FFmpeg + nginx-rtmp-module方案并不是一个好方案。所以还是需要使用方案三。
以下的这个表写的比较清楚,能支持html5播放器的就httpflv和hls,二选一选择httpflv。
在本人实际操作中使用的流媒体服务器并不是nginx-http-flv-module ,而是用了SRS(simple rmtp server)+FFMPEG方案,感觉更简单。
搭建过程先省略。(详细搭建SRS+ffmpeg单独文档)
遇到的问题:
搭建完成,推流后VLC能播放,但是用flv.js的播放器
http://bilibili.github.io/flv.js/demo/
总是无法播放,后来发现下面还是有提示错误的。
从图上上看audio格式不支持,通过查询发现在ffmpege转码的时候用的audio编码是pcm_mulaw.
然后又是一顿查资料,在主页http://bilibili.github.io/flv.js/写着格式是h.264以及aac/mp3格式。
同时又写着mp3格式在ie11和edge浏览器不工作。
这里主要是要注意转换语句:
原来是这样,参数-vcodec 和 -acodec 都用的copy,而实际摄像头处理的视频格式是h.264+pcma_u
./ffmpeg -re -rtsp_transport tcp -i "rtsp://admin:123456@192.168.1.4:554/h264/ch1/main/av_stream?
videoCodecType=H.264" -vcodec copy -acodec copy -f flv -y
rtmp://122.51.999.999/live/livestream
后来改成这样,将-acodec 改成aac
./ffmpeg -re -rtsp_transport tcp -i "rtsp://admin:123456@192.168.1.4:554/h264/ch1/main/av_stream?
videoCodecType=H.264" -vcodec copy -acodec aac -f flv -y
rtmp://122.51.999.999/live/livestream
就能看到视频了
视频里是家中窗外风景。
实际使用中发现,如果视频部分h264不转码,用copy的模式的话cpu性能不高,可以支持很多路数。
视频和vlc播放的时候延时10s左右,感觉延时有点大。
接下来就是要把flv.js移植到工程中。然后现在的推流什么的都是命令行执行的,这些肯定不行.