問(wèn)題描述
項(xiàng)目中實(shí)現(xiàn)了類(lèi)似“今日頭條”中“西瓜視頻”的功能,在列表Cell上播放視頻,實(shí)現(xiàn)方案中,使用ZFPlayer作為播放器,ZFPlayer是一個(gè)基于AVPlayer的開(kāi)源類(lèi)。
在列表上播放視頻,切換視頻時(shí),為了避免反復(fù)創(chuàng)建和銷(xiāo)毀播放器,ZFPlayer實(shí)現(xiàn)了單例模式,在播放完一個(gè)視頻之后,播放器不會(huì)被銷(xiāo)毀。
通過(guò)Charles抓包,發(fā)現(xiàn)在播放完一個(gè)m3u8視頻之后,還會(huì)隔一段時(shí)間一直加載一個(gè)m3u8文件,抓包截圖如下:

發(fā)現(xiàn)問(wèn)題
網(wǎng)上翻閱資料,對(duì)m3u8做了一些了解,簡(jiǎn)單來(lái)說(shuō),m3u8就是將一整個(gè)視頻分割成小切片,以提高下載播放的速度,以上的例子中,一共加載了8個(gè)視頻切片。
在播放m3u8的時(shí)候,會(huì)先下載一個(gè).m3u8的索引文件,文件中記錄了視頻的一些信息及切片地址等,如下:

從上面這張圖可以發(fā)現(xiàn),文件中并沒(méi)有指明#EXT-X-PLAYLIST-TYPE,翻閱官方文檔可知道,不指明#EXT-X-PLAYLIST-TYPE、指明#EXT-X-PLAYLIST-TYPE:EVENT這兩種情況,都會(huì)被認(rèn)為是一個(gè)直播流,因?yàn)楸徽J(rèn)為是一個(gè)直播流,在播放器沒(méi)銷(xiāo)毀的情況,播放器會(huì)一直加載m3u8索引文件,來(lái)獲取新的視頻切片信息。
只有指明#EXT-X-PLAYLIST-TYPE:VOD的時(shí)候,才會(huì)被認(rèn)為是一個(gè)視頻點(diǎn)播源,通過(guò)Charles將請(qǐng)求回復(fù)Map Local,并添加上#EXT-X-PLAYLIST-TYPE:VOD,經(jīng)檢驗(yàn),播放完視頻之后,不再加載.m3u8索引文件。
之后與后臺(tái)溝通,是否能加上這個(gè)參數(shù),后臺(tái)表示視頻轉(zhuǎn)碼使用的是騰訊的轉(zhuǎn)碼庫(kù),貌似不支持添加這個(gè)參數(shù),表示疑問(wèn)?
挖掘問(wèn)題
沒(méi)能及時(shí)發(fā)現(xiàn)問(wèn)題,主要原因是因?yàn)閷?duì)m3u8的不了解,以后還需要對(duì)這方面多了解多研究。