Automatisches Streamrouting

In diesem Artikel wird beschrieben, wie Sie eine WASAPI-Implementierung aktualisieren, um die Vorteile des automatischen Streamroutings zu nutzen.

Ab Windows 7 wird der Audiowiedergabestream einer App nahtlos von dem vorherigen Standardaudiogerät auf das neue Standardaudiogerät übertragen. Diese Übertragung erfolgt automatisch ohne zusätzlichen Anwendungscode. Vor Windows 10 Version 1607 konnten Apps, die die Windows Audiositzungs-API (Audio Session API, WASAPI) verwendet haben, jedoch nicht an dieser automatisierten Streamweiterleitungsfunktion teilnehmen. Apps, die WASAPI verwenden, mussten ihre eigene Form des Streamroutings implementieren, indem sie zusätzlichen Code hinzufügen, um die Ankunft und Entfernung von Audiogeräten zu erkennen und den Datenstrom entsprechend zu diesen Geräten zu wechseln. Anwendungen, die WASAPI verwenden, die keinen eigenen Stream-Routingmechanismus auf Geräteannahme oder Entfernung implementiert haben, was eine weniger als ideale Benutzererfahrung bietet.

Ab dem Windows 10, Version 1607, können Apps, die WASAPI verwenden, das automatische Streamrouting nutzen. Wenn Ihre Anwendung WASAPI verwendet, wird dringend empfohlen, Ihre Anwendung zu aktualisieren, um diese neue Funktion mit den folgenden Schritten zu nutzen:

  1. Windows 10, Version 1607, definiert zwei neue GUIDs, die verwendet werden können, um eine Audiowiedergabe- oder Aufnahmeschnittstelle mit automatischer Streamrouting, DEVINTERFACE_AUDIO_RENDER und DEVINTERFACE_AUDIO_CAPTURE zu aktivieren. Rufen Sie eine Zeichenfolgendarstellung dieser GUIDs ab, indem Sie StringFromIID aufrufen. Das folgende Beispiel zeigt diesen Aufruf für die Audiorender-GUID.

    PWSTR audioRenderGuidString;
    StringFromIID(DEVINTERFACE_AUDIO_RENDER, &audioRenderGuidString);
    
  2. Aktivieren Sie den Audioendpunkt, indem Sie die Bezeichnerzeichenfolge an die FUNKTION WASAPI ActivateAudioInterfaceAsync übergeben. Im folgenden Beispiel wird der in Schritt 1 abgerufene Audiorenderbezeichner übergeben:

    //Activate the default audio interface
    ActivateAudioInterfaceAsync(audioRenderGuidString
                                __uuidof(IAudioClient),
                                NULL,
                                completionHandler.Get(),
                                operation.GetAddressOf()));
    
  3. Geben Sie den Speicher frei, der für die Aufbewahrung des Endpunktbezeichners zugewiesen ist:

    CoTaskMemFree(audioRenderGuidString);  //free the string memory
    

Nachdem Sie Ihre App so geändert haben, dass die Audioschnittstelle auf die oben beschriebene Weise aktiviert wird, wird sie an der automatischen Streamweiterleitungsfunktion teilnehmen.

Verwenden Sie einen Laptop oder Tablet, der mit internen Lautsprechern ausgestattet ist, um das automatische Streamrouting zu veranschaulichen. Sie sollten die Audiowiedergabe über die internen Lautsprecher des Geräts hören. Schließen Sie während der Audiowiedergabe ein Paar Kopfhörer an. Sie sollten jetzt Audiowiedergabe über die Kopfhörer hören. Trennen Sie dann die Kopfhörer und Audio sollten automatisch an die internen Lautsprecher weitergeleitet werden.

Streamrouting

MediaDevice.GetDefaultAudioRenderId

MediaDevice.GetDefaultAudioCaptureId

ActivateAudioInterfaceAsync