Freigeben über


Relevante Benachrichtigungen für das Streamrouting

In Windows 7 implementieren allgemeine Plattform-APIs, die Core-Audio-APIs wie Media Foundation, DirectSound und Wave-APIs verwenden, das Streamroutingfeature, indem sie den Streamwechsel von einem vorhandenen Gerät zu einem neuen Standardaudioendpunkt behandeln. Medienanwendungen, die diese APIs verwenden, verwenden das Streamroutingverhalten ohne Änderungen an der Quelle. Direkte WASAPI-Clients können die von Core Audio-Komponenten gesendeten Benachrichtigungen verwenden und die Streamroutingfunktion implementieren.

Um die Streamroutingfunktion zu implementieren, muss ein Client auf zwei Arten von Ereignissen lauschen: Geräteänderungsbenachrichtigungen und Benachrichtigungen zum Trennen der Sitzung. In der implementierung, die von den allgemeinen APIs bereitgestellt wird, werden diese Ereignisse für Standardgeräteendpunkte gesendet, die durch Aufrufen von IMMDeviceEnumerator::GetDefaultAudioEndpoint erstellt werden. Weitere Informationen finden Sie unter Abrufen des Geräteendpunkts für das Streamrouting.

Die Core Audio-Komponente MMDeviceAPI sendet Benachrichtigungsrückrufe, wenn Audiogeräte hinzugefügt, entfernt oder geändert werden. Format- und Audiositzungsänderungen werden über WASAPI als Ereignisse gemeldet.

Geräteänderungsbenachrichtigungen

MMDeviceAPI löst Ereignisse aus, wenn Audiogeräte hinzugefügt, entfernt oder geändert werden. Wenn der Client Streamroutingfunktionen bereitstellen soll, muss er die IMMNotificationClient-Schnittstelle implementieren und ihre Implementierung bei MMDeviceAPI registrieren.

Um Geräteänderungsbenachrichtigungen zu erhalten, muss der Client die folgenden Aufgaben ausführen:

Nachdem die Implementierung dieser Schnittstellen durch den Client registriert wurde, empfängt der Client Benachrichtigungen in Form von Rückrufen über die Methoden dieser Schnittstellen. IMMNotificationClient-Methoden werden von MMDeviceAPI aufgerufen, wenn Ereignisse auf Endpunktebene ausgelöst werden (Endpunktstatusänderungen, neue Endpunkteinkünfte, Endpunktlöschungen, Standardendpunktänderungen und Endpunkteigenschaftenänderungen).

Wenn der Client Streamrouting für das Standardgerät bereitstellen möchte, muss der Client das Geräteänderungsverhalten implementieren, wenn er die Benachrichtigung über den IMMNotificationClient::OnDefaultDeviceChanged-Rückruf empfängt .

Benachrichtigungen zur Änderung von Audiositzungen

Audiositzungsänderungen und Formatänderungen werden über WASAPI als Audiositzungsereignisse gemeldet. Ein WASAPI-Client implementiert die IAudioSessionEvents-Schnittstelle und registriert die Implementierung bei WASAPI.

Um Benachrichtigungen zur Änderung von Audiositzungen zu erhalten, muss der Client die folgenden Aufgaben ausführen:

IAudioSessionEvents-Methoden werden von WASAPI aufgerufen, wenn Audiositzungsänderungen auftreten. Diese Ereignisse werden ausgelöst, wenn sich der Anzeigename, der Symbolpfad, das Volume, der Gruppierungsparameter oder der Zustand der Sitzung ändert.

Um die Streamroutingfunktion zu implementieren, muss der Client auf die Benachrichtigung zum Trennen der Sitzung warten. Wenn eine Audiositzung getrennt oder das Format eines Geräts geändert wird, sendet WASAPI die Clientbenachrichtigungen in Form von Rückrufen über IAudioSessionEvents::OnSessionDisconnected. Mit der Trennungsbenachrichtigung sendet WASAPI auch einen Wert, der angibt, warum die Sitzung getrennt wurde. Dies kann aus verschiedenen Gründen auftreten, z. B. wenn das Gerät entfernt wurde, der Server beendet wurde usw. Die vollständige Liste der Gründe finden Sie in der in AudioPolicy.h definierten AudioSessionDisconnectReason-Enumeration . Wenn sich das Standardgerät ändert, muss der Client auf die Benachrichtigungen warten (sofern sie noch nicht empfangen wurden), die mit einem DisconnectReasonDeviceRemoval-Wert versehen sind. Als Reaktion auf solche Benachrichtigungen kann der Client den Stream auf dem neuen Standardgerät erneut öffnen.

Da alle diese Vorgänge aychron sind, kann die Reihenfolge, in der die Anwendung Benachrichtigungen empfängt, nicht vorhergesagt werden. In der Regel empfängt die Anwendung jedoch den AudioSessionDisconnect-Wert vor der Standardbenachrichtigung zum Gerätewechsel.

Formatänderungsbenachrichtigungen

Audioformatänderungen treten auf, wenn sich das Format des Streams ändert. Dies kann auftreten, wenn der Benutzer in der Sound-Systemsteuerung ein neues Format auswählt oder das neue Standardgerät ein neues Format unterstützt (z. B. HDMI oder bestimmte professionelle Audioschnittstellen mit manueller Anpassung der Abtastrate). Um den Client über diese Typen von Formatänderungen zu benachrichtigen, sendet WASAPI eine Sitzungsbenachrichtigung von der registrierten Implementierung von IAudioSessionEvents::OnSessionDisconnected mit dem Trennungsgrund DisconnectReasonFormatChanged. Der Client kann die Benachrichtigung verarbeiten, indem er den Stream im neuen Format erneut öffnet.

Informationen zur MMDevice-API

Über WASAPI

Streamrouting