我是靠谱客的博主 矮小咖啡,最近开发中收集的这篇文章主要介绍libx264编码过程中修改码率踩坑记录,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题来源于项目中的一个需求,根据当前网络环境实时调整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编码过程中修改码率踩坑记录所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部