ffmpeg - 为什么在解码 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
有任何想法吗?
解决方案
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。你可以在这里找到一个简短的教程。
推荐阅读
- python - Python中JSON对象的纯值
- intellij-idea - IntelliJ - 如何查找与字符串模式匹配的所有方法名称?
- ios - “尝试删除行...”崩溃,但我没有故意删除任何行
- php - 如果 mySQL 行为空,if else 语句不返回任何值?
- javascript - 如何从以前单击的元素中删除样式?
- elasticsearch - 如何在弹性搜索中降低 TF 分数?
- python - 根据两个不同单元格的比较设置单元格值
- django - 如何使用模型变量作为 url?
- javascript - 如何只使用一次选择选项中的值?
- hyperlink - Hugo:在 Markdown 中为指向不同页面的链接添加锚点