串流路由
串流路由 是媒體應用程式在裝置之間切換數據流的能力,而播放或擷取會話中斷最少。
計算機可以有多個轉譯和擷取裝置。 系統會在 [音效] 控制面板上列出這些裝置。 在此清單中,使用者可以將裝置設定為每個角色的默認裝置:播放、錄製或四個通訊角色(控制台轉譯、控制台擷取、通訊轉譯或通訊擷取)。 裝置清單可能會動態修改,因為其中一些裝置可以暫時使用,例如USB頭戴式裝置。 當有多個裝置可用時,用戶可以將預設值變更為不同的裝置。 使用者也可以在裝置屬性的 [進階] 索引標籤上變更裝置的格式(取樣率、每個樣本的位等等)。
請考慮使用者選取 [說話者 ] 作為轉譯音訊串流的預設裝置的情況。 然後,用戶會連接 USB 頭戴式裝置、選取頭戴式裝置作為新的預設裝置,並將裝置的取樣速率從 44.1 kHz 變更為 48 kHz。 使用者想要以新的取樣速率在頭戴式裝置上播放音訊串流,且串流會話中斷最少。
在此案例中,媒體應用程式必須處理兩種情況:
- 數據流必須傳輸至新的預設裝置,且播放中斷最少。
- 新裝置必須以新格式繼續播放(也就是使用者可以變更超過取樣率)。
在 Windows Vista 中,為了支援此案例,媒體應用程式必須提供串流路由的實作。 應用程式負責終止現有的數據流,並重新啟動新裝置上的數據流。 如果使用者變更預設裝置或其混合格式已變更,則所有相關聯的會話都會關閉,而且應用程式必須處理復原。
在 Windows 7 中,應用程式可以順暢地將串流從現有的預設裝置傳輸到新的預設音訊端點。 媒體基礎、DirectSound 和 WAVE API 等高階音訊 API 集合會實作串流路由功能。 使用這些 API 集合從預設裝置播放或擷取數據流的媒體應用程式會使用預設實作,而且不需要修改應用程式。 不過,如果您的媒體應用程式直接使用MMDeviceAPI或WASAPI,應用程式必須提供串流路由實作。
注意
MMDeviceAPI 和 WASAPI 是核心音訊 API 元件,應用程式可用來在裝置上轉譯或擷取數據流。 MMDeviceAPI 會探索新的音訊端點裝置,而WASAPI會管理媒體應用程式和音訊端點裝置之間的音訊數據流程。
若要實作串流路由功能,應用程式必須在下列情況下接聽MMDeviceAPI和WASAPI所傳送的通知:
- 默認裝置會由用戶變更。
- 會移除現有的預設裝置,並新增新的預設裝置。
- 裝置格式已變更。
藉由處理這些通知,應用程式可以在將數據流傳送至新的預設裝置時執行必要的串流管理作業。 此外,當轉譯會話為使用中時,應用程式可以使用使用者指定的新格式來轉譯或擷取現有的數據流。
本節包含下列主題:
Windows SDK 中包含的下列範例會示範應用程式如何處理串流路由通知。
- RenderSharedTimerDriven
- RenderSharedEventDriven
- RenderExclusiveTimerDriven
- RenderExclusiveEventDriven
- CaptureSharedTimerDriven
- CaptureSharedEventDriven
相關主題