Как захватить видео из формата WDM в MPEG, используя DirectShow? - PullRequest
1 голос
/ 27 ноября 2010

Я хочу захватывать видео с видеоисточника и кодировать его в формат MPEG с помощью DirectShow.Как создать Capture Graph и Как установить свойства видео для формата MPEG (например, битрейт, частота кадров, разрешение и т. Д.)

1 Ответ

2 голосов
/ 27 ноября 2010

Мой подход (который я использовал при производстве VideoPhill ) заключался в том, чтобы использовать DirectShow.net только для захвата кадров, а затем использовать фильтр SampleGrabber для создания очереди кадров, котораяпозже подается в кодировщик - для этого я использую StandardMPEG .

Большую часть времени я хотел оставаться в управлении - и с помощью этого подхода я смог это сделать.

Позже - кажется, что это был правильный подход, потому что теперь я могу подключать различные кодеры непосредственно к ОДНОМУ устройству захвата.И это было возможно раньше, только если вы используете SimulStream (tm) .Кроме того, вы сможете использовать кодировщики, которые недоступны в качестве фильтра DS.

Об использовании примера граббера (с сайта DirectShow.net - faq section ):

Q9: Где я могу найти BaseClasses?Как мне написать фильтр в c #?

Базовые классы не были переведены для использования из .NET.После двух попыток сделать это, давайте просто скажем, что они не были разработаны с учетом управляемого кода.

Тем не менее, у вас все еще есть выбор.Прежде всего, вы можете использовать сэмплерный захват для захвата видеокадров.Эти кадры могут быть отредактированы так, как вам нравится, прежде чем позволить им перейти к следующему фильтру на графике.Посмотрите пример DxLogo (среди прочего), как это сделать.

Во-вторых, вы можете написать DirectX Media Object (DMO).В библиотеку включены два примера, которые показывают, как это делается.Хотя для DMO существуют ограничения, которых нет в обычных фильтрах, вы можете обнаружить, что эти ограничения для вас не проблема.Существуют обширные документы (включая файл CHM), в которых рассказывается, как это сделать.

В-третьих, существует пример с именем GSSF.Вы можете использовать это, если хотите создать фильтр источника (т.е. фильтр на графике, который генерирует поток).

...