關於直播視訊格式和瀏覽器相容性歷史的來龍去脈
因為誤打誤撞來到了淘寶直播團隊,從開始完全不瞭解直播技術,現在因為leader暫時的離開,準備接手h5播放器的迭代,就不得不開始瞭解相關的視訊技術,先整理一下在直播技術中的視訊格式和不同瀏覽器的相容性。
直播協議HLS和RTMP
直播技術一般有兩種協議方式,分別是HLS和RTMP
- HLS ,是蘋果公司實現的基於 HTTP 的流媒體傳輸協議,全稱 HTTP Live Streaming,可支援流媒體的直播和點播,主要應用在 iOS 系統,為 iOS 裝置(如 iPhone、iPad)提供音視訊直播和點播方案。
- RTMP ,實時訊息傳輸協議,Real Time Messaging Protocol,是 Adobe Systems 公司為 Flash 播放器和伺服器之間音訊、視訊和資料傳輸開發的開放協議。協議基於 TCP,是一個協議族,包括 RTMP 基本協議及 RTMPT/RTMPS/RTMPE 等多種變種。RTMP 是一種設計用來進行實時資料通訊的網路協議,主要用來在 Flash/AIR 平臺和支援RTMP協議的流媒體/互動伺服器之間進行音視訊和資料通訊。
總結下來就是RTMP是Adobe公司推出的基於flash的實時視訊訊息傳輸協議,服務端和使用者端通過flash建立長連結,並實時進行訊息的推送、傳輸和接收然後播放,對應的視訊播放格式是flv。而HLS就是apple公司為了消滅flash(因為老喬一直以來對flash的抵制和ios對flash的不支援)自己定義的一套替代flash的視訊解決方案。伺服器和使用者端通過不停的接收視訊片段(每個片段都通過一次http請求)來播放,對應的視訊播放格式是m3u8,其中m3u8只是一個表示視訊片段地址的純文字,用來載入一個個的.ts視訊檔案。
HLS和RTMP的利弊
兩種協議各有利弊,具體的在本篇中不展開了,就我所知的RTMP協議延遲低,協議本身設計簡潔,適合實時性較高的網路直播,HLS是http請求,所以可以用cdn快取等方式加快傳輸,但是因為是視訊片段,容易被跳過,所以如果有強制廣告要求的話也可能被跳過。但是RTMP因為佔用的網路埠是1935,如果以後瀏覽器的一些新安全機制就有可能block所有80埠以外的連線,也有安全性問題。
flv和m3u8格式的瀏覽器相容性
移動端
因為蘋果公司對flash的強烈抵制以及自己定的視訊協議,所以在ios端原生支援m3u8格式的視訊播放而不支援flv的播放,而且因為蘋果在移動端的領頭作用,所以其他移動端包括android瀏覽器也都原生支援m3u8格式的視訊播放。
PC端
pc端因為歷史原因,在hls之前都是用flash播放視訊,後來隨著html5的普及,可以用原生的video標籤來播放mp4、ogg、webm等視訊格式的播放,但是對於直播格式m3u8(除了safari)和flv都不能支援播放。所以現在pc端普遍的做法還是通過flash來播放m3u8和flv格式的視訊。
MSE
但是因為flash的淘汰正在加速,也比較有決心,比如我就發現現在chrome播放flash視訊已經要手動點選允許了。加上media source extention在高階瀏覽器已經被支援,就可以直接在瀏覽器端就實現視訊格式的轉換。MSE是一個可以通過js控制瀏覽器視訊原始檔的api,有了這個api我們就可以通過js在瀏覽器端對視訊進行轉碼及處理並提供給video標籤了。B站已經開源了一個flv播放器flv.js,原理就是通過解析視訊源,然後進行視訊源解碼轉換成mp4格式,然後通過mse丟在video原生標籤裡播放,同理也有hls.js對m3u8格式的視訊進行轉碼在pc端播放。
相關文章
- 關於View中mParent的來龍去脈View
- Mac上的Safari瀏覽器如何檢視歷史記錄?Mac瀏覽器
- 【譯】瀏覽器user-agent的歷史瀏覽器
- 14.3 瀏覽歷史
- 從GAN到WGAN的來龍去脈
- 瀏覽器相容性瀏覽器
- 【工具】火狐瀏覽器歷史版本下載瀏覽器
- 關於二進位制表示和補碼計算的來龍去脈,入門看了秒懂
- Alink漫談(四) : 模型的來龍去脈模型
- 使用 JavaScript 操作瀏覽器歷史記錄 APIJavaScript瀏覽器API
- 關於瀏覽器相容瀏覽器
- win10瀏覽器檢視歷史紀錄卡死恢復方法Win10瀏覽器
- Android效能最佳化來龍去脈Android
- Linux 程式編譯過程的來龍去脈Linux編譯
- AI晶片行業發展的來龍去脈AI晶片行業
- 『MySQL』深入理解事務的來龍去脈MySql
- Android效能優化來龍去脈總結Android優化
- 一文搞清楚 DNS 的來龍去脈DNS
- 【Javascript】淺析JS中閉包的來龍去脈JavaScriptJS
- 瀏覽器的視窗位置和大小瀏覽器
- 瀏覽器 UA 的變遷史瀏覽器
- edge瀏覽器找不到相容性檢視設定 新版edge瀏覽器相容模式怎麼設定瀏覽器模式
- 3┃音視訊直播系統之瀏覽器中通過 WebRTC 直播視訊實時錄製回放下載瀏覽器Web
- webRTC——瀏覽器裡的音視訊通話Web瀏覽器
- 關於瀏覽器外掛的初步認識瀏覽器
- win10瀏覽器相容性怎麼設定_win10瀏覽器相容性設定方法Win10瀏覽器
- [原始碼解析]Oozie來龍去脈之提交任務原始碼
- HMM隱馬爾可夫模型來龍去脈(二)HMM隱馬爾可夫模型
- jmeter學習指南之分散式測試的來龍去脈JMeter分散式
- Cosmos 是什麼? 一文了解Cosmos的來龍去脈
- 一文講透CabloyJS全棧框架的來龍去脈JS全棧框架
- 檢視瀏覽器請求的session 瀏覽器怎麼檢視session瀏覽器Session
- history.pushState() 給網站新增和修改瀏覽歷史記錄網站
- 敲開遊戲引擎的大門,聊聊引擎的來龍去脈遊戲引擎
- 幾款瀏覽器相容性測試工具瀏覽器
- IE瀏覽器關於ajax的快取機制瀏覽器快取
- 藉助 AIDL 理解 Android Binder 機制——Binder 來龍去脈AIAndroid
- [原始碼解析]Oozie來龍去脈之內部執行原始碼