公司要求對 視訊秒開率 一秒内成功加載的播放數/播放總數
進行優化(
)。
是以本意是想對比一下m3u8與mp4視訊格式,并了解m3u8格式優缺點,以确定一個優化大概方向。
但對m3u8做簡單了解後,覺得有必要對m3u8檔案格式做一個記錄。
- m3u8視訊 是一種什麼樣的視訊格式?
- m3u8視訊 舉例
- 維基百科對m3u8的定義
- m3u8 與 MP4 對比
- 提高視訊秒開率的一個方案
一、m3u8視訊 是一種什麼樣的視訊格式?
m3u8不是一種視訊格式,而是一種純文字檔案。
m3u8視訊檔案格式中
存放了視訊的基本資訊
和
分段視訊的索引位址 (将一整個視訊分成了時長不同的很多小段)
。當播放m3u8視訊時,就是按順序下載下傳播放索引清單的視訊,進而完成一部完整視訊的播放。
以上幾句話是我對m3u8視訊格式是什麼東西的一個總結,可能有用詞不當的地方。但想了很長時間,覺得這樣說已經是我能表達的最容易了解的說法了。
但隻是這樣說,可能還是有些抽象,是以下邊我會舉個例子。
二、m3u8視訊 舉例
這是一個來自網易公開課的視訊播放位址:
http://flv0.bn.netease.com/videolib1/1903/15/9b4wxrd1g/SD/movie_index.m3u8這個位址可以在mac浏覽器上直接播放。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM0ITMvw1dvwlMvwlM3VWaWV2Zh1WaDdTJwlmc0N3LcRnbllmcv1yb0VXYvwlMyd2bNV2Zh1Wa-MDNxUDMyU2N3QGN0kzNwETLyQDM5YTO18CXzV2Zh1WafRWYvxGc19CXvlmL1h2cuFWaq5ycldWYtlWLkF2bsBXdvw1LcpDc0RHaiojIsJye.jpg)
下邊我們将這個m3u8文本檔案下載下傳到本地,打開:
// M3U8檔案必須包含的标簽,并且必須在檔案的第一行
#EXTM3U
// M3U8檔案的版本,常見的是3
#EXT-X-VERSION:3
// 第一個TS分片的序列号
#EXT-X-MEDIA-SEQUENCE:0
// 是否允許cache
#EXT-X-ALLOW-CACHE:YES
// 每個每個媒體段(ts)的最大的時長
#EXT-X-TARGETDURATION:39
// 每個媒體段(ts)的持續時間
#EXTINF:1.084422,
/videolib1/1903/15/9b4wxrd1g/SD/9b4wxrd1g-mobile-0.ts
// 每個媒體段(ts)的持續時間
#EXTINF:2.002000,
/videolib1/1903/15/9b4wxrd1g/SD/9b4wxrd1g-mobile-1.ts
// 每個媒體段(ts)的持續時間
#EXTINF:2.919578,
/videolib1/1903/15/9b4wxrd1g/SD/9b4wxrd1g-mobile-2.ts
// ... 中間部分省略
/videolib1/1903/15/9b4wxrd1g/SD/9b4wxrd1g-mobile-130.ts
// 每個媒體段(ts)的持續時間
#EXTINF:11.386378,
/videolib1/1903/15/9b4wxrd1g/SD/9b4wxrd1g-mobile-131.ts
// 表示PlayList的末尾了
#EXT-X-ENDLIST
-
,為了是讓大家了解m3u8文本格式各标簽的大概含義注釋說明是我後加的
- 可以看到這個公開課的完整視訊,
被分成了很多小段的 ts 結尾的視訊檔案
這裡我們随意下載下傳一段視訊,比如第一段視訊
http://flv0.bn.netease.com/videolib1/1903/15/9b4wxrd1g/SD/9b4wxrd1g-mobile-0.ts到這裡其實就看的很清楚了,
m3u8視訊 就是通過按順序下載下傳播放一段段時長不同的ts視訊,來完成整部視訊播放的
。
再把前邊我總結的,m3u8視訊到底是什麼重新讀一遍:
m3u8不是一種視訊格式,而是一種純文字檔案。m3u8視訊檔案格式中存放了視訊的基本資訊 和 分段視訊的索引位址 (将一整個視訊分成了時長不同的很多小段)。當播放m3u8視訊時,就是按順序下載下傳播放索引清單的視訊,進而完成一部完整視訊的播放。
三、維基百科對m3u8的定義
了解m3u8時,也參考了維基百科,但其給出的答案并不太讓我滿意。下邊是我在維基百科上查到的内容。當然内容我進行了簡單的組合...
- M3U8:
是一種純文字檔案,采用m3u8
編碼,是一種UTF-8
版本的Unicode
檔案。m3u
- M3U :
是一種播放多媒體清單的檔案格式,可以指定一個或多個多媒體檔案的位置,它的設計初衷是為了播放音頻檔案。比如MP3,但是越來越多的軟體現在用來播放視訊檔案清單。m3u
M3U檔案是記錄了一個索引純文字檔案,打開它時播放軟體并不是播放它,而是根據它的索引找到對應的音視訊檔案的網絡位址進行線上播放。
- HLS :
m3u
檔案都是蘋果公司使用的m3u8
的基礎,這種格式可以在iPhone和Macbook等裝置播放。HLS (HTTP Live Streaming)格式
HLS 點播是常見的分段 HTTP 點播,就是将視訊流分成不同的片段,用戶端不斷的去下載下傳該片段,由于片段之間的分段間隔時間非常短,是以看起來是一條完整的播放流
四、m3u8 與 MP4 對比
了解了m3u8的檔案格式和播放原理,下邊就可以對m3u8 與mp4 做一個簡單對比了。
- mp4 對HTML5和flash播放器親和度都挺好。但是檔案頭太大,結構複雜,長視訊的大檔案頭影響加載速度的視訊體驗,是以短視訊更常見
- m3u8 采用蘋果的HLS協定,目前 ios與android裝置均已支援。由于其工作原因是将整個視訊流分成一個個小的基于Http的檔案進行下載下傳播放,是以
支援視訊直播
關于mp4與m3u8格式詳細對比,曾寫過這樣一篇文章,可供大家參考:
mp4相比m3u8第一幀加載較慢的原因? https://xiaxl.blog.csdn.net/article/details/103370511五、提高視訊秒開率的一個方案
A、視訊重轉碼為m3u8
将播放格式由
mp4
更換為
m3u8
B、m3u8轉碼規則:
僅僅重轉碼,還是遠遠不夠的。
必須對m3u8檔案切片大小執行一定的限制規則,對m3u8檔案切片大小可做如下規定:
- m3u8檔案的 第一個ts片段長度為1~3秒
- m3u8檔案的 第二個ts片段長度為3~5秒
- m3u8檔案的 第三個ts片段長度為10秒左右
- m3u8檔案的 第四個ts片段以上長度為30秒左右
- m3u8檔案 最長ts片段不超過35秒
根據此規則重轉碼後,其視訊播放
秒開率
相較
mp4播放格式
,相信會有一個質的提升。
參考
https://zh.wikipedia.org/wiki/HTTP_Live_Streaming https://www.zhihu.com/question/20256377 https://www.cnblogs.com/renhui/p/10351870.html https://www.zhihu.com/question/21087379 https://blog.csdn.net/qq_35425276/article/details/79612348 https://www.jianshu.com/p/426425cad08a https://blog.csdn.net/DeliaPu/article/details/79013812 https://www.jianshu.com/p/2ce402a485ca========== THE END ==========
文章首發于公衆号”CODING技術小館“,如果文章對您有幫助,可關注我的公衆号。