Поделиться через


Предварительный просмотр видео (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);

В этом примере предполагается следующее:

Первый параметр метода 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 , который разделяет поток на поток захвата и поток предварительного просмотра. Более подробно это описано в разделе Объединение захвата видео и предварительного просмотра.

В некоторых случаях видеопоток должен проходить через фильтр Overlay Mixer. Если да, метод RenderStream автоматически добавляет его в граф.

Объединение видеосъемки и предварительного просмотра

Запись видео