【发布时间】:2019-02-14 12:45:43
【问题描述】:
我正在尝试为短视频创建转码功能。该函数托管在 AWS Lambda 上。问题是 AWS lambda 似乎缺少 FFMPEG 需要的东西,至少根据亚马逊的说法。
我之前联系过亚马逊,这是他们对这个问题的回应:
我们发现 FFMPEG 操作至少需要 libx264 和一个 acc 库,它们都有自己的依赖项。到 解决问题,这将涉及更深入地深入研究 依赖链。我们可以看到它在 Amazon Linux 中运行 环境然而,环境是相似的,但不完全相同 lambda 环境。可能存在一些依赖项 Amazon Linux 但不在 lambda 环境中,因为 Lambda 在 容器。在这里,由于 FFmpeg 是第三方软件,因此深入研究 进入依赖链并验证版本兼容性是 很难做到。不幸的是,更进一步,这必然会进入 架构和代码支持超出 AWS Support 范围 1。一世 希望您了解我们的局限性。但是FFmpeg应该支持吗 对 Lambda 平台有任何疑问,请告诉我们 知道,我们将很乐意为您提供帮助。我们将处于更好的位置 一旦您收到来自 FFmpeg 支持的更新,请进一步调查 从 Lambda 端提出一个问题。
根据 AWS 的建议,我联系了开发人员邮件列表上的 FFMPEG,我的邮件被拒绝了,原因是它比开发人员更适合 ffmpeg 用户邮件列表。一周前我向“ffmpeg-user@ffmpeg.org”发送了一封电子邮件,但尚未收到任何回复。
然后我构建了一个动态链接的 ffmpeg 版本,确保打包所有库,检查每个库的 ddl,然后创建一个小的 lambda 函数,循环遍历所有二进制文件并对每个文件进行 ddl,与我的输出相比从 Amazon Linux 获取,并且 lambda 和 AWS Linux 实例上存在相同的依赖项/版本,但 ffmpeg 在 lambda 上仍然失败。
您可以在此处找到详细的日志文件:https://www.datafilehost.com/d/6e5e21bb
这是我得到的错误示例,在整个日志文件中重复:
2018-08-14T12:27:10.874Z [h264 @ 0x65c2fc0] 隐藏 2628 DC, 2628 AC,P帧2628个MV错误
2018-08-14T12:27:10.874Z [aac @ 0x65d2f00] 通道元素 2.11 不是 已分配
2018-08-14T12:27:10.874Z 解码流 #0:1 时出错:无效 处理输入时找到的数据
2018-08-14T12:27:10.874Z [h264 @ 0x67e86c0] NAL 单元大小无效 (108085662 > 1649)。
2018-08-14T12:27:10.874Z [h264 @ 0x67e86c0] 拆分输入时出错 转换为 NAL 单元。
2018-08-14T12:27:10.874Z [aac @ 0x65d2f00] 通道元素 2.0 不是 已分配
2018-08-14T12:27:10.874Z 解码流 #0:1 时出错:无效 处理输入时找到的数据
2018-08-14T12:27:10.874Z [h264 @ 0x68189c0] NAL 单元大小无效 (71106974 > 1085)。
2018-08-14T12:27:10.874Z [h264 @ 0x68189c0] 拆分输入时出错 转换为 NAL 单元。
2018-08-14T12:27:10.874Z [aac @ 0x65d2f00] 不允许使用脉冲工具 八个短序列。
尝试对此文件执行 HLS 转码时会生成此日志:https://www.datafilehost.com/d/999a4492
请注意,该问题与该文件无关,也与 HLS 无关,它一般发生在所有视频和任何试图寻找流的 ffmpeg 命令上,甚至尝试使用可能的最简单形式,例如:ffmpeg -ss 00:00:02 -I file.mp4 -vframes 1 -y output.jpg 也会失败,并在日志文件中显示相同的错误。
不确定如何进一步调试。尝试使用“-loglevel debug”启用调试日志,但没有给我任何额外信息。任何帮助或建议
【问题讨论】:
-
不查找时运行正常吗?
-
另外,您确实收到了关于 ffmpeg-user 的回复,但您还没有跟进:lists.ffmpeg.org/pipermail/ffmpeg-user/2018-September/…
-
@Gyan 唯一能正常运行的是调用
ffmpeg -i file.mp4任何试图读取视频的操作都失败 -
源文件实际上是如何进入 Lambda 容器的?它是在调用请求有效负载中传递的吗?如果是这样,除非您将其作为 base64 传递,否则您可能会损坏它。 Lambda API 是 JSON,它不支持任意二进制数据,有效载荷中的任何无效 utf-8 几乎肯定会被强制转换为 utf-8 替换为 � (U+FFFD/hex 0xEF 0xBF 0xBD)代替不是实际有效字符的字节。将 base64 用于二进制有效负载可以解决此问题。这些错误给人的印象是数据损坏,而不是依赖问题。
-
@Michael-sqlbot 该文件已下载并存储在 lambda 的磁盘上。起初,在计算下载文件的 MD5 时,我认为同样的事情是正确的。除了 MD5 之外,我尝试在下载后将文件重新上传到 S3 并保留二进制文件。
标签: amazon-web-services ffmpeg aws-lambda h.264 aac