流媒体(m3u8)的下载
项目中需要将网上的视频缓存在本地进行观看,而视频文件是M3U8格式的视频文件。因此需要学习一下如何实现此项需求。
M3U8简介
首先我们需要了解几个概念:
- M3U: 本质上是音频文件的列表,纯文本格式。播放软件根据它的记录找到网络地址进行在线播放
- M3U8: 是M3U中的一种,编码格式为UTF-8格式
- TS片段:Apple 为了提高流播效率开发的技术,将流媒体切分成若干TS片段,然后通过一个m3u列表文件将这些TS片段集中起来供客户端播放器播放
- HLS:HTTP Live Streaming是Apple的动态码率自适应技术。包括一个m3u8索引文件,TS媒体分片文件和key加密串文件。
HLS的优势:自适应码率流播。就是客户端会根据网络状况自动选择不同码率的视频流,条件允许的情况下使用高码率,网络繁忙的时候使用低码率,并且自动在二者间随意切换。
TS文件选择原因:因为两个 TS 片段可以无缝拼接,播放器能连续播放。
实现方案
实现过程如下图所示:
-
解析M3U8文件内容:w
我们获取到M3U8的链接地址,获取到文件内容。大致如下:
我们需要从中获取到每一个ts文件的下载链接和播放时长。
-
下载所有的ts文件
获取到了ts文件的下载地址,我们需要根据地址依次下载ts文件至指定的文件中。这部分可以使用Alarmofire的大文件下载实现。
-
生成M3U8文件
下载完成所有的ts文件后我们需要生成M3U8文件,播放器可以根据M3U8文件中的链接地址播放ts文件
-
开启本地server服务
当我们下载完成M3u8文件和所有的ts文件后如何播放?使用HLS直播播放技术,模拟服务器和客户端的交互的过程。所以我们在本地建立一个http服务器,让HLS访问本地的http服务器就可以播放了。
根据上述流程生成以下文件生成管理下载过程: