作者:王先荣
前言
    随着Windows操作系统的不断演变,用于捕获视频的API接口也在进化,微软提供了VFW、DirectShow和MediaFoundation这三代接口。其中VFW早已被DirectShow取代,而最新的MediaFoundation被Windows Vista和Windows 7所支持。可惜的是,上述接口基于COM技术且灵活性很大,在.net中并不方便直接使用。
.net封装
    老外有很多活雷锋,他们奉献了不少的开源项目,DirectShow.net是对DirectShow的封装,而MediaFoundation.net是对MediaFoundation的封装。它们都能在 http://sourceforge.net上找到。这两个封装之后的类库基本上跟原来的COM是一一对应的关系,可以用于视频捕获,但是用起来还是不够简便。
    通过不断的google搜索,我认为以下类库对视频捕获封装得不错,它们是:DirectX.Capture、OpenCv、EmguCv和AForge。
DirectX.Capture

DirectX.Capture是发表在CodeProject上的一个项目,它能很方便的捕获视频和音频,在窗口预览,并将结果保存到文件。使用DirectX.Capture的示例如下:

Capture capture = new Capture( Filters.VideoInputDevices[0],Filters.AudioInputDevices[1] );
capture.Filename = "C:\MyVideo.avi";
capture.Start();
//...
capture.Stop();

但是,它没有提供单独获取某帧内容的方法。如果您只是需要预览并保存视频,它很好用。
OpenCv
    OpenCv对VFW和DirectShow的视频捕获部分进行了很好的封装,能够很方便的获取到某帧的内容,也可以将结果保存到视频文件中。使用OpenCv的示例如下:

OpenCvIntPtr ptrCapture = CvInvoke.cvCreateCameraCapture(param.deviceInfo.Index);while (!stop){IntPtr ptrImage = CvInvoke.cvQueryFrame(ptrCapture);lock (lockObject){stop = stopCapture;}}CvInvoke.cvReleaseCapture(ref ptrCapture);

不过OpenCv并未对音频捕获进行封装,如果需要同时录制音频,这个搞不定。
值得注意的是,从OpenCv 1.1开始已经实现了对DirectShow的封装,这跟网上很多人所说的OpenCv使用VFW进行视频捕获效率低下这种观点不一致。关于OpenCv使用DirectShow的论据请看本文的附录。

EmguCv
    EmguCv是对OpenCv在.net的封装,继承了OpenCv快速的优点,同时它更加好用。使用EmguCv的示例代码如下:

EmguCvCapture capture = new Capture(param.deviceInfo.Index);while (!stop){pbCapture.Image = capture.QueryFrame().Bitmap;lock (lockObject){stop = stopCapture;}}capture.Dispose();

AForge
    AForge是一套纯正的.net开源图像处理类库,它的视频捕获类也是基于DirectShow的,但更加好用,功能更多,从使用和帮助来看更类似微软的类库。

AForge

对比
    介绍完它们之后,我们来比较下它们。它们都是基于DirectShow的,所以性能几乎一样。实际上,我个人认为,摄像头所用的硬件和驱动程序的支持对性能影响更大。我的摄像头在Windows 7下没有专门的驱动程序,只能使用Microsoft提供的默认驱动,性能比WindowsXp要差一截。
值得注意的是主要有几点:
    (1)只有DirectX.Capture实现了对音频的捕获;
    (2)只有DirectX.Capture不能获取单独的某帧图像;
    (3)EmguCv的免费版基于商业许可,而其他类库的许可都很宽松;
    (4)AForge的示例和帮助比较好,而且功能多些。

附录:OpenCv也用DirectShow来捕获视频
通过分析OpenCv 2.0的源代码,我得出了OpenCv使用DirectShow来捕获视频的结论。证据如下:

