Signatur
Beschreibung
Die Eigenschaft suppressLocalAudioPlayback des Wörterbuchs MediaTrackSettings gibt an, welcher Wert für die gleichnamige Einschränkung (Constraint) auf einer Audiospur tatsächlich gilt. Solche Spuren entstehen bei der Bildschirm- oder Tab-Aufnahme mit navigator.mediaDevices.getDisplayMedia(). Ist der Wert true, spielt der Browser das Audio des erfassten Tabs nicht mehr über die lokalen Lautsprecher ab. Es landet nur noch im aufgenommenen MediaStream.
Das ist vor allem bei Videokonferenzen und Streaming nützlich. Wenn Sie einen Tab mit Ton teilen, hören Sie das Audio sonst doppelt: einmal direkt aus dem Tab und einmal über die Konferenz. Außerdem kann es zu Echos kommen, wenn das Mikrofon den Lautsprecher mit aufnimmt.
Den Wert lesen Sie über MediaStreamTrack.getSettings() aus. Setzen können Sie ihn beim Aufruf von getDisplayMedia() über audio: { suppressLocalAudioPlayback: true } oder nachträglich mit MediaStreamTrack.applyConstraints(). Ob der Browser die Einschränkung überhaupt kennt, prüfen Sie vorher mit navigator.mediaDevices.getSupportedConstraints().
Rückgabewert
true, wenn die lokale Wiedergabe des erfassten Audios unterdrückt wird, sonst false. Fehlt die Eigenschaft im Einstellungsobjekt (undefined), unterstützt der Browser die Einschränkung nicht oder die Spur stammt nicht aus einer Bildschirmaufnahme.Beispiele
Tab mit Ton erfassen und Einstellung auslesen
const startCapture = async () => {
const stream = await navigator.mediaDevices.getDisplayMedia({
video: true,
audio: { suppressLocalAudioPlayback: true }
});
const [audioTrack] = stream.getAudioTracks();
if (!audioTrack) {
console.log('Kein Audio freigegeben');
return;
}
const { suppressLocalAudioPlayback } = audioTrack.getSettings();
console.log('Lokale Wiedergabe unterdrückt:', suppressLocalAudioPlayback);
};
document.querySelector('#share').addEventListener('click', startCapture);
Unterstützung vorab prüfen
const supported = navigator.mediaDevices.getSupportedConstraints();
if (supported.suppressLocalAudioPlayback) {
console.log('suppressLocalAudioPlayback wird unterstützt');
} else {
console.log('Nicht unterstützt – lokales Audio läuft weiter');
}
Lokale Wiedergabe während der Aufnahme umschalten
const toggleLocalPlayback = async (audioTrack) => {
const current = audioTrack.getSettings().suppressLocalAudioPlayback ?? false;
try {
await audioTrack.applyConstraints({ suppressLocalAudioPlayback: !current });
console.log('Neu:', audioTrack.getSettings().suppressLocalAudioPlayback);
} catch (err) {
console.error('Einschränkung nicht anwendbar:', err.name);
}
};
// Aufruf z. B. mit dem Track aus getDisplayMedia():
// await toggleLocalPlayback(stream.getAudioTracks()[0]);
// Wichtig · Fallstricke
- Experimentell: Derzeit unterstützen nur Chromium-basierte Browser (Chrome, Edge, Opera) die Eigenschaft. Firefox und Safari kennen sie nicht. Prüfen Sie die Unterstützung immer mit
getSupportedConstraints(). - Die Eigenschaft wirkt nur bei Tab-Aufnahmen. Teilt der Benutzer ein Fenster oder den ganzen Bildschirm, gibt es je nach Betriebssystem kein oder nur System-Audio, und die Einschränkung hat keine Wirkung.
- Ob überhaupt eine Audiospur entsteht, entscheidet der Benutzer im Freigabedialog, zum Beispiel über die Option „Tab-Audio teilen“. Prüfen Sie deshalb, ob
getAudioTracks()ein leeres Array liefert. getSettings()gibt den tatsächlich angewandten Wert zurück, nicht den angeforderten. Beide können sich unterscheiden.- Wenn Sie die Einschränkung mit
exactangeben und der Browser sie nicht erfüllen kann, wirdapplyConstraints()mit einemOverconstrainedErrorabgelehnt. getDisplayMedia()funktioniert nur in einem sicheren Kontext (HTTPS) und nur nach einer Benutzeraktion.