1

我在winforms中使用aforge进行视频录制。我想在窗口平板电脑中录制视频(前置和后置摄像头)。我能够找到视频捕获设备列表,但无法确定哪个是前置摄像头或后置摄像头。

我使用的命名空间:

using AForge.Video;
using AForge.Video.DirectShow;

我已经看到了我寻找视频捕获设备的代码片段:

public VideoCaptureDevice cam = null;
public FilterInfoCollection usbCams;

...

usbCams = new FilterInfoCollection(FilterCategory.VideoInputDevice);

if (usbCams.Count == 1)
{
    cam = new VideoCaptureDevice(usbCams[0].MonikerString);
}
else if (usbCams.Count == 2)
{
    cam = new VideoCaptureDevice(usbCams[1].MonikerString);
}

cam.NewFrame += new NewFrameEventHandler(cam_NewFrame);

cam.Start();

...

private void cam_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
    Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();
    ImgContainer.Image = bitmap;
}

我在 iball 和 lenovo yoga 8 等不同设备上进行了测试。我发现一个原因是在 Iball 平板电脑中返回第一个前置摄像头名称和第二个后置摄像头,但在联想平板电脑中返回第一个后置摄像头和第二个前置摄像头。我完全糊涂了。如何识别前置摄像头和后置摄像头?

4

2 回答 2

0

一个技巧是检查功能并将最高分辨率的相机设置为后置相机。如果质量有差异,通常比后置摄像头更好。

这并不总是有效,例如 Surface Pro 1 有 2 个分辨率相同的摄像头。

于 2016-07-19T11:50:49.787 回答
0

usbCams 是您机器中所有可用摄像头设备的列表。有了这个:

if (usbCams.Count == 1)
{
    cam = new VideoCaptureDevice(usbCams[0].MonikerString);
}
else if (usbCams.Count == 2)
{
    cam = new VideoCaptureDevice(usbCams[1].MonikerString);
}

你正在做的是,如果只有一个设备使用第一个,如果有两个设备使用第二个,但不确定第二个是后面还是前面。我在我的应用程序中所做的是使用选择器并用所有可用设备填充它,然后让用户选择。就像是:

List<string> camaras = new List<string>();
foreach (FilterInfo item in usbCams)
{
    camaras.Add(item.Name);
}
comboBox.ItemsSource = camaras;

当组合框更改选择时

cam.Stop();
cam= new VideoCaptureDevice(LoaclWebCamsCollection[comboBox.SelectedIndex].MonikerString);
cam.NewFrame += new NewFrameEventHandler(cam_NewFrame);
cam.Start();

我现在没有足够的设备来测试凸轮的顺序,但可能是按名称设备排序,或者按驱动程序安装优先级或其他排序。

于 2016-03-23T12:37:02.533 回答