模拟电视优化

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

优化通过 IAMTVTuner 接口由电视调谐器筛选器控制。 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();
}

第一个参数指示从捕获筛选器搜索上游。

频率表

在内部,电视调谐器筛选器保留频率表的列表。 每个频率表对应于给定国家/地区的广播或有线电视频率。 还有一个通用的“Unicable”频率表,当国家/地区没有一组标准的频率分配时,可以使用该表。

每个频率表都包含优化频率的列表。 对于某些国家/地区,表中的索引直接对应于通道编号,换句话说,通道 n 的频率是表中的第 n 个条目。 但是,对于某些国家/地区,通道编号和频率之间没有直接对应关系。 在这种情况下,应用程序必须保留一个列表,该列表 (通常由用户选择) 映射到频率表条目。 例如,用户看到的“通道 5”可能是频率表中的条目编号 12。

有关详细信息,请参阅 国际模拟电视优化

基本优化操作

如果调谐器支持多种接收模式(如电视和调频广播),请调用 IAMTuner::p ut_Mode 以选择该模式。 IAMTuner::GetAvailableModes 方法返回调谐器支持的所有模式。 例如,以下代码检查调谐器是否支持调频广播,如果是,请切换到该模式。

// 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 方法返回当前频率表的最小和最大索引值。

重写频率条目

频率表中的某些条目可能不正确或已过时。 因此,提供了一种使用注册表项替代单个条目的机制。

具体内容在国际 模拟电视优化主题中进行了说明。 每个注册表项定义一个包含一个或多个子项的“优化空间”。 每个子项替代一个频率条目。 若要设置当前优化空间,请使用 IAMTuner::p ut_TuningSpace 方法。 激活优化空间会替代当前频率表中的频率条目。 因此,应用程序负责维护优化空间与国家/地区之间的对应关系。 最佳方法是仅使用国家/地区标识符作为优化空间的名称。

微调频率条目

广播电台可以上下调整广播频率数 kHz,以减少对邻近通道的潜在干扰。 给定标称频率,调谐器卡可以扫描确切的频率。 电视调谐器筛选器具有用于在注册表中保存调整频率的机制。

对于频率表中的每个条目,调用 put_Channel 方法以调整到该频率。 调谐器将扫描最精确的频率。 可以通过调用 IAMTuner::SignalPresent 来检查调谐器是否实现了水平锁。 电视调谐器筛选器还在内部存储结果。

扫描所有频率后,调用 IAMTVTuner::StoreAutoTune 方法将更新的值写入注册表。 更新的值存储在当前优化空间的注册表项下。

模拟电视