I\'m currently working on webrtc project, and having a problem with audio echo when not using an earphone, or external mic, is there any work around or fix for this
Currently there's no best solution for echo cancelation in webrtc, so the best solution i found is using AEC software, or built in echo cancelation software
Echo cancellation is supposed to be on by default in WebRTC. You can turn it off to hear the difference:
navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: false } })
.then(stream => audio.srcObject = stream)
.catch(e => log(e));
var log = msg => div.innerHTML += msg + "<br>";
<audio id="audio" controls autoplay></audio><br>
<div id="div"></div>
<script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
Echo cancellation technology can exist at many levels - software in the browser, in the OS, and sometimes even in your hardware mic - sometimes these technologies can interfere with each other.
Not knowing your system, I would recommend checking out your system's sounds settings to make sure you don't have helpful processing happening at too many levels.
For example, on OSX, there's a use ambient noise reduction feature under Sound Settings that unintuitively works better for me with WebRTC when I turn off. You only want one chef attempting echo cancellation at the same time.
If you are working on a web site for other clients, then there's not much you can do in software, and I would expect most systems to work, if not perfectly, decently well, though a headset will always be better.
I had the same trouble even with the video echoCancellation constraint
I could finally delete the echo/noise adding the property muted="true"
to your local video element and set up the volume to 0 document.getElementById("localVideo").volume = 0
That will not prevent your localStream to have the sound but it'll cancel the noise you have locally.