简单来说,基于 HLS 的视频流,会将完整的视频,切割成一个个比较小的视频片段(ts 文件),然后根据协议组合成一个 m3u8 文件。这些比较小的 ts 文件,是可以单独播放的。而视频播放器,拿到 m3u8 文件之后,根据对其内 ts 片段的索引,连续播放不同的视频片段,来达到流畅的播放效果。
2.2 下载的 m3u8 文件
说这些概念都没用,我们来看两个真实的被下载的 m3u8 文件。
这种 m3u8 文件就还是比较清晰的,能看到它一个个的片段。但是需要注意的是,这里的片段,全部是基于域名的相对地址,也就是说,这样一个 m3u8 文件,你丢到播放器里,是无法播放的,但是如果你记录了原始下载这个 m3u8 的链接,它在播放器里是可以正常播放的。
当然,如果你修改这个 m3u8 文件,将它相对路径拼接上域名地址,也是可以达到播放的效果的。
再来看看另外一种 m3u8 文件,它其内的 ts 片段,都是完整地址。
像这种具有完整地址的 ts 片段,哪怕你将它保存成一个本地的文件,播放器依然是可以直接播放的,不过这里本质上依然是在在线播放。
这两中 m3u8 文件,虽然有细微的差别,但是它们都是基于标准的协议。
简单总结一下:
m3u8 不是视频内容的文件,它占用的磁盘空间非常的小。m3u8 文件,如果其内的 ts 片段,是完整地址,则可以保存后播放,否者只能在线播放。播放器播放 m3u8 文件的时候,实际上,还是在线从线上获取的视频流进行播放,所以是存在失效的情况的。
暂时知道这三点就可以了,接下来我们再看如何将一个 m3u8 文件,下载成一个 mp4 视频文件。
三、ffmpeg
好了,不卖关子了,这里下载 m3u8 会需要使用 ffmpeg。
ffmpeg 是一套可以用来记录、转换音视频,并将其转化为流的开源程序,采用 LGPL 或GPL 协议许可证书,很多大型的音视频软件,内部都是基于 ffmpeg 的。不了解不要紧,总之知道它对操作 ffmpeg 非常的方便。
如果本机上没有,就需要安装了。在Mac 下,使用 homebrew 下载 ffmpeg 非常的方便。
brew install ffmpeg
等待安装成功的提示就好了。
如果已经安装的,***也使用 bre