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