Как можно использовать WPF MediaKit или аналогичную программу для рендеринга из графа фильтра DirectShow, созданного с помощью DES, в элемент управления WPF? - PullRequest
2 голосов
/ 06 октября 2011

Я разработал простой видеоредактор с использованием C # и DirectShow.net.На данный момент у меня есть график фильтра DirectShow, построенный с использованием DirectShow Editing Services.Мое приложение контролирует график, запускает, приостанавливает и останавливает воспроизведение в окне предварительного просмотра по мере необходимости.В сеансе редактирования график изменяется в соответствии с запросами пользователя на добавление, удаление или изменение носителя.

В настоящее время я использую PictureBox, завернутый в WindowsFormsHost, для предварительного просмотра отредактированных видео.Но я действительно хочу попробовать вместо этого использовать WPF MediaKit Джереми Моррила.(http://wpfmediakit.codeplex.com)

Первоначальная идея (мой метод грубой силы) состояла в том, чтобы передать IGraphBuilder и IPin из моего графика в функцию OpenSource () в MediaUriPlayer.cs в WPF MediaKit, так что средство визуализации VMR9 добавляется и подключаетсяк моему существующему графику вместо создания нового графика, как это было сделано в оригинальном OpenSource (). Это не сработало, и я сдался после попытки различных комбинаций и большую часть времени получая «COM-объект отдельно от его базовогоRCW ”.

После первоначального сбоя я искал и обнаружил похожий на Morrill VideoRendererElement со значением http://videorendererelement.codeplex.com. Похоже, что не составит труда добавить образец граббера к моему графику DirectShow ииспользуйте его для отправки сэмплов в VideoRendererElement. Это будет похоже на пример веб-камеры, который включен в VideoRendererElement.

Наконец, мне интересно, если бы не было возможности использовать какие-либо более новые элементы управления из WPFMediaKit таким же образом, то есть, передавая сэмплнапример, из граббера образца в моем графике в MediaUriElement, DvdPlayerElement или другой элемент управления из коллекции WPF MediaKit.По сути, мой вопрос таков: может ли кто-нибудь порекомендовать использовать WPF MediaKit или VideoRenderingElement для реализации этого примера сценария граббера?Или, может быть, кто-то может предложить еще лучший способ отображения графа фильтра, созданного в DES, в элемент управления WPF ...

1 Ответ

3 голосов
/ 07 октября 2011

Делаем это по памяти.

Так как, похоже, у вас есть собственный график DirectShow. Я бы просто потрошил WPF MediaKit для нескольких вещей:

Возьмите базовый класс D3DRenderer. Это должно облегчить рендеринг контента D3D с помощью D3DImage. Возьмите распределитель VMR9 и взаимодействие D3D9.

Я предполагаю, что вы используете VideoMixingRenderer9 ... Так что в вашем коде при создании VMR9 получите интерфейс VMR9, который позволяет вам устанавливать пользовательский распределитель (пример должен быть в методе CreateRenderer в baseclass.cs). Создайте пользовательский распределитель, который вы установили в MediaKit, и передайте его интерфейсу. Этот распределитель имеет событие, которое срабатывает, когда он получает новую поверхность d3d и когда новый кадр готов представить. Убедитесь, что класс D3DRenderer получает эти события (новая поверхность, новый кадр). Должна быть операция копирования и вставки на 90%:)

...