我正在学习 Media Foundation,并希望通过 Metro 应用程序使用它。不幸的是,Metro 应用程序不支持 MFCreateMediaSession。这是为什么?Metro 应用程序如何创建媒体会话来播放应用程序动态生成的 PCM 音频流?
问问题
758 次
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:从研究实时通信样本来看,播放/录制的方法似乎如下——到目前为止我做对了吗?
- 回放:使用Windows.Media.MediaExtensionManager注册一个方案(在示例中为“stsp://”)处理程序,该处理程序在导航到具有此方案的 URL 时创建一个自定义源。
- 录制:实现自定义接收器并使用Windows.Media.Capture.MediaCapture.StartRecordToCustomSinkAsync将媒体捕获到它。
A. 是的,这似乎是一种合理的方法。
于 2012-04-23T22:10:35.383 回答