Просмотр видео (DirectShow)
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменён компонентами MediaPlayer, IMFMediaEngineи Аудио/Видео захват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Чтобы создать граф предварительного просмотра видео, вызовите метод ICaptureGraphBuilder2::RenderStream следующим образом:
ICaptureGraphBuilder2 *pBuild; // Capture Graph Builder
// Initialize pBuild (not shown).
IBaseFilter *pCap; // Video capture filter.
/* Initialize pCap and add it to the filter graph (not shown). */
hr = pBuild->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video,
pCap, NULL, NULL);
В этом примере предполагается следующее:
- pBuild был инициализирован, как описано в разделе о построителе графов записи.
- pCap был инициализирован путем создания экземпляра фильтра записи и добавления его в граф фильтров, как описано в Выбор устройства записи.
Первый параметр для метода ICaptureGraphBuilder2::RenderStream указывает категорию пинов; для предварительного графика используйте PIN_CATEGORY_PREVIEW. Второй параметр задает медиатип как GUID основного типа. Для видео используйте MEDIATYPE_Video. Устройства DV передают черезстрочные аудио и видео, для которых тип носителя MEDIATYPE_Interleaved. (Дополнительные сведения о записи dv см. в разделе Цифровое видео в DirectShow.)
Третий параметр — это указатель на интерфейс фильтра захвата IBaseFilter. В этом примере не требуются следующие два параметра. Они используются для указания дополнительных фильтров, которые могут потребоваться для отображения потока. Установка последнего параметра на NULL приводит к тому, что построитель графов записи выбирает отрисовщик по умолчанию для потока в зависимости от типа носителя. Для видео построитель графов записи всегда использует фильтр видеообрисовщика в качестве отрисовщика по умолчанию.
Заметка
В Windows XP и более поздних версиях средство отрисовки смешения видео (VMR) является отрисовщиком видео по умолчанию для методов IGraphBuilder, однако он не является отрисовщиком по умолчанию для метода RenderStream. На любой платформе построитель графов записи всегда использует старый фильтр отрисовщика видео, если не указано иначе.
Хотя категория пина указана как PIN_CATEGORY_PREVIEW, это не имеет значения, есть ли у фильтра на самом деле пин для предварительного просмотра. Он может иметь пин видеопорта или просто пин захвата. В любом случае конструктор графов захвата автоматически строит правильный граф.
На следующей схеме показан самый простой график для предварительного просмотра видео.
На этой схеме фильтр записи имеет значок предварительного просмотра, который подключается непосредственно к отрисовщику видео.
Если фильтр захвата имеет только контакт захвата, Построитель графа захвата вставляет фильтр Smart Tee, который разбивает поток на поток захвата и поток предварительного просмотра. Это подробно описано в объединении записи и предварительного просмотра видео.
В некоторых случаях видеопоток должен пройти через фильтр Mixer Overlay. В этом случае метод RenderStream автоматически добавляет его в граф.
Связанные разделы