簡體   English   中英

播放時更改音頻渲染器端點

[英]Changing audio renderer endpoint while playing

我正在使用 Microsoft Media Foundation 編寫音頻播放器。 我想知道是否可以在不重新創建會話的情況下更改播放設備?

IMFActivate *m_p_sink_activate;
...
m_p_sink_activate->SetString(MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID, name_device);

如果音頻已經在播放,這不會生效。

順便說一句,Microsoft.Windows.SDK.Contracts (Windows.Media.Playback.MediaPlayer) 提供的媒體播放器做得很完美。 當我更改 m_mediaPlayer.AudioDevice 時,音頻流會立即重定向到指定的設備。 所以我想知道這是否也適用於 MSMF。

到目前為止,我有辦法完成這項工作,

  1. 創建一個從前一個克隆的新拓撲。
  2. 使用 MFCreateAudioRendererActivate 創建新的音頻渲染器,並使用帶有新音頻端點 ID 的設置字符串將其添加到拓撲節點;
  3. 將新節點添加到新拓撲中;
  4. 使用 IMFMediaSession::SetTopology() 設置要播放的新拓撲。

您可以參考 MS 示例 TopoEdit 了解詳細信息。

一個副作用是每次 SetTopology 都會導致巨大的內存增長。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM