다음을 통해 공유


ICaptureGraphBuilder2::RenderStream 메서드(strmif.h)

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngineMedia Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

메서드는 RenderStream 원본 필터의 출력 핀을 선택적으로 중간 필터를 통해 싱크 필터에 연결합니다.

구문

HRESULT RenderStream(
  [in] const GUID  *pCategory,
  [in] const GUID  *pType,
  [in] IUnknown    *pSource,
  [in] IBaseFilter *pfCompressor,
  [in] IBaseFilter *pfRenderer
);

매개 변수

[in] pCategory

Pin 속성 집합에 나열된 핀 범주 중 하나를 지정하는 GUID에 대한 포인터입니다. 범주에 관계없이 핀을 일치하려면 이 매개 변수를 NULL로 설정합니다. 일반적인 값은 다음과 같습니다.

  • PIN_CATEGORY_CAPTURE
  • PIN_CATEGORY_PREVIEW
  • PIN_CATEGORY_CC

[in] pType

출력 핀의 미디어 형식을 지정하는 주 형식 GUID에 대한 포인터입니다. 또는 NULL 을 사용하여 미디어 유형에 관계없이 모든 핀을 사용합니다. 가능한 값 목록은 주 형식을 참조하세요.

[in] pSource

연결의 시작 필터 또는 출력 핀에 대한 포인터를 지정합니다.

[in] pfCompressor

압축 필터와 같은 중간 필터의 IBaseFilter 인터페이스에 대한 포인터입니다. NULL일 수 있습니다.

[in] pfRenderer

렌더러 또는 mux 필터와 같은 싱크 필터의 IBaseFilter 인터페이스에 대한 포인터입니다. 값이 NULL이면 메서드는 기본 렌더러를 사용합니다(설명 참조).

반환 값

HRESULT 값을 반환합니다. 가능한 반환 값은 다음과 같습니다.

반환 코드 Description
S_OK
성공.
VFW_S_NOPREVIEWPIN
미리 보기는 스마트 티 필터를 통해 렌더링되었습니다.
E_FAIL
실패.
E_INVALIDARG
인수가 잘못되었습니다.
E_POINTER
NULL 포인터 인수입니다.
VFW_E_NOT_IN_GRAPH
필터가 필터 그래프에 없습니다. 이 오류는 AddFilter 를 호출하여 pSource, pIntermediate 또는 pSink 를 그래프에 추가하지 않은 경우에 발생할 수 있습니다. SetFiltergraph를 호출하지 않은 경우 그래프를 캡처 그래프 작성기 에 연결하지 않은 경우에도 발생할 수 있습니다. 이 경우 Capture Graph Builder 개체는 자체 필터 그래프를 자동으로 만듭니다. 캡처 그래프 작성기 정보를 참조하세요.

설명

이 메서드는 체인에서 둘 이상의 필터를 함께 연결하여 스트림을 렌더링합니다.

  • pSource 매개 변수는 필터 또는 출력 핀과 같은 체인의 시작을 지정합니다.
  • pIntermediate 매개 변수는 중간 필터(일반적으로 압축 필터)를 지정합니다. 이 매개 변수는 NULL일 수 있습니다.
  • pSink 매개 변수는 체인의 끝에 있는 필터를 지정합니다. 일반적으로 이 필터는 미리 보기용 렌더러이거나 파일 캡처를 위한 mux입니다.
메서드는 pSourcepIntermediate에 연결한 다음 pIntermediatepSink에 연결합니다. pIntermediateNULL이면 메서드는 pSource를 pSink에 연결합니다. pSource, pIntermediatepSink로 지정된 모든 필터는 메서드를 호출하기 전에 그래프에 추가해야 합니다. 메서드는 Intelligent Connect를 사용하므로 디코더와 같은 추가 필터가 그래프에 추가될 수 있습니다.

pSink 매개 변수가 NULL이면 메서드는 기본 렌더러를 사용하려고 시도합니다. 비디오의 경우 Video Renderer를 사용하고 오디오의 경우 DirectSound 렌더러를 사용합니다.

pSource가 필터인 경우 메서드는 해당 필터에서 출력 핀을 검색합니다. 이 경우 pCategorypType 매개 변수를 사용하여 검색 범위를 좁힐 수 있습니다. 예를 들어 필터에 미리 보기 및 캡처를 위한 별도의 핀이 있는 경우 PIN_CATEGORY_CAPTURE 또는 PIN_CATEGORY_PREVIEW 지정할 수 있습니다. pSource가 출력 핀인 경우 pCategorypTypeNULL로 설정합니다.

모든 경우에 메서드는 연결되지 않은 핀을 검색합니다. 둘 이상의 핀이 지정된 조건을 충족하는 경우 메서드는 핀이 찾은 첫 번째 핀을 사용합니다.

DV 캡처의 경우 미디어 형식이 MEDIATYPE_Interleaved pSink 매개 변수가 NULL인 경우 메서드는 인터리브 스트림을 오디오 스트림과 비디오 스트림으로 분할하고 두 스트림을 모두 렌더링합니다.

메서드는 RenderStream 캡처 그래프에 필요한 많은 세부 정보를 처리합니다.

스마트 티. 일부 캡처 필터에는 캡처 핀이 있지만 미리 보기 핀은 없습니다. 미리 보려면 캡처 핀을 스마트 티 필터에 연결해야 합니다. 이 필터는 데이터를 캡처 스트림과 미리 보기 스트림이라는 두 개의 스트림으로 분할합니다. PIN_CATEGORY_PREVIEW 또는 PIN_CATEGORY_CAPTURE 지정하면 필요한 경우 메서드가 스마트 티 필터를 삽입합니다. 그런 다음 스마트 티 필터에서 지정된 스트림을 렌더링합니다. 미리 보기 스트림을 렌더링하고 메서드가 Smart Tee 필터를 사용하는 경우 VFW_S_NOPREVIEWPIN 반환합니다.

선택 자막. 이 메서드를 사용하여 선택 자막을 캡처하거나 미리 볼 수 있습니다. 일부 캡처 필터는 VBI(수직 공백 간격) 데이터를 제공하고 다른 캡처 필터는 선택 자막 데이터를 제공합니다. 두 경우 모두 처리하려면 메서드를 두 번 호출합니다. 한 번은 PIN_CATEGORY_VBI 사용하고 한 번은 PIN_CATEGORY_CC 사용합니다. 메서드는 VBI 데이터를 선택 자막으로 변환하는 데 필요한 필터를 삽입합니다. 데이터를 미리 보려면 pSink 매개 변수를 NULL로 설정합니다. 파일에 데이터를 캡처하려면 멀티플렉서 필터의 IBaseFilter 인터페이스 포인터를 사용합니다. 동일한 그래프에서 데이터를 캡처하고 미리 볼 수 있습니다. NULL을 사용하여 메서드를 한 번 호출하고 멀티플렉서를 사용하여 메서드를 다시 호출합니다. pIntermediate 매개 변수를 NULL로 설정합니다.

비디오 포트 핀. VPE(비디오 포트 확장) 비디오 캡처 하드웨어에서 작동하는 필터에는 미리 보기 핀 대신 비디오 포트 핀(PIN_CATEGORY_VIDEOPORT)이 있을 수 있습니다. 미리 보기 또는 캡처가 작동하려면 비디오 포트 핀을 오버레이 믹서 필터에 연결해야 합니다. 메서드는 이 세부 정보를 처리합니다. PIN_CATEGORY_VIDEOPORT 지정할 필요가 없습니다. PIN_CATEGORY_PREVIEW 또는 PIN_CATEGORY_CAPTURE 지정하면 메서드가 핀을 올바르게 연결합니다. 비슷한 방식으로 일부 필터는 비디오 포트 핀(PIN_CATEGORY_VIDEOPORT_VBI)을 사용하여 VBI 데이터를 제공합니다. PIN_CATEGORY_VIDEOPORT 마찬가지로 메서드는 이 세부 정보를 처리합니다. PIN_CATEGORY_VIDEOPORT_VBI 지정할 필요가 없습니다.

필터 지원. 캡처 디바이스가 WDM(Windows 드라이버 모델) 드라이버를 사용하는 경우 그래프에는 TV 튜너 필터 또는 아날로그 비디오 크로스바 필터와 같은 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); 
출력하려는 파일 형식에 따라 캡처 핀을 mux 필터 또는 파일 기록기 필터에 연결합니다. AVI 파일의 경우 AVI Mux 필터를 사용합니다. ASF 파일의 경우 WM ASF 기록기 필터를 사용합니다. 일반적으로 ICaptureGraphBuilder2::SetOutputFileName 메서드의 ppf 매개 변수에서 이 필터에 대한 포인터를 가져옵니다.
C++
pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi, L"C:\\Example.avi", 
    &ppf, &pSink);
pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
    pCaptureFilter, NULL, ppf);

파일 원본

이 메서드를 사용하여 파일을 트랜스코딩하거나 다시 압축할 수 있습니다. 다음 설명에서는 파일에 최대 하나의 비디오 스트림과 하나의 오디오 스트림 또는 단일 인터리브 스트림이 있다고 가정합니다. 그렇지 않으면 메서드가 제대로 작동하지 않습니다.

파일 원본에는 하나의 출력 핀이 있으므로 pCategorypTypeNULL로 설정합니다. 메서드를 두 번 호출합니다. 한 번은 비디오 스트림을 렌더링하고 한 번은 오디오 스트림을 렌더링합니다. 첫 번째 호출은 원본 필터를 파서 필터에 연결하고 파서 필터의 출력 핀 중 하나를 렌더링합니다. 두 번째 호출은 파서의 나머지 출력 핀을 렌더링합니다. 한 스트림을 압축하지만 다른 스트림은 압축하는 경우 첫 번째 호출에서 압축기 필터를 지정해야 합니다. 메서드는 압축 형식에 따라 올바른 스트림을 자동으로 선택합니다.

C++
pBuilder->RenderStream(NULL, NULL, pSrc, pCompressor, pMux);
pBuilder->RenderStream(NULL, NULL, pSrc, NULL, pMux);
전체 예제는 AVI 파일 다시 압축을 참조하세요.

요구 사항

요구 사항
대상 플랫폼 Windows
헤더 strmif.h(Dshow.h 포함)
라이브러리 Strmiids.lib

추가 정보

캡처 그래프 작성기를 사용하여 그래프 빌드

오류 및 성공 코드

ICaptureGraphBuilder2 인터페이스

비디오 캡처