2

我正在学习 Media Foundation,并希望通过 Metro 应用程序使用它。不幸的是,Metro 应用程序不支持 MFCreateMediaSession。这是为什么?Metro 应用程序如何创建媒体会话来播放应用程序动态生成的 PCM 音频流?

4

1 回答 1

2

显然,Metro 应用程序不会以这种方式创建自己的媒体会话是设计使然。微软的 James Dailey 在MSDN 论坛线程(我的附加标记)上提供的以下答案提供了一些见解:

这里有两个选择:

1) 使用WASAPI并将您合成的 PCM 音频直接泵送到音频管理器(首选)

2) 创建一个可以插入Media Foundation 媒体引擎的自定义源

任何一种方法都会按预期工作。您将需要仔细审查每种方法并将它们与您的软件要求进行比较。对于大多数合成音频场景,建议使用WASAPI

他后来澄清:

Q. WASAPI:我的理解中缺少一个关键部分——如何对访问音频设备所需的对象进行初始激活/实例化。当Metro 风格的应用程序不支持IMMDevice时,我什至如何获得音频设备的句柄?

A. 代码如下:

Platform::String^ id = Windows::Media::Devices::MediaDevice::GetDefaultAudioCaptureId(Windows::Media::Devices::AudioDeviceRole::Console);
Microsoft::WRL::ComPtr<IAudioClient> pAudioClient = NULL;  
ActivateAudioInterface( id->Data(), __uuidof( IAudioClient ), (void**)&pAudioClient );

Q. Media Foundation Media Engine:从研究实时通信样本来看,播放/录制的方法似乎如下——到目前为止我做对了吗?

A. 是的,这似乎是一种合理的方法。

于 2012-04-23T22:10:35.383 回答