蘇寧影片雲直播客戶端的最佳化方案
解析最佳化
DNS過程,如下圖:
基於可控和容災的需要,移動端程式碼一般不會hardcode 推流、播放的伺服器IP地址,而選用域名代替。在IP出現當機或網路中斷的情況下,還可以透過變更DNS來實現問題IP的剔除。
而域名的解析時間需要幾十毫秒至幾秒不等,對於新生成熱度不高的域名,一般的平均解析延遲在300ms,按上圖的各個環節只要有一個通路網路產生波動或者是裝置高負載,會增加至秒級。幾十毫秒的情況是ISP NS這一層在熱度足夠高的情況下會對域名的解析進行快取。
按我們上面分析的情況,本地延遲大概是15ms左右,那麼域名解析最低也可以做到15ms左右。
但由於直播場景的特殊性,推流和播放使用的域名使用的熱度較難達到ISP NS快取的標準,所以經常需要走回Root NS進行查詢的路徑。
那客戶端解析最佳化的原理就出來了:本機快取域名的解析結果,對域名進行預解析,每次需要直播推流和播放的時候不再需要再進行DNS過程。此處節省幾十到幾百毫秒的開啟延遲。
播放最佳化
直播播放器的相關技術點有:直播延時、首屏時間(指從開始播放到第一次看到畫面的時間)、音影片同步、軟解碼、硬解碼。
播放步驟描述以下路徑:
S1. 根據協議型別(如RTMP、RTP、RTSP、HTTP等),與伺服器建立連線並接收資料;
S2. 解析二進位制資料,從中找到相關流資訊;
S3. 根據不同的封裝格式(如FLV、TS)解複用(demux);
S4. 分別得到已編碼的H.264影片資料和AAC音訊資料;
S5. 使用硬解碼(對應系統的API)或軟解碼(FFMpeg)來解壓音影片資料;
S6. 經過解碼後得到原始的影片資料(YUV)和音訊資料(AAC);因為音訊和影片解碼是分開的,所以我們得把它們同步起來,否則會出現音影片不同步的現象,比如別人說話會跟口型對不上;
S7. 最後把同步的音訊資料送到耳機或外放,影片資料送到螢幕上顯示。
瞭解了播放器的播放流程後,我們可以最佳化以下幾點:
首屏時間最佳化
從步驟2入手,透過預設解碼器型別,省去探測檔案型別時間;從步驟5入手,縮小影片資料探測範圍,同時也意味著減少了需要下載的資料量,特別是在網路不好的時候,減少下載的資料量能為啟動播放節省大量的時間,當檢測到I幀資料後就立馬返回並進入解碼環節。
延時最佳化
影片緩衝區或叫影片快取策略,該策略原理是當網路卡頓時增加使用者等待時間來快取一定量的影片資料,達到後續平滑觀看的效果,該技術能有效減少卡頓次數,但是會帶來直播上的內容延時,所以該技術主要運用於點播,直播方面已去掉該策略,以此儘可能去掉或縮小內容從網路到螢幕展示過程中的時間;(有利於減少延時)。
下載資料探測池技術,當使用者下載速度不足發生了卡頓,然後網路突然又順暢了,伺服器上之前滯留的資料會加速發下來,這時為了減少之前卡頓造成的延時,播放器會加速播放探測池的影片資料並丟棄當前加速部分的音訊資料,以此來保證當前觀看內容延時穩定。
推流最佳化
推流步驟說明:很容易看出推流跟播放其實是逆向的,具體流程如下。
step1:驗證身份資訊
把影片推到蘇寧影片雲賬戶,需要先透過AccessKey和SecretKey的身份認證
step2:初始化推流SDK
整合推流sdk,呼叫sdk的初始化方法初始化sdk
step3:獲取蘇寧影片雲的直播推流地址
呼叫蘇寧影片雲服務端sdk來獲取推流地址
step4:開始推流
將獲取到的推流地址設定到推流sdk中開始推流
step5:完成推流
呼叫推流sdk中的結束推流介面完成推流
最佳化一:適當的Qos(Quality of Service,服務質量)策略。
推流端會根據當前上行網路情況控制音影片資料發包和編碼,在網路較差的情況下,音影片資料傳送不出去,造成資料滯留在本地,這時,會停掉編碼器防止傳送資料進一步滯留,同時會根據網路情況選擇合適的策略控制音影片傳送。
比如網路很差的情況下,推流端會優先傳送音訊資料,保證使用者能聽到聲音,並在一定間隔內發關鍵幀資料,保證使用者在一定時間間隔之後能看到一些畫面的變化。
最佳化二:合理的關鍵幀配置。
合理控制關鍵幀傳送間隔(建議2秒或1秒一個),這樣可以減少後端處理過程,
為後端的緩衝區設定更小創造條件。
蘇寧旗下子品牌蘇寧影片雲已累計服務客戶超過2000個;蘇寧影片雲憑藉PPTV 十年媒體技術和服務經驗,融合流媒體技術、P2P、CDN 分發、海量儲存、安全策略等構建的專注影片領域的一站式SaaS 服務平臺。蘇寧影片雲集影片雲直播、雲點播、雲上傳、雲轉碼、雲端儲存、雲統計等功能於一體,多平臺全方位支援客戶各種影片場景的業務需求。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559352/viewspace-2220747/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 客戶端影片渲染目前最理想的解決方案客戶端
- HBO Max for Mac HBO Max影片客戶端Mac客戶端
- 桌面雲的客戶端與接入方式客戶端
- OSSEC服務端配置客戶端批次部署方案服務端客戶端
- HT for Web嵌入QtWebKit的客戶端解決方案QTWebKit客戶端
- 逆向世界盃直播App 央視影音-iOS客戶端APPiOS客戶端
- windows bilibili客戶端快取影片匯出Windows客戶端快取
- 一個支援Sora模型文字生成影片的Web客戶端Sora模型Web客戶端
- 乾貨 | 蘇寧影片雲跨平臺播放器開發方案詳解播放器
- 摩杜雲電商影片直播解決方案:直播3.0時代,影片雲是必不可少的新基礎設施
- 數商雲影片直播電商平臺解決方案
- 騰訊影片 for Mac(影片播放客戶端) v2.19.2.52840官方版Mac客戶端
- Flyme影片客戶端加入廣告了 煤油怎麼看?客戶端
- 騰訊影片 for Mac(影片播放客戶端) v2.19.2.52923官方版Mac客戶端
- 《samba搭建win客戶端和linux客戶端的區別》Samba客戶端Linux
- 桌面客戶端效能提升,最佳化使用資源消耗客戶端
- Android so庫防客戶端破解的解決方案Android客戶端
- dubbo客戶端客戶端
- Pulsar客戶端客戶端
- mqtt 客戶端MQQT客戶端
- MQTTJava客戶端的使用MQQTJava客戶端
- redis客戶端的使用Redis客戶端
- HTML轉PDF的純客戶端和純服務端實現方案HTML客戶端服務端
- IE客戶客戶端程式開發的利器Bindows客戶端
- Web端與Client客戶端資料互動方案選擇Webclient客戶端
- 客戶端,服務端客戶端服務端
- 服務端,客戶端服務端客戶端
- 雲時代的資料庫客戶端 —— CloudQuery最佳實踐資料庫客戶端Cloud
- Nacos - 客戶端心跳續約及客戶端總結客戶端
- 四種有能力取代Cookies的客戶端Web儲存方案Cookie客戶端Web
- HTML5的五種客戶端離線儲存方案HTML客戶端
- OSCHINA安卓客戶端程式碼高亮解決方案安卓客戶端
- Symantec(賽門鐵克)客戶端安全解決方案(轉)客戶端
- 影片直播軟體開發:Android客戶端接入谷歌支付的實現流程Android客戶端谷歌
- 阿里雲——媒體雲(影片直播)阿里
- 影片號直播(微信影片號直播PC端開播條件)
- 物理DataGuard客戶端無縫切換--客戶端TAF 配置客戶端
- [Redis 客戶端整合] Java 中常用Redis客戶端比較Redis客戶端Java