2011-12-29 4 views
1

Я искал (Google и форумы), и я до сих пор не могу найти ответ на этот вопрос. Я приблизился на этом сайте с этой темой,Создание пользовательского видео кодека DShow

Custom File Format And Codec?

но не непосредственно отвечая на мой вопрос.

В принципе, я хочу создать пользовательский видеокодек, который будет действовать как фильтр DShow. Я не спрашиваю, как идти о кодировании и декодировании видео, мне нужно/нужно знать, как настроить фильтр, чтобы правильно взаимодействовать с медиаплеерами (например, WMP).

Платформа: Windows 7 64-бит

Media Player: Любой. Если проще связать пользовательский кодек с другим игроком, обязательно посоветуйте этого игрока.

Язык: C++

Я понимаю, что если я создаю фильтр DShow в виде .ax или .dll, мне просто нужно, чтобы зарегистрировать его с окнами с помощью regsvr32 и WMP будет иметь возможность открывайте файлы с помощью этого кодека. В этом случае я бы просто использовал контейнер AVI для размещения моего кодека.

Я сделал плагины VST раньше для DAW и были требования относительно структуры программы. Он должен был содержать определенные функции (с конкретными именами), которые будут использовать хост-программа (логика, про инструменты и т. Д.) Для обработки аудиоданных. Например, существуют методы process и processReplacing, которые требуются.

Я пытался выяснить, какова структура для видеокодеков, чтобы я мог нормально взаимодействовать со стандартными игроками безрезультатно.

Любая помощь будет оценена по достоинству. Заранее спасибо.

ответ

1

В DirectShow вы выбираете новый/уникальный идентификатор подтипа видео (который является GUID, так что вы действительно можете получить уникальный), вы создаете фильтры кодировщика и декодера, вы правильно регистрируете их с помощью DirectShow Intelligent Connect, и вам хорошо идти.

Фильтры энкодера и декодера являются объектами COM, зарегистрированными для выполнения определенных преобразований видеоданных. MSDN описывает их в Writing Transform Filters, что предполагает, что вы знакомы с концепциями DirectShow.

Если вы хотите хранить свои данные в контейнере AVI, ваш идентификатор подтипа ограничивается 32-битным «четырехсимвольным кодом» (FourCC), который должен быть преобразован в GUID подтипа с использованием предопределенного сопоставления.

Благодаря интеллектуальному подключению DirectShow приложения с поддержкой DriectShow смогут автоматически находить и монтировать ваш декодер для воспроизведения данных. WMP использует DirectShow как второй API-интерфейс изменения, когда речь заходит о воспроизведении файла, поэтому WMP также сможет принимать файлы, которые внутренне используют ваш кодек.

Кроме того, написание фильтра DirectShow из синего может быть своего рода сложной задачей. Поскольку вас интересуют только декодеры видеокодера/декодера, вы можете предпочесть записать вместо этого DirectX Media Object (DMO). Стандарт DMO Wrapper Filter обернет ваш DMO в фильтр DirectShow. Определенно проще написать DMO, в том числе, что вы можете использовать ATL в качестве базы COM.

+0

Ничего себе.Как эта документация ускользнула от поиска Google? – boogagiga

+0

В любом случае, спасибо за информацию. Я просмотрю эти статьи и посмотрю, что я могу сделать. – boogagiga

+0

См. Также мое обновление выше на 'DMO'. –

Смежные вопросы