我正在尝试从最近收到的 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;
}
}
}
我在图片框中看到了黑屏?
关闭我的应用程序后错误地运行了 DVR设备附带的 SuperViewer 应用程序,然后打开我的应用程序,然后我的图片框开始显示来自相机的源,奇怪!!! ,来自原始软件的Feed冻结!!
DirectX.Capture示例和来源尝试使用相同的结果http://www.codeproject.com/Articles/3566/DirectX-Capture-Class-Library
我也使用 OpenCV 和无接触,我得到了相同的结果:(
修改
我一直在搜索,发现我需要得到过滤器(IAMCrossbar)我认为这是问题DirectShow USB webcam changing video source并在应用 DirectX.Capture Wrapper中的此链接中的更改后仍然得到相同的结果:(
感谢您提前提供任何帮助 Yaser
答案 0 :(得分:1)
如果你的捕获设备有选项,要从多个输入接口中选择一个,那么是的,你是对的,你需要使用IAMCrossbar。
如果你想坚持使用Directshow(正如其他人建议的OpenCV),那么我建议,
您可以将此MP3 Player Sample Project作为dll的起点。
对于捕获,AmCap是一个详细的例子。
我的意思是你需要将AmCap中的捕获代码放到上面的MP3 Player Sample dll中,然后将它暴露给你的C#应用程序。