在 C# 项目中使用 OpenH264 DLL

Using OpenH264 DLL in C# Project

我正在通过 UDP 接收 H264 流。我想解码流,这样我就可以将帧发送到 OpenCV 或其他任何东西。我在这里遇到了 Cisco 的开源 H264 解码器:https://github.com/cisco/openh264 通过一些努力,我得到了在 Visual Studio 2019 中构建的解码器解决方案,并使用我从原始 UDP 数据报创建的文件从命令行对其进行了测试。有效。

现在我想弄清楚如何在 C# 项目中使用解码器 DLL (welsdec.dll)。上次我在 Windows 中对 C++ 做任何严肃的事情是回到 DirectShow 和 Delphi 5 天,所以我完全迷失了。

H264 项目中的任何内容都未使用 __declspec(dllexport) 显式导出。那是正常的吗?将 DLL 作为项目引用添加到 C# 项目不起作用 ("the reference is invalid or unsupported")。

我猜 DLL 是非托管的。我可以直接在 C# 中使用它吗?我是否必须将 DLL 重写为 C++ CX 库,或者将其包装在 C++ CX 库中才能使其正常工作?

您可以使用 PInvoke 在 C# 中显式使用非托管 DLL。

您还可以写 intermediary DLL in C++/CLI to ease the invocations between your managed C# application and the native DLL. This is the approach taken by secile/OpenH264Lib.NET per stuartd's 评论。

看起来 H264 项目使用 module definition files (.def) 代替用 declspec 修饰导出。您应该仍然可以使用上述方法访问这些公开导出的函数。