level 12
jwpjwpaaa
楼主
第一,profile,也就是使用ba<x>seline还是main还是high编码。
可以通过该接口设置
x264_param_apply_profile();
第二 编码复杂度
param.i_level_idc=30;
第三图像质量控制
param.rc.f_rf_constant = 25;
param.rc.f_rf_constant_max = 45;
rc.f_rf_constant是实际质量,越大图像越花,越小越清晰。
param.rc.f_rf_constant_max ,图像质量的最大值。
第四 码率控制
一开始我使用恒定码流设置,无论我怎么设置,都无法控制实际码流,后来换成平均码流后,就行了。
param.rc.i_rc_method = X264_RC_ABR;//参数i_rc_method表示码率控制,CQP(恒定质量),CRF(恒定码率),ABR(平均码率)
param.rc.i_vbv_max_bitrate=(int)((m_bitRate*1.2)/1000) ; // 平均码率模式下,最大瞬时码率,默认0(与-B设置相同)
param.rc.i_bitrate = (int)m_bitRate/1000;
x264使用的bitrate需要/1000。
第五,使用实时视频传输时,需要实时发送spspps数据
param.b_repeat_headers = 1; // 重复SPS/PPS 放到关键帧前面
该参数设置是让每个I帧都附带sps/pps。
第六. I帧间隔
我是将I帧间隔与帧率挂钩的,以控制I帧始终在指定时间内刷新。
以下是2秒刷新一个I帧
param.i_fps_num = (int)m_fr<x>ameRate;
param.i_fps_den = 1;
param.i_keyint_max = m_fr<x>ameRate * 2;
第七编码延迟
在使用中,开始总是会有编码延迟,导致我本地编码立即解码回放后也存在巨大的视频延迟,
后来发现设置x264_param_default_preset(¶m "fast" "zerolatency" );后就能即时编码了。
主要是zerolatency该参数。
基本的就这样了,完整的设置代码
x264_param_t param;
x264_param_default_preset(¶m "fast" "zerolatency" );
param.i_width = m_width;
param.i_height = m_height;
param.b_repeat_headers = 1; // 重复SPS/PPS 放到关键帧前面
param.b_cabac = 1;
param.i_threads = 1;
param.i_fps_num = (int)m_fr<x>ameRate;
param.i_fps_den = 1;
param.i_keyint_max = m_fr<x>ameRate * 2;
// rc
//param.rc.b_mb_tree=0;//这个不为0将导致编码延时帧...在实时编码时必须为0
param.rc.f_rf_constant = 25;
param.rc.f_rf_constant_max = 45;
param.rc.i_rc_method = X264_RC_ABR;//参数i_rc_method表示码率控制,CQP(恒定质量),CRF(恒定码率),ABR(平均码率)
//param.rc.f_rate_tolerance=0.1;
param.rc.i_vbv_max_bitrate=(int)((m_bitRate*1.2)/1000) ; // 平均码率模式下,最大瞬时码率,默认0(与-B设置相同)
param.rc.i_bitrate = (int)m_bitRate/1000;
x264_param_apply_profile(¶m "ba<x>seline");
param.i_level_idc=30;
param.i_log_level = X264_LOG_NONE;
if(( m_p264Handle = x264_encoder_open(¶m)) == NULL)
2017年04月10日 01点04分
1
可以通过该接口设置
x264_param_apply_profile();
第二 编码复杂度
param.i_level_idc=30;
第三图像质量控制
param.rc.f_rf_constant = 25;
param.rc.f_rf_constant_max = 45;
rc.f_rf_constant是实际质量,越大图像越花,越小越清晰。
param.rc.f_rf_constant_max ,图像质量的最大值。
第四 码率控制
一开始我使用恒定码流设置,无论我怎么设置,都无法控制实际码流,后来换成平均码流后,就行了。
param.rc.i_rc_method = X264_RC_ABR;//参数i_rc_method表示码率控制,CQP(恒定质量),CRF(恒定码率),ABR(平均码率)
param.rc.i_vbv_max_bitrate=(int)((m_bitRate*1.2)/1000) ; // 平均码率模式下,最大瞬时码率,默认0(与-B设置相同)
param.rc.i_bitrate = (int)m_bitRate/1000;
x264使用的bitrate需要/1000。
第五,使用实时视频传输时,需要实时发送spspps数据
param.b_repeat_headers = 1; // 重复SPS/PPS 放到关键帧前面
该参数设置是让每个I帧都附带sps/pps。
第六. I帧间隔
我是将I帧间隔与帧率挂钩的,以控制I帧始终在指定时间内刷新。
以下是2秒刷新一个I帧
param.i_fps_num = (int)m_fr<x>ameRate;
param.i_fps_den = 1;
param.i_keyint_max = m_fr<x>ameRate * 2;
第七编码延迟
在使用中,开始总是会有编码延迟,导致我本地编码立即解码回放后也存在巨大的视频延迟,
后来发现设置x264_param_default_preset(¶m "fast" "zerolatency" );后就能即时编码了。
主要是zerolatency该参数。
基本的就这样了,完整的设置代码
x264_param_t param;
x264_param_default_preset(¶m "fast" "zerolatency" );
param.i_width = m_width;
param.i_height = m_height;
param.b_repeat_headers = 1; // 重复SPS/PPS 放到关键帧前面
param.b_cabac = 1;
param.i_threads = 1;
param.i_fps_num = (int)m_fr<x>ameRate;
param.i_fps_den = 1;
param.i_keyint_max = m_fr<x>ameRate * 2;
// rc
//param.rc.b_mb_tree=0;//这个不为0将导致编码延时帧...在实时编码时必须为0
param.rc.f_rf_constant = 25;
param.rc.f_rf_constant_max = 45;
param.rc.i_rc_method = X264_RC_ABR;//参数i_rc_method表示码率控制,CQP(恒定质量),CRF(恒定码率),ABR(平均码率)
//param.rc.f_rate_tolerance=0.1;
param.rc.i_vbv_max_bitrate=(int)((m_bitRate*1.2)/1000) ; // 平均码率模式下,最大瞬时码率,默认0(与-B设置相同)
param.rc.i_bitrate = (int)m_bitRate/1000;
x264_param_apply_profile(¶m "ba<x>seline");
param.i_level_idc=30;
param.i_log_level = X264_LOG_NONE;
if(( m_p264Handle = x264_encoder_open(¶m)) == NULL)