記錄一次組播花屏問題的查找

新開發(fā)的組播播放器赦抖,發(fā)現(xiàn)在視頻源運動劇烈的時候會出現(xiàn)比較嚴重的花屏甸赃。開始以為是組播丟包導(dǎo)致的,但打印了丟包檢測的日志胸嘴,發(fā)現(xiàn)并沒有發(fā)生丟包的時候也會出現(xiàn)花屏。開始懷疑是視頻源發(fā)送的問題斩祭,于是在接收端把接收到的H.264數(shù)據(jù)寫成文件劣像,再用Elecard StreamEye顯示碼流圖像。發(fā)現(xiàn)StreamEye里面圖像也是花的摧玫,于是結(jié)合wireshark抓包繼續(xù)分析接收到的組播數(shù)據(jù)耳奕。結(jié)果在wireshark中看到,局域網(wǎng)內(nèi)有其他設(shè)備也會偶爾性的向組播組發(fā)送數(shù)據(jù)诬像,導(dǎo)致RTP聚包解析出錯屋群,于是根據(jù)抓包的結(jié)果,把其他發(fā)送組播的設(shè)備給關(guān)閉掉坏挠。

但是關(guān)閉后芍躏,依然有很嚴重的花屏現(xiàn)象。這時候開始檢查搭建的環(huán)境是否有問題降狠,浪費了一些時間对竣,結(jié)果發(fā)現(xiàn)其他環(huán)境上面也有花屏的問題庇楞。正當(dāng)完全沒有頭緒的時候,無意中錄了一段只有30幾幀的短碼流否纬。這段短碼流吕晌,用ffplay播放也是花屏的,但是用eseye_u.exe播放是正常的临燃!但奇怪的是睛驳,ffplay播放的時候并沒有出現(xiàn)什么報錯的信息,但是解出來的碼流就是花的谬俄。用StreamEye的SAnalyzer.exe分析錄下來的碼流柏靶,發(fā)現(xiàn)每一幀都是由多個NAL組成的。IDR幀由2個NAL組成溃论,P幀由4個NAL組成屎蜓。難道說ffmpeg的h.264解碼器有bug?于是嘗試更新ffmpeg版本钥勋,結(jié)果發(fā)現(xiàn)升級到4.2.1炬转,解碼依然是花的。又嘗試給ffplay更換解碼器算灸,用-vcodec libopenh264選項更換成openh264的解碼器扼劈。由于視頻源是high profile的,之前看到網(wǎng)上說openh264只支持baseline profile菲驴,本來估計會解碼失敗荐吵。結(jié)果解碼成功了,而且并沒有花屏赊瞬!


PS:這時候先煎,去翻了一下openh264的官方更新說明。早在2015發(fā)布的1.5.0版本巧涧,就有說明

  • Decoder support of 'Constrained High Profile' of H.264

Note:
'Constrained High Profile' = 'Constrained Baseline Profile' plus:

CABAC
Intra 8x8 mode support
8x8 transform
QP scaling matrices
QP per chroma component
Mono 4:0:0 (experimental)
Weighted prediction

由于我們用的視頻流是實時直播的薯蝎,也沒有B幀,所以是符合'Constrained High Profile'的谤绳。而B幀的解碼占锯,是2019年發(fā)布的2.0.0版本才支持的,不過我還沒有測試過

  • B-frame decoding support for Main and High Profile with two test cases

回到正題缩筛,這時候消略,只需要把解碼器換成libopenh264,花屏的問題就可以解決了瞎抛。但是總是有不甘心疑俭,沒道理ffmpeg自帶h264解碼器,會有這么嚴重的bug〕В回去看了下ffmpeg代碼啄寡,h264解碼器中AVOption也沒什么會導(dǎo)致花屏的參數(shù)。后面又錄了幾次組播接收到的碼流哩照,終于有一次ffmpeg解碼報錯了

[h264 @ 00929f40] reference picture missing during reorder
[h264 @ 00929f40] Missing reference picture, default is 2
[h264 @ 009902c0] reference picture missing during reorder
[h264 @ 009902c0] Missing reference picture, default is 65546

本身這一類報錯信息在解碼丟包的視頻流中會經(jīng)常出現(xiàn)挺物。但根據(jù)這些報錯信息,在stackoverflow中搜到一篇問答
https://stackoverflow.com/questions/27870545/decode-h264-video-using-libavcodec-c

Every input packet (avpkt) for avcodec_decode_video2 should contain full (and only) data for one frame i.e. it shouldn't be truncated in the middle of the frame NALs.

這句話一言驚醒了夢中人飘弧。于是回頭看识藤,eseye_u.exe中每一幀的長度是屬于該幀的所有NAL長度總和,而我送給avcodec的avpkt.size總是小于這個總長度次伶。想起來之前在SAnalyzer.exe中看到一幀是分成多個nal的痴昧,bug產(chǎn)生的原因已經(jīng)很清楚了,就是沒有把完整的一幀送給解碼器冠王,而是一個一個nal發(fā)送的赶撰。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市柱彻,隨后出現(xiàn)的幾起案子豪娜,更是在濱河造成了極大的恐慌,老刑警劉巖哟楷,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘤载,死亡現(xiàn)場離奇詭異,居然都是意外死亡卖擅,警方通過查閱死者的電腦和手機鸣奔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惩阶,“玉大人挎狸,你說我怎么就攤上這事×彰ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵私痹,是天一觀的道長脐嫂。 經(jīng)常有香客問我,道長紊遵,這世上最難降的妖魔是什么账千? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮暗膜,結(jié)果婚禮上匀奏,老公的妹妹穿的比我還像新娘。我一直安慰自己学搜,他們只是感情好娃善,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布论衍。 她就那樣靜靜地躺著,像睡著了一般聚磺。 火紅的嫁衣襯著肌膚如雪坯台。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天瘫寝,我揣著相機與錄音蜒蕾,去河邊找鬼。 笑死焕阿,一個胖子當(dāng)著我的面吹牛咪啡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播暮屡,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼撤摸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了栽惶?” 一聲冷哼從身側(cè)響起愁溜,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎外厂,沒想到半個月后冕象,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡汁蝶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年渐扮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掖棉。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡墓律,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出幔亥,到底是詐尸還是另有隱情耻讽,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布帕棉,位于F島的核電站针肥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏香伴。R本人自食惡果不足惜慰枕,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望即纲。 院中可真熱鬧具帮,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至葛峻,卻和暖如春锹雏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背术奖。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工礁遵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人采记。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓佣耐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親唧龄。 傳聞我的和親對象是個殘疾皇子兼砖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

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