直播下的HTML5

直播下的HTML5

概述:
從15年起,直播異軍突起,目前 WEB 上主流的視頻直播方案有 HLS 和 RTMP,移動 WEB 端目前以 HLS 爲主(HLS存在延遲性問題,也可以藉助 video.js 採用RTMP),PC端則以 RTMP 爲主實時性較好。

HLS(HTTP Live Streaming) 是一個基於 HTTP 的視頻流協議,本質還是一個個的 HTTP 請求 / 響應,所以適應性很好,不會受到防火牆影響。但它也有一個致命的弱點:延遲現象非常明顯。如果每個 ts 按照 5 秒來切分,一個 m3u8 放 6 個 ts 索引,那麼至少就會帶來 30 秒的延遲。如果減少每個 ts 的長度,減少 m3u8 中的索引數,延時確實會減少,但會帶來更頻繁的緩衝,對服務端的請求壓力也會成倍增加。所以只能根據實際情況找到一個折中的點。

**RTMP(Real Time Messaging Protocol)**是 Macromedia 開發的一套視頻直播協議,現在屬於 Adobe。這套方案需要搭建專門的 RTMP 流媒體服務如 Adobe Media Server,並且在瀏覽器中只能使用 Flash 實現播放器。它的實時性非常好,延遲很小,但無法支持移動端 WEB 播放是它的硬傷。

對於HLS,總的來說:移動端iOS和 Android 都天然支持HLS協議,做好視頻採集端、視頻流推流服務之後,便可以直接在H5頁面配置 video 標籤播放直播視頻。H5 HLS 限制必須是H264+AAC編碼。H5 HLS 播放卡頓問題,server 端可以做好分片策略,將 ts 文件放在 CDN 上,前端可儘量做到 DNS 緩存等。H5 直播爲了達到更好的實時互動,也可以採用RTMP協議,通過video.js 實現播放。

WebAssembly

WebAssembly是通過Web執行低級二進制語法。但是它並不是直接用匯編語言,而提供了抓換機制(LLVM IR),把高級別的語言(C,C++和Rust)編譯爲WebAssembly,以便有機會在瀏覽器中運行。主要是解決目前JS語言的效率問題,設計立足點爲快速,內存安全和開放。所以它其實是一種運行機制,一種新的字節碼格式(.wasm),而不是新的語言。

相對於JavaScript,WebAssembly作爲使用靜態類型的二進制格式,有體積小以及運行速度快的優勢。在業務需求越來越複雜的現在,前端的開發邏輯越來越複雜,相應的代碼量隨之變的越來越多。相應的,整個項目的起步的時間越來越長。在性能不好的電腦上,啓動一個前端的項目甚至要花上十多秒。爲了解決這個問題,WebAssembly的前身,asm.js誕生了。asm.js是一個Javascript的嚴格子集,asm.js是一個編譯目標

WebAssembly是經過編譯器編譯之後的代碼,體積小、起步快。在語法上完全脫離JavaScript,同時具有沙盒化的執行環境。WebAssembly同樣的強制靜態類型,是C/C++/Rust的編譯目標。

MPEG-DASH-流媒體解決方案

簡單來說流媒體與非流媒體的區別就是,非流媒體必須下載完所有內容才能播放,流媒體則可以“邊下邊播”。但是流媒體也有很多痛點,比如卡頓頻繁、切換體驗不佳、首幀時間長、音畫不同步、音視頻不獨立等等。

MPEG-DASH是一種自適應比特率串流技術,使高質量流媒體可以通過傳統的HTTP網絡服務器以互聯網傳遞。和HLS類似,MPEG-DASH將內容分割成一系列很小的文件segment,這些segment可以通過http直接訪問。每個segment包含一小段時間長度的內容。當MPEG-DASH客戶端播放content時,客戶端可以根據當前的網絡情況,自動下載合適的下個segment。客戶端可自動選擇目前狀況下,最適合播放的高碼率segment來播放。MPEG-DASH播放器可以無縫適應不斷變化的用戶網絡或緩衝區大小,並提供高質量的播放體驗,減少卡頓率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章