最新公告
  • 欢迎您光临欧资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • AForge摄像头.Video.FFMPEG在多媒体处理中遇到的坑

    一直觉得.net不擅长多媒体处理。最近,我需要制作一个相机程序。为方便起见,我使用了开源项目 AForge。AForge项目中有AForge.Video和AForge.Video.DirectShow两个子项目,可以方便的调用摄像头。但是这两个项目最后只能获取视频帧,不能保存为视频文件。经过专家的指导,AForge还有一个子项目AForge.Video.FFMPEG,可以将图片压缩成Avi视频格式。不过这个AForge.Video.FFMPEG在实际使用中会遇到很多坑。下面我把我在这个使用中遇到的坑分享给大家。

    AForge.NET 是专为开发人员和研究人员设计的 C# 框架。该库是一个开源项目,包括计算机视觉和人工智能、图像处理、神经网络、遗传算法、机器学习、模糊系统和机器人控制。等领域vs 调试 找不到dll,提供大量的图像处理、视频处理功能

    该框架由一系列类库组成。主要包括:

    AForge.Imaging – 一些日常图像处理和过滤器

    AForge.Vision – 计算机视觉应用程序库

    AForge.Neuro – 神经网络计算库 AForge.Genetic – 进化算法编程库

    AForge.MachineLearning – 机器学习库

    AForge.Robotics – 提供一些机器人的工具库

    AForge.Video – 一系列视频处理库

    AForge.Fuzzy – 模糊推理系统库

    AForge.Controls – 图像、3D、图表显示控件

    AForge.Net 子项目有 AForge.Video.VFW,它提供了 Avi 文件的操作。AForge.Video.FFMPEG 是一个子项目,通过 FFmpeg 库提供对大量视频格式的支持。众所周知,FFmpeg 是一个非常强大的视频处理类库,也是开源的,但是 AForge.Video.FFMPEG 还处于实验阶段,目标是用 FFmpeg 代替 AForge.Video.VFW 提供更好的库用于视频文件的操作,但是 library 的值目前提供了视频数据的读写,不支持音频文件的读写vs 调试 找不到dll,未来可能会支持

    第一个坑:参考

    需要用到AForge.Video.FFMPEG,当然第一步是参考它。但是这个 AForge.Video.FFMPEG 不能像其他 AForge 项目一样使用 Visual Studio 附带的 NuGet 获得。你会发现在 NuGet 上根本找不到这个项目。

    如果找不到,那我去官网找。我们可以到AForge项目官网下载AForge项目的源代码和编译文件。但是这里有两个问题:

    AForge项目官网的打开速度非常非常非常慢。可以点击链接打开官网,然后打开游戏玩一会儿。(这里我给你一个AForge下载页面的直接链接:)

    AForge 项目的源代码和生成的文件最终放在 GoogleCode 上,在中国你也知道。但是,我们这里可以使用的技巧是使用迅雷之类的下载器进行下载,他们的离线下载可以翻墙。

    我选择“下载安装程序”,右键选择“复制链接地址”,然后放入迅雷下载。

    下载后是压缩包,AForge.Video.FFMPEG.dll放在压缩包的Release文件夹下。

    第二个坑:调用

    我们刚刚从官网下载了AForge.Video.FFMPEG.dll,接下来调用就可以了,对吧?

    可是不,你只是踏入了一个深坑,为什么叫深坑呢?因为这个dll调用非常非常恶心。

    让我们看看它有多恶心。首先,假设我们在项目中添加了 AForge.Video 和 AForge.Video.FFMPEG 这两个类库。

    然后修改Main函数:

    按 F5 调试,瞬间爆炸:

    出现这个问题的原因比较简单,因为这个AForge.Video.FFMPEG是用VC++编写的,并且在编译的时候已经编译成了native code,而我们目前的C#通用目标平台是“Any CPU”,所以才会出现这个问题。

    解决方法是不再选择使用“Any CPU”作为目标平台,改为“x86”或“x64”。由于x86可以在x64上运行而x64不能在x86上运行,所以我选择了x86。

    现在再次按F5开始调试,再次瞬间爆出【冷漠脸】。

    vs2015 调试dll_vs 调试 找不到dll_vs 如何调试dll源代码

    怎么说呢,至少错误信息已经改了吧?[冷漠的脸]。

    那么这次有什么问题呢?

    我们现在正在使用 AForge.Video.FFMPEG。我们都知道FFMPEG是著名的开源多媒体处理项目吧?这个 AForge.Video.FFMPEG 实际上调用 FFMPEG 在内部工作。所以这个 FileNotFoundException 实际上是抛出的,因为 AForge.Video.FFMPEG 找不到 FFMPEG 文件。AForge.Video.FFMPEG所依赖的FFMPEG组件其实已经放在了刚刚下载的压缩包的Externalsffmpegbin目录下:

    我们将这8个文件复制到程序目录下。请注意,我们刚刚更改了目标平台。现在程序编译输出的目录已经是binx86Debug了。不要抄错了。

    复制完成后,我们继续按F5调试程序。

    嗯,它爆炸了,我已经习惯了[冷脸]

    这个问题的原因是什么…

    其实是因为我项目的目标框架是.net Framework 4.0,而AForge正式编译AForge.Video.FFMPEG.dll时,目标框架是.net Framework2.0。 ..

    在.net Framework4.0之前,程序运行环境还是.net Framework2.0,.net Framework2.0兼容.net Framework1.0和1.1,但是在升级到.net Framework4.0的时候,.NET的核心做了很大的调整,之前在.net Framework2.0或者.net3. 5 如果要运行在.NET Framework 4.0 中生成的程序集,需要在配置文件中指定该应用程序支持的公共语言运行时版本,并启用.NET Framework 2.0 运行时. 激活策略。

    有三种解决方案:

    降低自己项目的目标 .net Framework 版本;

    修改配置文件;

    重新编译 Video.FFMPEG。

    这里我讲第二种方法。

    在Visual Studio中按Ctrl+Shift+A打开“添加新项”窗口,选择“应用程序配置文件”,然后点击“添加”(vs2017创建时已经自带App.config,无需添加再次)

    打开新创建的 App.Config 文件并将以下内容添加到 和 选项卡:

    添加后按F5开始调试。

    最后一切正常。

    录制的视频在文件运行目录中:

    项目参考:

    使用了开源视频处理组件 AForge。当然,它包含更多的功能。如果您想了解更多信息,请访问官方网站。下面的代码主要是记录桌面屏幕,每20秒存储一个视频文件,可以对类似需求的通知提供一点帮助。

    录屏工具.cs

    示例调用:

    补充:

    源码、播放器、AForge.NET Framework-2.2.5.exe下载地址:

    提取码:5fxo

    参考链接:

    站内大部分资源收集于网络,若侵犯了您的合法权益,请联系我们删除!
    欧资源网 » AForge摄像头.Video.FFMPEG在多媒体处理中遇到的坑

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    欧资源网
    一个高级程序员模板开发平台

    发表评论