使用DirectShow和DirectX.Capture C#从EasyCap 4ch USB DVR设备捕获相机Feed

时间:2013-09-22 18:22:34

标签: c# camera directshow directshow.net dvr

我正在尝试从最近收到的 EasyCap 4通道USB DVR设备中捕获相机 我买了一个超级Mimi单色/彩色相机并将其连接到DVR设备并设法用驱动程序“SMI Grabber”正确设置设备并安装了设备附带的软件 “SuperViewer”
我写了一个简单的窗体应用程序,其中包含一个PictureBox来预览相机进纸
(底部有一个编辑)
守则:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DirectX.Capture;


namespace DirectShowWithCrossbar
{
    public partial class Form1 : Form
    {
        private CrossbarSource crossbar;
        private Filters filters;
        private Capture capture;
        public Form1()
        {
            InitializeComponent();

            filters = new Filters();
            capture = new Capture(filters.VideoInputDevices[0], filters.AudioInputDevices[0]);
            foreach (Filter device in filters.VideoInputDevices)
            {
                comboBox1.Items.Add(device);
            }
            if (comboBox1.Items.Count > 0)
                comboBox1.SelectedIndex = 0;
            foreach (Filter device in filters.AudioInputDevices)
            {
                comboBox2.Items.Add(device);
            }
            if (comboBox2.Items.Count > 0)
                comboBox2.SelectedIndex = 0;
            foreach (Source source in capture.VideoSources)
            {
                comboBox3.Items.Add(source);
            }
            if (comboBox3.Items.Count > 0)
                comboBox3.SelectedIndex = 0;
            ShowPropertPagesInMenuStrip();
            crossbar = (CrossbarSource)capture.VideoSource;
            crossbar.Enabled = true;
            capture.PreviewWindow = pictureBox1;
        }

        private void ShowPropertPagesInMenuStrip()
        {
            foreach (PropertyPage pro in capture.PropertyPages)
            {
                menusToolStripMenuItem.DropDownItems.Add(new ToolStripMenuItem(pro.Name));
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            capture.Cue();
            capture.Start();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            capture.Stop();
            capture.Dispose();
        }

        private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
        {
            capture.VideoSource = (Source)comboBox3.SelectedItem;
        }
    }
}

我在图片框中看到了黑屏? Black Screen No Feed
Super Viewer Software running 关闭我的应用程序后错误地运行了 DVR设备附带的 SuperViewer 应用程序,然后打开我的应用程序,然后我的图片框开始显示来自相机的源,奇怪!!! ,来自原始软件的Feed冻结!!
Both my software and SuperViewer running mine is working the other is freezing DirectX.Capture示例和来源尝试使用相同的结果http://www.codeproject.com/Articles/3566/DirectX-Capture-Class-Library
我也使用 OpenCV 无接触,我得到了相同的结果:(
修改
我一直在搜索,发现我需要得到过滤器(IAMCrossbar)我认为这是问题DirectShow USB webcam changing video source并在应用 DirectX.Capture Wrapper中的此链接中的更改后仍然得到相同的结果:(
 感谢您提前提供任何帮助 Yaser

1 个答案:

答案 0 :(得分:1)

如果你的捕获设备有选项,要从多个输入接口中选择一个,那么是的,你是对的,你需要使用IAMCrossbar。

如果你想坚持使用Directshow(正如其他人建议的OpenCV),那么我建议,

  1. 尝试在C ++ / CLI dll中构建所有捕获相关代码,
  2. 在C#中构建所有用户界面。
  3. 您可以将此MP3 Player Sample Project作为dll的起点。

    对于捕获,AmCap是一个详细的例子。

    我的意思是你需要将AmCap中的捕获代码放到上面的MP3 Player Sample dll中,然后将它暴露给你的C#应用​​程序。