这两年接触了很多视频流转码的应用场景,即将摄像头的RTSP协议转成能够在浏览器中播放的协议。这个业务场景分两种情况,一种是基于成熟的视频平台,本身就支持hls的视频流输出,那这就比较开心,直接请求到播放地址返回给浏览器即可,另一种就是对接设备或者视频平台本身也不支持输出浏览器支持的播放协议,一般原始流或者视频平台支持的流都是rtsp,这个时候需要业务方做视频流转码处理。本人参考网络上,也结合公司中做视频方面的同事提供的支持,梳理了以下几个方式。
一、Nginx+Ffmpeg
这种方法是网络上的主流,主要是借助Nginx的流模块配置做的转码处理,这里面包含两种方法
1、Nginx的RTMP模块配置方法,通过Ffmpeg将RTSP转成RTMP协议,然后Nginx中配置RTMP到HLS协议的映射,最后按照指定的规则路径请求即可
2、Ffmpeg将RTSP协议直接转成HLS协议,写入到Nginx的指定目录下,然后Nginx将该目录代理成HTTP访问的方式,浏览器直接请求即可,这种方法会生成很多ts文件,需要做清理处理,尝试过可行,但是不建议使用
二、javacv
虽然很多网友反馈效率不行,但是不失为一种可行的方法
三、改写Ffmpeg源码
这种方法对技术要求有点高,至少要看得懂Ffmpeg的源码才能入手,本人借助同事支持,采用了这种方法,效果还不错,直接输出成http+flv的协议,而且请求的时候才做转码,干净利落,还不生成多余的东西
四、开源转码软件的支持
方案很复杂,主要是部署几个东西,搜索一下就可以懂得
五、商业的视频转码软件
转码服务和浏览器播放组件功能一条龙服务,收费的自然不考虑
上述的转码仅仅是私有化的系统使用到的几个方案,我相信肯定不是主流直播流的处理方式,比如直播平台的高性能低延迟的方案。
猿大师播放器在前端用web socket是浏览器和中间件及播放程序之间的通讯协议,和实际播放无关,只要浏览器支持web socket就可以播放,现在大部分浏览器都支持web socket,所以就算监控设备不支持Websocket,用猿大师播放器播放RTSP也是是没问题的。
在遍地都是摄像头的今天,往往需要在各种信息化、数字化、可视化B/S系统中集成实时视频流播放等功能,海康、大华、华为等厂家摄像头或录像机等设备一般也都遵循监控行业标准,支持国际标准的主流传输协议RTSP输出,而Chrome、Firefox、Edge等新一代浏览器从2015年开始取消了NPAPI插件技术支持导致RTSP流无法直接原生播放了
因为项目上需要把海康威视摄像头集成到WEB网页中播放,于是开始了对WEB播放摄像头方案的各种折腾。
2015年之前还可以用VLC原生播放器在Chrome、Firefox等浏览器中直接播放,延迟比较低,效果也还不错。可惜好景不长,从 2015年Chrome、Firefox等浏览器取消了对 NPAPI插件的支持,海康威视官方提供的 web3.0开发包也只能在低版本浏览器播放。
在遍地都是摄像头的今天,往往需要在各种信息化、数字化、可视化B/S系统中集成实时视频流播放等功能,海康、大华、华为等厂家摄像头或录像机等设备一般也都遵循监控行业标准,支持国际标准的主流传输协议RTSP输出,而Chrome、Firefox、Edge等新一代浏览器从2015年开始取消了NPAPI插件技术支持导致不再支持RTSP的原生播放
因为工作需要,要在Chrome、Firefox等高版本浏览器中播放海康威视、大华等摄像头,由于目前摄像头大多都是通过 RTSP 协议传输视频流的,即使是HTML5标准的Video也并未对RTSP流播放提供原生支持,从而导致如何在当前主流的浏览器中实现低延迟、低成本播放多路RTSP成为了一个重大技术难题。
为了加强标准加密视频在解密播放时解密秘钥的安全性,业务方需要同时提供令牌服务和解密服务,其中令牌服务生成鉴权令牌,解密服务用于验证令牌和获取解密秘钥。