Создание собственного видео кодека DShow - PullRequest
1 голос
/ 30 декабря 2011

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

Пользовательский формат файла и кодек?

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

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

Платформа: Windows 7, 64-разрядная

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

Язык: C ++

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

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

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

Буду признателен за любую помощь. Заранее спасибо.

1 Ответ

1 голос
/ 30 декабря 2011

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

Фильтры кодера и декодера - это COM-объекты, зарегистрированные для выполнения определенного преобразования видеоданных. MSDN описывает их в Запись фильтров преобразования , что предполагает, что вы знакомы с концепциями DirectShow.

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

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

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

...