WASAPI Application Loopback kann MS Teams nicht aufzeichnenC++

Programme in C++. Entwicklerforum
Anonymous
 WASAPI Application Loopback kann MS Teams nicht aufzeichnen

Post by Anonymous »

Ich versuche, eine System-Audioaufzeichnungsanwendung zu entwickeln, die die von WASAPI bereitgestellte Anwendungs-Loopback-Methode verwendet. Ich stütze meine Implementierung auf das Anwendungs-Loopback-Beispiel für klassische Windows-Beispiele:
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
Bei all diesen enthält die ausgegebene WAV-Datei wie erwartet gültiges Audio.
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.exe
    )

    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 ***
    
    Ich habe auch einen Sitzungsenumerator geschrieben, der alle für ein Gerät geöffneten Audiositzungen auflistet und auch das Gleiche anzeigt:

    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}
    
    Für alle anderen Apps wie Slack, Zoom, Chrome usw. sehe ich in diesem Szenario nur eine Rendersitzung pro Prozess auf demselben Gerät.
    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)?
Ich bin nicht auf der Suche nach Lösungen, die virtuelle Audiotreiber oder die Einspeisung in Teams beinhalten; Ich frage speziell, was mit WASAPI-Prozess-Loopback möglich ist, wobei dasselbe Modell wie das ApplicationLoopback-Beispiel von Microsoft verwendet wird.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post