DirectShow In OpenCv(1)
//_highgui.h  line:100
#if (_MSC_VER >= 1400 || defined __GNUC__) && !defined WIN64 && !defined _WIN64#define HAVE_VIDEOINPUT 1#endif(2)
//cvcap_dshow.cpp  line:44
#ifdef HAVE_VIDEOINPUT#include "videoinput.h"/********************* Capturing video from camera via VFW *********************/class CvCaptureCAM_DShow : public CvCapture(3)
//cvapp.cpp  line:102
CV_IMPL CvCapture * cvCreateCameraCapture (int index)
{
//.....
//line:140switch (domains[i]){#ifdef HAVE_VIDEOINPUTcase CV_CAP_DSHOW:capture = cvCreateCameraCapture_DShow (index);if (capture)return capture;break;#endif

原文地址

http://www.cnblogs.com/xrwang/archive/2010/02/13/HowToCaptureCameraVideoViaDotNet.html

C#视频采集方法对比相关推荐

  1. Metal之实现视频采集与实时渲染

    一.视频渲染实现思路 ① 思路说明 通过AVFoundation进行视频数据的采集,并将采集到的原始数据存储到CMSampleBufferRef中,即视频帧数据(视频帧其实本质也是一张图片). 通过C ...

  2. 摄像头、视频采集和摄像设备图像质量判断的几种简单有效目测方法

    来源:http://blog.csdn.net/lezhiyong 视频图像性能的几种简单目测方法,也可在购买视频采集和摄像设备拿来做参考 软件编解码性能测试: 摄像头前快速挥手,看手部是否连贯.是否 ...

  3. 苹果cms重复采集重名视频解决方法

    1,采集前首先设置一下采集参数,避免采集重复.程序后台->系统->采集参数配置 入库重复规则:勾选"分类""和标题"(意思同一个视频名称,同一分类的 ...

  4. 天猫主图和视频采集步骤及文件保存方法

    一.采集方法: 1.在天猫平台找到要下载带有视频的商品并将链接复制,然后粘贴到(载图助手)链接的下载网址粘贴栏里,如图: 2.链接可多次复制,一行粘贴一个,然后一次性完成批量下载,如图: 3.根据自己 ...

  5. 玩转DV技巧 DV视频采集编辑和压缩方法

    玩转DV技巧 DV视频采集编辑和压缩方法 发布日期:2007/12/19 13:47:22 人气指数:439 选择内容区背景色:灰色(默认色) 墨绿 杏仁黄 秋叶褐 胭脂红 芥末绿 天蓝 雪青 灰 银 ...

  6. 【Android RTMP】Android Camera 视频数据采集预览 ( 视频采集相关概念 | 摄像头预览参数设置 | 摄像头预览数据回调接口 )

    文章目录 安卓直播推流专栏博客总结 一. Android 端数据采集涉及到的相关概念 二. Camera 预览图像尺寸设置 三. 获取摄像头采集的数据格式 安卓直播推流专栏博客总结 Android R ...

  7. iOS视频采集实战(AVCaptureSession)

    需求:使用AVFoundation中的AVCaptureSession实现设置相机的分辨率,帧率(包括高帧率), 切换前后置摄像头,对焦,屏幕旋转,调节曝光度... 阅读前提: 原理请参考另一篇文章: ...

  8. Android 音视频采集与软编码总结

    请尊重原创,转载请注明出处:http://blog.csdn.net/mabeijianxi/article/details/75807435(本文已在 "任玉刚" 微信公众号发布 ...

  9. 视频去重方法批量处理去重消重去水印去logo软

    今日头条自媒体运营推广视频教程学习资料短视频运营从零到精通 今日头条趣东方头条凤凰新浪看点网易企鹅UC大鱼一点资讯自媒体快传视频处理软件 今日头条推广视频教程自媒体推广短视频教程今日头条引流小白入门 ...

  10. 摄像头、电脑投屏、手机投屏同屏互联网直播之LibEasyScreenLive实现屏幕局部采集方法

    EasyScreenLive功能介绍 EasyScreenLive是一款简单.高效.稳定的集采集,编码,组播,推流和流媒体RTSP服务于一身的同屏功能组件,具低延时,高效能,低丢包等特点. 目前支持W ...

最新文章

  1. iis错误Server Application Error的解决方法(附修复工具下载)
  2. EXPORT_SYMBOL使用
  3. linux系统libpcap安装方法
  4. springcloud项目的启动顺序_Spring Cloud微服务项目完整示例,含注册中心,网关,断路器等等...
  5. 博客园里输入latex公式
  6. 武汉大学计算机学院c404,985录取名单(武大)!武大不歧视!80分政治复习路线图!最新调剂信息!...
  7. 菜刀php教程,Weevely(php菜刀)工具使用详解
  8. MD5之C#密码加密-备忘录
  9. 教你CentOS7部署TOMCAT8
  10. docker菜鸟入门
  11. 星星之火-58:CPRI协议缺点,eCPRI协议是如何克服CPRI协议的不足?
  12. 如何开始做股票量化交易?
  13. 3dmax简单的bip制作
  14. Ubuntu18.04 用一条命令 快速安装 FBReader
  15. python不重复排列组合_python解决排列组合
  16. HTML+CSS网页设计期末课程大作——体育足球(5页面)
  17. mysql函数if为负数_MySQL的if,case语句
  18. 基于FPGA的双极性DDS设计与仿真
  19. 【python】用python实现多个excel合并成一个excel文件------直接上代码
  20. 新的一年给自己定个小目标

热门文章

  1. 如何使用spring2.0
  2. Guass消元 poj 1830
  3. python预处理tif格式图片
  4. PAT 乙级 集体照
  5. 网页如何开启Gzip压缩
  6. authc过滤器 shiro_shiro原理之过滤器
  7. c语言贪吃蛇答辩项目,贪吃蛇项目V1答辩.PDF
  8. JavaAwtSwing笔记之 Frame和JFrame的区别
  9. [Python]ImportError: This platform lacks a functioning sem_open implementation, therefore, the requi
  10. 智慧工厂如何实现工业设备的状态采集