問題背景:
最近開發了一個HLS服務,主要是滿足使用者在瀏覽器上播放直播和點播影片的需求,特別像小程式或者微信這種,只有有連結就能檢視影片,也不用裝APP,還是方便不少。在開發過程中排查了一次破圖問題,感覺比較典型,分享下排查思路,其實這種問題排查思路在前文講過,這篇就是對這篇文章中提出思路的實踐。
問題現象:
HLS服務上線後,用VLC或者瀏覽器播放影片時,總是在首屏出現區域性破圖或者馬賽克現象,雖然後面偶爾也會出現一下,但是機率遠遠沒有首屏這麼高。首屏出現不僅僅影響了首屏速度,影響體驗也不好,使用者剛開啟連結就看到破圖,也有點說不過去。
當時時間比較緊張,就是將一個切片丟掉,然後從第二個開始播放。雖然破圖綠屏問題消失了,但是首屏速度影響非常大,所以還是要徹底解決,不能使用這個臨時規避方案。
分析思路:
為了讓大家看清排查過程,畫個簡單示意圖,說明下碼流的傳輸過程:
編輯切換為居中
新增圖片註釋,不超過 140 字(可選)
注:
1. 裝置側主要是就是推流端,各種攝像頭IPC、國標平臺、NVR等能產生碼流的軟硬體裝置和伺服器,碼流格式的RTP+PS+H.264俗稱國標流;
2. 公有云就是開發平臺上的各種流媒體伺服器,其中GB接入伺服器透過標準協議對接軟硬體裝置,將國標流轉成我們公司私有流,流媒體伺服器做私有流分發,HLS服務支援客戶端瀏覽器HLS協議拉流,同時將私有Raw流轉成TS流;
3. 使用者側凡是支援HLS協議的瀏覽器或者小程式都可以使用正確的URL來進行拉流觀看影片。
既然碼流在使用者側的瀏覽器播放存在破圖問題,那麼透過上面示意圖我們將裝置上來的碼流各個傳輸階段寫成碼流檔案進行分析,如果在哪一步出現問題,則將問題定位在具體的碼流處理模組中,再結合程式碼分析出碼流到底在哪一步出現了問題。
排查步驟:
下面我在各個模組增加了寫檔案除錯功能,將碼流每個過程中生成的檔案寫下來,用分析工具進行播放和分析。我們攝像機裝置端配置的幀率是25,I幀間隔是50,那就意味著2s一個GOP。實際TS切片時,也是以GOP為單元進行切片,一個TS檔案大小在兩個GOP左右,既然首屏的第一個TS檔案出現大機率破圖問題,那就先分析前兩個GOP的幀情況:
相關影片推薦
音影片開發系列-音影片入門核心知識精講|影片為什麼會破圖|音訊為什麼容易有雜音|音影片進階需要掌握什麼專案_嗶哩嗶哩_bilibili
音影片面試-流媒體伺服器開發原理分析-rtmp-hls-http-flv|流媒體伺服器架構分析,推流-轉發-拉流模組開發,如何進階掌握流媒體伺服器_嗶哩嗶哩_bilibili
學習地址:【免費】FFmpeg/WebRTC/RTMP/NDK/Android音影片流媒體高階開發-學習影片教程-騰訊課堂
需要更多ffmpeg/webrtc..音影片流媒體開發學習資料加群812855908領取
步驟1:
既然HLS服務返回給客戶端播放的影片出現了破圖和綠屏,那先分析生成的第一個TS檔案碼流是否正常:
發現逐幀播放時,從第5幀開始出現破圖,同時發現TS裡面的PTS時間從13500增加到36000,實際每個增加正常情況是3600左右,基本初步判斷有影片幀丟掉導致,因為P幀的播放可能要參考前面的I幀和P幀,假設參考幀丟掉,後面P幀播放就會出現破圖,同時再用StreamEye工具分析這個TS的確如此:
工具分析發現每個GOP裡面只有43幀,和裝置端配置的50幀一個GOP缺少7幀,下面就繼續在分析GOP裡面為50時出現在那個模組,這樣將問題縮小化;
步驟2:
PS流是國標接入伺服器收到碼流後,除去RTP頭後些下來的檔案,用專業軟體逐幀播放和Elecard StreamEye分析:
透過分析發現前兩個GOP檔案播放都是正常的,那說明裝置送上來的國標流是沒有啥大問題的
步驟3:
PS流後面就是國標接入伺服器轉化成我們內部的私有流,分析同樣也是正常的,因為這塊已經把H264檔案提取出來了,分析後發現都是可以正常播放的。
步驟4:
既然國標接入伺服器收流和轉封裝私有流都正常,但是HLS拉流切片出來的第一個TS切片缺少了幾幀,那麼問題肯定出現在國標接入伺服器以上到HLSTS拉流伺服器之間。
步驟5:
透過流媒體分發伺服器同學定位,說自己收到國標接入伺服器的第一個GOP就是43幀,而且幾乎必現,後面透過回溯國標接入閘道器向流媒體分發伺服器推流這塊的程式碼發現內部在推流過程中做了是否有音訊的判斷,其中這塊判斷邏輯影響了前幾幀影片的傳送,最終調整這塊處理邏輯問題得到解決。
結論:
這種因為網路或者音影片資料本身導致的破圖、綠屏問題,排查起來基本思路就是分階段排查,摸清碼流的傳輸路徑,在關鍵地方寫檔案或者打日誌,透過專業音影片分析工具,把問題定位到模組內部或者模組之間的邊界上。模組內部一般分析程式碼對碼流的具體處理,模組之間透過抓包把問題因為傳輸導致的原因排除掉,透過以上定位問題思路就能分析出影片播放的各種疑難雜症。
