一對一直播技術中延遲與卡頓的矛盾關係如何解決?
由於直播推送端會存在於各種不同的網路環境下面:有線、無線、3G、4G、衛星訊號等等,在這些網路條件下,如何做到直播流暢不卡頓,我們這個時候就需要引入可變位元速率和丟幀兩種策略,保證推送的實時和資料的有效。之前我們介紹過直播過程卡頓時,切換位元速率與選擇性丟幀的處理策略研究,下面先介紹一些基礎知識和解決原理。
基礎知識:I幀、B幀、P幀
I幀表示關鍵幀。 你可以理解為這一幀畫面的完整保留;解碼時只需要本幀資料就可以完成。(因為包含完整畫面)
P幀表示這一幀跟之前的一個關鍵幀(或P幀)的差別。 解碼時需要用之前快取的畫面疊加上本幀定義的差別,生成最終畫面。(也就是差別幀,P幀沒有完整畫面資料,只有與前一幀的畫面差別的資料)
B幀是雙向差別幀。 B幀記錄的是本幀與前後幀的差別(具體比較複雜,有4種情況)。換言之,要解碼B幀,不僅要取得之前的快取畫面,還要解碼之後的畫面,透過前後畫面的與本幀資料的疊加取得最終的畫面。
B幀壓縮率高,但是編解碼時會比較耗費CPU,而且在直播中可能會增加直播延時,因此在移動端上一般不使用B幀。
關鍵幀快取策略
一個典型的影片幀序列為IBBPBBPBBP……
對於直播而言,為了減少直播的延時,通常在編碼時不使用B幀。P幀B幀對於I幀都有直接或者間接的依賴關係,所以播放器要解碼一個影片幀序列,並進行播放,必須首先解碼出I幀,其後續的B幀和P幀才能進行解碼,這樣服務端如何進行關鍵幀的快取,則對直播的延時以及其他方面有非常大的影響。
比較好的策略是服務端自動判斷關鍵幀的間隔,按業務需求快取幀序列,保證在快取中儲存至少兩個或者以上的關鍵幀,以應對低延時、防卡頓、智慧丟包等需求。
延遲與卡頓的折中
直播的延時與卡頓是分析直播業務質量時,非常關注的兩項指標。 互動直播的場景對延時非常敏感,新聞體育類直播則更加關注播放的流暢度。
然而,這兩項指標從理論上來說,是一對矛盾的關係——需要更低的延時,則表明伺服器端和播放端的緩衝區都必須更短,來自網路的異常抖動容易引起卡頓;業務可以接受較高的延時時,服務端和播放端都可以有較長的緩衝區,以應對來自網路的抖動,提供更流暢的直播體驗。
當然,對於網路條件非常好的使用者,這兩項是可以同時保證的,這裡主要是針對網路條件不是那麼好的使用者,如何解決延時與卡頓的問題。
這裡通常有兩種技術來平衡和最佳化這兩個指標。
一是服務端提供靈活的配置策略 。
對於延時要求更敏感的,則在服務端在保證關鍵幀的情況下,對每個連線維持一個較小的緩衝佇列;對於卡頓要求更高的直播,則適當增加緩衝佇列的長度,保證播放的流暢。
二是服務端對所有連線的網路情況進行智慧檢測 。
當網路狀況良好時,服務端會縮小該連線的緩衝佇列的大小,降低延遲;而當網路狀況較差時,特別是檢測到抖動較為明顯時,服務端對該連線增加緩衝佇列長度,優先保證播放的流暢性。
丟包策略
什麼時候需要丟包呢?
對於一個網路連線很好,延時也比較小的連線,丟包策略永遠沒有用武之地的。而網路連線比較差的使用者,因為下載速度比較慢或者抖動比較大,這個使用者的延時就會越來越高。
另外一種情況是,如果直播流關鍵幀間隔比較長,那麼在保證首包是關鍵幀的情況下,觀看這個節目的觀眾,延遲有可能會達到一個關鍵幀序列的長度。上述兩種情況,都需要啟用丟包策略,來調整播放的延時。
關於丟包,需要解決兩個問題:
一是正確判斷何時需要進行丟包;
二是如何丟包以使得對觀眾的播放體驗影響最小。 較好的做法是後端週期監控所有連線的緩衝佇列的長度,這樣佇列長度與時間形成一個離散的函式關係,後端透過自研演算法來分析這個離散函式,判斷是否需要丟包。
一般的丟幀策略,就是直接丟棄一個完整的影片幀序列,這種策略看似簡單,但對使用者播放的影響體驗非常大。 而應該是後臺採用逐步丟幀的策略,每個影片幀序列,丟最後的一到兩幀,使得使用者的感知最小,平滑的逐步縮小延時的效果。
以上就是:內容快取與傳輸策略最佳化細節原理。
蘇寧旗下子品牌蘇寧影片雲已累計服務客戶超過2000個;蘇寧影片雲憑藉PPTV 十年媒體技術和服務經驗,融合流媒體技術、P2P、CDN 分發、海量儲存、安全策略等構建的專注影片領域的一站式SaaS 服務平臺。蘇寧影片雲集影片雲直播、雲點播、雲上傳、雲轉碼、雲端儲存、雲統計等功能於一體,多平臺全方位支援客戶各種影片場景的業務需求。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559352/viewspace-2217695/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MyBatis加強(1)~myBatis物件關係對映(多對一關係、一對多關係)、延遲/懶載入MyBatis物件
- 技術分享 | 用圖資料庫來降低 MySQL 處理多層關係的延遲(一)資料庫MySql
- 得物直播低延遲探索 | 得物技術
- Win10系統鍵盤輸入文字出現卡頓延遲如何解決Win10
- 「視訊直播技術詳解」系列之五:延遲優化優化
- Mybatis09_一對一、一對多、多對多、延遲載入MyBatis
- 美國伺服器延遲高怎麼辦,如何解決延遲問題伺服器
- 伺服器延遲問題如何解決伺服器
- 低延遲音視訊傳輸技術在直播領域的應用
- 實時雲渲染關鍵技術-低延遲詳解
- 技術乾貨 | 基於標準 WebRTC 低延遲直播的開源實踐Web
- 直播短影片原始碼,延遲任務的解決方法原始碼
- 優質一對一原始碼“輔助”解決音影片直播技術難點原始碼
- 為什麼一對一直播技術這麼火爆!
- 直播賣貨系統開發,解決HLS實現直播過程中的延遲問題
- Jtti:redis主從延遲資料不一致問題如何解決JttiRedis
- 我的一個主表和一個從表是一對多關係,但是從表又與其他表有一對多等關係,
- 7.Hibernate一對多關係建立與錯誤解決
- 教你如何解決MySQL資料延遲跳動的問題MySql
- 【Evil 域】SQL函式——將一對多關係轉換成一對一關係SQL函式
- JPA(3) 表關聯關係(多對一、一對多、多對多、一對一)
- 技術分享 | OceanBase 租戶延遲刪除
- gorm 關係一對一,一對多,多對多查詢GoORM
- 實時RTMP流媒體一對一直播交友app全套原始碼,5G時代CDN加速無延遲?APP原始碼
- EF Code First中的主外來鍵約定和一對一、一對多關係的實現
- 在AngularJS中實現一個延遲載入的DirectiveAngularJS
- hibernate 關係對映之 主鍵關聯一對一
- Mysql slave 延遲故障一列MySql
- PostgreSQL中的複製延遲SQL
- Spring Boot 入門系列(二十八) JPA 的實體對映關係,一對一,一對多,多對多關係對映!Spring Boot
- 一對一社交原始碼在直播中最佳化技術的幾種形式原始碼
- 第7 章、解釋與延遲有關的等待事件事件
- JPA中對映關係詳細說明(一對多,多對一,一對一、多對多)、@JoinColumn、mappedBy說明APP
- hibernate(三) 一對多對映關係
- Spring Data JPA 之 一對一,一對多,多對多 關係對映Spring
- VIM Lazy Load 懶載入/延遲載入技術
- Jquery.ScrollLoading圖片延遲載入技術jQuery
- 大資料技術與Hadoop之間的關係大資料Hadoop