Media Foundation を学習していて、Metro アプリから使用したいと考えています。残念ながら、MFCreateMediaSession は Metro アプリではサポートされていません。何故ですか?Metro アプリがメディア セッションを作成して、たとえば、アプリによってオンザフライで生成された PCM オーディオのストリームを再生するにはどうすればよいでしょうか?
1 に答える
どうやら、Metro アプリがこの方法で独自のメディア セッションを作成しないように設計されているようです。MSDN フォーラムのスレッド(私による追加のマークアップ)で Microsoft の James Dailey によって提供された次の回答は、いくつかの洞察を提供します。
次の 2 つのオプションがあります。
1) WASAPIを使用して、合成された PCM オーディオをオーディオ マネージャーに直接送ります (推奨)。
2)メディア ファンデーション メディア エンジンにプラグインできるカスタム ソースを作成する
どちらのアプローチも期待どおりに機能します。各方法を注意深く確認し、ソフトウェア要件と比較する必要があります。ほとんどの合成オーディオ シナリオでは、WASAPIを使用する ことをお勧めします。
彼は後で明らかにしました:
Q. WASAPI : オーディオ デバイスにアクセスするために必要なオブジェクトを最初にアクティブ化/インスタンス化する方法を理解する上で、重要な部分が 1 つ欠けています。IMMDeviceが Metro スタイル アプリでサポートされていない場合、どうすればオーディオ デバイスのハンドルを取得できますか?
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.メディア ファンデーション メディア エンジン:リアルタイム コミュニケーションのサンプルを調べたところ、再生/記録のアプローチは次のようになるようです。
- 再生: Windows.Media.MediaExtensionManagerを使用して、このスキームを持つ URL に移動するたびにカスタム ソースを作成するスキーム (この例では "stsp://") ハンドラーを登録します。
- レコーディング: カスタム シンクを実装し、Windows.Media.Capture.MediaCapture.StartRecordToCustomSinkAsyncを使用してメディアをキャプチャします。
A. はい、これは合理的なアプローチのようです。