J'utilise WebRTC (Mac natif et Windows natif - pas JS) et j'essaie de modifier les périphériques de lecture et d'enregistrement par défaut et j'ai beaucoup de problèmes. Cela commence à me rendre dingue car cela devrait être très simple.

Question : Quelle est la méthode recommandée pour modifier les périphériques de lecture et d'enregistrement audio pendant qu'un appel est en cours sur Mac et Windows, en mode natif ?

Voici ce que j'ai essayé:

Méthode 1

Mac

J'ai remarqué que le module de périphérique audio écoute les notifications de l'API Core Audio et ajuste correctement les périphériques de lecture et d'enregistrement. Cela fonctionne, mais je ne sais pas si c'est la méthode recommandée pour changer d'appareil.

Les fenêtres

Je n'ai pas été en mesure de trouver un moyen à l'échelle du système de définir le périphérique de lecture/enregistrement audio par défaut. La seule façon pour moi de dire à MIGHT le travail est d'obtenir une référence au module de périphérique audio et d'appeler manuellement SetPlayoutDevice / SetRecordingDevice dessus ... ce qui conduit à la méthode 2 ci-dessous :

Méthode 2

Mac

Si possible, je préfère utiliser SetPlayoutDevice (lien) / SetRecordingDevice (link) pour modifier l'entrée/sortie audio (pour que Mac et Windows fonctionnent de la même manière).

Les tests unitaires pour tester de vrais les périphériques audio IO montrent que nous devrions pouvoir appeler StartPlayout et StopPlayout après un appel à SetPlayoutDevice - mais cela bloque mon application. Je l'ai essayé sans appeler StopPlayout et StartPlayout mais cela ne semble rien faire. Cela a du sens car il semble que seul l'état interne soit modifié, mais rien n'est modifié.

Q : Comment puis-je modifier le périphérique de lecture audio et le périphérique d'enregistrement par défaut sur Mac ?

Les fenêtres

Je n'ai pas encore eu l'occasion de l'essayer sous Windows, mais Mac ne fonctionne pas me fait penser qu'il me manque quelque chose ici.

0
vinnybad 12 nov. 2020 à 23:52

1 réponse

Meilleure réponse

Répondre moi-même.

VoEHardwareImpl (https:// chrome.googlesource.com/external/webrtc/stable/webrtc/+/refs/heads/master/voice_engine/voe_hardware_impl.cc) semble avoir un code pertinent.

Pour la diffusion :

  • Arrêter la lecture
  • ...définir l'index de l'appareil...
  • La lecture stéréo est disponible
  • SetStereoPlayout
  • InitPlayout
  • DémarrerPlayout

Pour l'enregistrement :

  • Arrête d'enregistrer
  • ...définir l'index de l'appareil...
  • L'enregistrement stéréo est disponible
  • Définir l'enregistrement stéréo
  • InitRecording
  • Commencer l'enregistrement

Selon le commit sur lequel vous vous trouvez, vous devrez peut-être vous assurer que vous ne vous retrouverez pas dans une situation de blocage. Certaines de ces méthodes acquièrent des verrous, alors assurez-vous que le verrou n'est pas encore acquis si vous appelez une méthode qui nécessite des verrous. Mieux encore - faites-le un niveau au-dessus ou enveloppez l'adm si possible.

0
vinnybad 19 nov. 2020 à 09:37