Start · Sprachen · JavaScript · Referenz · MediaTrackSettings.suppressLocalAudioPlayback

MediaTrackSettings.suppressLocalAudioPlayback

Eigenschaft

Boolescher Wert, der angibt, ob das Audio eines erfassten Tabs lokal stummgeschaltet wird (<code>true</code>) oder weiter über die Lautsprecher läuft (<code>false</code>).

seit JavaScript Experimentell: Chrome/Edge 109+, nicht in Firefox Kategorie: webapi

Signatur

MediaTrackSettings.suppressLocalAudioPlayback

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

Typ
boolean | undefined
Beschreibung
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);
Lokale Wiedergabe unterdrückt: true

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');
}
suppressLocalAudioPlayback wird unterstützt

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]);
Neu: false

// 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 exact angeben und der Browser sie nicht erfüllen kann, wird applyConstraints() mit einem OverconstrainedError abgelehnt.
  • getDisplayMedia() funktioniert nur in einem sicheren Kontext (HTTPS) und nur nach einer Benutzeraktion.