Использовать определенный кодек или папку ffdshow с DirectShowLib? - PullRequest
0 голосов
/ 13 февраля 2011

Я использую DirectShowLib в приложении C #, чтобы разрешить воспроизведение видео. К сожалению, не все системы предоставляют приличный видеокодек, поэтому я решил установить FFDShow как часть моей установки. К сожалению, это не работает для определенных пользователей, поскольку у них либо уже установлено несколько пакетов видеокодеков, либо они используют старые версии. Или, например, Windows 7 больше не требует этого.

Когда я играл с libvlc некоторое время назад, мне разрешили указать путь к плагину со всеми поддерживаемыми видеокодеками, но, к сожалению, я не могу найти что-то похожее с DirectShowLib.

Есть ли способ упаковать необходимые библиотеки кодеков как часть моего приложения и указать на эту папку, или установить FFDShow в определенную папку и сослаться на нее?

1 Ответ

2 голосов
/ 18 февраля 2011

Один из возможных подходов, который вы можете использовать, - это использовать бесплатный COM для регистрации.В вашем файле манифеста вы бы указали, что используете определенную группу подкомпонентов (например, подкаталог, содержащий компоненты FFDShow).Вам также необходимо создать манифест для DLL в этом подкаталоге.Основная проблема заключается в том, что вы должны создавать экземпляры своих объектов из C #, как показано ниже:

DsGuid MicrosoftDemux = new DsGuid("{AFB6C280-2C41-11D3-8A60-0000F81E0E4A}");
var demux = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(MicrosoftDemux));

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

Чтобы помочь создать файл манифеста для компонентов FFDShow, вы можете использовать regsvr42 (описано в этом ответе: Создать файлы манифеста для регистрации Бесплатно COM

У меня естьуспешно использовал это для использования фильтров DirectShow без их регистрации. Следует иметь в виду, что COM-файлы должны находиться в том же каталоге, что и приложение, или подкаталог. Их размещение в соседнем каталоге не будет работать.

...