다음을 통해 공유


선택 자막 보기

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

아날로그 TV에서 닫힌 캡션 지원하기 위해 캡처 필터는 VBI 또는 닫힌 캡션 데이터를 제공하는 핀을 노출합니다. 핀에는 다음 핀 범주 중 하나가 있습니다.

  • VBI 핀(PIN_CATEGORY_VBI). VBI 파형 샘플의 스트림을 제공합니다. 이는 닫힌 캡션 데이터를 추출하는 디코더 필터에 전달됩니다.
  • CC 핀(PIN_CATEGORY_CC). 줄 21 데이터에서 추출된 캡션 바이트 쌍을 전달합니다.
  • 하드웨어 조각화 CC 핀(PINNAME_VIDEO_CC_CAPTURE).

닫힌 캡션 미리 보려면 VBI 핀 범주를 사용하여 ICaptureGraphBuilder2::RenderStream을 호출하고, 실패하면 CC 범주를 사용하여 다시 호출합니다.

hr = pBuild->RenderStream(&PIN_CATEGORY_VBI, 0, pCap, 0, 0);
if (FAILED(hr))
{
    hr = pBuild->RenderStream(&PIN_CATEGORY_CC, 0, pCap, 0, 0);
}

다음 다이어그램에서는 닫힌 캡션 표시하기 위한 일반적인 필터 그래프를 보여 줍니다.

closed captioning preview graph

이 그래프는 닫힌 캡션 표시에 다음 필터를 사용합니다.

  • Tee/Sink-to-Sink 변환기입니다. 캡처 필터에서 VBI 정보를 수락하고 신호에 있는 각 데이터 서비스에 대해 별도의 스트림으로 분할합니다. Microsoft는 선택 자막, NABTS 및 WST(World Standard Teletext)용 VBI 코덱을 제공합니다.
  • CC 디코더. 캡처 필터에서 제공하는 샘플링된 VBI 파형에서 CC 데이터를 디코딩합니다.
  • 줄 21 디코더입니다. CC 바이트 쌍을 변환하고 캡션 텍스트를 비트맵에 그립니다. 다운스트림 필터(이 경우 오버레이 믹서)는 비트맵을 비디오에 오버레이합니다.

캡처 그래프 작성기 RenderStream 메서드는 이러한 필터를 자동으로 추가합니다. 캡처 필터에 VBI 핀 대신 CC 핀이 있는 경우 CC 핀은 줄 21 디코더 필터에 직접 연결됩니다.

참고 항목

렌더링에 VMR(Video Mixing Renderer) 필터를 사용하는 경우 줄 21 디코더 필터 2를 사용합니다. 이 필터는 줄 21 디코더와 동일한 기능을 가지고 있지만 CLSID는 CLSID_Line21Decoder2.

 

참고 항목

WINDOWS Vista에서 CC 디코더 필터가 제거되었습니다. 새 애플리케이션은 Microsoft TV 기술 설명서에 설명된 VBICodec 필터를 사용해야 합니다.

 

캡처 디바이스에서 비디오 포트를 사용하는 경우 캡처 필터에 비디오 포트 VBI 핀(PIN_CATEGORY_VIDEOPORT_VBI)이 있을 수 있습니다. 이 핀은 캡처된 VBI 데이터를 저장할 표면을 할당하는 VBI Surface 할당자 필터에 연결되어야 합니다. 필요한 경우 RenderStream 메서드가 이 필터를 추가합니다. 다음 다이어그램은 VBI Surface 할당자를 사용하는 필터 그래프를 보여 줍니다.

closed captioning preview graph with vbi surface allocator

캡션 사용 및 사용 안 함

캡션 표시를 제어하려면 줄 21 디코더 필터에서 IAMLine21Decoder 인터페이스를 사용합니다. 예를 들어 다음과 같이 IAMLine21Decoder::SetServiceState 메서드를 사용하여 캡션 디스플레이를 끌 수 있습니다.

// Use the FindInterface method to find the interface.
IAMLine21Decoder *pLine21 = NULL;
hr = pBuild->FindInterface(
    &LOOK_DOWNSTREAM_ONLY, // Look downstream from pCap 
    NULL,                  // No particular media type
    pCap,                  // Pointer to the capture filter.
    IID_IAMLine21Decoder, (void**)&pLine21);
if (SUCCEEDED(hr))
{
    pLine21->SetServiceState(AM_L21_CCSTATE_Off);
    // (Use AM_L21_CCSTATE_On to enable.)
    pLine21->Release();
}

이 예제에서는 ICaptureGraphBuilder2::FindInterface 메서드를 사용하여 IAMLine21Decoder 인터페이스를습니다. FindInterface의 첫 번째 매개 변수는 캡처 필터(pCap)에서 다운스트림을 검색하도록 지정하는 &LOOK_DOWNSTREAM_ONLY.

선택 캡션 비트맵 캡처

캡션 비트맵을 파일에 캡처할 수 있습니다. 이렇게 하려면 비디오 캡처에 설명된 대로 필터 그래프의 파일 쓰기 섹션을 파일에 추가합니다. 그런 다음, CC 또는 VBI 핀을 mux 필터에 렌더링합니다.

hr = pBuild->RenderStream(&PIN_CATEGORY_VBI, 0, pCap, 0, pMux);
if (FAILED(hr))
{
    hr = pBuild->RenderStream(&PIN_CATEGORY_CC, 0, pCap, 0, pMux);
}

비디오를 캡처하는 경우에도 두 개의 개별 비디오 스트림이 있는 파일이 만들어집니다. 그림 위에 오버레이된 캡션 비디오를 캡처하지 않습니다.

선택 자막 및 텔레텍스트