如何将 HLS 流下载到本地机器?

How to download HLS stream into a local machine?

有时将流下载到我们的本地机器很有用。

原因可能是

如果我们尝试使用 curlwget 下载由 URL 指向的流媒体资源,我们最终会下载一个小文本文件。它肯定不是视频资产。

那么我们如何才能下载流本身呢?

我的回答底部的 link 中给出了执行下载的实际脚本。但在继续介绍操作方法之前,让我们先了解下载流的步骤。

无需过多赘述,指向流的 URL 通常以 m3u8 扩展名命名。该文件称为流的 manifest,实际上是一个文本文件,其中包含一个对列表:比特率和对应的 URL,用于匹配 播放列表 文件。以下是 清单 文件的摘录:

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=380600,CODECS="avc1.4d00c,mp4a.40.2",RESOLUTION=320x180
http://f24hls-i.akamaihd.net/hls/live/221193-b/F24_EN_LO_HLS/master_250.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=655600,CODECS="avc1.77.30,mp4a.40.2",RESOLUTION=640x360
http://f24hls-i.akamaihd.net/hls/live/221193/F24_EN_LO_HLS/master_500.m3u8

播放列表文件是另一种文本文件,它告诉播放器要在播放头的每个位置播放哪个TS文件。

这是典型的 播放列表 文件的开头:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:303165
#EXTINF:10.000,
20170216T114458/master_500/00151/master_500_01165.ts
#EXTINF:10.000,
20170216T114458/master_500/00151/master_500_01166.ts

因此在为每个比特率下载播放列表文件后,我们可以开始下载以每个可能的比特率播放流所需的 TS 文件。

所有这些都是使用我放入 GitHub 中的一个非常简单且不言自明的脚本完成的:https://github.com/ishahak/HLS_Downloader

希望对其他人有用。