首页 > 编程语言 >C# 细数AForge.Video.FFMPEG使用过程中踩的坑及解决方案

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

时间:2023-05-05 16:24:15浏览次数:47  
标签:FFMPEG C# 解决方案 AForge 报错 Video x86

细数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)及填坑办法

 

标签:FFMPEG,C#,解决方案,AForge,报错,Video,x86
From: https://www.cnblogs.com/lwk9527/p/17374469.html

相关文章

  • C++统计代码运行时间
    本来想自己写的,一看github上面都有就不再重复造轮子了。github上的项目如下:StopWatch纯标准库实现:使用std::chrono::high_resolution_clock,其实就是std::chrono::steady_clock的别名。StopWatch类似C#的实现:和C#的StopWatch比较像,在Windows下使用的是QueryPerformanceCounter......
  • 三天稳过CKS终极秘籍
    三天稳过cks终极秘籍考试心得最近考过了cks,和大家说说这个备考的过程,以及一些注意事项。怎样能拿到这个CKS的证呢?相信大家是都可以的,但是有一个好的方法会让我们事倍功半。首先,以我的经验来说,我总共真实做题的时间三天左右。但这个三天是由包含很多东西,有前提条件的。我觉得你......
  • JavaScript学习汇总
    ExtJs学习之Button(08)uniGUI学习之脱离Delphi直接写ExtJS从入门到精通04官方文档查找办法_例如_Ext.Window(48)uniGUI学习之脱离Delphi直接写ExtJS从入门到精通03自定义函数_调用顺序(47)uniGUI学习之脱离Delphi直接写ExtJS从入门到精通02Ext.Panel创建后_调用的几种方法(46)......
  • 如何在 AlmaLinux 8 上安装和使用 Docker
    Docker是面向开发人员和系统管理员的强大平台,可简化在软件容器内部署应用程序的过程。容器允许您将应用程序及其所有部分(代码、运行时、系统工具、系统库——通常位于/usr/bin或/usr/lib中的任何内容)打包,以便它可以在任何Linux机器上一致地运行。这包括操作系统内核和其......
  • Go语言入门14(channel通道01)
    channel(一)​ channel用于goroutines之间的通信,让它们之间可以进行数据交换。像管道一样,一个goroutine_A向channel_A中放数据,另一个goroutine_B从channel_A取数据channel基本语法//因为channel是指针类型的数据类型,所以通过make来分配内存//使用make声明一个channel,里面可以......
  • CF1823D Unique Palindromes
    题意你要构造一个长度为\(n\)的由小写字母组成的字符串,满足给出的\(k\)个约束。其中,每个约束以\(p(x_i,c_i)\)的方式给出,表示构造的字符串长度为\(x_i\)的前缀中应包含\(c_i\)个本质不同的回文子串(单个字符也算)。\(3\len\le2\times10^5\),\(1\lek\le20\)。......
  • LeetCode 977. 有序数组的平方
    题目链接:LeetCode977.有序数组的平方本题直接暴力求解就是先求出每个元素平方后的值,再对平方后的值进行排序,双指针解法由于数组其实是有序的,只不过负数平方之后可能成为最大数了。那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。此时可以考虑双指......
  • ThreadLocal bug小计
    ThreadLocal使用ThreadLocal做缓存时,需要明确这个缓存时线程级别的。xxlxxl每次执行任务都是一个新线程,是线程隔离的。RabbitMqConsumermq的消费监听器在服务启动时就已经创建,始终是一个线程。现象在使用ThreadLocal做缓存的前提下,xxl在执行任务时可以拿到新数据,mq消费时还......
  • 线上FullGC问题排查实践——手把手教你排查线上问题
    作者:京东科技韩国凯一、问题发现与排查1.1找到问题原因问题起因是我们收到了jdos的容器CPU告警,CPU使用率已经达到104%观察该机器日志发现,此时有很多线程在执行跑批任务。正常来说,跑批任务是低CPU高内存型,所以此时考虑是FullGC引起的大量CPU占用(之前有类似情况,告知用户后重......
  • LeetCode 27. 移除元素 题解
    题目链接:LeetCode27.移除元素本题大意是要对一个数组进行原地删除数值等于val的元素。双指针算法:通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。快指针(p指针):寻找新数组的元素,新数组就是不含有目标元素的数组慢指针(q指针):指向更新新数组下标的位置当......