關於直播,所有的技術細節都在這裡了(四)
引言
網路視頻直播存在已有很長一段時間,隨著移動上下行帶寬提升及資費的下調,視頻直播被賦予了更多娛樂和社交的屬性,人們享受隨時隨地進行直播和觀看,主播不滿足於單向的直播,觀眾則更渴望互動,直播的打開時間和延遲變成了影響產品功能發展重要指標。那麼,問題來了: 如何實現低延遲、秒開的直播?
先來看看視頻直播的5個關鍵的流程:錄製->編碼->網路傳輸->解碼->播放,每個環節對於直播的延遲都會產生不同程度的影響。這裡重點分析移動設備的情況。受限於技術的成熟度、硬體環境等,我們針對移動場景簡單總結出直播延遲優化的4個點:網路、協議、編解碼、移動終端,並將分四期來一一解密UCloud直播雲實現低延遲、秒開的技術細節。
在《關於直播,所有的技術細節都在這裡了(三)》中,我們講述了直播後端系統的原理及優化,那麼直播推流、播放端是否就沒有可以優化的點呢? 答案是否定的。客戶端的優化對直播秒開、延遲體驗的實現至關重要,這裡重點介紹移動終端的情況。
解析優化
參見之前介紹的DNS過程,如下圖:
基於可控和容災的需要,移動端代碼一般不會hardcode 推流、播放的伺服器IP地址,而選用域名代替。在IP出現宕機或網路中斷的情況下,還可以通過變更DNS來實現問題IP的剔除。而域名的解析時間需要幾十毫秒至幾秒不等,對於新生成熱度不高的域名,一般的平均解析延遲在300ms,按上圖的各個環節只要有一個通路網路產生波動或者是設備高負載,會增加至秒級。幾十毫秒的情況是ISP NS這一層在熱度足夠高的情況下會對域名的解析進行緩存。如下圖:
按我們上面分析的情況,本省延遲大概是15ms左右,那麼域名解析最低也可以做到15ms左右。但由於直播場景的特殊性,推流和播放使用的域名使用的熱度較難達到ISP NS緩存的標準,所以經常需要走回Root NS進行查詢的路徑。
那客戶端解析優化的原理就出來了:本機緩存域名的解析結果,對域名進行預解析,每次需要直播推流和播放的時候不再需要再進行DNS過程。此處節省幾十到幾百毫秒的打開延遲。
播放優化
直播播放器的相關技術點有:直播延時、首屏時間(指從開始播放到第一次看到畫面的時間)、音視頻同步、軟解碼、硬解碼。參考如下播放流程:
播放步驟描述:
- 根據協議類型(如RTMP、RTP、RTSP、HTTP等),與伺服器建立連接並接收數據
- 解析二進位數據,從中找到相關流信息;
- 根據不同的封裝格式(如FLV、TS)解復用(demux);
- 分別得到已編碼的H.264視頻數據和AAC音頻數據;
- 使用硬解碼(對應系統的API)或軟解碼(FFMpeg)來解壓音視頻數據;
- 經過解碼後得到原始的視頻數據(YUV)和音頻數據(AAC);
- 因為音頻和視頻解碼是分開的,所以我們得把它們同步起來,否則會出現音視頻不同步的現象,比如別人說話會跟口型對不上;
- 最後把同步的音頻數據送到耳機或外放,視頻數據送到屏幕上顯示。
了解了播放器的播放流程後,我們可以優化以下幾點:
首屏時間優化
- 從步驟2入手,通過預設解碼器類型,省去探測文件類型時間;
- 從步驟5入手,縮小視頻數據探測範圍,同時也意味著減少了需要下載的數據量,特別是在網路不好的時候,減少下載的數據量能為啟動播放節省大量的時間,當檢測到I幀數據後就立馬返回並進入解碼環節。
視頻緩衝區或叫視頻緩存策略,該策略原理是當網路卡頓時增加用戶等待時間來緩存一定量的視頻數據,達到後續平滑觀看的效果,該技術能有效減少卡頓次數,但是會帶來直播上的內容延時,所以該技術主要運用於點播,直播方面已去掉該策略,以此儘可能去掉或縮小內容從網路到屏幕展示過程中的時間;(有利於減少延時)。
下載數據探測池技術,當用戶下載速度不足發生了卡頓,然後網路突然又順暢了,伺服器上之前滯留的數據會加速發下來,這時為了減少之前卡頓造成的延時,播放器會加速播放探測池的視頻數據並丟棄當前加速部分的音頻數據,以此來保證當前觀看內容延時穩定。
推流優化
推流步驟說明:很容易看出推流跟播放其實是逆向的,具體流程就不多說了。
優化一:適當的Qos(Quality of Service,服務質量)策略。
推流端會根據當前上行網路情況控制音視頻數據發包和編碼,在網路較差的情況下,音視頻數據發送不出去,造成數據滯留在本地,這時,會停掉編碼器防止發送數據進一步滯留,同時會根據網路情況選擇合適的策略控制音視頻發送。
比如網路很差的情況下,推流端會優先發送音頻數據,保證用戶能聽到聲音,並在一定間隔內發關鍵幀數據,保證用戶在一定時間間隔之後能看到一些畫面的變化。
優化二:合理的關鍵幀配置。
合理控制關鍵幀發送間隔(建議2秒或1秒一個),這樣可以減少後端處理過程,為後端的緩衝區設置更小創造條件。
軟硬編解選擇
網上有不少關於選擇軟解還是硬解的分析文章,這裡也介紹一些經驗,但根本問題是,沒有一個通用方案能最優適配所有操作系統和機型。
推流編碼: 推薦Andorid4.3(API18)或以上使用硬編,以下版本使用軟編;iOS使用全硬編方案;
播放解碼:Andorid、iOS播放器都使用軟解碼方案,經過我們和大量客戶的測試以及總結,雖然犧牲了功耗,但是在部分細節方面表現會較優,且可控性強,兼容性也強,出錯情況少,推薦使用。
附軟硬編解碼優缺點對比:
雲端機型及網路適配
上面分析了很多針對視頻編解碼的參數,但實際情況最好的編解碼效果是需要根據機型的適配的,由於iOS的設備類型較少,可以做到每個機型針對性的測試和調優,但是對於Android就非常難做到逐款機型針對性調優,並且每年都會出產不少的新機器,如果代碼中寫死了配置或判斷邏輯將非常不利於維護和迭代。
所以我們就誕生了一個想法,這些判斷邏輯或配置是否可以放在雲上呢? 這樣就產生了雲端機型與網路適配的技術。
終端在推流、播放前會獲取通過協議上報當前的機型配置、網路情況、IP信息。雲端會返回一個已最適合的編解碼策略配置:走軟編還是硬編、各項參數的配置,就近推流服務的IP,就近播放服務的IP。 終端獲取一次即可,不需要每次推流、播放前都去獲取一次。
這樣,在我們不斷的迭代和完善機型編解碼適配庫的同時,所有使用該技術的直播APP都將收益。
總結
分析很多直播後端、終端的關於低延遲、秒開的優化技術,在UCloud直播雲上都已有了相關的實踐,都是一些較「靜態」的技術。實際提供穩定、低延遲、流暢的直播服務,是日常中非常大量細緻的監控、演算法和動態運營的結果,並不是實現了某些的技術點,就能坐享一套穩定的直播服務,只能說是完成了萬里長城的第一道磚。
——————
以上就是《解密 UCloud直播雲 技術細節》的全部內容。在這個系列裡,我們針對視頻直播的應用場景,就直播延遲優化的4個點:網路、協議、編解碼、移動終端都一一作了介紹,希望能幫助大家對直播技術建立框架性的認識。
技術總在不斷的發展,總結優化仍在繼續。大家有任何問題or疑惑,歡迎聯繫我們:)
相關閱讀推薦:
關於直播,所有的技術細節都在這裡了(三)
關於直播,所有的技術細節都在這裡了(二)
關於直播,所有的技術細節都在這裡了(一)本文由『UCloud流媒體研發團隊』提供。
「UCloud機構號」將獨家分享雲計算領域的技術洞見、行業資訊以及一切你想知道的相關訊息。
歡迎提問&求關注 o(*////▽////*)q~
以上。
推薦閱讀:
※中國的商業Wi-Fi現狀如何?城市封閉環境內的商業Wi-Fi有成功案例嗎?
※關於直播,所有的技術細節都在這裡了(二)
※HBase為什麼火?它適用於那些業務場景?
※國內最好的互聯網技術網站是哪幾個?為什麼?
※質量門、顯卡門、蟑螂門,惠普走向沒落我一點都不驚訝