Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио/видео захватом в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Граф фильтра называется графом захвата , если он выполняет захват и обработку видео или аудио. Графы записи часто сложнее, чем графики воспроизведения файлов. Чтобы упростить создание графов захвата приложений, DirectShow предоставляет вспомогательный объект, называемый построителем графов захвата. Строитель графа захвата предоставляет интерфейс ICaptureGraphBuilder2, который содержит методы для создания и управления графом захвата. На следующей схеме показан построитель графов захвата и интерфейс ICaptureGraphBuilder2.
Начните с вызова функции CoCreateInstance, чтобы создать новые экземпляры объектов построителя графов захвата и диспетчера графов фильтров. Затем инициализируйте построитель графов записи, вызвав ICaptureGraphBuilder2::SetFiltergraph с указателем на интерфейс диспетчера фильтров IGraphBuilder. На следующей схеме показан этот процесс.
Следующий код показывает вспомогательную функцию для выполнения этих действий:
HRESULT InitCaptureGraphBuilder(
IGraphBuilder **ppGraph, // Receives the pointer.
ICaptureGraphBuilder2 **ppBuild // Receives the pointer.
)
{
if (!ppGraph || !ppBuild)
{
return E_POINTER;
}
IGraphBuilder *pGraph = NULL;
ICaptureGraphBuilder2 *pBuild = NULL;
// Create the Capture Graph Builder.
HRESULT hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL,
CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void**)&pBuild );
if (SUCCEEDED(hr))
{
// Create the Filter Graph Manager.
hr = CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void**)&pGraph);
if (SUCCEEDED(hr))
{
// Initialize the Capture Graph Builder.
pBuild->SetFiltergraph(pGraph);
// Return both interface pointers to the caller.
*ppBuild = pBuild;
*ppGraph = pGraph; // The caller must release both interfaces.
return S_OK;
}
else
{
pBuild->Release();
}
}
return hr; // Failed
}
В этом разделе по видеозахвату предполагается, что для создания графа захвата используется построитель графов захвата. Однако можно полностью создавать графы захвата с помощью методов IGraphBuilder. Тем не менее, это считается расширенной темой, однако методы Capture Graph Builder предпочтительнее. Дополнительные сведения см. в разделе "Расширенные темы захвата".
Связанные разделы