- 前言
- HLS协议
- 功能简介
大概有几年没有更新文章了,最近机缘巧合,项目中还是涉及到web端播放视频相关业务,所以不得不再次重拾C++,不过作为C++老程序员,兼顾java或cpp技术方面研发还不是什么大问题。言归正常,今天我要解决的问题就是web端播放摄像机实时视频,总结一下有如下几种方案:
- (1)使用ActiveX插件播放
这是传统安防行业最古老的解决方案,适合c++开发人员,优点是c++开发速度快,缺点是只适合IE内核使用,且需要证书或需要较
为复杂的浏览器配置。 - (2)使用Flash插件播放
相对于ActiveX的好处就是flash插件更通用,适合大部分浏览器,缺点就是还是需要插件且google在2021年底就不在支持flash了。 - (3)使用HLS协议播放
hls是苹果开发的一套基于http协议的浏览器,优点是适合普通浏览器和移动端,无需任何插件,缺点是延时稍大(大概在3-10s) - (4)使用http-flv协议播放
这种协议也是基于http协议传输flv文件(不需要flash插件的adobe格式文件播放),缺点是协议通用性不及hls。 - (5)使用websocket播放
这种方式是排除插件方式播放视频,使用websocket发送音视频数据,然后前端使用js的h264库进行解码渲染,缺点效率低,仅支持
h264,前端也要借助js播放库。 - (6)使用webrtc播放
既websocket通用协议之后,google退出的webrtc播放协议也普遍在各大浏览器上得到支持和使用,效率较高,但开发难度较大。
我们这里使用的就是HLS协议,由于HLS在各个终端的支持性非常友好,在对实时性要求又不是非常高的情况下(我这里开发测试大概在3-4秒的延时),我们可以非常大胆的选择HLS协议进行实时视频点播,使用HLS实时播放网络摄像机存在以下几个问题,也是本章节我们要解决的问题:
- (1)传统摄像机或设备不支持HLS协议
做传统安防行业的应该都知道,安防常用的设备包括IPC摄像机、NVR录像机、DVR录像机、解码器、门禁、卡口等带有视频能力的
设备都不支持HLS传输协议,一般都支持rtsp、GB28181协议,有的只有服务器才支持rtmp协议,但是这些协议都有一个特点:不能
在浏览器上无插件播放。 - (2)浏览器播放要求无插件播放
要将实时视频在普通的浏览器播放且是不需要任何插件的播放是基本所有用户需要面临和解决的一个问题,大家的解决方案各不一
样,各有优点和缺点,要根据实际情况选择并进行独立开发,最重要的是这种需求对开发能力要求很高,为什么?音视频编解码要求
程序员需要深入了解c++语音的同时还要求对编解码这块非常熟悉,同时对web端编码有一定的了解和积累,一般情况下不能全能型
的技术开发员很难做到!
今天我要解决的就是这两大难题,决绝方法就是将RTSP协议(几乎所有摄像机都支持,只不过rtsp地址格式不一样)转换为HLS协议!
为了实现以上功能,我决定开发一套cpp流媒体服务器,专门接入所有rtsp视频流,然后通过协议转换为HLS视频流,web端就可以通过video标签实时播放视频了。媒体服务提供了如下接口:
(1)动态添加rtsp设备
通过该接口动态给媒体服务器添加rtsp设备并接入进来。
(2)动态删除rtsp设备
在不需要接入设备,可以直接从接入服务中删除,如果正在录像则停止所有录像,停止播放的视频,最后删除设备并释放服务器资源。
(3)动态更新设备录像策略
支持配置周一到周日的各个时段录像配置,录像支持mp4或flv格式文件存储。
(4)启动rtsp视频转HLS点播
为充分利用服务器资源,在播放的时候才启动rtsp拉取和hls协议转换
(5)手动停止rtsp视频点播
播放HLS视频之后,如果一直有拉取ts视频流则视频不会自动关闭,如果hls视频关闭后,媒体服务会自动检测到并关闭视频,释放服务器
资源,当然也可以通过接口手动强制关闭视频。
媒体接入服务效果:
HLS播放效果(测试用网上搜索到的HLS在线测试网站:http://192.168.8.19:180/9/1/1/index.m3u8)
视频录制播放:
基于c++开发的媒体服务功能亮点如下
(1)支持rtsp设备接入
(2)支持HLS视频点播
(3)提供http控制接口(设备添加、录像控制、视频点播停止等)
(4)支持mp4或flv实时视频录制和下载播放
(5)支持本地磁盘轮询覆盖视频录制
(6)支持与第三方云平台对接(包括设备管理、录像策略、录像记录、设备状态等)
(7)支持设备报警联动录像
(8)支持http安全认证(basic和bearer)
媒体服务器配置如下
bUm7gMEQrG 123456 大润发商场媒体服务 192.168.8.19 8090 180 true media 123456 0 false http://81.71.74.135:5002 admin 0192023A7BBD73250516F069DF18B500 D:/media/hls lixx 5 1 15 false 300 D:/media/capture true D:/media/record flv 104857600 2147483648 30 1 127.0.0.1 3306 root root record
媒体服务器提供对接文档
源码获取、合作、技术交流请获取如下联系方式:
QQ交流群:961179337
微信账号:lixiang6153
公众号:IT技术快餐
电子邮箱:lixx2048@163.com



