AVPlayer播放m3u8视频的问题

问题描述

项目中实现了类似“今日头条”中“西瓜视频”的功能,在列表Cell上播放视频,实现方案中,使用ZFPlayer作为播放器,ZFPlayer是一个基于AVPlayer的开源类。

在列表上播放视频,切换视频时,为了避免反复创建和销毁播放器,ZFPlayer实现了单例模式,在播放完一个视频之后,播放器不会被销毁。

通过Charles抓包,发现在播放完一个m3u8视频之后,还会隔一段时间一直加载一个m3u8文件,抓包截图如下:

AVPlayer播放m3u8视频的问题_第1张图片

发现问题

网上翻阅资料,对m3u8做了一些了解,简单来说,m3u8就是将一整个视频分割成小切片,以提高下载播放的速度,以上的例子中,一共加载了8个视频切片。

在播放m3u8的时候,会先下载一个.m3u8的索引文件,文件中记录了视频的一些信息及切片地址等,如下:

AVPlayer播放m3u8视频的问题_第2张图片

从上面这张图可以发现,文件中并没有指明#EXT-X-PLAYLIST-TYPE,翻阅官方文档可知道,不指明#EXT-X-PLAYLIST-TYPE、指明#EXT-X-PLAYLIST-TYPE:EVENT这两种情况,都会被认为是一个直播流,因为被认为是一个直播流,在播放器没销毁的情况,播放器会一直加载m3u8索引文件,来获取新的视频切片信息。

只有指明#EXT-X-PLAYLIST-TYPE:VOD的时候,才会被认为是一个视频点播源,通过Charles将请求回复Map Local,并添加上#EXT-X-PLAYLIST-TYPE:VOD,经检验,播放完视频之后,不再加载.m3u8索引文件。

之后与后台沟通,是否能加上这个参数,后台表示视频转码使用的是腾讯的转码库,貌似不支持添加这个参数,表示疑问?

挖掘问题

没能及时发现问题,主要原因是因为对m3u8的不了解,以后还需要对这方面多了解多研究。

相关阅读

官方文档-About HTTP Live Streaming
m3u8初步了解-初识 HLS 协议

你可能感兴趣的:(AVPlayer播放m3u8视频的问题)