Предварительный просмотр проекта
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]
[Этот API не поддерживается и может быть изменен или недоступен в будущем.]
Для предварительного просмотра проекта сначала вызовите CoCreateInstance , чтобы создать экземпляр базового обработчика отрисовки. Идентификатор класса — CLSID_RenderEngine. Затем вызовите метод IRenderEngine::SetTimelineObject, чтобы указать отрисовку временная шкала.
При первом просмотре временная шкала выполните следующие вызовы в указанном порядке:
- Вызовите метод IRenderEngine::SetRenderRange, чтобы указать, какая часть временная шкала предварительного просмотра. (необязательно)
- Вызовите метод IRenderEngine::ConnectFrontEnd , чтобы создать внешний интерфейс графа.
- Вызовите метод IRenderEngine::RenderOutputPins. Этот метод подключает каждый выходной контакт к отрисовщику видео или звуковому отрисовщику, заполняя граф.
В следующем примере кода показаны следующие шаги:
IRenderEngine *pRender = NULL;
hr = CoCreateInstance(CLSID_RenderEngine, NULL,
CLSCTX_INPROC_SERVER, IID_IRenderEngine, (void**)&pRender);
hr = pRender->SetTimelineObject(pTL);
hr = pRender->ConnectFrontEnd();
hr = pRender->RenderOutputPins();
Теперь запустите граф фильтра. Сначала вызовите метод IRenderEngine::GetFilterGraph , чтобы получить указатель на интерфейс IGraphBuilder диспетчера фильтров графов. Затем выполните запрос к диспетчеру фильтров графа для интерфейса IMediaControl и вызовите IMediaControl::Run, как показано в следующем коде:
IGraphBuilder *pGraph = NULL;
IMediaControl *pControl = NULL;
hr = pRender->GetFilterGraph(&pGraph);
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pControl->Run();
Используйте интерфейс IMediaEventEx диспетчера фильтров графов, чтобы дождаться завершения предварительной версии. Вы также можете искать граф с помощью интерфейса IMediaSeeking диспетчера фильтров графов, как и граф воспроизведения файлов.
Чтобы снова просмотреть проект, найдите график до нулевого времени и вызовите команду Выполнить еще раз. При изменении содержимого временная шкала выполните следующие действия.
- Вызов setRenderRange. (необязательно)
- Вызовите ConnectFrontEnd.
- Если метод ConnectFrontEnd возвращает S_WARN_OUTPUTRESET, вызовите RenderOutputPins. (Если ConnectFrontEnd возвращает S_OK, этот шаг можно пропустить.)
- Найдите график назад к нулю времени.
- Запустите граф.
В следующем примере показано следующее:
hr = pRender->ConnectFrontEnd();
if (hr == S_WARN_OUTPUTRESET)
{
hr = pRender->RenderOutputPins();
}
LONGLONG llStart = 0;
hr = pSeek->SetPositions(&llStart, AM_SEEKING_AbsolutePositioning, 0, 0);
hr = pControl->Run();
Полный пример загрузки и предварительного просмотра файла проекта см. в разделе Загрузка и предварительный просмотр проекта.
Связанные темы