一直觉得.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开始调试,再次瞬间爆出【冷漠脸】。
怎么说呢,至少错误信息已经改了吧?[冷漠的脸]。
那么这次有什么问题呢?
我们现在正在使用 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
参考链接:
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 欧资源网