天天看點

一文詳解 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文本檔案下載下傳到本地,打開:

// 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 視訊格式與分析視訊秒開優化

到這裡其實就看的很清楚了,

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

========== THE END ==========

文章首發于公衆号”CODING技術小館“,如果文章對您有幫助,可關注我的公衆号。

繼續閱讀