手头有一个老版本的海康摄像头,不支持websocket,支持rtsp和GB28181协议,为了实现在chrome浏览器低延迟实时预览。通过在网上查询到4种方式。
1.Nginx+FFmpeg
参考https://blog.csdn.net/cat_of_ming/article/details/120058450
详细说明了实现步骤,但是实现结果延迟略大有10秒以上,而且随着时间的增长还会增长,猜测原因可能是要先转成hls格式存储在本地,然后网页获取视频,不是直接转流的方式导致的延迟。
2.flv.js+wesocket
参考https://www.cnblogs.com/liuqin-always/p/13853100.html
详细说明了实现步骤,实现结果如文章中所说会有延迟,大概在三秒左右。
3.GB28181
参考https://www.bilibili.com/video/BV1Mv4y1d7Vy/
有详细的视频解说,特别提醒踩过的一个坑,在windows系统下安装Ubuntu时,WSL2无法共线本地IP地址,需要切换到WSL1,参考http://t.zoukankan.com/maomaozi-p-14587469.html
实现延迟和方案2差不多,可能与实现方式有关,实现是用的是hls模式取流。
4.Ffmpeg+Node.js+jsmpeg.js
参考https://blog.csdn.net/l15738519366/article/details/105844281
该方案实现后延迟低于1s,稳定性也较好,有一个问题是接入多路视频时,需要开多个cmd窗口调用ffmpeg转码rtsp视频流。
插入到vue项目中使用参见https://blog.csdn.net/yunbabac/article/details/120740547
综上,推荐方案4,解决延迟效果最佳。