Создание фильтров DirectShow
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменён MediaPlayer, IMFMediaEngineи захватом аудио/видео в системе Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и захват аудио и видео в Media Foundation вместо DirectShow, если это возможно. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Базовые классы DirectShow рекомендуется использовать для реализации фильтров DirectShow. Чтобы работать с базовыми классами, выполните следующие действия, в дополнение к шагам, перечисленным в Setting Up the Build Environment:
- Создайте библиотеку базовых классов, расположенную в каталоге Samples\Multimedia\DirectShow\BaseClasses, в корневом каталоге пакета SDK. Существует две версии библиотеки: розничная версия (Strmbase.lib) и отладочная версия (Strmbasd.lib).
- Включите файл заголовка Streams.h.
- Используйте соглашение о вызовах __stdcall.
- Используйте многопоточную библиотеку выполнения среды C (отладочную или финальную версию, в зависимости от необходимости).
- Включите файл определения (.def), экспортирующие функции DLL. Ниже приведен пример файла определения. Предполагается, что выходной файл называется MyFilter.dll.
LIBRARY MYFILTER.DLL
EXPORTS
DllMain PRIVATE
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
- Ссылка на следующие файлы lib.
Ярлык | Ценность |
---|---|
Отладочная сборка | Strmbasd.lib, Msvcrtd.lib, Winmm.lib |
Розничная версия | Strmbase.lib, Msvcrt.lib, Winmm.lib |
- Выберите параметр "Игнорировать библиотеки по умолчанию" в параметрах компоновщика.
- Объявите точку входа DLL в исходном коде следующим образом:
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);
}
Предыдущие версии
Для версий библиотеки базовых классов перед DirectShow 9.0 также необходимо выполнить следующие действия:
- Для отладочных сборок определите флаг отладки препроцессора.
Этот шаг не требуется для версии библиотеки базовых классов, доступной в DirectShow 9.0 и более поздних версиях.