https://github.com/microsoft/Windows-cl ... onLoopback
Mein Ziel ist es, Prozess-Loopback (über AUDIOCLIENT_ACTIVATION_TYPE_PROCESS_LOOPBACK) zu verwenden, damit ich den Systemmix über das Windows-Audio erfassen kann Engine, ohne Treiber zu installieren oder Injektion/Hooking durchzuführen.
In meinem Hauptanwendungsfall möchte ich Audio von allen Anwendungen außer meiner eigenen App aufzeichnen, also verwende ich PROCESS_LOOPBACK_MODE_EXCLUDE_TARGET_PROCESS_TREE. Ich habe es auch mit PROCESS_LOOPBACK_MODE_INCLUDE_TARGET_PROCESS_TREE getestet, um das auszuschließen.
Was funktioniert
Mit dem ApplicationLoopback-Ansatz mit VIRTUAL_AUDIO_DEVICE_PROCESS_LOOPBACK zeichnet meine Aufnahme-App erfolgreich Audio auf für:
- Slack
- Zoom
- Google Meet in Chrome/Edge
- Microsoft Teams-Besprechungen im Browser (Edge/Chrome)
- Youtube-Videos im Browser
Was fehlschlägt
Das Problem tritt nur bei der Microsoft Teams-Desktopanwendung auf (
Code: Select all
ms-teams.exe- Mit Prozess-Loopback (ApplicationLoopback-Stil):
Die Aufzeichnung hat die richtige Dauer und das richtige Format. - Aber der Audiopuffer ist praktisch alle Nullen (Stille), wenn die Audioquelle ein Teams-Desktop ist Treffen.
Was seltsam ist, ist, dass ich mit der älteren Geräte-Loopback-Methode aufzeichnen kann (ich bezeichne dies manchmal als Endpunkt-Loopback) https://learn.microsoft.com/en-us/windo ... g-a-stream
Mehrere Streams von MS Teams
Zur weiteren Untersuchung habe ich ein kleines Diagnosetool geschrieben, das Audiositzungen für einen bestimmten Prozess mithilfe von IAudioSessionManager2 auflistet und die Spitzenpegel über IAudioMeterInformation liest.
Für das von Teams während einer Besprechung verwendete Ausgabegerät sehe ich Folgendes:
- Zwei Rendersitzungen für ms-teams.exe auf demselben Rendergerät, plus eine Capture-Sitzung.
- Beide Rendersitzungen:
Haben die gleiche Prozess-ID ()Code: Select all
ms-teams.exeIch habe auch einen Sitzungsenumerator geschrieben, der alle für ein Gerät geöffneten Audiositzungen auflistet und auch das Gleiche anzeigt:Code: Select all
Session [0]: Session GUID: {0.0.0.00000000}.{6474f13d-839f-4be8-b36c-f653233effdd}|\Dev... Grouping GUID: {C82CDF72-3957-4B52-ABF2-9ACA5F8153A1} Samples w/ Audio: 32 / 50 (64%) Max Peak Level: 49.6552% Avg Peak Level: 12.5515% *** THIS SESSION HAS SIGNIFICANT AUDIO ACTIVITY *** Session [1]: Session GUID: {0.0.0.00000000}.{6474f13d-839f-4be8-b36c-f653233effdd}|\Dev... Grouping GUID: {C82CDF72-3957-4B52-ABF2-9ACA5F8153A1} Samples w/ Audio: 32 / 50 (64%) Max Peak Level: 49.6552% Avg Peak Level: 12.642% *** THIS SESSION HAS SIGNIFICANT AUDIO ACTIVITY ***Für alle anderen Apps wie Slack, Zoom, Chrome usw. sehe ich in diesem Szenario nur eine Rendersitzung pro Prozess auf demselben Gerät.Code: Select all
=== Render Devices === Speakers (Realtek(R) Audio) [48000 Hz, 32-bit, 2 ch (Float)] : 0 active sessions ID: {0.0.0.00000000}.{357dc357-13e3-4cdb-90c9-ab54f23dedcf} XG27ACS (Intel(R) Display Audio) [48000 Hz, 32-bit, 2 ch (Float)] : 0 active sessions ID: {0.0.0.00000000}.{4af2ff2a-e7bf-4a47-8de4-876e9ba2d6ce} Speakers (Razer BlackShark V2 HS 2.4) [48000 Hz, 32-bit, 2 ch (Float)] [Default: Console, Multimedia, Communications] : 2 active sessions ID: {0.0.0.00000000}.{6474f13d-839f-4be8-b36c-f653233effdd} - ms-teams.exe PID: 10596 - ms-teams.exe PID: 10596 CABLE Input (VB-Audio Virtual Cable) [48000 Hz, 32-bit, 2 ch (Float)] : 0 active sessions ID: {0.0.0.00000000}.{65fbe74c-81c9-4c39-8a75-55033aa39f4c} CABLE In 16ch (VB-Audio Virtual Cable) [48000 Hz, 32-bit, 2 ch (Float)] : 0 active sessions ID: {0.0.0.00000000}.{a2a0ed57-95c3-4689-b0ff-efabb8c3efe1}
Windows geht also davon aus, dass Teams aktiv Audio rendert (Messgeräte bewegen sich in beiden Sitzungen), und der Endpunkt-Loopback hört es – aber der Prozess-Loopback-Stream, der auf die Teams-PID abzielt, ist immer noch nur Nullen
Das stimmt Ich bin mir keiner API bewusst, mit der ich eine bestimmte Rendersitzung/einen bestimmten Stream für den Prozess-Loopback auswählen kann. Soweit ich weiß, kann ich mit AUDIOCLIENT_PROCESS_LOOPBACK_PARAMS nur eine PID und einen Einschluss-/Ausschlussmodus angeben.
Was ich überprüft habe
Mehrere Maschinen (verschiedene Hersteller, unterschiedliche Audio-Hardware): gleiches Verhalten. - Verschiedene Teams-Versionen, einschließlich at mindestens 25306.804.4102.7193 (und frühere Builds): dasselbe Verhalten.
- Überprüft, dass:
Teams spielt definitiv Audio über das Standardausgabegerät ab. - Endpunkt-Loopback „hört“ es.
- Andere Apps werden problemlos über Prozess-Loopback auf denselben Maschinen erfasst.
Mir ist bekannt, dass andere Leute ähnliche Symptome sehen (z. B. ActivateAudioInterfaceAsync-Prozess-Loopback, der Teams nicht erfasst, während andere Apps erfasst werden, und OBS / win-capture-audio erfasst den neuen Teams-Client nicht über App-spezifische Erfassung während des Geräts Die Aufnahme funktioniert immer noch), aber ich habe nirgendwo eine gemeldete Lösung gesehen.
Was ich wissen möchte
- Gibt es eine unterstützte Möglichkeit, um sicherzustellen, dass Audio von der Teams-Desktop-App in den Process-Loopback-Stream einbezogen wird, genau wie bei anderen Apps und für Teams-im-Browser?
- Oder Verwendet der Teams-Desktop einen speziellen Audiopfad, der nicht durch Prozess-Loopback offengelegt wird (und wenn ja, ist dies irgendwo dokumentiert)?
Mobile version