科普 | 影片直播的GoP Size設定成多少合適?

蘇寧影片雲發表於2019-01-23

科普 | 影片直播的GoP Size設定成多少合適?

在影片直播中,首屏開啟速度直接關係到使用者體驗,其中Group of Picture(GoP)設定、快取引數最佳化格外關鍵。

出現黑屏的原因很簡單,就是解碼器沒有得到能解碼出影片影像的資料,那麼導致這個問題的原因就很容易定位了:比較搞笑一點的說法就是你家的網路比較慢;影片直播伺服器沒有開啟關鍵幀緩衝。

確實是這樣。瞬間得到的資料正好是個I幀。就可以達到秒開的效果。

對於H.264來講,我們常見的有I幀,P幀,和B幀。IDR幀是I幀,但I幀並不一定是IDR幀。直播延遲好的編解碼策略。

影片解碼器緩衝區開始的第一個幀肯定是I幀,這個毋庸置疑。

一般來講,對於手機直播,一到兩秒可能是比較合適的,因為它本身的GoP時間也不會很長,我這邊緩衝,一旦出現問題大概一到兩秒這個影片也能出來。有一個不太好的地方就是它位元速率會稍微高一些,也就說同樣的東西,如果我把GoP改成十秒,我可能是500K,但是我改成一秒,有可能變成一個六七百K的樣子,這個還是跟編碼有關係,具體的比例是多少,可能跟實際相關。

另外如果是點播的話,不關心首屏開啟時間,只要是客戶端下來速度快,CDN給力,那麼我可能要求更小的範圍。告訴大家一個實踐過程中得出的結果,大家用過OBS?

比如說做主播的話,大家用OBS會比較多,OBS它有一個問題就是它預設的話,如果你不調它的特性,GoP就是10秒,10秒的意思就是說GoP size。如果比較點背的話,看的是10秒之前的,如果是比較大的話,它的位元速率,碼流的大小會小點,但是延遲會稍微高一些,CDN開了幾個cache,有些情況下,我們也可以做些轉碼,強行把它的GoP size壓小,整個CDN層面上加一個轉碼的話,它可能會增高這個延遲,這塊一個開放性問題,大家可以根據自己的場景去思考,這個GoP Size配成多大比較合適。

FFmpeg的資料結構裡會標著PTS和DTS:PTS,PresentationTime Stamp也就說這個幀什麼時候會放在顯示器上;DTS就是Decode Time Stamp,就是說這個幀什麼時候被放在編碼器去解。那麼如果全是I幀和P幀,PTS和DTS都是單調遞增的。

解碼器相關的概念,位元速率(BitRate)、FPS(video frame per second)、解析度(VideoSize),不斷調整和調優、最佳化:

在追求更好的流暢度時,我們可以適當降低位元速率。如果 FPS 已經較高(如 30)時,可以維持 FPS 不變更;如果此時因位元速率太低而畫面無法接受,可以再適當調低 FPS。在追求更清晰的畫質時,可以提高位元速率,FPS 調節至 24 左右人眼大多還會識別為流暢。如果可以接受有輕微卡頓,那麼可以將 FPS 設定的更低,比如 20 甚至 15。

動態調整編碼策略是一種應對方式,而直接提高影片流的壓縮比降低直播對網路的要求也是一種策略。目前如果使用 H.265 編碼就可以降低 40% 的頻寬佔用,但比如 H.265 編碼對移動端來說效能開銷過大,相繼會帶來的問題還有發熱過高、掉電過快等問題。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559352/viewspace-2564571/,如需轉載,請註明出處,否則將追究法律責任。

相關文章