Почему WPFMediaKit VideoCaptureElement, созданный кодом, попадает в MediaFailed?
Я добавляю 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) { ... }
}
1 ответ
Решение
У меня была похожая проблема с MediaUriElement, работающим в XAML, но не работающим при создании экземпляра в программном коде.
Решением для меня было инициировать контроль:
VCE.BeginInit();
VCE.EndInit();
Это будет соответствовать между созданием экземпляров (VCE = new...) и назначением (Content = VCE). Я не проверял ваш конкретный сценарий, но это похоже на ту же причину - должна быть некоторая дополнительная работа, выполняемая в Init, которая происходит автоматически при использовании XAML.