首页 > 解决方案 > 为什么在解码 m3u8 时使用 ffmpeg 会出现此错误?

问题描述

我正在尝试使用 ffmpeg 将 .m3u8 解码为 mp4,但不断收到此错误消息:

将比特流过滤器应用于流#0:0 https://....../audio.m3u8 的输出数据包时出错:处理输入时发现无效数据。

这是我正在使用的命令:

ffmpeg -y -f hls -i https://www.video-cdn.com/video/encrypt/7b35e1550e7dac1fa9d6f34eb0b55148/R915dD-90d3ac3f-48d9-4da1-84d4-d354a7ed03de/90d3ac3f-48d9-4da1-84d4-d354a7ed03de/audio.m3u8 -bsf:v h264_mp4toannexb,dump_extra -bsf:a aac_adtstoasc -map 0 -c copy -flags +global_header -max_interleave_delta 0 -f mp4 test.mp4

cmd示例

有任何想法吗?

标签: ffmpeg

解决方案


HLS 流是加密的。由于 m3u8 播放列表文件中的以下行,您可以看到这一点:

#EXT-X-KEY:METHOD=AES-128,URI="blob:https://www.video-cdn.com/90d3ac3f-48d9-4da1-84d4-d354a7ed03de",IV=0xa2dccda29716795b6a22bec559144723

由于 URI 带有 Blob-Prefix,FFmpeg 无法解密流,因为此 blob 仅在您收到此 URL 的情况下有效(例如您的浏览器)。

要解决这个问题,您需要手动将 m3u8 播放列表文件下载到本地驱动器,同时手动下载 AES-128 密钥,修改播放列表并将其传递给 FFmpeg。你可以在这里找到一个简短的教程。


推荐阅读