У меня проблема при попытке прямой трансляции с сенсорной камеры USB, которая не поддерживается стандартом UVC Camera.
Сенсорная камера отображает зеленый экран, когда я использую Afroge.Video.Directshow
в C # для показа прямой трансляциивидео Но веб-камера все еще работает.
После этого я использовал Development.Kit.SensorCamera
, предоставленный производителем, и пытался добавить Afroge.Video.Directshow
в Development.Kit
, но камера датчика USB не работает.
Я спросил производителя, и они сказали, что: «Веб-камера соответствует стандарту UVC. Но Mileva НЕ является стандартом UVC, тогда Милева может использовать ТОЛЬКО собственный просмотрщик (не может использовать DirectShow)» *
имя USB-камеры датчика - Mileva Sensor.
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 System.IO;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using AForge;
using AForge.Video;
using AForge.Video.DirectShow;
using ZXing;
using ZXing.QrCode;
namespace Check_MilevaSensor
{
public partial class Form1 : Form
{
int i_camera;
string appPatch = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
MJPEGStream stream;
private FilterInfoCollection CaptureDevices;
private VideoCaptureDevice videoSource;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) //cái này là tự gen ra này
{
btnMtuOpen.Text = "MtuOpen";
btnMtuOpen.Click += new EventHandler(btnMtuOpen_Click);
btnMtuReceiveImage.Text = "MtuReceiveImage";
btnMtuReceiveImage.Click += new EventHandler(btnMtuReceiveImage_Click);
btnMtuSetCameraNo.Text = "MtuSetCameraNo";
btnMtuSetCameraNo.Click += new EventHandler(btnMtuSetCameraNo_Click);
btnMtuSetExposure.Text = "MtuSetExposure";
btnMtuSetExposure.Click += new EventHandler(btnMtuSetExposure_Click);
btnMtuClose.Text = "MtuClose";
btnMtuClose.Click += new EventHandler(btnMtuClose_Click);
txtMtuSetCameraNo1.Text = "1";
txtMtuSetExposure1.Text = "-5";
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
CaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); // cái này là tim này
if (CaptureDevices.Count == 0) // kiem tra xem co thiet bi ghi hinh nao hay khong
{
textBox2.Text += Environment.NewLine + "Time: " + DateTime.Now.ToString() + ": No device was found! Please make sure your cameras have been already connected!"; // ghi log loi neu ko tim thay
}
else
{
foreach (FilterInfo Device in CaptureDevices) // neu tim thay thi add cac thiet bi vao combobox de chon
{
comboBox1.Items.Add(Device.Name);
}
comboBox1.SelectedIndex = 0;
videoSource = new VideoCaptureDevice();
}
}
void btnMtuOpen_Click(object sender, EventArgs e)
{
int i_yoko, i_tate, i_return, i_Loop;
double dbl_fps;
string[] str_SplitDevice;
StringBuilder str_device = new StringBuilder(100);
StringBuilder str_type = new StringBuilder();
str_type.Append("YUY2");
i_camera = Mtu.MtuGetDevice(str_device, str_device.Capacity);
startOpenCam(); //đây
if (i_camera > 0)
{
str_SplitDevice = str_device.ToString().Split(',');
for (i_Loop = 0; i_Loop <= str_SplitDevice.GetUpperBound(0); i_Loop++)
{
if (str_SplitDevice[i_Loop] == "MTU")
{
i_camera = i_Loop;
}
}
}
else if (i_camera == 0)
{
MessageBox.Show("No camera");
return;
}
else
{
MessageBox.Show("Error");
return;
}
if (rbtn1280x720.Checked == true)
{
i_yoko = 1280;
i_tate = 720;
dbl_fps = 60;
}
else if (rbtn656x408.Checked == true)
{
i_yoko = 656;
i_tate = 408;
dbl_fps = 120;
}
else
{
i_yoko = 328;
i_tate = 204;
dbl_fps = 240;
}
i_return = Mtu.MtuOpen(i_camera, i_yoko, i_tate, dbl_fps, str_type);
if (i_return == 0)
{
rbtn1280x720.Enabled = false;
rbtn656x408.Enabled = false;
rbtn328x204.Enabled = false;
MessageBox.Show("MilevaSensor opened");
}
else if (i_return == 1)
{
MessageBox.Show("Camera other than MilevaSensor opened");
return;
}
else if (i_return == -1)
{
MessageBox.Show("Cannot open MilevaSensor");
return;
}
else
{
MessageBox.Show("error");
return;
}
btnMtuSetCameraNo.PerformClick();
}
private void startOpenCam()
{
videoSource = new VideoCaptureDevice(CaptureDevices[comboBox1.SelectedIndex].MonikerString);
videoSource.NewFrame += new NewFrameEventHandler(VideoSource_NewFrame);
videoSource.Start();
}
private void VideoSource_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();
}
введите описание изображения здесь