m3u8線上播放器 m3u8線上播放器

M3U8 協定原理

把链路從“推流端”一路看到“播放器”,就知道 HLS/M3U8 在干什麼了。

從传输方式上看,HLS 做的事情並不神秘:用普通 HTTP,把一段長影片拆成很多小檔案,一块块地往外推。m3u8 只是负责把這些小檔案“串起來”。

從推流到播放,大致链路是這樣的

影片流與網路連線示意图(Unsplash)
可以简單把 HLS 理解成:把一條長影片拆成很多小包,在網路裡一段段地送過去

主播放列表和多碼率子列表

為了适配不同網路环境,HLS 允許你為同一路內容准备多套畫質,每一套都有自己的 m3u8。然後再用一個“总表”把它們串在一起,類似下面這種结构:

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360
low/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1600000,RESOLUTION=1280x720
mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3000000,RESOLUTION=1920x1080
high/index.m3u8
    

播放器拿到這個“主播放列表”後,會先選擇一條合适的碼率(比如從中档開始),播放過程中再根据实時帶寬情况决定是否切換到高碼率或低碼率。

客户端是怎麼“追著最新片段跑”的

在直播场景下,m3u8 並不是一次性寫完的,而是不断被更新。客户端通常會:

這也是為什麼你在抓包時會看到播放器不断地去拉同一個 index.m3u8 檔案。

為什麼要理解這些原理

知道協定大致怎麼运轉,有幾個很直接的好處: