为什么代码创建的 WPFMediaKit VideoCaptureElement 会落入 MediaFailed?
Why does WPFMediaKit VideoCaptureElement created by code land ever in MediaFailed?
我在 运行 时间内将 VideoCaptureElement 添加到 window,但是当我 运行 此代码时,它会触发 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) { ... }
}
我在 XAML 中工作的 MediaUriElement 遇到了类似的问题,但在代码隐藏中实例化时不工作。
我的解决方案是初始化控件:
VCE.BeginInit();
VCE.EndInit();
这适合实例化 (VCE = new...) 和分配 (Content = VCE)。我没有测试你的特定场景,但它听起来像是同一个原因 - 在 Init 中必须完成一些额外的工作,这些工作在使用 XAML.
时自动发生
我在 运行 时间内将 VideoCaptureElement 添加到 window,但是当我 运行 此代码时,它会触发 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) { ... }
}
我在 XAML 中工作的 MediaUriElement 遇到了类似的问题,但在代码隐藏中实例化时不工作。
我的解决方案是初始化控件:
VCE.BeginInit();
VCE.EndInit();
这适合实例化 (VCE = new...) 和分配 (Content = VCE)。我没有测试你的特定场景,但它听起来像是同一个原因 - 在 Init 中必须完成一些额外的工作,这些工作在使用 XAML.
时自动发生