1

我在运行时将 VideoCaptureElement 添加到窗口,但是当我运行此代码时,它会触发 MediaFailed。但是,如果我在 XAML 中添加相同的元素,那么它工作正常,我可以看到来自笔记本电脑摄像头的视频。我做错什么了吗?请帮忙!

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) { ... }
}
4

1 回答 1

2

我在 XAML 中工作的 MediaUriElement 遇到了类似的问题,但在代码隐藏中实例化时不起作用。

我的解决方案是初始化控件:

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

这适用于实例化(VCE = new ...)和分配(Content = VCE)之间。我没有测试过你的特定场景,但这听起来像是同样的原因——在使用 XAML 时必须在 Init 中完成一些额外的工作,这些工作会自动发生。

于 2018-08-21T23:08:36.137 回答