C# 细数AForge.Video.FFMPEG使用过程中踩的坑及解决方案

发布时间 2023-05-05 16:20:23作者: 流纹

细数AForge.Video.FFMPEG使用过程中踩的坑及解决方案
在后台代码中只要有引用到AForge.Video.FFMPEG都不用等到具体调用,只要运行直接就报错

解决方案:

发生这个问题的原因比较简单,因为AForge.Video.FFMPEG使用VC++写的,编译的时候已经被编译成本地代码,而C#一般目标平台都是“Any CPU”,所以会发生这个问题。
解决方案就是不再选择使用“Any CPU”作为目标平台,改成“x86”或者“x64”。因为x86可以跑在x64上,而x64不能在x86上跑,所以选择x86。
点击Visual Studio上方的配置管理器中“AnyCPU”旁的下按钮,在下拉菜单里选择“配置管理器”。
在新打开的“配置管理器”窗口里,单击“活动解决方案平台§:”下的下来菜单,选择“<新建…>”(如果已经有x86平台,则直接选择即可)

 

配置好只好再次进行调试发现还是报错而根据报错提示发现是由于缺少依赖项造成的

 

 在通过NuGet引用成功之后可以看到AForge.Video.FFMPEG文件夹下有一个readme.txt,打开可以看到
使用前,需要将Externals文件夹下的所有文件拷贝到项目输出路径下。如:bin\x86\Debug。” 的提示语,这里按照他的说法操作一下

 因为这里使用的是x86作为目标平台调试,所以文件必须复制bin\x86\Debug

 复制完毕再次运行,又报错

造成此报错的原因呢也好理解,因为我的项目使用的是 .NET Framework,Version=v4.6.1,但是AForge.Video.FFMPEG.dll使用的是 .NET Framework 2.0,在4.0版本以前由于程序运行环境本质还是2.0,并且2.0向下兼容1.0和1.1,但是升级4.0以后,.NET有了的调整,所以以前版本的项目或dll需要运行到4.0以后的版本上时需要在配置文件中指定此应用程序支持的公共语言运行时版本和启用.net Framework 2.0运行时激活策略。

 

而关于这个问题在官网上面由提出解决方案,按照官网的说法这里需要改config配置
https://learn.microsoft.com/zh-cn/dotnet/framework/configure-apps/file-schema/startup/supportedruntime-element

    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>

添加useLegacyV2RuntimeActivationPolicy=“true”特性

    <startup useLegacyV2RuntimeActivationPolicy="true"> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>

 

 然后在次运行,好的完美解决报错问题,接下来就是功能具体实现了,这里就不说了

其他踩坑可参考以下三篇文章:

【AForge.Net】FFMPEG库的使用
细说使用AForge.Video.FFMPEG的几个坑
c#屏幕录制(经典)(含源码和AForge.Video.FFMPEG.DLL)及填坑办法