“m3u8格式簡析”與“視頻秒開優化”
公司要求對 視頻秒開率
進行優化(一秒內成功加載的播放數/播放總數
)。
因此本意是想對比一下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瀏覽器上直接播放。
下邊我們將這個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 : **
m3u
是一種播放多媒體列表的文件格式,可以指定一個或多個多媒體文件的位置,它的設計初衷是爲了播放音頻文件。比如MP3,但是越來越多的軟件現在用來播放視頻文件列表。
M3U文件是記錄了一個索引純文本文件,打開它時播放軟件並不是播放它,而是根據它的索引找到對應的音視頻文件的網絡地址進行在線播放。 - HLS :
m3u
和m3u8
文件都是蘋果公司使用的HLS (HTTP Live Streaming)格式
的基礎,這種格式可以在iPhone和Macbook等設備播放。
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