API веб-камеры Silverlight выдает странную ошибку - PullRequest
3 голосов
/ 12 марта 2011

Я пытаюсь показать свою веб-камеру, используя VideoBrush на прямоугольнике.Однако я столкнулся с этой странной проблемой: -

External component has thrown an exception.

   at MS.Internal.XcpImports.CaptureGraph_GetAvailableVideoCaptureDevicesNative(IntPtr pContext, Int32& typeIndex, CValue& DeviceCollection)
   at MS.Internal.XcpImports.CaptureGraph_GetAvailableVideoCaptureDevices()
   at System.Windows.Media.CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice()
   at System.Windows.Media.CaptureSource..ctor()
   at FMT.Client.Views.ChildWindows.Webcam.Webcam_Loaded(Object sender, RoutedEventArgs e)

Затем я щелкнул правой кнопкой мыши на приложении Silverlight, перешел в конфигурацию и затем во вкладку Mic / Webcam.У меня там выбрана веб-камера, и я вижу свою веб-камеру нормально, когда нахожусь в этом диалоговом окне.Вот мой код: -

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System;

namespace FMT.Client.Views.ChildWindows
{
    public partial class Webcam : ChildWindow
    {
        private CaptureSource _source;
        private CaptureDevice _webcam;
        private VideoBrush _webcamBrush;
        private ImageBrush _capturedImage;

        public Webcam()
        {
            InitializeComponent();
            this.Loaded += Webcam_Loaded;
        }

        void Webcam_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {
                //if (CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices().Count <= 0)
                //{
                //    ErrorWindow window = new ErrorWindow("Error","Please check the default webcam in the Silverlight config. You can specify the video and audio devices that are used by default with the Silverlight Configuration. Just press the right mouse button over the application, click Silverlight in the context menu and select the  Webcam / Mic tab to set them.");
                //    window.Show();
                //    this.DialogResult = false;
                //}
                //else
                //{
                    _source = new CaptureSource();
                    _source.CaptureImageCompleted += _source_CaptureImageCompleted;
                    _source.CaptureFailed += _source_CaptureFailed;
                    _webcam = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice();
                    if (_webcam != null)
                    {
                        _source.VideoCaptureDevice = (VideoCaptureDevice)_webcam;
                        _webcamBrush = new VideoBrush();
                        _webcamBrush.SetSource(_source);
                        capturedRect.Fill = _webcamBrush;
                        _capturedImage = new ImageBrush();
                        RequestAccess();
                    }
                //}
            }
            catch (Exception ex)
            {
                ErrorWindow window = new ErrorWindow(ex);
                window.Show();
                this.DialogResult = false;
            }
        }

        void RequestAccess()
        {
            if (CaptureDeviceConfiguration.RequestDeviceAccess() && _source.VideoCaptureDevice != null)
            {
                _source.Start();
            }
            else
                this.DialogResult = false;
        }

        void _source_CaptureFailed(object sender, ExceptionRoutedEventArgs e)
        {
            ErrorWindow window = new ErrorWindow(e.ErrorException);
            window.Show();
        }

        void _source_CaptureImageCompleted(object sender, CaptureImageCompletedEventArgs e)
        {
            if(e.Result != null)
                _capturedImage.ImageSource = e.Result;
        }

        private void hypCapture_Click(object sender, RoutedEventArgs e)
        {
            if (_source.VideoCaptureDevice != null &&
               _source.State == CaptureState.Started)
            {
                _source.CaptureImageAsync();
            }
        }

    }
}

Есть идеи, почему происходит сбой при вызове конструктора CaptureSource?

Заранее спасибо:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...