在Azure Function中编写视频

时间:2019-02-28 13:03:06

标签: azure opencv azure-functions h.264 opencvsharp

我有一些要在Azure功能(Service Bus Queue触发器)中处理的视频。 当收到新消息并调用函数时,请执行以下操作:

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

但是在第三步,我遇到了一个问题: 我可以打开视频,阅读框架并绘制信息。但是,当我尝试编写输出时,它什么也没做。没有错误,没有文件...

这是我初始化视频编写器的方式:

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目录。

一切正常,在本地运行时会产生有效的mp4 ...,但不能在Azure函数中使用。

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

我可以以某种方式将OpenCV的输出转储到功能日志中吗?

我想念什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

我对OpenCV不太了解,但我认为OpenCV不允许使用Kudu沙箱。一种选择是在App ServiceAzure Container Instances中托管的容器中运行此部件。

所有Azure Web应用程序(以及移动应用程序/服务,WebJobs和功能)都在称为沙盒的安全环境中运行。每个应用程序都在其自己的沙箱中运行,从而将其执行与同一台计算机上的其他实例隔离开来,并提供其他程度的安全性和隐私性,否则这些安全性和隐私性将是不可用的。沙盒机制旨在确保在计算机上运行的每个应用程序均具有最低保证的服务水平;此外,沙箱强制执行的运行时限制可保护应用程序免受可能在同一计算机上运行的其他资源密集型应用程序的不利影响。

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