Automatisches Streamrouting
In diesem Artikel wird beschrieben, wie Sie eine WASAPI-Implementierung aktualisieren, um das automatische Streamrouting zu nutzen.
Ab Windows 7 wird der Audiowiedergabestream einer App nahtlos vom vorherigen Standardaudiogerät auf das neue Standardaudiogerät übertragen, wenn sich das Standardaudiogerät ändert. Diese Übertragung erfolgt automatisch ohne zusätzlichen Anwendungscode. Vor Windows 10 Version 1607 konnten Apps, die die low-level Windows Audio Session API (WASAPI) verwendet haben, jedoch nicht an dieser automatisierten Streamroutingfunktion teilnehmen. Apps, die WASAPI verwenden, mussten ihre eigene Form des Streamroutings implementieren, indem sie zusätzlichen Code hinzugefügt haben, um das Eintreffen und Entfernen von Audiogeräten zu erkennen und den Stream nach Bedarf auf diese Geräte umzuleiten. Anwendungen, die WASAPI verwenden und keinen eigenen Streamroutingmechanismus beim Ein- oder Entfernen von Geräten implementiert haben, riskieren, eine weniger ideale Benutzererfahrung zu bieten.
Ab version 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:
Windows 10 Version 1607 definiert zwei neue GUIDs, die zum Aktivieren einer Audiorendering- oder Erfassungsschnittstelle mit automatischem Streamrouting verwendet werden können: DEVINTERFACE _ AUDIO _ RENDER und DEVINTERFACE _ AUDIO _ CAPTURE. 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);Aktivieren Sie den Audioendpunkt, indem Sie die Bezeichnerzeichenfolge an die WASAPI-Funktion ActivateAudioInterfaceAsync übergeben. Im folgenden Beispiel wird der in Schritt 1 erhaltene Audiorenderbezeichner übergibt:
//Activate the default audio interface ActivateAudioInterfaceAsync(audioRenderGuidString __uuidof(IAudioClient), NULL, completionHandler.Get(), operation.GetAddressOf()));Gibt den zugeordneten Arbeitsspeicher für den Endpunktbezeichner frei:
CoTaskMemFree(audioRenderGuidString); //free the string memory
Nachdem Sie Ihre App so geändert haben, dass sie die Audioschnittstelle auf die oben beschriebene Weise aktiviert, wird sie teil der Funktion für automatisches Streamrouting.
Verwenden Sie einen Laptop oder ein 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. Verbinden Sie während der Audiowiedergabe ein Paar von Brillen. Sie sollten jetzt Audio hören, das durch die Lautsprecher spielt. Anschließend sollten die Entprückungen und Audiodaten automatisch zurück an die internen Lautsprecher geroutet werden.