这两年接触了很多视频流转码的应用场景,即将摄像头的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的协议,而且请求的时候才做转码,干净利落,还不生成多余的东西
四、开源转码软件的支持
方案很复杂,主要是部署几个东西,搜索一下就可以懂得
五、商业的视频转码软件
转码服务和浏览器播放组件功能一条龙服务,收费的自然不考虑
上述的转码仅仅是私有化的系统使用到的几个方案,我相信肯定不是主流直播流的处理方式,比如直播平台的高性能低延迟的方案。