google-app-engine - ffmpeg 无法在谷歌应用引擎标准 nodejs 中正确执行
问题描述
我已经尝试了整整三天让 GAE(标准 - nodejs)使用 ffmpeg 运行从 MOV 到 MP4 的简单视频转码器。我尝试过使用 ffluent-ffmpeg,启动子进程(例如 spawn),但没有任何效果。一旦它调用可执行文件,它总是会出错。我已经确认 ffmpeg 已安装,甚至尝试使用 ffmpeg-static。此外,我让它在我的本地机器上运行没有问题(使用上述所有方法)。
我也尝试过记录错误,但没有任何帮助。我可以通过任何已安装的包(包括 ffmpeg(系统包))看到它的工作情况。
下面是伪代码......第三步是问题发生的地方。
- 将文件名发送到 GAE 端点
- 将文件从谷歌云存储下载到临时文件
- 使用 ffmpeg 转码
- 将临时文件上传到谷歌云存储
- 删除旧的谷歌云存储文件
- 删除临时文件
我用来测试的文件是 6MB...我在 iPhone 上拍摄的 5 秒视频。先感谢您。
更新:我成功地将完全相同的代码部署到 Node Flex 环境并且一切正常。我无法在标准环境中发现任何错误,指导我去哪里看,但我的猜测是它与它如何将我通过管道传输到 GAE 节点标准上的 FFMPEG 的文件存储有关。文档说它是一个使用 RAM 的虚拟文件系统。我很想知道是否有人设法让它在标准环境中工作。
解决方案
经过长时间的战斗,我终于弄清楚发生了什么。我没有足够的计算资源。如果有人要为图像和视频构建转码服务,请确保您的核心至少达到 4 个。我的工作随机失败(但不能重复处理相同的文件),网络套接字断开和重新连接等。
对于因为我没有发布错误(我说我真的没有)而降级我的问题的人......好吧,当你的 CPU 开始放弃工作时,日志中不一定会有错误,因为它跟不上负载。就像我在问题中提到的那样,我会收到错误但没有任何意义。
推荐阅读
- asp.net-core - Razor 视图中的 @code 标记引发编译器错误
- javascript - 根据 JavaScript 对象的结果显示/隐藏 div
- azure - Azure 服务总线:如何在订阅者出现故障时实现最终一致性
- javascript - 范围内的已定义变量未定义
- java - 将 txt 文件读入 ArrayList 的问题
- c - 为什么在 GCC 中错误使用 __attribute__((pure)) 没有给出警告?
- python - 在python中用分隔的双引号和布尔值解析json字符串表示
- jquery - 点击 GSAP 将卡片转回
- xamarin.android - 使用 TabLayout 时 ViewPager 不加载片段
- flutter - 为什么 Bloc 不在上下文中?