移動直播技術秒開優化經驗

2021-07-14 14:17:03 字數 2892 閱讀 4124

直播常見的問題包括

內容元素 ( content )

編碼格式 ( codec )

容器封裝 (container)

i 幀是內部編碼幀(也稱為關鍵幀),p 幀是前向**幀(前向參考幀),b 幀是雙向內插幀(雙向參考幀)。簡單地講,i 幀是乙個完整的畫面,而 p 幀和 b 幀記錄的是相對於 i 幀的變化。

如果沒有 i 幀,p 幀和 b 幀就無法解碼。

直播的業務邏輯

如下是乙個最精簡的一對多直播業務模型,以及各個層級之間的協議。

各協議差異對比如下

以上就是關於直播技術的一些基礎概念。下面我們進一步了解下影響人們視覺體驗的直播效能指標。

影響視覺體驗的直播效能指標

直播第乙個效能指標是延遲,延遲是資料從資訊源傳送到目的地所需的時間。

根據愛因斯坦的狹義相對論,光速是所有能量、物質和資訊運動所能達到的最高速度,這個結論給傳播速度設定了上限。因此,即便我們肉眼感覺到的實時,實際上也是有一定的延遲。

於 rtmp/hls 是基於 tcp 之上的應用層協議,tcp 三次握手,四次揮手,慢啟動過程中的每一次往返來回,都會加上一次往返耗時 ( rtt ),這些互動過程都會增加延遲。

其次根據 tcp 丟包重傳特性,網路抖動可能導致丟包重傳,也會間接導致延遲加大。

移動直播場景的坑與規避措施

不同晶元平台上的編碼差異

低端裝置如何上高效能地採集和編碼?

例如 camera 採集輸出的可能是,一張圖的體積並不會小,如果採集的頻次很高,編碼的幀率很高,每張圖都經過編碼器,那麼編碼器又可能會出現過載。

這個時候,可以考慮在編碼前,不影響畫質的前提下(前面我們講過幀率的微觀意義),進行選擇性丟幀,以此降低編碼環節的功耗開銷。

弱網下如何保障高畫質流暢推流

以上是移動直播場景下常見的幾個坑和規避措施。

移動直播場景其他優化措施

其次,可以貼近終端就近處理和分發

q & a

1. 關鍵幀設定頻率一般是多少?有沒有根據接入動態設定?過長首屏秒會很難做到。

徐立:關鍵幀間隔越長,也就是 gop 越長,理論上畫面越高畫質。但是生成 hls 直播時,最小切割粒度也是乙個 gop,所以針對互動直播,通常不建議 gop 設定太長。直播一般 2 個關鍵幀間隔即可。比如幀率是 24fps, 那麼 2 個關鍵幀的間隔就是 48fps ,這個 gop 就是2s。

2. 七牛這個直播是用的網宿加速?有遇到什麼坑沒?

徐立:七牛在直播方面主要是自建節點,也支援融合眾多第三方 cdn 服務商,多樣化的線路組合為客戶提供更優質的服務。在和第三方 cdn 合作的過程中遇到的問題等有機會再做更細粒度的交流和分享。

3. rtmp 直播流除了優化線路外,還有什麼加速手段嗎?

徐立:中文都把 i 幀翻譯成關鍵幀了,不過既然提到了 idr 幀,可以展開說明一下。所有的 idr 幀都是 i 幀,但是並不是所有 i 幀都是 idr 幀,idr 幀是 i 幀的子集。i 幀嚴格定義是幀內編碼幀,由於是乙個全幀壓縮編碼幀,通常用 i 幀表示 「關鍵幀」。idr 是基於 i 幀的乙個 「擴充套件」,帶了控制邏輯,idr 影象都是 i 幀影象,當解碼器解碼到 idr 影象時,會立即將參考幀佇列清空,將已解碼的資料全部輸出或拋棄。重新查詢引數集,開始乙個新的序列。這樣如果前乙個序列出現重大錯誤,在這裡可以獲得重新同步的機會。idr 影象之後的影象永遠不會使用 idr 之前的影象的資料來解碼。

6. 有沒有調研過 nginx rtmp module,為什麼沒有用,對它有什麼評價?

徐立:有調研過,nginx_rtmp_module 是單程序多執行緒,非 go 這種輕量級執行緒/協程用併發自然語義的方式編寫流業務。nginx 原本的**量較大(約 16 萬行,但和直播業務相關的功能並不是很多)。且主要靠寫 nginx.conf 做配置租戶,通常單租戶可以,但業務可擴充套件性方面不是很靈活,可滿足基本需求,不滿足高階功能。

7. 用到了那些開源軟體?編碼用的是 x264 嗎?直播伺服器你們自己開發還是開源的?

移動直播技術秒開優化經驗

直播常見的問題包括 內容元素 content 編碼格式 codec 容器封裝 container i 幀是內部編碼幀 也稱為關鍵幀 p 幀是前向 幀 前向參考幀 b 幀是雙向內插幀 雙向參考幀 簡單地講,i 幀是乙個完整的畫面,而 p 幀和 b 幀記錄的是相對於 i 幀的變化。如果沒有 i 幀,p ...

移動直播技術秒開優化經驗

直播常見的問題包括 內容元素 content 編碼格式 codec 容器封裝 container i 幀是內部編碼幀 也稱為關鍵幀 p 幀是前向 幀 前向參考幀 b 幀是雙向內插幀 雙向參考幀 簡單地講,i 幀是乙個完整的畫面,而 p 幀和 b 幀記錄的是相對於 i 幀的變化。如果沒有 i 幀,p ...

移動直播技術秒開優化經驗

直播常見的問題包括 內容元素 content 編碼格式 codec 容器封裝 container i 幀是內部編碼幀 也稱為關鍵幀 p 幀是前向 幀 前向參考幀 b 幀是雙向內插幀 雙向參考幀 簡單地講,i 幀是乙個完整的畫面,而 p 幀和 b 幀記錄的是相對於 i 幀的變化。如果沒有 i 幀,p ...