Loopbackaufzeichnung
Im Loopbackmodus kann ein WASAPI-Client den Audiostream erfassen, der von einem Renderingendpunktgerät wiedergegeben wird. Um einen Stream im Loopbackmodus zu öffnen, muss der Client Folgendes ausführen:
- Rufen Sie eine IMMDevice-Schnittstelle für das Renderingendpunktgerät ab.
- Initialisieren Sie einen Aufzeichnungsdatenstrom im Loopbackmodus auf dem Renderingendpunktgerät.
Nachdem Sie diese Schritte ausgeführt haben, kann der Client die IAudioClient::GetService-Methode aufrufen, um eine IAudioCaptureClient-Schnittstelle auf dem Renderingendpunktgerät abzurufen.
WASAPI bietet den Loopbackmodus in erster Linie zur Unterstützung der akustischen Echounterdrückung (Acoustic Echo Cancellation, AEC). Andere Arten von Audioanwendungen finden den Loopbackmodus jedoch möglicherweise nützlich für die Erfassung der Systemmischung, die von der Audio-Engine wiedergegeben wird.
Im Codebeispiel in Capture a Stream kann die RecordAudioStream-Funktion einfach geändert werden, um einen Aufzeichnungsdatenstrom im Loopbackmodus zu konfigurieren. Die erforderlichen Änderungen sind:
- Ändern Sie im Aufruf der IMMDeviceEnumerator::GetDefaultAudioEndpoint-Methode den ersten Parameter (dataFlow) von eCapture in eRender.
- Ändern Sie im Aufruf der IAudioClient::Initialize-Methode den Wert des zweiten Parameters (StreamFlags) von 0 in AUDCLNT_STREAMFLAGS_LOOPBACK.
In Versionen von Windows vor Windows 10 1703 empfängt der Pullmoduserfassungsclient keine Ereignisse, wenn ein Stream mit ereignisgesteuerter Pufferung initialisiert und Loopback aktiviert ist. Um dies zu umgehen, initialisieren Sie einen Renderdatenstrom im ereignisgesteuerten Modus. Jedes Mal, wenn der Client ein Ereignis für den Renderdatenstrom empfängt, muss er dem Aufzeichnungsclient signalisieren, dass er den Erfassungsthread ausführt, der den nächsten Satz von Beispielen aus dem Erfassungsendpunktpuffer liest. In Windows 10 Versionen 1703 und höher werden ereignisgesteuerte Loopbackclients unterstützt, und die Problemumgehung mit dem Renderdatenstrom ist nicht mehr erforderlich.
Ein Client kann den Loopbackmodus nur für einen Stream im freigegebenen Modus (AUDCLNT_SHAREMODE_SHARED) aktivieren. Datenströme im exklusiven Modus können nicht im Loopbackmodus ausgeführt werden.
Die Implementierung von Loopback durch WASAPI hängt von den Funktionen der Hardware ab. Wenn die Hardware einen Loopback-Pin für den Renderendpunkt unterstützt, verwendet WASAPI die auf diesem Pin bereitgestellte Audio für den Loopbackstream. Wenn die Hardware keinen Loopback-Pin unterstützt, kopiert WASAPI den Ausgabedatenstrom aus der Audio-Engine in den Erfassungspuffer der Loopbackanwendung, zusätzlich zum Kopieren der Audiodaten in den Rendernadel der Hardware.
Einige Hardwarehersteller implementieren Loopbackgeräte (im Gegensatz zum Anheften von Instanzen auf Rendergeräten) in ihren Audioadaptern. Hardware-Loopbackgeräte ähneln zwar im Betrieb dem WASAPI-Loopbackmodus, können jedoch schwieriger zu verwenden sein.
Hardware-Loopbackgeräte haben die folgenden Nachteile für Audioanwendungen:
- Nicht alle Audioadapter verfügen über Loopbackgeräte. Daher funktionieren Anwendungen, die von ihnen abhängig sind, nicht auf allen Systemen.
- Bevor eine Anwendung aufzeichnungen von einem Loopbackgerät ausführen kann, muss der Benutzer das Loopbackgerät identifizieren und für die Verwendung aktivieren.
Verschiedene Anbieter weisen ihren Hardware-Loopbackgeräten unterschiedliche Namen zu. Die folgenden Namen sind Beispiele:
- Stereomix
- Waveout-Mix
- Gemischte Ausgabe
- Was Sie hören
Der Mangel an standardisierten Namen kann dazu führen, dass Benutzer Schwierigkeiten haben, ein Loopbackgerät in einer Liste von Gerätenamen zu identifizieren.
Ein Hardware-Loopbackgerät ist ein Erfassungsgerät. Wenn ein Adapter also ein Loopbackgerät unterstützt, kann eine Audioanwendung vom Gerät auf die gleiche Weise aufzeichnen wie von jedem anderen Aufnahmegerät.
Wenn Sie beispielsweise ein Hardware-Loopbackgerät als Standarderfassungsgerät auswählen, können Sie die RecordAudioStream-Funktion (ohne Änderung) im Codebeispiel in Capture a Stream verwenden, um den Stream vom Gerät zu erfassen. (Sie können auch eine Legacy-Audio-API verwenden, z. B. die Windows-Multimedia-Funktionen waveInXxx , um den Stream vom Gerät zu erfassen.)
Wenn Ihr Audioadapter ein Hardware-Loopbackgerät enthält, können Sie die Windows-Multimedia-Systemsteuerung Mmsys.cpl verwenden, um das Gerät als Standardaufnahmegerät festzulegen. Die Schritte lauten wie folgt:
Um Mmsys.cpl auszuführen, öffnen Sie ein Eingabeaufforderungsfenster, und geben Sie den folgenden Befehl ein:
control mmsys.cpl
Alternativ können Sie Mmsys.cpl ausführen, indem Sie mit der rechten Maustaste auf das Lautsprechersymbol im Benachrichtigungsbereich klicken, der sich auf der rechten Seite der Taskleiste befindet, und Aufzeichnungsgeräte auswählen.
Nachdem das fenster Mmsys.cpl geöffnet wird, klicken Sie mit der rechten Maustaste auf eine beliebige Stelle in der Liste der Aufzeichnungsgeräte, und überprüfen Sie, ob die Option Deaktivierte Geräte anzeigen aktiviert ist. (Andernfalls wird das Loopbackgerät, wenn es deaktiviert ist, nicht in der Liste angezeigt.)
Durchsuchen Sie die Liste der Aufzeichnungsgeräte, um das Loopbackgerät zu finden (sofern vorhanden). Wenn das Loopbackgerät deaktiviert ist, aktivieren Sie es, indem Sie mit der rechten Maustaste auf das Gerät klicken und auf Aktivieren klicken.
Um schließlich das Loopbackgerät als Standarderfassungsgerät auszuwählen, klicken Sie mit der rechten Maustaste auf das Gerät, und klicken Sie auf Als Standardgerät festlegen.
WASAPI unterstützt die Loopbackaufzeichnung unabhängig davon, ob die Audiohardware ein Loopbackgerät enthält oder ob der Benutzer das Gerät aktiviert hat.
Windows Vista bietet digitale Rechteverwaltung (DRM). Inhaltsanbieter verlassen sich auf DRM, um ihre proprietäre Musik oder andere Inhalte vor unbefugtem Kopieren und anderen illegalen Verwendungen zu schützen. Ebenso erlaubt ein vertrauenswürdiger Audiotreiber einem Loopbackgerät nicht, digitale Datenströme zu erfassen, die geschützte Inhalte enthalten. Windows Vista ermöglicht nur vertrauenswürdigen Treibern die Wiedergabe geschützter Inhalte. Weitere Informationen zu vertrauenswürdigen Treibern und DRM finden Sie in der Windows DDK-Dokumentation.
WASAPI-Loopback enthält die Mischung aller wiedergegebenen Audiodaten, unabhängig von der Terminaldienstesitzung, von der das Audio stammt. Beispielsweise können Sie einen Loopbackclient in einem Dienst ausführen, der in Sitzung 0 ausgeführt wird, und Audio aus allen Benutzersitzungen erfassen sowie Audiodaten aus Sitzung 0 wiedergeben.
Remotedesktop ermöglicht die Umleitung von Audiodaten an den Client. Dies wird implementiert, indem neue Audiogeräte erstellt werden, die nur für diese Sitzung angezeigt werden.
Zugehörige Themen