由於誤打誤撞來到了淘寶直播團隊,從開始徹底不瞭解直播技術,如今由於leader暫時的離開,準備接手h5播放器的迭代,就不得不開始瞭解相關的視頻技術,先整理一下在直播技術中的視頻格式和不一樣瀏覽器的兼容性。html
直播技術通常有兩種協議方式,分別是HLS和RTMP,兩種協議分別的解釋我就摘抄了一個博主的解釋html5
總結下來就是RTMP是Adobe公司推出的基於flash的實時視頻消息傳輸協議,服務端和用戶端經過flash創建長連接,並實時進行消息的推送、傳輸和接收而後播放,對應的視頻播放格式是flv。而HLS就是apple公司爲了消滅flash(由於老喬一直以來對flash的抵制和ios對flash的不支持)本身定義的一套替代flash的視頻解決方案。服務器和用戶端經過不停的接收視頻片斷(每一個片斷都經過一次http請求)來播放,對應的視頻播放格式是m3u8,其中m3u8只是一個表示視頻片斷地址的純文本,用來加載一個個的.ts視頻文件。android
兩種協議各有利弊,具體的在本篇中不展開了,就我所知的RTMP協議延遲低,協議自己設計簡潔,適合實時性較高的網絡直播,HLS是http請求,因此能夠用cdn緩存等方式加快傳輸,可是由於是視頻片斷,容易被跳過,因此若是有強制廣告要求的話也可能被跳過。可是RTMP由於佔用的網絡端口是1935,若是之後瀏覽器的一些新安全機制就有可能block全部80端口之外的鏈接,也有安全性問題。ios
由於蘋果公司對flash的強烈抵制以及本身定的視頻協議,因此在ios端原生支持m3u8格式的視頻播放而不支持flv的播放,並且由於蘋果在移動端的領頭做用,因此其餘移動端包括android瀏覽器也都原生支持m3u8格式的視頻播放。git
pc端由於歷史緣由,在hls以前都是用flash播放視頻,後來隨着html5的普及,能夠用原生的video標籤來播放mp四、ogg、webm等視頻格式的播放,可是對於直播格式m3u8(除了safari)和flv都不能支持播放。因此如今pc端廣泛的作法仍是經過flash來播放m3u8和flv格式的視頻。github
可是由於flash的淘汰正在加速,也比較有決心,好比我就發現如今chrome播放flash視頻已經要手動點擊容許了。加上media source extention在高端瀏覽器已經被支持,就能夠直接在瀏覽器端就實現視頻格式的轉換。MSE是一個能夠經過js控制瀏覽器視頻源文件的api,有了這個api咱們就能夠經過js在瀏覽器端對視頻進行轉碼及處理並提供給video標籤了。B站已經開源了一個flv播放器flv.js,原理就是經過解析視頻源,而後進行視頻源解碼轉換成mp4格式,而後經過mse丟在video原生標籤裏播放,同理也有hls.js對m3u8格式的視頻進行轉碼在pc端播放。web