在基于webrtc项目中用到了openH264编码器,在实际应用中对编码器的关键参数优化给出一些总结和建议:
1.iRCMode:码率控制模式:
0值对应quality mode(RC_QUALITY_MODE)更侧重保证视频质量,码率稳定性控制稍差;1值对应bitrate mode (RC_BITRATE_MODE),更侧重保证码率的稳定性。 建议该参数设置为1:iRCMode =1;
2. iTemporalLayerNum:时域SVC的层数
openH264源码中在FillDefault (SEncParamExt& param)中设置的iTemporalLayerNum=1;
但是建议该参数修改设置为2:iTemporalLayerNum=2;抗丢包能力强点
3. bEnableDenoise:降噪
这个属于预处理过程,在编码前会进行一个双边滤波降噪过程调用函数CWelsPreProcess::BilateralDenoising(),进行降噪处理,开启该功能可以滤掉部分噪声,但是对编码质量也会有些失真,具体的编码性能效果参数还未测试。
建议pc端可以开,移动端可以关
4. bEnableBackgroundDetection:背景检测,主要用于VaaCalculation和CalculateBGD,用于BGD control,统计分析图像复杂度
bEnableSceneChangeDetect:场景变换检测,当检测到场景发生变换时,会插入I帧
bEnableAdaptiveQuant:自适应质量控制,
这三个参数对应的算法都是预处理过程,在编码前对视频帧进行一些检测,并利用检测算法得到的特征调控编码器的算法,影响编码性能。该算法会增加复杂度,但是也会改善编码性能,默认都是开启,建议该参数值都修改设置为默认参数1:
建议bEnableBackgroundDetection=1; bEnableSceneChangeDetect = 1; bEnableAdaptiveQuant= 0;
5. iLoopFilterDisableIdc = 0 (offset(alpha/beta):
去块滤波参数,iLoopFilterDisableIdc = 0表示开启去块滤波功能,主要滤除方块效应。但是offset(alpha/beta)参数影响去块滤波效果,不过影响也不明显,默认一般设置为0,建议该参数可以修改设置为0。建议 offset(alpha/beta):-0,-0;
6. iMaxQp = 51;iMinQp = 0
该参数主要影响码率控制时调控的QP范围,可支持的范围是[0, 51],但是编码QP值太小或者太大,都会对图像质量和码率带来很大影响,为了防止极端图像质量情况的出现,一般设置为范围为[16,40],因此可以将参数修改设置为:
iMaxQp = 40; iMinQp = 16