之前做的一个WEB监控项目,这里做个整理。
RTSP(Real Time Streaming Protocol):实时流传输协议,应用层协议,传输层可为UDP(默认),RDP,TCP,一般用于直播。浏览器不支持,目前仅 IE 的ActiveXObject 支持,且有插件依赖,但监控行业普遍使用,比如海康的摄像头。
RTMP(Real Time Messaging Protocol):实时消息传输协议,应用层协议,传输层为TCP,Adobe公司专为Flash开发的,一般用于直播。浏览器不支持,可通过flash插件支持(.swf)。
HTTP:超文本传输协议,应用层协议,基于TCP/IP,普遍应用于web开发等。http-flv就是通过http传输flv流,兼容性好。
摄像头流数据一般用H264编码,浏览器原生video标签对h264解码支持较好,主要是容器格式,目前兼容最好的格式方案就是 H264 + AAC ,即mp4。
综上,我选择了 ffmpeg 拉取裸流流封装为 .flv,推到 livego 流媒体服务器 ,浏览器用B站的 flvjs 转码为mp4 并播放。
1. ffmpeg命令如下 ffmpeg -re -rtsp_transport tcp -i demo.flv -c copy -f flv rtmp://localhost:1935/live/movie
-re 按原始帧率取
-rtsp_transport 由于rtsp默认的udp连接不可靠,传输过程会有大量丢包,导致画面灰屏或绿屏或花屏,这里利用 tcp连接的可靠性和丢包重发机制可有效解决
-i input 文件或流输入
-c codec 编解码器 copy则不解码
-f form

本文介绍了RTSP、RTMP、HTTP-FLV三种协议在直播和监控领域的应用,以及如何使用ffmpeg进行流封装和推流。针对浏览器兼容性问题,通过livego服务器和flvjs实现跨平台播放,同时讨论了网络环境对延迟的影响和应对策略。
最低0.47元/天 解锁文章
1904

被折叠的 条评论
为什么被折叠?



