H264編碼系列之x264幀編碼延遲

更多音視頻知識請點(diǎn)擊專注音視頻開發(fā)
參考

x264幀編碼延遲

研究了一下x264編碼延時(shí).
方法是加log在x264.c

 static int encode( x264_param_t *param, cli_opt_t *opt )
 {
     ...
         i_frame_size = encode_frame( h, opt->hout, &pic, &last_dts );
         if( i_frame_size == 0)   // delay frames
             fprintf( stderr, "output zero %d\n", i_frame );
     ...
 }

統(tǒng)計(jì)了一下囤捻,發(fā)現(xiàn)x264編碼延時(shí)幀數(shù)符合下面的公式臼朗。

h->frames.i_delay =
        param->i_sync_lookahead +   // 前向考慮幀數(shù)
        max ( param->i_bframe,      // B幀數(shù)量
              param->rc.i_lookahead)  + // 碼率控制前向考慮幀數(shù)
        param->i_threads - 1.           // 并行編碼幀數(shù)

延遲有兩種:

  1. 編碼前延時(shí)(當(dāng)前幀沒有編碼,需要buffer更多幀后才能開始編碼蝎土,比如要編碼B幀视哑,需要后面的P幀來了才能編碼)。
    這種延時(shí)出口在 encoder.c, x264_encoder_encode函數(shù)
if( h->frames.i_input <= h->frames.i_delay + 1 - h->i_thread_frames )
{
    /* Nothing yet to encode, waiting for filling of buffers */
    pic_out->i_type = X264_TYPE_AUTO;
    return 0;
}

i_sync_lookahead, i_bframe, rc.i_lookahead 都會在此影響延時(shí)誊涯。

  1. 編碼后延時(shí)(當(dāng)前幀已經(jīng)編碼挡毅,但后續(xù)幀還沒編碼,只好先退出)暴构。
    這種延時(shí)出口在 encoder.c, x264_encoder_frame_end函數(shù)
    if( !h->out.i_nal )
     {
         pic_out->i_type = X264_TYPE_AUTO;
         return 0;
     }

這部分延時(shí)是因?yàn)閤264并行幀編碼引起的跪呈。
x264并行幀編碼每一次都是把一個(gè)幀組(i_threads個(gè)并行處理幀)處理完后,再處理下一個(gè)幀組取逾。
博主評論

這也解析了為什么即使沒有b幀耗绿,但不設(shè)置zerolatency時(shí)也出現(xiàn)了編碼延遲。

根據(jù)公式看到減少幀延時(shí)的方法砾隅,也就是(zerolatency 設(shè)置)

            param->rc.i_lookahead = 0;
            param->i_sync_lookahead = 0;
            param->i_bframe = 0;
            param->b_sliced_threads = 1;   
            param->b_vfr_input = 0;
            param->rc.b_mb_tree = 0;
  • 這個(gè)設(shè)置h->frames.i_delay = 0误阻。但其中param->b_sliced_threads = 1 的設(shè)置值得懷疑。
  • 當(dāng)b_sliced_threads = 1時(shí)晴埂,x264放棄幀并行編碼究反,這必然會影響編碼速度。
  • 一個(gè)折中的辦法是設(shè)置b_sliced_threads = 0(為0時(shí)x264自動(dòng)計(jì)算線程)儒洛,其他按照zerolatency 設(shè)置精耐。
    這樣h->frames.i_delay = param->i_threads - 1。
    x264根據(jù)CPU自動(dòng)計(jì)算i_threads琅锻,一般為6/8. 這樣的幀群延遲大概是1/3-1/2秒黍氮。
    看具體系統(tǒng)的需要能否滿足唐含。

注:即使設(shè)置了zerolatency,但將i_bframe改為>0則同樣會出現(xiàn)編碼前的延遲沫浆。

疑惑
這樣看x264并行幀編碼寫的還不是很自適應(yīng)捷枯。
如果能夠讓i_threads在編碼起始階段隨著輸入幀數(shù)的增加而增加,那樣就可以徹底解決編碼群延時(shí)的問題了专执。

博主評論:但具體怎么去實(shí)施還是有些難度淮捆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市本股,隨后出現(xiàn)的幾起案子攀痊,更是在濱河造成了極大的恐慌,老刑警劉巖拄显,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苟径,死亡現(xiàn)場離奇詭異,居然都是意外死亡躬审,警方通過查閱死者的電腦和手機(jī)棘街,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來承边,“玉大人遭殉,你說我怎么就攤上這事〔┲” “怎么了险污?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長富岳。 經(jīng)常有香客問我蛔糯,道長,這世上最難降的妖魔是什么窖式? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任蚁飒,我火速辦了婚禮,結(jié)果婚禮上脖镀,老公的妹妹穿的比我還像新娘。我一直安慰自己狼电,他們只是感情好蜒灰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肩碟,像睡著了一般强窖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上削祈,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天翅溺,我揣著相機(jī)與錄音脑漫,去河邊找鬼。 笑死咙崎,一個(gè)胖子當(dāng)著我的面吹牛优幸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播褪猛,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼网杆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伊滋?” 一聲冷哼從身側(cè)響起碳却,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎笑旺,沒想到半個(gè)月后昼浦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筒主,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年关噪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片物舒。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡色洞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出冠胯,到底是詐尸還是另有隱情火诸,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布荠察,位于F島的核電站置蜀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏悉盆。R本人自食惡果不足惜盯荤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望焕盟。 院中可真熱鬧秋秤,春花似錦、人聲如沸脚翘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽来农。三九已至鞋真,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沃于,已是汗流浹背涩咖。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工海诲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人檩互。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓特幔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親盾似。 傳聞我的和親對象是個(gè)殘疾皇子敬辣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容