다음을 통해 공유


아날로그 텔레비전 튜닝

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

튜닝은 IAMTVTuner 인터페이스를 통해 TV 튜너 필터에 의해 제어됩니다. IAMTVTuner 인터페이스는 IAMTuner를 상속합니다. 인터페이스에 대한 포인터를 가져오려면 다음과 같이 ICaptureGraphBuilder2::FindInterface 메서드를 호출합니다.

IAMTVTuner *pTuner = NULL;
hr = pBuild->FindInterface(
    &LOOK_UPSTREAM_ONLY,  // Look upstream from pCap.
    NULL,                 // No particular media type.
    pCap,                 // Pointer to the capture filter.
    IID_IAMTVTuner, (void**)&pTuner);
if (SUCCEEDED(hr))
{
    // Use pTuner ...
    pTuner->Release();
}

첫 번째 매개 변수는 캡처 필터에서 업스트림 검색하도록 나타냅니다.

빈도 테이블

내부적으로 TV 튜너 필터는 빈도 테이블 목록을 유지합니다. 각 주파수 테이블은 지정된 국가/지역의 브로드캐스트 또는 케이블 주파수에 해당합니다. 국가/지역에 표준 빈도 할당 집합이 없는 경우 사용되는 일반적인 "검색할 수 없는" 빈도 테이블도 있습니다.

각 빈도 테이블에는 튜닝 빈도 목록이 포함되어 있습니다. 일부 국가/지역의 경우 테이블의 인덱스는 채널 번호에 직접 해당합니다. 즉, channel n의 빈도는 테이블의 n번째 항목입니다. 그러나 일부 국가/지역의 경우 채널 번호와 빈도 사이에 직접적인 대응이 없습니다. 이 경우 애플리케이션은 채널 번호(일반적으로 사용자가 선택)를 빈도 테이블 항목에 매핑하는 목록을 유지해야 합니다. 예를 들어 사용자가 "채널 5"로 보는 것은 빈도 테이블의 항목 번호 12일 수 있습니다.

자세한 내용은 국제 아날로그 TV 튜닝을 참조하세요.

기본 튜닝 작업

튜너가 텔레비전 및 FM 라디오와 같은 여러 수신 모드를 지원하는 경우 IAMTuner::p ut_Mode 를 호출하여 모드를 선택합니다. IAMTuner::GetAvailableModes 메서드는 튜너가 지원하는 모든 모드를 반환합니다. 예를 들어 다음 코드는 튜너가 FM 라디오를 지원하는지 여부를 확인하고, 이 경우 해당 모드로 전환합니다.

// Check whether the mode is supported.
long lModes = 0;
hr = m_pTuner->GetAvailableModes(&lModes);
if (SUCCEEDED(hr) && (lModes & AMTUNER_MODE_FM_RADIO))
{
    // Set the mode.
    hr = pTuner->put_Mode(AMTUNER_MODE_FM_RADIO);
}

국가/지역을 설정하려면 IAMTuner::p ut_CountryCode 메서드를 호출합니다. 튜너가 이 값을 사용하여 적절한 빈도 테이블을 선택합니다. 자세한 내용은 국가/지역 할당을 참조하세요.

채널을 설정하려면 IAMTuner::p ut_Channel 메서드를 호출합니다. 이 메서드에 대한 인수는 실제로 채널 번호가 아니라 현재 빈도 테이블에 대한 인덱스입니다. 앞에서 설명한 대로 인덱스 번호는 채널 번호에 해당하거나 일치하지 않을 수 있습니다. IAMTuner::ChannelMinMax 메서드는 현재 빈도 테이블에 대한 최소 및 최대 인덱스 값을 반환합니다.

빈도 항목 재정의

빈도 테이블의 일부 항목이 잘못되었거나 사용되지 않을 수 있습니다. 따라서 레지스트리 키를 사용하여 개별 항목을 재정의하기 위한 메커니즘이 제공됩니다.

구체적인 내용은 국제 아날로그 TV 튜닝 항목에 설명되어 있습니다. 각 레지스트리 키는 하나 이상의 하위 키를 포함하는 "튜닝 공간"을 정의합니다. 각 하위 키는 하나의 빈도 항목을 재정의합니다. 현재 튜닝 공간을 설정하려면 IAMTuner::p ut_TuningSpace 메서드를 사용합니다. 튜닝 공간을 활성화하면 현재 빈도 테이블의 빈도 항목이 재정의됩니다. 따라서 튜닝 공간과 국가/지역 간의 대응을 유지하는 것은 애플리케이션에 달려 있습니다. 가장 좋은 방법은 단순히 국가/지역 식별자를 튜닝 공간의 이름으로 사용하는 것입니다.

빈도 항목 미세 조정

브로드캐스트 주파수는 인접 채널과의 잠재적 간섭을 줄이기 위해 브로드캐스트 스테이션에 의해 여러 kHz 위로 또는 아래로 조정될 수 있습니다. 명목 주파수를 감안할 때 튜너 카드 정확한 빈도를 검색할 수 있습니다. TV 튜너 필터에는 레지스트리에서 조정된 주파수를 저장하는 메커니즘이 있습니다.

frequency 테이블의 각 항목에 대해 put_Channel 메서드를 호출하여 해당 빈도에 맞게 조정합니다. 튜너가 가장 정확한 빈도를 검색합니다. IAMTuner::SignalPresent를 호출하여 튜너가 가로 잠금을 달성했는지 여부를 검사 수 있습니다. TV 튜너 필터는 내부적으로도 결과를 저장합니다.

모든 주파수를 검사한 후 IAMTVTuner::StoreAutoTune 메서드를 호출하여 업데이트된 값을 레지스트리에 씁니다. 업데이트된 값은 현재 튜닝 공간에 대한 레지스트리 항목 아래에 저장됩니다.

아날로그 텔레비전