Signatur
Beschreibung
Die Eigenschaft echoCancellation gehört zum Wörterbuch MediaTrackSupportedConstraints. Ein solches Objekt liefert navigator.mediaDevices.getSupportedConstraints(). Kennt der Browser die Constraint echoCancellation, steht die Eigenschaft im Objekt und hat den Wert true. Kennt er sie nicht, fehlt die Eigenschaft ganz, und beim Auslesen erhältst du undefined. Den Wert false gibt es hier nicht.
Echounterdrückung sorgt dafür, dass der Ton aus den Lautsprechern nicht über das Mikrofon wieder aufgenommen wird. Das brauchst du vor allem bei Videokonferenzen, Sprachchats und WebRTC-Anwendungen. Für Musik- oder Aufnahme-Apps schaltet man sie oft bewusst ab, damit das Signal unverfälscht bleibt.
Wichtig: Die Eigenschaft sagt nur, ob der Browser die Constraint grundsätzlich kennt. Ob das Gerät oder die aktuelle Spur Echounterdrückung wirklich anbietet, erfährst du über MediaStreamTrack.getCapabilities(). Welcher Wert gerade aktiv ist, zeigt MediaStreamTrack.getSettings().
Rückgabewert
true, wenn der Browser die Constraint echoCancellation unterstützt. Sonst fehlt die Eigenschaft, und beim Auslesen erhältst du undefined.Beispiele
Unterstützung prüfen
const supported = navigator.mediaDevices.getSupportedConstraints();
if (supported.echoCancellation) {
console.log('Echounterdrückung wird unterstützt.');
} else {
console.log('Echounterdrückung wird nicht unterstützt.');
}
Mikrofon für Sprachchat mit Echounterdrückung öffnen
const openMicrophone = async () => {
const supported = navigator.mediaDevices.getSupportedConstraints();
const audio = supported.echoCancellation
? { echoCancellation: true, noiseSuppression: true }
: true;
const stream = await navigator.mediaDevices.getUserMedia({ audio });
const [track] = stream.getAudioTracks();
console.log('Aktiv:', track.getSettings().echoCancellation);
return stream;
};
openMicrophone().catch((err) => console.error('Kein Mikrofonzugriff:', err.name));
Echounterdrückung für Musikaufnahme abschalten
const startRecording = async () => {
const { echoCancellation } = navigator.mediaDevices.getSupportedConstraints();
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const [track] = stream.getAudioTracks();
if (echoCancellation) {
// Unverfälschtes Signal für Instrumentenaufnahme
await track.applyConstraints({ echoCancellation: false, autoGainControl: false });
}
console.log(track.getSettings().echoCancellation);
return stream;
};
startRecording();
// Wichtig · Fallstricke
- Unterstützung heißt nicht Verfügbarkeit:
truebedeutet nur, dass der Browser die Constraint kennt. Ob das Gerät sie wirklich umsetzt, prüfst du mittrack.getCapabilities().echoCancellation. Den tatsächlich aktiven Wert lieferttrack.getSettings(). - Nie
false: Nicht unterstützte Constraints fehlen einfach im Objekt. Prüfe deshalb auf truthy oder mit'echoCancellation' in supported, aber nicht auf=== false. - Voreinstellung: In den meisten Browsern ist die Echounterdrückung beim Mikrofonzugriff standardmäßig eingeschaltet. Für Aufnahmen in Musikqualität musst du sie ausdrücklich abschalten.
- Sicherer Kontext:
navigator.mediaDevicesgibt es nur über HTTPS oder unterlocalhost. In unsicheren Kontexten ist esundefined. - Neuere Spezifikationen erlauben für
echoCancellationauch Zeichenketten wie"all"oder"remote-only". Diese werden aber bisher kaum von Browsern unterstützt.