Вопрос

В настоящее время я имею дело с Фондом Windows Media. Однако из-за некоторых проблем с декодером Microsoft H.264 и некоторыми недостающимися декодерами для пользовательского формата я хотел бы знать, будет ли возможным создавать диспетчеризацию DirectShow Decoder непосредственно с помощью CLSID, и построить прокси-сервер вокруг него, который подвергает IMFTRANSFORT Чтобы получить декодер для СМИ Фонда. Вот мой вопрос:

Могу ли я создать напрямую и использовать их для декодирования фильтра (предпочтительно декодеров).

Я знаю, как создать фильтр сама с помощью его CLSID. Однако я понятия не имею, как использовать фактическую функциональность декодирования.

Любые идеи, подсказки, связывает все, что будет оценено. Спасибо,

J.

Это было полезно?

Решение

(Отказ от ответственности: я никогда этого не делал этого, но не вижу технической причины, по которой она не может быть сделана. Так что YMMV)

Если декодер является фильтром DMO, то он будет намного проще - вы можете поговорить с ним через ImediaObject.. Отказ Это не сильно отличается от того, как DirectShow использует DMOS; Он просто обертывает DMO с другим фильтром преобразования, который обрабатывает переговоры по типу носителя и пропуск образцов, но ничего не останавливает вас от этого в вашем собственном приложении.

Есть один улов: для IMediaObject :: ProcessInput и IMediaObject :: ProcessOutput, вам понадобится ваш собственный класс буфера, который реализует ImediaBuffer. Отказ Но это довольно базовый интерфейс, поэтому я не думаю, что у вас будет слишком много проблем, реализующих ее. Вот а Основная реализация.

Для регулярных фильтров DirectShow на самом деле будет намного сложнее, потому что большинство фильтров DirectShow действительно зависят от того, что существует внешний график (случай в точке: все события DirectShow составляют сортировки существования этого графа). Если вы действительно хотите использовать отдельный фильтр Dshow Fallone, вы, вероятно, должны обернуть весь график фильтра, а затем иметь пользовательский исходный фильтр для подачи образцов. Вы можете использовать образец GRABBER (или пользовательский рендер) выбирают образцы из графика и разоблачите до остальной части приложения. (Одна сумасшедшая идея даже будет обернуть этот график в реализации фильтра DMO, а затем использовать IMediaObject, чтобы поговорить с ним - это может быть сложно, однако)

К счастью самый Декодеры, как правило, реализуются как фильтры DMO, поэтому я думаю, что есть сильная вероятность того, что вы можете просто использовать IMediaObject.

Другие советы

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

Если вы не хотите использовать традиционные фильтры файлов / сетевых источников или традиционные рендереры, вы можете писать буферные рендеры и фильтры источника буферов, которые вы передаете указатели и получаете указатели. Затем вы можете отбросить весь беспорядок в график и запустить его и получить использование декодера в значительной степени непосредственно без ничего другого. Это не было бы трудно сделать. Декодер, вероятно, ожидает, что поток пакетов PES.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top