Loopbackaufzeichnung
Im Loopbackmodus kann ein Client von WASAPI den Audiodatenstrom erfassen, der von einem Renderingendpunktgerät wiedergegeben wird. Um einen Datenstrom im Loopbackmodus zu öffnen, muss der Client:
- Rufen Sie eine IMMDevice-Schnittstelle für das Renderingendpunktgerät ab.
- Initialisieren sie einen Aufnahmedatenstrom im Loopbackmodus auf dem Renderingendpunktgerät.
Nach den folgenden Schritten kann der Client die IAudioClient::GetService-Methode aufrufen, um eine IAudioCaptureClient-Schnittstelle auf dem Renderingendpunktgerät abzurufen.
WASAPI bietet den Loopbackmodus hauptsächlich zur Unterstützung der akustischen Echounterdrückung (AEC). Andere Arten von Audioanwendungen können jedoch den Loopbackmodus hilfreich finden, um den Vom Audiomodul wiedergegebenen Systemmix zu erfassen.
Im Codebeispiel beim Erfassen eines Datenstroms kann die RecordAudioStream-Funktion einfach geändert werden, um einen Loopbackmodus-Aufnahmedatenstrom 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 ereignisgesteuertem Puffer initialisiert wird 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 den Aufnahmeclient signalisieren, um den Aufnahmethread auszuführen, der den nächsten Satz von Beispielen aus dem Aufnahmeendpunktpuffer 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 Datenstrom im gemeinsam genutzten Modus (AUDCLNT_SHAREMODE_SHARED) aktivieren. Exklusivmodusdatenströme 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 eine Loopback-Pin auf dem Renderendpunkt unterstützt, verwendet WASAPI die für diesen Pin bereitgestellten Audiodaten für den Loopbackdatenstrom. Wenn die Hardware keine Loopback-Pin unterstützt, kopiert WASAPI den Ausgabedatenstrom vom Audiomodul in den Aufnahmepuffer der Loopbackanwendung, zusätzlich zum Kopieren der Audiodaten in den Render-Pin der Hardware.
Einige Hardwareanbieter implementieren Loopbackgeräte (im Gegensatz zu Instanzen auf Rendergeräten) in ihren Audioadaptern. Obwohl Hardware-Loopbackgeräte im WASAPI-Loopbackmodus ähnlich sind, können sie schwieriger zu verwenden sein.
Hardware-Loopbackgeräte haben die folgenden Nachteile für Audioanwendungen:
- Nicht alle Audioadapter verfügen über Loopbackgeräte. Anwendungen, die von ihnen abhängen, funktionieren daher nicht auf allen Systemen.
- Bevor eine Anwendung von einem Loopbackgerät aufzeichnen kann, muss der Benutzer das Loopbackgerät identifizieren und für die Verwendung aktivieren.
Unterschiedliche 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 der Gerätenamen zu identifizieren.
Ein Hardware-Loopbackgerät ist ein Aufnahmegerät. Wenn ein Adapter also ein Loopbackgerät unterstützt, kann eine Audioanwendung auf die gleiche Weise vom Gerät aufzeichnen wie von jedem anderen Aufnahmegerät.
Wenn Sie beispielsweise ein Hardware-Loopbackgerät als Standardaufnahmegerät auswählen, können Sie die RecordAudioStream-Funktion (ohne Änderung) im Codebeispiel beim Erfassen eines Datenstroms verwenden, um den Datenstrom vom Gerät zu erfassen. (Sie können auch eine ältere Audio-API verwenden, z. B. die Windows Multimedia waveInXxx-Funktionen , um den Datenstrom 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 im Infobereich mit der rechten Maustaste auf das Lautsprechersymbol klicken, das sich auf der rechten Seite der Taskleiste befindet, und "Aufzeichnungsgeräte" auswählen.
Nachdem das fenster Mmsys.cpl geöffnet wurde, klicken Sie mit der rechten Maustaste auf eine beliebige Stelle in der Liste der Aufzeichnungsgeräte, und stellen Sie sicher, dass die Option "Deaktivierte Geräte anzeigen" aktiviert ist. (Wenn das Loopbackgerät deaktiviert ist, wird es nicht in der Liste angezeigt.)
Durchsuchen Sie die Liste der Aufzeichnungsgeräte, um das Loopbackgerät (sofern vorhanden) zu finden. 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 das Loopbackgerät als Standardaufnahmegerät auszuwählen, klicken Sie mit der rechten Maustaste auf das Gerät, und klicken Sie dann auf "Als Standardgerät festlegen".
WASAPI unterstützt Loopbackaufzeichnungen, unabhängig davon, ob die Audiohardware ein Loopbackgerät enthält oder ob der Benutzer das Gerät aktiviert hat.
Windows Vista bietet verwaltung digitaler Rechte (Digital Rights Management, 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 lässt ein vertrauenswürdiger Audiotreiber kein Loopbackgerät zu, 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 standardmäßig die Mischung aller wiedergegebenen Audiodaten, unabhängig von der Terminaldienste-Sitzung, von der die Audiodaten stammen. Sie können z. B. einen Loopbackclient in einem Dienst ausführen, der in Sitzung 0 ausgeführt wird, und Audio aus allen Benutzersitzungen aufzeichnen sowie Audiodaten, die von Sitzung 0 wiedergegeben werden.
Ab Windows 10 Build 20348 können Sie bestimmte Prozesse und deren untergeordnete Elemente aus der Loopbackerfassung einschließen oder ausschließen, indem Sie eine AUDIOCLIENT_ACTIVATION_PARAMS im Aufruf von IMMDevice::Activate übergeben. Sehen Sie sich das Beispiel für die Anwendungs-Loopback-Audioaufnahme an.
Remotedesktop ermöglicht das Umleiten von Audio an den Client. Dies wird implementiert, indem neue Audiogeräte erstellt werden, die nur für diese Sitzung angezeigt werden.
Zugehörige Themen