Udostępnij za pośrednictwem


Automatyczne routowanie strumieni

W tym artykule opisano sposób aktualizowania implementacji interfejsu WASAPI w celu korzystania z automatycznego routingu strumienia.

Począwszy od systemu Windows 7, za każdym razem, gdy domyślne urządzenie audio zmieni się, strumień odtwarzania audio aplikacji jest bezproblemowo przesyłany z poprzedniego domyślnego urządzenia audio do nowego domyślnego urządzenia audio . Ten transfer odbywa się automatycznie bez dodatkowego kodu aplikacji. Jednak przed wydaniem Windows 10 w wersji 1607, aplikacje używające niskopoziomowego interfejsu Windows Audio Session API (WASAPI) nie mogły korzystać z tej funkcji automatycznego routingu strumienia. Aplikacje korzystające z interfejsu WASAPI były wymagane do zaimplementowania własnej formy routingu strumienia przez dodanie dodatkowego kodu w celu wykrycia przybycia i usunięcia urządzeń audio oraz przełączenia strumienia do tych urządzeń zgodnie z potrzebami. Aplikacje korzystające z interfejsu WASAPI, które nie zaimplementowały własnego mechanizmu kierowania strumienia podczas podłączania bądź odłączania urządzeń, ryzykowały zapewnianiem mniej niż idealnego doświadczenia użytkownika.

Począwszy od systemu Windows 10 w wersji 1607, aplikacje korzystające z interfejsu WASAPI mogą korzystać z automatycznego routingu strumienia. Jeśli aplikacja korzysta z interfejsu WASAPI, zdecydowanie zaleca się zaktualizowanie aplikacji w celu skorzystania z tej nowej funkcji, wykonując następujące kroki:

  1. System Windows 10 w wersji 1607 definiuje dwa nowe identyfikatory GUID, DEVINTERFACE_AUDIO_RENDER i DEVINTERFACE_AUDIO_CAPTURE, które można wykorzystać do aktywacji interfejsu renderowania lub przechwytywania audio z automatycznym routingiem strumienia. Uzyskaj ciągową reprezentację tych identyfikatorów GUID, wywołując StringFromIID. Przykład poniżej ukazuje pojawienie się wywołania identyfikatora GUID renderowania dźwięku.

    PWSTR audioRenderGuidString;
    StringFromIID(DEVINTERFACE_AUDIO_RENDER, &audioRenderGuidString);
    
  2. Aktywuj punkt końcowy audio, przekazując ciąg identyfikatora do funkcji WASAPI ActivateAudioInterfaceAsync. W poniższym przykładzie użyty jest identyfikator audio uzyskany w kroku 1.

    //Activate the default audio interface
    ActivateAudioInterfaceAsync(audioRenderGuidString
                                __uuidof(IAudioClient),
                                NULL,
                                completionHandler.Get(),
                                operation.GetAddressOf()));
    
  3. Zwolnij pamięć przydzieloną do przechowywania identyfikatora punktu końcowego:

    CoTaskMemFree(audioRenderGuidString);  //free the string memory
    

Po zmodyfikowaniu aplikacji w celu aktywowania interfejsu audio w sposób opisany powyżej będzie ona uczestniczyć w funkcji automatycznego routingu strumienia.

Aby zademonstrować automatyczne przekierowywanie strumienia, użyj laptopa lub tabletu wyposażonego w głośniki wewnętrzne do odtwarzania dźwięku. Dźwięk powinien być odtwarzany za pośrednictwem wewnętrznych głośników urządzenia. Podczas odtwarzania dźwięku podłącz parę słuchawek. Teraz należy usłyszeć dźwięk odtwarzany przez słuchawki. Następnie odłącz słuchawki i dźwięk powinien automatycznie kierować się z powrotem do głośników wewnętrznych.

Strumieniowy routing

MediaDevice.GetDefaultAudioRenderId

MediaDevice.GetDefaultAudioCaptureId

ActivateAudioInterfaceAsync