在 Azure 函数中编写视频

Write video in Azure Function

我有要在 Azure 函数(服务总线队列触发器)中处理的视频。 当新消息到达并调用函数时,我执行以下操作:

  1. 从 blob 存储下载视频到函数目录
  2. 处理视频(循环帧并在其上添加一些信息)
  3. 将处理后的帧写入 output.mp4(使用 OpenCVSharp 的 VideoWriter)
  4. 将处理后的视频上传到 blob 存储

但是在第 3 步我遇到了问题: 我可以打开视频、阅读帧和绘制信息。但是当我尝试写输出时,它什么也不做。没有错误,没有文件...

以下是我如何初始化视频编写器:

var frameSize = new Size(frameWidth, frameHeight);
using (var writer = new VideoWriter(output, FourCC.H264, fps, frameSize))
{
   ...
}

我知道 OpenCV 默认不支持 h264,所以我将 openh264-1.8.0-win64.dll 添加到我的 bin 目录中。

当 运行 在本地...但不是在 azure 函数中时,它一切正常并生成有效的 mp4。

我怀疑opencv找不到我提供的openh264 dll。我是否需要做其他事情,而不仅仅是将其放入垃圾箱?

我能否以某种方式将 OpenCV 的输出转储到函数日志中?

我错过了什么?

谢谢。

我不太了解 OpenCV,但我想 OpenCV 不允许在 Kudu 沙箱中使用。一种选择是 运行 将此部分放在容器中,或者托管在 App Service or Azure Container Instances 中。

所有 Azure Web 应用程序(以及移动 App/Services、WebJobs 和 Functions)运行 在称为沙箱的安全环境中。每个应用程序 运行 都在自己的沙箱中,将其执行与同一台机器上的其他实例隔离开来,并提供额外的安全性和隐私性,否则将无法获得。沙箱机制旨在确保机器上的每个应用程序 运行ning 都具有最低保证的服务级别;此外,沙箱强制执行的 运行 时间限制可保护应用程序免受可能 运行 在同一台计算机上运行的其他资源密集型应用程序的不利影响。

https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox