![如何使用 ffmpeg 或 youtube-dl 下载 aes 加密的 m3u8?](https://linux22.com/image/1634209/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20ffmpeg%20%E6%88%96%20youtube-dl%20%E4%B8%8B%E8%BD%BD%20aes%20%E5%8A%A0%E5%AF%86%E7%9A%84%20m3u8%EF%BC%9F.png)
我有m3u8文件和key.bin,m3u8文件里面有:
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="key.bin"
#EXTINF:6.000000,
segment-0.ts
...
#EXTINF:4.416667,
segment-159.ts
#EXT-X-ENDLIST
key.bin 文件里面有
Ú{±€rl”ÜJÌy«‡mó
如何使用 ffmpeg 或 youtube-dl 将其下载为 mp4?
答案1
您可以像这样使用 ffmpeg:
ffmpeg -i video.m3u8 -c copy -bsf:a aac_adtstoasc video.mp4
此外,如果 URL 是 https,您可以将 https 添加到允许的协议中,如下所示:
ffmpeg -protocol_whitelist file,http,https,tcp,tls,crypto -i video.m3u8 -c copy -bsf:a aac_adtstoasc video.mp4
答案2
如果您使用的是youtube-dl -o file.mp4 "m3u8-URL"
,您可能需要传递正确的标头,以便允许 youtube-dl/ffmpeg 下载密钥。使用--user-agent "USERAGENT"
和--referer "REFERRER_URL"
参数。您需要使用与浏览器相同的用户代理 - 您可以在以下位置轻松找到您的用户代理ifconfig.me/ua,referer 是你嗅探到 m3u8 URL 的浏览器中的主 URL)
例如:
ua='User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0'
ref='Referer: https://play.example.com/'
m3u8='https://audio.api.streaming.example.com/hls/bu627ad3-b805-4n6d-9dc9-495fd113d47f/playlist.m3u8'
youtube-dl -o file.mp4 --user-agent "$ua" --referer "$ref" "$m3u8"
感谢来自 reddit 的那个提供解决方案的人。
答案3
如果您遇到诸如 之类的字段EXT-X-KEY
,则URI
首先需要解析相对于播放列表 URI 的值。因此,如果您有这样的内容:
http://example.com/hello/playlist.m3u8
那么结果 URI 将是:
http://example.com/hello/key.bin
完成后,您可以从 URI 获取数据,通常为 16 个字节或更多。然后您可以解析段 URI:
http://example.com/hello/segment-0.ts
并正常下载。接下来,您可以使用 AES-CBC 解密该段,使用来自 的数据key.bin
作为 AES 密钥和 CBC IV。解密后,您需要删除任何填充(如果存在)。对所有段重复此过程。