Прямая трансляция с USB-датчика, не поддерживающего стандарт UVC - PullRequest
0 голосов
/ 24 октября 2019

У меня проблема при попытке прямой трансляции с сенсорной камеры 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();

    }

введите описание изображения здесь

...