从书上看到的关于自适应码率的一些策略,记录一下,实现上面因为在推流端就可以完成这些操作,所以感觉还是比较实用的。
具体实现细节可能还需要琢磨琢磨,才能运用到现实推流当中。
关于上面说的自适应码率策略可以分为三个模块:
1.网络带宽检测模块:
视频数据采集之后经历了编码推流阶段,在编码阶段有编码阶段的“压缩码率” 、在推流阶段有推流阶段的“推流码率”。
这个模块主要是对上面两个阶段的码率进行对比,从而确定当前网络上行带宽是否足以将编码器编码出来的视频帧发布到CDN接点服务器上。
2.码率调整策略:
由上面的带宽检测模块得出的结果也就分为了:“期待发送码率” 和 “实时压缩码率”。
目的就很明显了,就是按照发送码率反馈给编码器来调整压缩码率,这里这两个值也不能直接拿来就进行对比,也需要结合当前的网络抖动,进行合理的“快速降”,“慢慢升”
这种方式可以增加整个直播过程的流畅度。
3.实时改变编码器的码率:
目前主要的应用平台分为移动端和pc端。而编码又可以分为硬件编码和软件编码。相对pc端的移动端更多使用硬件编码。
ios使用VideoToolBox 进行硬件编码,对系统要求必须是ios8.0以上直接使用videotoolbox 的API设置码率和fps就可以。
android使用MediaCodec进行硬件编码,相对ios的话android可能就需要更多的适配了,厂家不同机型不同不能像ios那样直接调整。
pc端一般都是软件编码,可以使用ffmpeg进行编码(内部使用的libx264),也可以直接使用libx264库进行编码。