Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио и видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
[Этот API не поддерживается и может быть изменен или недоступен в будущем.]
Для предварительного просмотра проекта требуется компонент под названием движок отрисовки, который строит граф фильтров DirectShow по временной шкале. Граф фильтра — это то, что фактически рендерит проект. Обработчик отрисовки можно использовать для предварительного просмотра проекта или записи окончательного выходного файла.
Эта статья не содержит подробных сведений о обработчике отрисовки. Для предварительной версии требуется только несколько вызовов методов. Вы можете найти более тщательное обсуждение, включая создание выходных файлов, в визуализация проекта. В следующем примере кода показано, как создать граф предварительного просмотра.
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( );
Создайте обработчик отрисовки с помощью функции CoCreateInstance. Затем вызовите следующие методы в интерфейсе обработчика отрисовки IRenderEngine:
- SetTimelineObject. Указывает временную шкалу, используемую.
- ConnectFrontEnd. Создает граф частичного фильтра с одним выходным выводом для каждой группы на временной оси.
- RenderOutputPins. Завершает график предварительного просмотра, подключив каждый выходной пин к видеоустройству или звуковому рендереру.
После создания графа можно просмотреть проект, запустив граф, как и любой граф фильтра DirectShow. Сначала получите указатель на граф фильтров, вызвав метод IRenderEngine::GetFilterGraph.
IGraphBuilder *pGraph = NULL;
hr = pRender->GetFilterGraph(&pGraph);
Запросите граф фильтра для интерфейсов IMediaControl и IMediaEvent. Используйте эти два интерфейса для запуска графа и ожидания завершения воспроизведения. Для объяснения использования этих интерфейсов см. раздел Как воспроизвести файл и Реагирование на события. В следующем коде показан один из способов использования этих интерфейсов.
IMediaControl *pControl = NULL;
IMediaEvent *pEvent = NULL;
long evCode;
pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
hr = pControl->Run();
hr = pEvent->WaitForCompletion(INFINITE, &evCode);
pControl->Stop();
Код в этом примере блокирует выполнение программы до завершения воспроизведения из-за параметра INFINITE в вызове метода IMediaEvent::WaitForCompletion. Если во время воспроизведения что-то происходит неправильно, программа может перестать отвечать. В реальном приложении используйте цикл сообщений, чтобы ждать завершения воспроизведения. Кроме того, рекомендуется предоставить пользователю способ прерывания воспроизведения.
По завершении работы с обработчиком отрисовки всегда вызовите метод IRenderEngine::ScrapIt. Этот метод удаляет граф фильтра и освобождает все ресурсы, удерживаемые обработчиком отрисовки.
pRender->ScrapIt();
Связанные разделы