다음을 통해 공유


폐쇄 자막 보기

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

아날로그 텔레비전에서 선택 자막을 지원하기 위해 캡처 필터는 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);
}

다음 다이어그램에서는 선택 자막을 표시하기 위한 일반적인 필터 그래프를 보여 줍니다.

폐쇄 캡션 미리보기 그래프

이 그래프는 선택 자막 표시에 다음 필터를 사용합니다.

  • 티/싱크-투-싱크 변환기. 캡처 필터에서 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 할당자를 사용하는 필터 그래프를 보여 줍니다.

폐쇄 자막 미리 보기 그래프 vbi 표면 할당자

캡션 사용 및 사용 안 함

캡션 표시를 제어하려면 줄 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);
}

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

폐쇄 자막 및 텔레텍스트