首先我先说明一下我的使用场景和错误原因:

我使用IDM从网站中批量下载ts文件,然后下载对应的一个.m3u8文件(ts文件列表和加密信息的描述)和一个key.key文件(秘钥)。以上文件全部保存在同一目录下。
然后使用FFmpeg命令来解密并合并ts文件。命令为:ffmpeg -i index.m3u8 -c copy out.ts 由于ffmpeg 可以自动加载解密文件,所以很方便。但是提示以下错误:

从图片中可以得知,有两个错误。其中第二个错误往往就是由于第一个错误导致的,所以先解决第一个错误。可以看到提示key.key文件无法识别,因为.key不是内置的文件格式,网上有人 提出将.key后缀改成.m3u8,这样就可以读取文件了。但是这样子解决了第一问题,第二个还是没有解决。

经过摸索之后,我发现使用原始的m3u8文件链接(就是你从网上下载m3u8文件时使用的连接)没有第一个错误同时也没有第二个错误,可以 完美运行,比如使用如下的命令:

ffmpeg -i "http://www.example.com/index.m3u8" -c copy out.ts

这样就可以直接下载ts文件并成功解密、合并。这样与本地使用的区别是使用了网络中的key.key,而不是使用本地下载好的key.key。具体为什么这样可以,暂时我还不可知。

得知这些信息之后,对本地的m3u8文件做修改,修改其#EXT-X-KEY:METHOD=AES-128,URI=”key.key” 中的”key.key”为”http://www.example.com/key.key“。但是修改之后还是会报以下错误:

所以,很明显将http添加在protocol_whitelist中即可。

修改ffmpeg的命令如下:

ffmpeg -protocol_whitelist "file,http,crypto,tcp" -i index.m3u8 -c copy out.ts

大功告成!

只要添加-allowed_extensions ALL就可以直接使用本地的key.key文件了,完整代码如下

ffmpeg -allowed_extensions ALL -protocol_whitelist "file,http,crypto,tcp" -i index.m3u8 -c copy out.mp4

原文地址:http://www.cnblogs.com/xialigang/p/16914300.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性