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");編碼