x264_param_default(¶m);//设置默认参数具体见common/common.c
int yuvsize=m_height*m_width*3/2;
param.i_width=m_width;
param.i_height=m_height;
param.i_keyint_min=5;//关键帧最小间隔
param.i_keyint_max=250;//关键帧最大间隔
param.b_annexb=1;//1前面为0x00000001,0为nal长度
param.b_repeat_headers=0;//关键帧前面是否放sps跟pps帧,0 否 1,放
// param.analyse.i_subpel_refine=7;//压缩级别1~7
// param.i_log_level=X264_LOG_NONE;//设置显示信息级别缓存
//==============================================================
////pX264Param = ¶m;
////int yuvsize=m_height*m_width*3/2;
//* 使用默认参数,在这里由于个人是实时网络传输,因此我使用了zerolatency的选项,使用这个选项以后就不会有delayed_frames,若是你使用的不是这样的话,还须要在编码完成以后获得缓存的编码帧
////x264_param_default_preset(pX264Param, "ultrafast"/*"veryfast"*/, "zerolatency"); 网络
//* cpuFlags
////pX264Param->i_threads = X264_THREADS_AUTO/*X264_SYNC_LOOKAHEAD_AUTO*/;//* 取空缓冲区继续使用不死锁的保证.
////pX264Param->i_log_level = X264_LOG_NONE;
//* 视频选项
////pX264Param->i_width = Width; //* 要编码的图像宽度.
////pX264Param->i_height = Height; //* 要编码的图像高度
//pX264Param->i_frame_total = 0; //* 编码总帧数.不知道用0.
//pX264Param->i_keyint_max = 10; app
//* 流参数
////pX264Param->i_bframe = 0;
// pX264Param->b_open_gop = 0;
// pX264Param->i_bframe_pyramid = 0;
// pX264Param->i_bframe_adaptive = 0; 测试
//* Log参数,不须要打印编码信息时直接注释掉就行
//pX264Param->i_log_level = X264_LOG_DEBUG; 大数据
//* 速率控制参数
//pX264Param->rc.i_bitrate = 1024 * 10;//* 码率(比特率,单位Kbps) 优化
//* muxing parameters
////pX264Param->i_fps_den = 1; //* 帧率分母
////pX264Param->i_fps_num = 25;//* 帧率分子
// pX264Param->i_timebase_den = pX264Param->i_fps_num;
// pX264Param->i_timebase_num = pX264Param->i_fps_den;
/*
//设置x264输出中最大、最小的IDR帧(亦称关键帧)间距。
//最大间距默认值(fps的10倍)对大多数视频都很好;最小间距与fps相等
pX264Param->i_keyint_max = 150;
pX264Param->i_keyint_min = 50;
//* 设置Profile.使用Baseline profile
x264_param_apply_profile(pX264Param, x264_profile_names[0]);
//彻底关闭自适应I帧决策。
pX264Param->i_scenecut_threshold = 0;
//设置亚像素估计的复杂度。值越高越好。级别1-5简单控制亚像素的细化力度。级别6给模式决策开启RDO(码率失真优化模式),
//级别8给运动矢量和帧内预测模式开启RDO。开启RDO会显著增长耗时。
//使用小于2的值会开启一个快速的、低质量的预测模式,效果如同设置了一个很小的 –scenecut值。不推荐这样设置。
//pX264Param->analyse.i_subpel_refine = 1;
//为mb-tree ratecontrol(Macroblock Tree Ratecontrol)和vbv-lookahead设置可用的帧的数量。最大可设置为250。
//对于mb-tree而言,调大这个值会获得更准确地结果,但也会更慢。
//mb-tree能使用的最大值是–rc-lookahead和–keyint中较小的那一个。
pX264Param->rc.i_lookahead = 0;
//i_luma_deadzone[0]和i_luma_deadzone[1]分别对应inter和intra,取值范围1~32
//测试能够得知,这连个参数的调整能够对数据量有很大影响,值越大数据量相应越少,占用带宽越低.
pX264Param->analyse.i_luma_deadzone[0] = 32;
pX264Param->analyse.i_luma_deadzone[1] = 32;
//码率控制模式有ABR(平均码率)、CQP(恒定质量)、CRF(恒定码率).
//ABR模式下调整i_bitrate,CQP下调整i_qp_constant调整QP值,范围0~51,值越大图像越模糊,默认23.
//太细致了人眼也分辨不出来,为了增长编码速度下降数据量仍是设大些好,CRF下调整f_rf_constant和f_rf_constant_max影响编码速度和图像质量(数据量);
pX264Param->rc.i_rc_method = X264_RC_CQP;
pX264Param->rc.i_qp_constant = 30;
//自适应量化器模式。不使用自适应量化的话,x264趋向于使用较少的bit在缺少细节的场景里。自适应量化能够在整个视频的宏块里更好地分配比特。它有如下选项:
//0-彻底关闭自适应量化器;1-容许自适应量化器在全部视频帧内部分配比特;2-根据前一帧强度决策的自变量化器(实验性的)。默认值=1
pX264Param->rc.i_aq_mode = 0;
//为’direct’类型的运动矢量设定预测模式。有两种可选的模式:spatial(空间预测)和temporal(时间预测)。默认:’spatial’
//能够设置为’none’关闭预测,也能够设置为’auto’让x264去选择它认为更好的模式,x264会在编码结束时告诉你它的选择。
pX264Param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_NONE;
//开启明确的权重预测以增进P帧压缩。越高级的模式越耗时,有如下模式:
//0 : 关闭; 1 : 静态补偿(永远为-1); 2 : 智能统计静态帧,特别为增进淡入淡出效果的压缩率而设计
//pX264Param->analyse.i_weighted_pred = X264_WEIGHTP_NONE;
//设置全局的运动预测方法,有如下5种选择:dia(四边形搜索), hex(六边形搜索), umh(不均匀的多六边形搜索)
//esa(全局搜索),tesa(变换全局搜索),默认:’hex’
pX264Param->analyse.i_me_method = X264_ME_DIA;
//merange控制运动搜索的最大像素范围。对于hex和dia,范围被控制在4-16像素,默认就是16。
//对于umh和esa,能够超过默认的 16像素进行大范围的运行搜索,这对高分辨率视频和快速运动视频而言颇有用。
//注意,对于umh、esa、tesa,增大merange会显著地增长编码耗时。默认:16
pX264Param->analyse.i_me_range = 4;
//关闭或启动为了心理视觉而下降psnr或ssim的优化。此选项同时也会关闭一些不能经过x264命令行设置的内部的心理视觉优化方法。
//pX264Param->analyse.b_psy = 0;
//Mixed refs(混合参照)会以8×8的切块为参照取代以整个宏块为参照。会增进多帧参照的帧的质量,会有一些时间耗用.
//pX264Param->analyse.b_mixed_references = 0;
//一般运动估计都会同时考虑亮度和色度因素。开启此选项将会忽略色度因素换取一些速度的提高。
pX264Param->analyse.b_chroma_me = 1;
//使用网格编码量化以增进编码效率:0-关闭, 1-仅在宏块最终编码时启用, 2-全部模式下均启用.
//选项1提供了速度和效率间较好的均衡,选项2大幅下降速度.
//注意:须要开启 –cabac选项生效.
//pX264Param->b_cabac = 1;
//pX264Param->analyse.i_trellis = 1;
//停用弹性内容的二进制算数编码(CABAC:Context Adaptive Binary Arithmetic Coder)资料流压缩,
//切换回效率较低的弹性内容的可变长度编码(CAVLC:Context Adaptive Variable Length Coder)系统。
//大幅下降压缩效率(一般10~20%)和解码的硬件需求。
//pX264Param->b_cabac = 1;
//pX264Param->i_cabac_init_idc = 0;
//关闭P帧的早期跳过决策。大量的时耗换回很是小的质量提高。
pX264Param->analyse.b_fast_pskip = 0;
//DCT抽样会丢弃看上去“多余”的DCT块。会增长编码效率,一般质量损失能够忽略。
pX264Param->analyse.b_dct_decimate = 1;
//open-gop是一个提升效率的编码技术。有三种模式:none-停用open-gop;normal-启用open-gop;
//bluray-启用open-gop。一个效率较低的open-gop版本,由于normal模式没法用于蓝光编码.
//某些解码器不彻底支援open-gop资料流,这就是为何此选项并未默认为启用。若是想启用open-gop,应该先测试全部可能用来拨放的解码器。
pX264Param->b_open_gop = 1;
//彻底关闭内置去块滤镜,不推荐使用。
//调节H.264标准中的内置去块滤镜。这是个性价比很高的选则, 关闭.
//pX264Param->b_deblocking_filter = 1;
//pX264Param->i_deblocking_filter_alphac0 = 0;
//pX264Param->i_deblocking_filter_beta = 0;
//去掉信噪比的计算,由于在解码端也可用到.
pX264Param->analyse.b_psnr = 0; //是否使用信噪比.
*/
//限制输出文件的profile。这个参数将覆盖其它全部值,此选项能保证输出profile兼容的视频流。
//若是使用了这个选项,将不能进行无损压缩。可选:baseline,main,high
////x264_param_apply_profile(pX264Param, "baseline");编码