捕获电视音频

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

若要将音频从模拟电视捕获到文件,请使用 音频捕获筛选器。 使用系统设备枚举器创建音频捕获筛选器。 用户的系统上可能有多个音频捕获设备;用户必须选择表示声音卡的设备。

将音频捕获输出引脚连接到复用筛选器:

hr = pBuild->RenderStream(
   &PIN_CATEGORY_CAPTURE, // Capture pin.
   &MEDIATYPE_Audio,      // Audio media type.
   pAudioCap,             // Pointer to the audio capture filter.
   NULL,                  // Optional audio compressor filter.
   pMux);                 // Pointer to the mux filter.

输入引脚不必连接到任何内容。 每个输入引脚表示音频捕获设备上的一个物理输入。 使用 IAMAudioInputMixer 接口启用从调谐器接收音频流的输入。 输入引脚按名称标识,例如“Line In”或“CD Audio”。遗憾的是,名称可能会从一个设备更改为下一个设备。 此外,不同的电视调谐器卡对声音卡使用不同的输入。 因此,由用户确定要使用的输入。

IEnumPins *pEnum = NULL;
hr = pAudioCap->EnumPins(&pEnum);
if (SUCCEEDED(hr))
{
    IPin *pPin = NULL;
    while (S_OK == pEnum->Next(1, &pPin, NULL))
    {
        IAMAudioInputMixer *pMix;
        hr = pPin->QueryInterface(IID_IAMAudioInputMixer, (void**)&pMix);
        if (SUCCEEDED(hr))
        {
            // Use IPin::QueryPinInfo to get the pin name.
            pPin->Release();
            if (...) // If the user selects this pin:
            {
                pMix->put_Enable(TRUE);
                pMix->put_MixLevel(1.0);
                pMix->Release();
                break;
            }
            pMix->Release();
        }
    }
}
pEnum->Release();

模拟电视音频

音频捕获