捕获电视音频
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media 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();
相关主题