Perché WebRTC perde l'audio
Sto realizzando un'app per videoconferenze in cui l'audio è molto importante. Ho appena superato un grosso ostacolo (mi ci sono volute circa 2 settimane su 2 settimane e mezzo di lavoro su di esso), cambiando dispositivo audio, ma ora quando vado a provarlo su 2 computer e alzo il microfono l'audio si spegne . Ho quindi alzato l'ingresso del microfono, che ha funzionato per la stessa quantità di tempo prima che il volume si abbassasse. Ho anche provato a installare autoGainControl
a false
, ma che non sembrava di fare nulla. C'è un modo semplice per farlo?
Ho provato: noiseSuppression: false
, (ovviamente autoGainControl
), echoCancellation: false
, channelCount: 2
, latency: 0
, ognuno dei quali non ha funzionato. Ecco il codice corrente per getUserMedia
:
audio: {
echoCancellation: echoCancellationMASTER,
noiseSuppression: noiseSuppressionMASTER,
latency: 0,
sampleRate: 48000,
sampleSize: 24,
autoGainControl: false
/*autoGainControl: false,
channelCount: 2,
latency: 0,
volume: 3.0*/
}
Nota che il codice commentato è quello che ho anche provato, ma attualmente non lo sto utilizzando.
Fare clic qui per il codice GitHub
Tutte le idee sono apprezzate, grazie !!
Risposte
In primo luogo, chrome://webrtc-internals
assicurati che i tuoi vincoli vengano applicati correttamente, nel modo in cui ti aspetti che siano.
Quindi, usa un set di cuffie su ciascuno per eliminare la possibilità di feedback. Ciò aiuterà a confermare il problema, che sospetto sia un algoritmo di cancellazione dell'eco da qualche parte. Dopo aver confermato che è così ...
Anche se si imposta echoCancellation
su false
e noiseSuppression
su false
, molti dispositivi hanno ancora i propri "miglioramenti" per la riduzione del feedback. Sospetto che questo sia quello che stai ascoltando.
Se questo è il caso, allora non c'è davvero nulla che puoi fare al riguardo come sviluppatore web. È a un livello completamente diverso a parte il browser. Vedo spesso questo problema con i driver Realtek di Lenovo quando utilizzo il microfono come dispositivo di "comunicazione", ma ho avuto lo stesso problema su altri computer.