Видеокамера Aforge используется другим устройством

#c# #aforge

#c# #aforge

Вопрос:

Я использую видео Aforge для доступа к камере моего компьютера. Все хорошо и работает, но моя проблема сейчас в том, что другое приложение сначала использует камеру. Метод запуска () видео Aforge не дает сбоев, даже если камера используется другим приложением. Есть ли способ проверить, используется ли камера уже в видео AForge?

Комментарии:

1. Если это не завершается сбоем, в чем тогда проблема?

2. Ну, как вы знаете, когда камера используется другим приложением, она не может быть использована приложением. Тогда в этом проблема. Как вы будете информировать пользователя о том, что камера используется другим приложением, когда ваш метод запуска не завершается сбоем, если камера используется другим приложением.

3. Ах, теперь я понял. Таким образом, Start метод «кажется» работает, но на самом деле вы не получаете никаких изображений без исключений или чего-либо еще…

4. Да, @Fildor, это именно то, что происходит.

5. Я нашел обходной путь. Я просто добавляю проверку, вызвано ли событие newframe.

Ответ №1:

Это обходной путь, который я реализовал для решения этой проблемы:

      private async void StartCameraAsync()
    {
        if (SFilterInfo != null)
        {
            VideoCaptureDevice = new VideoCaptureDevice(SFilterInfo.MonikerString);
            
            VideoCaptureDevice.NewFrame  = new NewFrameEventHandler(VideoCaptureDevice_NewFrame);
            VideoCaptureDevice.Start();
            await Task.Delay(1000);
            //Set false when video started
            IsImageGrab =false;
        }
    }

  private void VideoCaptureDevice_NewFrame(object sender, NewFrameEventArgs eventArgs)
    {
        try
        {
       //Set true so that you will know that images in the camera is received
            IsImageGrab = true;
            System.Drawing.Image img = (Bitmap)eventArgs.Frame.Clone();

            MemoryStream ms = new MemoryStream();
            img.Save(ms, ImageFormat.Bmp);
            ms.Seek(0, SeekOrigin.Begin);
            BitmapImage bi = new BitmapImage();
            bi.BeginInit();
            bi.StreamSource = ms;
            bi.EndInit();

            bi.Freeze();

        }
        catch (Exception ex) 
        {
        
        }
    }