問題描述
項目中實現(xiàn)了類似“今日頭條”中“西瓜視頻”的功能,在列表Cell上播放視頻或衡,實現(xiàn)方案中,使用ZFPlayer作為播放器封断,ZFPlayer是一個基于AVPlayer的開源類。
在列表上播放視頻澄港,切換視頻時柄沮,為了避免反復(fù)創(chuàng)建和銷毀播放器,ZFPlayer實現(xiàn)了單例模式祖搓,在播放完一個視頻之后,播放器不會被銷毀拯欧。
通過Charles抓包,發(fā)現(xiàn)在播放完一個m3u8視頻之后藏姐,還會隔一段時間一直加載一個m3u8文件,抓包截圖如下:
發(fā)現(xiàn)問題
網(wǎng)上翻閱資料羔杨,對m3u8做了一些了解杨蛋,簡單來說理澎,m3u8就是將一整個視頻分割成小切片曙寡,以提高下載播放的速度,以上的例子中举庶,一共加載了8個視頻切片。
在播放m3u8的時候灯变,會先下載一個.m3u8的索引文件,文件中記錄了視頻的一些信息及切片地址等滚粟,如下:
從上面這張圖可以發(fā)現(xiàn)刃泌,文件中并沒有指明#EXT-X-PLAYLIST-TYPE
,翻閱官方文檔可知道耙替,不指明#EXT-X-PLAYLIST-TYPE
、指明#EXT-X-PLAYLIST-TYPE:EVENT
這兩種情況俗扇,都會被認(rèn)為是一個直播流,因為被認(rèn)為是一個直播流铜幽,在播放器沒銷毀的情況,播放器會一直加載m3u8索引文件狮杨,來獲取新的視頻切片信息。
只有指明#EXT-X-PLAYLIST-TYPE:VOD
的時候橄教,才會被認(rèn)為是一個視頻點播源喘漏,通過Charles將請求回復(fù)Map Local,并添加上#EXT-X-PLAYLIST-TYPE:VOD
翩迈,經(jīng)檢驗篓足,播放完視頻之后,不再加載.m3u8索引文件刺覆。
之后與后臺溝通绽族,是否能加上這個參數(shù),后臺表示視頻轉(zhuǎn)碼使用的是騰訊的轉(zhuǎn)碼庫吧慢,貌似不支持添加這個參數(shù),表示疑問检诗?
挖掘問題
沒能及時發(fā)現(xiàn)問題,主要原因是因為對m3u8的不了解逢慌,以后還需要對這方面多了解多研究。