我正在学习Media Foundation,并希望从Metro应用程序中使用它。遗憾的是,Metro应用不支持MFCreateMediaSession。这是为什么? Metro应用程序如何创建媒体会话,比如播放应用程序即时生成的PCM音频流?
答案 0 :(得分:2)
显然,按照设计,Metro应用程序不会以这种方式创建自己的媒体会话。微软的James Dailey在an MSDN Forum thread(由我提供的额外标记)提供的以下答案提供了一些见解:
以下是两个选项:
1)使用WASAPI并将合成的PCM音频直接输入到 音频管理员(首选)
2)创建可以插入Media Foundation Media Engine
的自定义来源任何一种方法都可以按预期工作。你需要仔细 检查每种方法并将它们与您的软件进行比较 要求。对于大多数合成音频场景,使用WASAPI 推荐。
他后来澄清道:
Q值。 WASAPI:我在理解中缺少一个关键部分 - 如何对访问音频设备所需的对象进行初始激活/实例化。如果Metro风格应用程序不支持IMMDevice,我怎么能获得音频设备的句柄?
一个。代码如下:
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:从研究real-time communication sample开始,似乎播放/录制的方法如下:我到目前为止做得对吗?
- 播放:使用Windows.Media.MediaExtensionManager注册a scheme(在本例中,它是“stsp://”)处理程序,它创建一个 每当导航到此方案的URL时,都会自定义源。
- 录制:实施自定义接收器并使用Windows.Media.Capture.MediaCapture.StartRecordToCustomSinkAsync向其捕获媒体。
一个。是的,这似乎是一种合理的方法。