随着现代社会不断发展,对于安防行业的需求也越来越多。
近年来,各大安防厂商如雨后春笋一般不断涌现,以视频监控为主的海康、大华、宇视;以门禁为主的钮贝尔等。
各大平台也都在介入安防行业,像阿里,腾讯的数字城市。其他各种针对安防行业的解决方案也是层出不穷,如雪亮工程,智慧交通,智慧社区等等。
如今安防行业应用的存在于各行各业中,各种安防设备也是五花八门,层出不穷,但目前视频监控仍是最主要的市场。
本人近些年来对海康,大华,宇视等视频厂商做过一些视频对接的开发,但始终存在一个问题,在谷歌浏览器中如何进行视频监控的预览。
本文将主要解决在谷歌,火狐等非IE浏览器中预览视频监控问题,给广大开发者提供一个思路方法。
在此之前本人也百度过很多方案,但效果都不是很好,多多少少都存在些问题。
文中将这些方法进行了一个大概的汇总,以便供大家参考。
在软件开发中分为 C/S 架构和 B/S 架构,即客户端程序与网页端程序。
客户端在对接监控视频时比较方便也比较简单,直接对接厂商的视频控件或是 SDK 就可以了。
网页端最常用的就是通过厂商平台的视频控件进行预览回放,这种通过视频控件的方式优点有很多,比如稳定性强,可使用视频控件进行录像,截图,云台控制等操作。
但是网页端调用视频控件有一个比较严重的问题,只支持IE浏览器。
视频控件一般都是 OCX 的组件,注册到注册表中后页面通过 ActiveXObject 进行创建并调用里面的方法。
现在谷歌浏览器中现已不支持 ActiveXObject 的创建及调用,这是由于 chrome 浏览器在 45 版本后不再提供对 npapi 插件的支持。
网上也有一些手动启动 npapi 的方法,但是操作比较繁琐,不可能针对用户去大面积铺开使用。
针对谷歌浏览器预览视频监控的方法大概有以下几种
1.使用 ffmpeg
地址:https://blog.csdn.net/weixin_43237948/article/details/89308678
该方案是将 RTSP 视频转成 HLS 格式,前端通过第三方js再去从服务中取流。
这种方式在配置的这部分相对来说比较复杂,而且网上相关的资料也不是很多。
2.VLC控件进行
安装 VLC 客户端,直接在浏览器中调用 VLC 的视频控件,通过监控视频 RTSP 串流进行预览。
该方式调用时比较方便,在360安全浏览器的极速模式下是可运行的,但是在谷歌浏览器依旧因为插件的原因不能预览
3.WebSocket视频流转发
开发一个服务端,通过摄像头的设备 SDK 去取流,在将视频流通过 WebSocket 发送到前端页面,页面中再将获取到的视频流绘制到 DIV 中。
参考地址:https://download.csdn.net/download/qq30886226/10617007
该方式对于浏览器端压力较大,而且视频画面也会出现丢帧模糊的现象。多个视频调用时服务端的压力也会过大甚至崩掉。
以上三种方式是题主在开发过程中所接触到的一些方法,这几个方法都有一个共同的问题,视频预览相对来说容易,但录像回放的功能不太好实现。
题主最近发现一种新的方式,这中方式可以较好的解决大部分浏览器预览视频监控中的问题,其中包括回放,录像抓图,云台控制等。
思路很简单
1、开发一个客户端程序,用程序去对接视频监控(推荐使用厂商自己的视频控件)。
2、客户端程序启动一个 WebSocket 服务。
3、网页中连接 WebSocket 服务,通过 WebSocket 发送消息。客户端收到消息解析后在进行相对应的操作。
这种方式基本上解决了现有浏览器预览监控视频的绝大部分问题。
1、浏览器支持:WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议,,只要是支持HTML5,WebSocket就可以使用。
2、稳定性,功能完整性:因为客户端是调用的厂商视频控件,所以无论是在取流的稳定性,视频清晰度等各个方面,肯定要比自己去取流在做操作方便的多。而且大部分视频控件都是包括一些功能,例如云台控制、抓图、录像等操作。
这种方式题主已经测试成功并且已应用在项目上。
各大厂商自己个视频控件能在谷歌浏览器上运行其实也是这个原理,通过 WebSocket 来操作视频客户端。