使用 ffmpeg 解密 AES-128 加密的 .m3u8 播放列表和 .TS 文件

Moh*_*iri 8 streaming ffmpeg http-live-streaming

我正在尝试解密.m3u8播放列表,我按照以下步骤操作:

  • 创建一个目录
  • 将密钥复制到密钥文件,即my.key,并将其放在目录中。请注意,如果播放列表有多个键,则可以旋转键,将它们全部复制到不同的文件中。
  • 将所有.ts段复制到同一目录
  • 复制并编辑playlist.m3u8并仅使用键 URI 和段的文件名。

并使用此命令解密播放列表

ffmpeg -i playlist.m3u8 -c copy output.ts
Run Code Online (Sandbox Code Playgroud)

但我收到了这个错误:Invalid data found when processing input

这是我的 m3u8 :

#EXTM3U
#EXT-X-TARGETDURATION:12
#EXT-X-ALLOW-CACHE:YES
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-KEY:METHOD=AES-128,URI="my.key"
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:6.000,
s-1-v1-a1.ts
#EXTINF:6.000,
s-2-v1-a1.ts
#EXTINF:6.000,
s-3-v1-a1.ts
#EXTINF:12.000,
s-4-v1-a1.ts
#EXTINF:12.000,
s-5-v1-a1.ts
#EXTINF:6.000,
s-6-v1-a1.ts
#EXT-X-ENDLIST
Run Code Online (Sandbox Code Playgroud)
  • 我的命令有什么问题吗?
  • 如何不将播放列表转换为一个.TS文件?我想单独解密文件

Joh*_*ohn 9

尝试在清单中指定完整的本地路径,因此将 KEY 设置为:

#EXT-X-KEY:METHOD=AES-128,URI="file://path/to/local/my.key"
Run Code Online (Sandbox Code Playgroud)

TS 块都像:

file://path/to/local/s-6-v1-a1.ts
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,那么 ffmpeg 可能需要通过 HTTP 提供 m3u8 的输入。因此,将您的 m3u8 文件、密钥以及所有块放在某个 Web 目录中,然后使用 m3u8 的 URL 重新运行 ffmpeg 命令,如下所示:

ffmpeg -i http://mytestwebserver.com/playlist.m3u8 -c copy output.ts
Run Code Online (Sandbox Code Playgroud)

如果您无法访问网络服务器,您可以安装一些本地免费软件,例如 MAMP。当输入是 HLS URL 时,使用上述命令在本地复制 HLS 流没有任何问题。