Streamrouting
Streamrouting ist die Möglichkeit einer Medienanwendung, Datenströme zwischen Geräten mit minimaler Unterbrechung der Wiedergabe oder Aufnahmesitzung zu wechseln.
Ein Computer kann über mehrere Rendering- und Aufzeichnungsgeräte verfügen. Das System listet diese Geräte in der Sound-Systemsteuerung auf. In dieser Liste kann ein Benutzer festlegen, dass ein Gerät das Standardgerät für jede Rolle ist: Wiedergabe, Aufzeichnung oder die vier Kommunikationsrollen (Konsolenrendering, Konsolenerfassung, Kommunikationsrendering oder Kommunikationserfassung). Die Liste der Geräte kann dynamisch geändert werden, da einige dieser Geräte vorübergehend verfügbar sein können, z. B. ein USB-Headset. Wenn mehrere Geräte verfügbar sind, kann der Benutzer die Standardeinstellung in ein anderes Gerät ändern. Der Benutzer kann auch das Format eines Geräts (Abtastrate, Bits pro Stichprobe usw.) auf der Registerkarte Erweitert für die Geräteeigenschaften ändern.
Stellen Sie sich ein Szenario vor, in dem ein Benutzer Lautsprecher als Standardgerät zum Rendern von Audiostreams auswählt. Der Benutzer schließt dann ein USB-Headset an, wählt das Headset als neues Standardgerät aus und ändert die Abtastrate des Geräts von 44,1 kHz auf 48 kHz. Der Benutzer möchte den Audiostream auf dem Headset mit der neuen Abtastrate mit minimaler Unterbrechung der Streamingsitzung wiedergeben.
In diesem Szenario gibt es zwei Fälle, die die Medienanwendung behandeln muss:
- Der Stream muss mit minimaler Unterbrechung der Wiedergabe auf das neue Standardgerät übertragen werden.
- Das neue Gerät muss die Wiedergabe im neuen Format fortsetzen (das heißt, der Benutzer kann mehr als die Abtastrate ändern).
In Windows Vista musste die Medienanwendung zur Unterstützung dieses Szenarios die Implementierung für das Streamrouting bereitstellen. Die Anwendung war dafür verantwortlich, vorhandene Streams zu beenden und die Streams auf dem neuen Gerät neu zu starten. Wenn der Benutzer das Standardgerät oder sein Mixformat geändert hat, wurden alle zugehörigen Sitzungen geschlossen, und die Anwendung musste die Wiederherstellung verarbeiten.
In Windows 7 kann eine Anwendung einen Stream nahtlos von einem vorhandenen Standardgerät auf einen neuen Standardaudioendpunkt übertragen. Allgemeine Audio-API-Sets wie Media Foundation, DirectSound und WAVE-APIs implementieren die Streamroutingfunktion. Medienanwendungen, die diese API-Sätze zum Wiedergeben oder Erfassen eines Datenstroms vom Standardgerät verwenden, verwenden die Standardimplementierung und müssen die Anwendung nicht ändern. Wenn Ihre Medienanwendung jedoch mmDeviceAPI oder WASAPI direkt verwendet, muss die Anwendung die Implementierung des Streamroutings bereitstellen.
Hinweis
MMDeviceAPI und WASAPI sind Kern-Audio-API-Komponenten, die eine Anwendung zum Rendern oder Erfassen eines Datenstroms auf einem Gerät verwenden kann. Die MMDeviceAPI ermittelt das neue Audioendpunktgerät, und WASAPI verwaltet den Fluss von Audiodaten zwischen einer Medienanwendung und dem Audioendpunktgerät.
Um die Streamroutingfunktion zu implementieren, muss die Anwendung auf die Benachrichtigungen lauschen, die von MMDeviceAPI und WASAPI gesendet werden, wenn:
- Das Standardgerät wird vom Benutzer geändert.
- Das vorhandene Standardgerät wird entfernt, und ein neues Standardgerät wird hinzugefügt.
- Das Geräteformat wird geändert.
Durch die Behandlung dieser Benachrichtigungen kann eine Anwendung die erforderlichen Datenstromverwaltungsvorgänge ausführen, während der Stream auf das neue Standardgerät übertragen wird. Darüber hinaus kann die Anwendung vorhandene Datenströme rendern oder erfassen, indem sie das vom Benutzer angegebene neue Format verwendet, während eine Renderingsitzung aktiv ist.
Dieser Abschnitt enthält die folgenden Themen:
- Abrufen des Geräteendpunkts für das Streamrouting
- Relevante Benachrichtigungen für das Streamrouting
- Überlegungen zur Implementierung des Streamroutings
Die folgenden Beispiele, die im Windows SDK enthalten sind, veranschaulichen, wie eine Anwendung Streamroutingbenachrichtigungen verarbeiten kann.
- RenderSharedTimerDriven
- RenderSharedEventDriven
- RenderExclusiveTimerDriven
- RenderExclusiveEventDriven
- CaptureSharedTimerDriven
- CaptureSharedEventDriven
Zugehörige Themen