У меня есть программа, которая получает видео с веб-камеры и отображает ее на C# -приложении, используя directshowlib-2005.dll.Нужна помощь с InvalidCastException
В моем приложении я также использую GMFBridge, чтобы я мог передавать и записывать видео, когда это указано.
В этой программе мои элементы управления приложения находятся в основном цикле, а потоковая передача видео выполняется в отдельном потоке. У меня есть варианты либо записи текущего потоковое видео из основного потока, нажав на кнопку и с помощью:
play.filesink = (IFileSinkFilter)play.file;
play.filesink.SetFileName(GetDateTimeString("Video") + ".avi", null);
IMediaControl Second_Graph = play.s_mediaCtrl;
Second_Graph.Run();
play.bridge.BridgeGraphs(play.BridgeSink, play.sourceFilter);
где класс игры класс, который преобразует входящее видео из YUV в RGB, а затем устанавливает оба потоковые и записывающие графики
файл является файловым файлом фильтра. Я конвертирую файл в IFileSinkFilter, чтобы я мог на нем наложить имя, как показано во второй строке. затем я играю, создаю медиа-контроллер и запускаю график и монтирую график потоковой передачи и записи.
У меня также есть возможность настроить будущие записи в более поздние сроки и даты, как указано. Будущие записи вводятся и хранятся в статическом списке, который сортируется в зависимости от того, когда происходят записи. Внутри потокового нить, я опрашивать список, чтобы увидеть, если его время для записи, чтобы начать, если я запускаю тот же код, как описано выше:
play.filesink = (IFileSinkFilter)play.file;
play.filesink.SetFileName(GetDateTimeString("Video") + ".avi", null);
IMediaControl Second_Graph = play.s_mediaCtrl;
Second_Graph.Run();
play.bridge.BridgeGraphs(play.BridgeSink, play.sourceFilter);
Это происходит внутри нити и при наличии записи, приложение выйдет из строя на первой и/или второй строках. ошибка такая же, она не знает, что такое IFileSinkFilter в обеих вызовах в первой и второй строках, он сбой.
получил Ошибка:
Unable to cast COM object of type 'System.__ComObject' to interface type 'DirectShowLib.IFileSinkFilter'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{A2104830-7C70-11CF-8BCE-00AA00A3F1A6}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
Я не знаю, почему он не может или как это исправить. У него не было проблем, когда этот блок кода был частью кнопки в основном потоке, но когда его резьба по отдельности не срабатывает.
Любая помощь в том, как исправить это, будет оценена по достоинству.
Некоторые COM-объекты имеют сходство нитей. Возможно, документация говорит об этом. – usr
Проблема в строке 'play.filesink = (IFileSinkFilter) play.file;' Объект, на который ссылается '.file', не реализует intefrace. Сообщение об ошибке сообщает вам именно об этом. –