在Web网页播放网络摄像机RTSP视频流方案汇总

rtsp是实时流协议,一般用于网络摄像机;但由于现代浏览器安全问题,不再原生支持插件方式播放(RealMedia (for RTSP) or Flash (for RTMP));


1 RTMP方案

rtmp是adobe公司的私有协议,基于tcp实现,早期在flash上可以直接支持;

现在多为flv播放器支持。

方案描述:

ffmpeg 将rtsp视频流转为rtmp视频流,而后通过flv.js播放;

后端:

ffmpeg + nginx + nginx-rtmp-module

ffmpeg命令:
ffmpeg -buffer_size 4096000 -rtsp_transport tcp -i rtsp://[用户名]:[密码]@[IP]:554/h264/ch1/main/av_stream -threads 8 -tune zerolatency -acodec aac -vcodec libx264 -r 25 -vb 2500k -vf scale=iw/2:-1 -f flv rtmp://localhost:1935/myapp/flv


Web播放组件:

video.js
EasyPlayer.js
vlc (主流浏览器已不支持)
LivePlayer(与EasyPlayer.js惊人的相似)
 


2 HLS方案

HLS是苹果公司的直播流协议,H5原生支持;


方案描述:

基于方案1的扩展,ffmpeg 将rtsp视频流切片转存为多个ts视频缓存起来,并通过nginx代理出去,web接入hls协议(m3u8)播放


nginx-rtmp-module的原生支持,niginx.conf加个配置即可
后端:

ffmpeg + nginx + nginx-rtmp-module

ffmpeg命令:

ffmpeg -f rtsp -rtsp_transport tcp -i rtsp://[用户名]:[密码]@[IP]:554/h264/ch1/main/av_stream -c copy -f hls -hls_time 1 -hls_list_size 3 -hls_wrap 3 D:/nginx-1.19.3/media/hls/test.m3u8 

nginx配置: 参考方案1
Web播放组件:

video.js
EasyPlayer.js
方案结论:

相对比较简单的一个方案了
延时过高,在3-5秒以上,甚至更久,适合点播
nginx-rtmp-module在windows下编译很麻烦


3 HTTP-FLV方案
方案描述:

本质上还是ffmpeg将rtsp视频流转为rtmp视频流,只是ffmpeg在转码的时候已经将视频转换成了flv格式的,nginx-http-flv-module将rtmp流转为http-flv流,web播放flv格式视频(可能我的理解有误,具体原理没有深究)
nginx-http-flv-module是基于nginx-rtmp-module的二次开发,作者貌似又新弄了一个 nginx-http-live-module,不免费也不开源,有兴趣的自行去了解
后端:

ffmpeg + nginx + nginx-http-flv-module

ffmpeg命令:与1方案一致,已经包含了flv视频流的转码
nginx配置:与1方案一致
Web播放组件:

flv.js
videojs-flvjs
EasyPlayer.js
方案结论:

网上说flv方案的延时在1-3秒,然而我实际测试远不止3秒,用flv.js播放能有20多秒延时…
nginx-http-flv-module在windows下编译很麻烦

4 JSMpeg方案(推荐)
方案描述:

ffmpeg + http server(接流)+ websocket(server中继转发,client接收流) + jsmpeg.js
后端:

ffmpeg + http server + websocket server

http服务端:用于接收ffmpeg转码后的流
websocket服务端:用于http server收到的流推送给各个客户端
Web播放组件:

5 WebRTC方案
方案描述:

WebRTC可以使得web端直接连接rtsp视频流,不过初步了解了后,感觉学习成本有点大,便没有深究
后端:

需要搭建一个信令服务器
Web播放组件:

使用原生video元素即可
方案结论:

性能好,延迟低,实时性要求高的可以使用本方案
学习成本较大,暂未深入了解,可参考以下文章:
Vue + WebRTC 实现音视频直播(附自定义播放器样式)
基于 WebRTC 的 RTSP 视频实时预览
webrtc-streamer


方案性能对比

延时时长:

RTMP : 3秒以上
HLS: 5秒以上
FLV: 20秒以上(未经多次测试,可能不准)
JSMPEG: 1秒左右
WebRTC:未测试,理论延迟是毫秒级别的


其他方案
开源方案:
ZLMediaKit

stream-rtsp 

依赖ffmpeg,nodejs,支持如下几种转换HLS/DASH/FLV

RTSPtoWeb

 转换 RTSP流未 MSE (Media Source Extensions), WebRTC, 或 HLS,以便浏览器播放;不依赖于ffmep和gstream,基于go语言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值