市面上常见监控视频推流方案简介
当前如果想要将监控视频在浏览器中播放,有几种常见的办法如下:
1、获取摄像头RTSP流,使用FFmpeg或者程序如JavaCV或者其他方式,将其推流成RTMP,通过服务端搭建Nginx进行推流,Nginx需要编译集成RTMP模块,然后浏览器前端用flv.js播放RTMP流的视频。
2、同样采取推流的方式,Nginx实现推流并切片为m3u8,或者HLS方式,本质上是将视频流分片保存然后网页播放,此方案次于第一种。
3、其他一些解决方案,大同小异,各有各的弊端。
以上方案都不是特别完美,要么是延迟高,要么就是不稳定,容易断掉,并且维护也非常麻烦,过程繁琐,容错性低。
上述常见方案实现的痛点总结
1、RTSP推RTMP流过程繁琐,需要搭建Nginx,运行时容错性低
2、网页端播放需要安装插件,如播放RTMP流需要Flash插件,然而较新版本Chrome已不支持Flash,用户端使用麻烦
3、虽然有方案可以网页播放RTMP流,但是延迟和资源消耗居高不下
4、使用m3u8播放需要Nginx切片,延迟也很高
5、其他方案稳定性差,容易卡住,或者因为其他不可控因素导致断流
6、耗费精力搭建与运维,部署麻烦
7、其他部分方案门槛搞,需要去学专门的工具类,坑也多,费时费力
本方案特色
1、延迟极低,一秒以内,播放稳定,极限测试可以一直播放几天,不掉线
2、支持视频音频同时传输,可以选择关闭音频
3、无需安装web浏览器插件,兼容各种浏览器
4、服务端兼容多平台(Linux,MacOS,Windows),一键运行
5、使用简单,配置方便,后续会增加灵活配置功能
6、可以二次开发,自定义界面,融入现有系统非常方便快捷
本方案应用前置条件
只要满足以下两个条件即可使用:
1、需要能获取摄像头RTSP流
2、视频编码为H264,音频编码为aac
方案技术简介
本方案简单来说就是通过RTSP流转Websocket的方式实现网页无插件播放。这期间,与上述方案相比,少了一步转RTMP流的过程,获取原生的RTSP流即可进行操作。通过WS协议与客户端交互,简单高效。
其延迟限大小制与RTSP流获取延迟与网络传输带宽。基本上正常情况下十多路监控视频一起推流可以到达一秒以内延迟,系统CPU,内存占用极小。和海康自带的网页监控平台基本持平(海康平台需要IE浏览器播放,且安装ActiveX插件),用户使用非常不方便。采取这种方式的话,就无需安装Flash插件,兼容多浏览器。
至于程序代码,可以自行选择语言编写,推荐C++与Go,Java也可,核心思想不变,这里提供一个实现好的案例,仅供参考:https://www.yuanmasucai.com/24963.html
参考资料:
FFmpegWiki:https://trac.ffmpeg.org/
RTSP协议学习:https://blog.csdn.net/lory17/article/details/60144734
Netty:https://netty.io/