ffmpeg api推流,谷歌浏览器播放大华、海康威视网络摄像头rtsp视频流方案(hls、m3u8、flv、webrtc、srs、nginx、nginx-rtmp、rtmp)比较
将网络摄像头视频流在主流浏览器中无插件播放,不必局限于ie中使用摄像头厂商自带的插件播放。
尝试了几种方案:
①nginx + nginx-rtmp-module + hls + EasyWasmPlayer.js
②srs + flv + h5
③srs + flv + EasyWasmPlayer.js
④srs + webrtc + jswebrtc
以上所有方案均是将rtsp协议转换为rtmp协议,视频格式均转换为flv。
所有延迟对比前面(下面)时间为大华摄像头ie插件播放,后面(上面)为谷歌浏览器vue项目中播放。
基础准备
我在虚拟机中部署了nginx服务器,nginx-rtmp-module rtmp服务器。
在虚拟机中使用docker部署了srs3和srs-4,只有第四版才支持webrtc
使用ffmpeg api推流,命令行推流都是一样的。
推流代码:https://blog.youkuaiyun.com/m0_46144966/article/details/115416301
从主机推流到虚拟机的服务器上后,在主机谷歌浏览器中拉流播放。
视频流来自大华网络球机。
srs地址和docker安装方式:https://github.com/ossrs/srs/tree/4.0release
nginx-rtmp-module地址和安装方式:https://github.com/arut/nginx-rtmp-module
EasyWasmPlayer.js用于播放hls(m3u8)和http/flv协议的视频:https://www.npmjs.com/package/easywasmplayer
这个一定按照官网给定的方式使用,放在根目录下。
rtmp(vlc播放)
从srs上拉流播放,延迟在5-6s之间:
hls(m3u8) 浏览器播放
nginx + nginx-rtmp-module + hls + EasyWasmPlayer.js
延迟在10s左右,不太稳定,根据hls切片大小不同,效果不一样,有些设定会影响流畅性。
flv 浏览器播放
srs + flv + EasyWasmPlayer.js
延迟在2s左右
srs + flv + h5
延迟不到2s
webrtc 浏览器播放
srs + webrtc + jswebrtc.js
延迟比大华摄像头ie浏览器插件播放还要低,我这边可以看到谷歌浏览器中的的时间比ie中的时间先变化。
在火狐浏览器中播放出现网络问题,这是因为jswebrtc.js的配置不全,无法绕过网络拉流。
总结
最终发现还是webrtc + srs4 + ffmpeg 的方案比较理想,在同时拉20个流播放时,延迟依然和大华的ie插件播放方式相当,少于20个甚至比ie插件更快。
如果觉得有什么需要补充的请联系我。