之前做的一个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