Метод ICaptureGraphBuilder2::RenderStream (strmif.h)
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]
Метод RenderStream
подключает выходной контакт исходного фильтра к фильтру приемника, при необходимости с помощью промежуточного фильтра.
Синтаксис
HRESULT RenderStream(
[in] const GUID *pCategory,
[in] const GUID *pType,
[in] IUnknown *pSource,
[in] IBaseFilter *pfCompressor,
[in] IBaseFilter *pfRenderer
);
Параметры
[in] pCategory
Указатель на GUID, указывающий одну из категорий контактов, перечисленных в разделе Набор свойств закрепления. Чтобы сопоставить любое закрепление независимо от категории, задайте для этого параметра значение NULL. Ниже приведены типичные значения.
- PIN_CATEGORY_CAPTURE
- PIN_CATEGORY_PREVIEW
- PIN_CATEGORY_CC
[in] pType
Указатель на GUID основного типа, указывающий тип носителя выходного контакта; или NULL для использования любого контакта, независимо от типа носителя. Список возможных значений см. в разделе Основные типы.
[in] pSource
Указывает указатель на начальный фильтр для соединения или на выходной контакт.
[in] pfCompressor
Указатель на интерфейс IBaseFilter промежуточного фильтра, например фильтра сжатия. Может иметь значение NULL.
[in] pfRenderer
Указатель на интерфейс IBaseFilter фильтра приемника, например фильтр отрисовщика или фильтра мультиплексора. Если значение равно NULL, метод использует отрисовщик по умолчанию (см. примечания).
Возвращаемое значение
Возвращает значение HRESULT . Возможные возвращаемые значения включают следующие.
Код возврата | Описание |
---|---|
|
Успешно. |
|
Предварительный просмотр был отрисован с помощью фильтра Smart Tee. |
|
Ошибка. |
|
Недопустимый аргумент. |
|
Аргумент указателя NULL. |
|
Фильтр отсутствует в графе фильтров. Эта ошибка может возникнуть, если вы не вызвали AddFilter для добавления pSource, pIntermediate или pSink в граф. Это также может произойти, если вы не вызвали SetFiltergraph для подключения графа к построителю графов захвата. в этом случае объект Capture Graph Builder автоматически создает собственный граф фильтра. См. статью О построителе графов записи. |
Комментарии
Этот метод отрисовывает поток, соединяя два или более фильтров в цепочке:
- Параметр pSource указывает начало цепочки( фильтр или выходной контакт).
- Параметр pIntermediate указывает промежуточный фильтр, обычно фильтр сжатия. Этот параметр может принимать значение NULL.
- Параметр pSink указывает фильтр в конце цепочки. Как правило, этот фильтр является либо отрисовщиком для предварительного просмотра, либо мультиплексированием для записи файлов.
Если параметр pSink имеет значение NULL, метод пытается использовать отрисовщик по умолчанию. Для видео используется отрисовщик видео, а для звука — отрисовщик DirectSound.
Если pSource является фильтром, метод выполняет поиск выходного маркера в этом фильтре. В этом случае используйте параметры pCategory и pType , чтобы сузить область поиска. Например, если фильтр имеет отдельные контакты для предварительного просмотра и записи, можно указать PIN_CATEGORY_CAPTURE или PIN_CATEGORY_PREVIEW. Если pSource является выходным контактом, задайте для pCategory и pTypeзначение NULL.
Во всех случаях метод выполняет поиск несвязанных контактов. Если заданным критериям соответствует несколько контактов, метод использует первый такой контакт, который он находит.
Обратите внимание, что для записи DV, если тип мультимедиа — MEDIATYPE_Interleaved, а параметр pSink имеет значение NULL, метод разделяет поток с чередованием на аудиопоток и видеопоток и отрисовывает оба этих потока.
Метод RenderStream
обрабатывает многие сведения, необходимые для графов захвата:
Умный tee. Некоторые фильтры захвата имеют закрепление, но не предварительного просмотра. Для предварительного просмотра контакт захвата должен быть подключен к фильтру Smart Tee. Этот фильтр разделяет данные на два потока: поток записи и поток предварительного просмотра. При указании PIN_CATEGORY_PREVIEW или PIN_CATEGORY_CAPTURE метод вставляет фильтр Smart Tee, если он необходим. Затем он отрисовывает указанный поток в фильтре Smart Tee. Если вы отрисовываете поток предварительного просмотра и метод использует фильтр Smart Tee, он возвращает VFW_S_NOPREVIEWPIN.
Скрытые субтитры. Этот метод можно использовать для записи или предварительного просмотра скрытых субтитров. Некоторые фильтры записи предоставляют данные VBI, другие — данные с закрытыми субтитрами. Чтобы обработать любой случай, вызовите метод дважды, один раз с помощью PIN_CATEGORY_VBI и один раз с помощью PIN_CATEGORY_CC. Метод вставляет все фильтры, необходимые для преобразования данных VBI в скрытые субтитры. Для предварительного просмотра данных задайте для параметра pSinkзначение NULL. Чтобы записать данные в файл, используйте указатель интерфейса IBaseFilter фильтра мультиплексоров. Вы можете записывать и просматривать данные на том же графике. Вызовите метод один раз, используя значение NULL , и снова с помощью мультиплексера. Задайте для параметра pIntermediateзначение NULL.
Контакты видеопорта. Фильтры, работающие с оборудованием для захвата видеопорта (VPE), могут иметь контакты видеопорта (PIN_CATEGORY_VIDEOPORT) вместо контактов предварительного просмотра. Для работы предварительного просмотра или записи пин-код видеопорта должен подключиться к фильтру overlay Mixer. Метод обрабатывает эти сведения. Указывать PIN_CATEGORY_VIDEOPORT не нужно. Укажите PIN_CATEGORY_PREVIEW или PIN_CATEGORY_CAPTURE, и метод подключит контакт правильно. Аналогичным образом некоторые фильтры доставляют данные VBI с помощью контактов видеопорта (PIN_CATEGORY_VIDEOPORT_VBI). Как и в случае с PIN_CATEGORY_VIDEOPORT, метод обрабатывает эти сведения. Указывать PIN_CATEGORY_VIDEOPORT_VBI не нужно.
Поддержка фильтров. Если устройство захвата использует драйвер модели драйвера Windows (WDM), графу могут потребоваться определенные фильтры, вышестоящий из фильтра захвата видео WDM, например фильтр ТВ-тюнера или аналоговый фильтр видеоперекладки. Если этот метод успешно отрисовывает поток, он также вставляет все фильтры WDM, необходимые в графе. Метод запрашивает входные контакты в фильтре отслеживания, чтобы определить, какие среды они поддерживают, и подключает их к соответствующим фильтрам.
Пример кода
Для типичного графа захвата подключите контакт предварительного просмотра к отрисовщику по умолчанию без промежуточного фильтра:C++ |
---|
// Video: pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pCaptureFilter, NULL, NULL); // Audio: pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Audio, pCaptureFilter, NULL, NULL); |
C++ |
---|
pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi, L"C:\\Example.avi", &ppf, &pSink); pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, pCaptureFilter, NULL, ppf); |
Источники файлов
Этот метод можно использовать для перекодирования или повторного сжатия файла. В следующем обсуждении предполагается, что файл содержит не более одного видеопотока и одного аудиопотока или одного потока с чередованием. В противном случае метод будет работать неправильно.Источник файла имеет один вывод, поэтому задайте для pCategory и pTypeзначение NULL. Вызовите метод дважды: один раз для отрисовки видеопотока, а один раз — для отрисовки аудиопотока. Первый вызов подключает исходный фильтр к фильтру синтаксического анализа и отображает один из выходных контактов фильтра синтаксического анализа. Второй вызов отрисовывает оставшиеся выходные данные средства синтаксического анализа. Если вы сжимаете один поток, но не другой, обязательно укажите фильтр сжатия в первом вызове. Метод автоматически выбирает правильный поток на основе типа сжатия.
C++ |
---|
pBuilder->RenderStream(NULL, NULL, pSrc, pCompressor, pMux); pBuilder->RenderStream(NULL, NULL, pSrc, NULL, pMux); |
Требования
Требование | Значение |
---|---|
Целевая платформа | Windows |
Header | strmif.h (включая Dshow.h) |
Библиотека | Strmiids.lib |
См. также раздел
Создание графов с помощью конструктора графов захвата
Коды ошибок и успешного выполнения