 TS 分片有什么不一樣)
一、不止 TS 分片HLS 還支持 fmp4 碎片 MP4 格式大部分新手接觸 HLS看到的分片后綴都是.ts很多人以為 HLS 只能用 TS 分片。實(shí)際上 HLS 協(xié)議也支持 fmp4 碎片 MP4也叫 CMAF分片分片后綴是.m4s?,F(xiàn)在很多云廠商轉(zhuǎn)碼、低延遲 LL?HLS 方案會(huì)輸出 fmp4 格式分片。很多開發(fā)第一次碰到 fmp4 的 M3U8 會(huì)比較陌生分不清它和傳統(tǒng) TS 分片有什么區(qū)別踩不少小坑。從 M3U8 索引文本看fmp4 和普通 TS 的 M3U8 標(biāo)簽大體很像但是 M3U8 頭部會(huì)多出#EXT?X?MAP標(biāo)簽這個(gè)標(biāo)簽就是 fmp4 分片的初始化片段。沒有正確加載初始化片段分片就無法解碼直接黑屏。很多坑點(diǎn)很隱蔽VLC 可以播放 fmp4但是老版本 hls.js 不兼容復(fù)制 M3U8 的時(shí)候忽略 EXT?X?MAP 對(duì)應(yīng)的初始化片段地址分片 404播放直接失敗。調(diào)試 fmp4 格式的 HLS 流我會(huì)使用 m3u8live.cn 網(wǎng)頁調(diào)試工具查看 M3U8 原始文本重點(diǎn)觀察 #EXT?X?MAP 標(biāo)簽確認(rèn)初始化片段地址是否可以正常訪問。二、fmp4 碎片 MP4 和傳統(tǒng) TS 分片簡(jiǎn)單對(duì)比傳統(tǒng) TS 分片后綴.ts不需要獨(dú)立初始化片段每一個(gè) TS 分片內(nèi)部自帶解碼初始化信息HLS 版本 3 就完全支持兼容性極好。fmp4 碎片 MP4CMAF后綴 m4s必須有#EXT?X?MAP標(biāo)簽指向獨(dú)立初始化 moov 片段播放器必須先下載這個(gè)初始化片段再加載各個(gè) m4s 分片適合 LL?HLS 低延遲 HLS老版本 hls.js 對(duì) fmp4 支持不完善。重點(diǎn)坑fmp4 的 #EXT?X?MAP 里面記錄初始化片段的 URL如果這個(gè)地址 404、路徑寫錯(cuò)哪怕所有 m4s 分片全部正常視頻依舊黑屏無法解碼。三、fmp4 分片高頻踩坑坑 1忽略 #EXT?X?MAP 初始化片段M3U8 里面有 EXT?X?MAP 標(biāo)簽但是初始化片段地址寫錯(cuò)、404。m4s 分片全部 200但是沒有初始化片段無法解碼直接黑屏。很多人只看 m4s 分片完全忽略 MAP 標(biāo)簽???2hls.js 版本過低不支持 fmp4 分片老版本 hls.js 對(duì) fmp4/CMAF 支持有 BUG升級(jí)庫版本才可以正常播放。同樣一份 fmp4 流新版工具播放正常老業(yè)務(wù)頁面黑屏???3做 Nginx 代理改寫 M3U8只替換 m4s 分片漏掉 EXT?X?MAP 內(nèi)的 URL代理改寫 M3U8 報(bào)文的時(shí)候只替換 m4s 分片地址沒有替換 #EXT?X?MAP 標(biāo)簽里面的初始化片段 URL初始化片段請(qǐng)求 404???4把 fmp4 的 m4s 分片當(dāng)成普通 TS 分片去下載單獨(dú)播放m4s 碎片分片不能直接雙擊打開播放必須配合初始化片段組合起來才可以解碼。不能像 TS 分片那樣直接獨(dú)立播放。四、fmp4 流排查簡(jiǎn)單步驟第一步fmp4 格式 M3U8 粘貼網(wǎng)頁調(diào)試工具查看原始 M3U8 文本尋找#EXT?X?MAP標(biāo)簽。 第二步F12 網(wǎng)絡(luò)面板確認(rèn) MAP 標(biāo)簽對(duì)應(yīng)的初始化片段可以正常 200 訪問沒有 404、403。 第三步如果業(yè)務(wù)頁面播放黑屏確認(rèn)項(xiàng)目引入的 hls.js 庫版本過低版本需要升級(jí)。 第四步Nginx 代理場(chǎng)景改寫 M3U8 報(bào)文記得同時(shí)替換 EXT?X?MAP 內(nèi)部的 URL。五、選型簡(jiǎn)單建議普通點(diǎn)播、普通直播追求最大兼容性優(yōu)先傳統(tǒng) TS 分片如果業(yè)務(wù)使用 LL?HLS 低延遲直播會(huì)產(chǎn)出 fmp4/CMAF 分片需要保證播放器庫版本足夠新做代理改寫 M3U8 報(bào)文不要漏掉 #EXT?X?MAP 里面的初始化片段地址。六、總結(jié)HLS 分片不只有 TS還有 fmp4 碎片 MP4CMAF分片。fmp4 流 M3U8 會(huì)出現(xiàn) #EXT?X?MAP 初始化片段標(biāo)簽播放器必須先加載初始化片段分片才能解碼。很多故障 m4s 分片訪問正常但初始化片段 404直接黑屏。老版本 hls.js 對(duì) fmp4 支持存在缺陷。借助網(wǎng)頁調(diào)試工具查看 M3U8 原始文本重點(diǎn)核對(duì) EXT?X?MAP 標(biāo)簽對(duì)應(yīng)的資源地址可以快速定位 fmp4 分片的播放故障。