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

2

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

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

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

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

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

Теги:
wpf
directshow
wpf-mediakit

1 ответ

3

Выполнение этого из памяти.

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

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

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

  • 0
    Спасибо за отличный ответ. Мы не используем VMR9, но мы можем осуществить этот переход с фильтра видео рендерера ( msdn.microsoft.com/en-us/library/windows/desktop/… ) на VMR9. Оттуда мы можем исследовать метод CreateRenderer, и мы должны быть в пути. Спасибо за помощь. Теперь у нас есть план и гораздо меньше догадок.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню