wpfruntimevideo-capturewebcam-capturewpf-mediakit

Why does WPFMediaKit VideoCaptureElement created by code land ever in MediaFailed?


I add a VideoCaptureElement to a window in runtime but when I run this code it fires MediaFailed. But if I add the same element in XAML then it works fine, I can see the video from the laptop camera. Am I doing anything wrong? Please help!

public partial class MainWindow : Window
{
    WPFMediaKit.DirectShow.Controls.VideoCaptureElement VCE;

    public MainWindow()
    {
        InitializeComponent();

        VCE = new WPFMediaKit.DirectShow.Controls.VideoCaptureElement();
        Content = VCE;
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        VCE.MediaOpened += VCE_MediaOpened;
        VCE.MediaFailed += VCE_MediaFailed;
        VCE.VideoCaptureDevice = WPFMediaKit.DirectShow.Controls.MultimediaUtil.VideoInputDevices[0];  // This is my laptop webcam
    }

    void VCE_MediaOpened(Object sender, RoutedEventArgs e) { ... }

    void VCE_MediaFailed(object sender, WPFMediaKit.DirectShow.MediaPlayers.MediaFailedEventArgs e) { ... }
}

Solution

  • I had a similar problem with a MediaUriElement working in XAML but not working when instantiated in code-behind.

    The solution for me was to Init the control:

    VCE.BeginInit();
    VCE.EndInit();
    

    This would fit between instantiating (VCE = new...) and assigning (Content = VCE). I haven't tested your particular scenario, but it sounds like the same cause - there must be some extra work done in Init that happens automatically when using XAML.