????:flv.js 做了三件事:1. HTML5 原生僅支持播放 mp4/webm 格式,flv.js 實現了在 HTML5 上播放 FLV 格式視頻2. 使 Bilibili 網頁端平滑過度到 HTML5 播放器,歷史遺留不再是障礙3. 對于視頻直播,在 HTML5 上支持了延遲極低 HTTP FLV 播放,解開網頁端直播對 Flash 的依賴一些人問我為什么不直接采用 MP4 格式,并表示對 FLV
flv.js 做了三件事:
1. HTML5 原生僅支持播放 mp4/webm 格式,flv.js 實現了在 HTML5 上播放 FLV 格式視頻
2. 使 Bilibili 網頁端平滑過度到 HTML5 播放器,歷史遺留不再是障礙
3. 對于視頻直播,在 HTML5 上支持了延遲極低 HTTP FLV 播放,解開網頁端直播對 Flash 的依賴
一些人問我為什么不直接采用 MP4 格式,并表示對 FLV 格式的厭惡
這個問題一方面是歷史遺留問題,由于視頻網站前期完全依賴 Flash 播放而選擇 FLV 格式;
另一方面,如果仔細研究過 FLV/MP4 封裝格式,你會發(fā)現 FLV 格式非常簡潔,而 MP4 內部 box 種類繁雜,結構復雜固實而又有太多冗余數據。FLV 天生具備流式特征適合網絡流傳輸,而 MP4 這種使用最廣泛的存儲格式,設計卻并不一定優(yōu)雅。
這里我不想談論多媒體封裝格式的優(yōu)劣。flv.js 是在 HTML5 上實現自定義視頻格式播放的一個較好的范例,充分利用了 Media Source Extensions, Fetch API 以及 ECMAScript 6 等 HTML5/Web 上較新的技術,并考驗著這些 API:開發(fā)期間發(fā)現 Edge 對 Fetch API 的支持存在 bug,發(fā)現各個瀏覽器在 MSE 的實現細節(jié)上都有一些差異和問題,發(fā)現 Safari 的 MSE 實現健壯度較差(滑稽)
在 flv.js 項目初期,Media Source Extensions (MSE) 在國內處于無人問津的狀態(tài);而 MSE API 已經過近 4 年的發(fā)展演進,是 HTML5 多媒體相關最重要的 API 之一。MSE 是 HTML5 上實現自定義格式播放的關鍵,flv.js 開源也是希望 MSE 能被更廣泛地了解和應用。
最后,Chrome 等瀏覽器正在加速 Flash 淘汰的進程,HTML5 video 由各瀏覽器廠商實現了高性能硬解,MSE 作為媒體格式擴展的補充,flv.js 證明了當前 HTML5 多媒體技術已超越陳舊的 Flash。