You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VLC无法播放m3u8文件、ffmpeg解密报错问题求助

问题核心原因

你下载的keyfile.txt不是FFmpeg可直接读取的16字节原始AES-128密钥,而是一段Base64编码的JSON格式加密配置,FFmpeg无法识别该格式的密钥,因此解密分片失败报错。

解决步骤
  • 第一步:解码keyfile.txt的Base64内容
    将keyfile.txt中的字符串做Base64解码,得到如下结构的JSON数据:
{
    "passphrase": "614b49563a7eb",
    "ciphertext": "ejfNMdRf9mcvxGRQLX6qS+jRINfZPbr1urhXaMVuAZmIJWeWX2FKCKuCFBaD0cqX",
    "iv": "1e3e787f3cbde8ebd7ee0d5ead056a34",
    "salt": "06773b59a5cb1f0787dba3e00aff4b37"
}
  • 第二步:解密得到真实AES密钥
    用JSON中的passphrase、iv、salt参数解密ciphertext字段,得到16字节的真实AES密钥。可参考如下Python代码完成解密:
import base64
from Crypto.Cipher import AES
from Crypto.Protocol.KDF import PBKDF2

# 解码后JSON的对应字段值
passphrase = b"614b49563a7eb"
ciphertext = base64.b64decode("ejfNMdRf9mcvxGRQLX6qS+jRINfZPbr1urhXaMVuAZmIJWeWX2FKCKuCFBaD0cqX")
iv = bytes.fromhex("1e3e787f3cbde8ebd7ee0d5ead056a34")
salt = bytes.fromhex("06773b59a5cb1f0787dba3e00aff4b37")

# 生成解密用密钥
aes_key = PBKDF2(passphrase, salt, dkLen=16, count=1000)
cipher = AES.new(aes_key, AES.MODE_CBC, iv)
# 解密得到真实的分片解密密钥
real_decrypt_key = cipher.decrypt(ciphertext).strip()[:16]

# 保存为二进制密钥文件
with open("real.key", "wb") as f:
    f.write(real_decrypt_key)
  • 第三步:修改m3u8文件配置
    将m3u8文件中所有#EXT-X-KEY行的URI参数替换为新生成的真实密钥文件名:
#EXT-X-KEY:METHOD=AES-128,URI="real.key",IV=0x00000000000000000000000000000001

无需修改每行对应的IV值,保持原有配置即可

  • 第四步:执行FFmpeg合并命令
    重新运行原命令即可完成分片解密和合并:
ffmpeg -allowed_extensions ALL -i "play.m3u8" -c copy "test.ts"
异常排查

如果操作后仍然报错,可按以下点核对:

  • 确认所有.ts分片文件下载完整,文件名与m3u8中配置完全一致,无缺失、损坏
  • 确认生成的real.key是16字节的二进制文件,不要保存为文本格式
  • 可在FFmpeg命令中添加-loglevel debug参数,输出详细错误信息定位问题

内容的提问来源于stack exchange,提问作者Novice At Everything

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:09:02