概述
问题来源于项目中的一个需求,根据当前网络环境实时调整libx264的码率参数,从而让视频播放更加流畅。
1、设置码率调整算法为ABR。
2、初始化,并提供一个接口供探测网络环境的线程调用。写法大概类似于以下:
bool reconfigure_bitrate(uint32_t bitrate) {
param_t->rc.i_bitrate = bitrate;
x264_encoder_reconfig();
return true;
}
3、写完测试发现不起作用,查询资料有部分资料让调用x264_encoder_open()。
4、在提供的接口加上发现流量调整是没问题,但是仔细想想就知道这不是问题的根本解决办法,为什么修改编码参数需要调用open?相当于重新打开编码器?
5、继续查阅源码,发现reconfig接口里面有如下代码:
/* VBV can't be turned on if it wasn't on to begin with */
if( h->param.rc.i_vbv_max_bitrate > 0 && h->param.rc.i_vbv_buffer_size > 0 &&
param->rc.i_vbv_max_bitrate > 0 &&
param->rc.i_vbv_buffer_size > 0 )
{
*rc_reconfig |= h->param.rc.i_vbv_max_bitrate != param->rc.i_vbv_max_bitrate;
*rc_reconfig |= h->param.rc.i_vbv_buffer_size != param->rc.i_vbv_buffer_size;
*rc_reconfig |= h->param.rc.i_bitrate != param->rc.i_bitrate;
COPY( rc.i_vbv_max_bitrate );
COPY( rc.i_vbv_buffer_size );
COPY( rc.i_bitrate );
}
*rc_reconfig |= h->param.rc.f_rf_constant != param->rc.f_rf_constant;
*rc_reconfig |= h->param.rc.f_rf_constant_max != param->rc.f_rf_constant_max;
如果需要在编码过程中实时修改i_bitrate,需要初始化的时候开启VBV。
6、好了,问题并不是要在reconfig之后重新open,而是在初始化编码器参数的时候开启VBV。
最后
以上就是矮小咖啡为你收集整理的libx264编码过程中修改码率踩坑记录的全部内容,希望文章能够帮你解决libx264编码过程中修改码率踩坑记录所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复