Start · Sprachen · JavaScript · Referenz · VideoTrackGenerator.muted

VideoTrackGenerator.muted

Eigenschaft

Boolesche Eigenschaft zum Lesen und Schreiben, mit der ein <code>VideoTrackGenerator</code> seinen Ausgabetrack vorübergehend stummschaltet (keine Frames) oder wieder freigibt.

seit JavaScript Eingeschränkt: Safari 18+ (nur in Dedicated Worker Kategorie: webapi

Signatur

VideoTrackGenerator.muted

Beschreibung

Die Eigenschaft muted gehört zur Schnittstelle VideoTrackGenerator aus der Spezifikation MediaStreamTrack Insertable Media Processing using Streams. Ein VideoTrackGenerator erzeugt aus VideoFrame-Objekten, die in seinen writable-Stream geschrieben werden, einen normalen MediaStreamTrack (generator.track). Über muted lässt sich steuern, ob dieser Track gerade Bilder liefert.

Wird muted auf true gesetzt, werden nachfolgend in writable geschriebene Frames verworfen, und der Ausgabetrack wechselt in den Zustand „stummgeschaltet“: track.muted wird true, und am Track wird das Ereignis mute ausgelöst. Setzt man den Wert wieder auf false, werden Frames erneut weitergereicht, und der Track löst unmute aus. Der Standardwert ist false.

Typische Einsatzfälle sind ein „Kamera pausieren“-Knopf in Videokonferenzen, das Ausblenden des Bildes während einer Verarbeitungspause (z. B. beim Nachladen eines ML-Modells für Hintergrundunschärfe) oder das Signalisieren an Empfänger (etwa über WebRTC), dass vorübergehend kein Bild kommt – ohne den Track mit stop() endgültig zu beenden.

Parameter

Name Typ Default Beschreibung
$value boolean false Beim Setzen: true schaltet den Ausgabetrack stumm (Frames werden verworfen), false gibt ihn wieder frei. Nicht-boolesche Werte werden nach den üblichen WebIDL-Regeln in einen booleschen Wert umgewandelt.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn der Generator aktuell stummgeschaltet ist, sonst false.

Beispiele

Generator im Worker erzeugen und stummschalten

// worker.js – VideoTrackGenerator ist nur in Dedicated Workers verfügbar
const generator = new VideoTrackGenerator();
console.log(generator.muted); // Standardwert

generator.muted = true;
console.log(generator.muted, generator.track.kind);

// Ausgabetrack an den Hauptthread übertragen
self.postMessage({ track: generator.track }, [generator.track]);
false true "video"

Kamera-Pause per Nachricht aus dem Hauptthread

// worker.js
let generator;

self.onmessage = async ({ data }) => {
  if (data.type === 'start') {
    const processor = new MediaStreamTrackProcessor({ track: data.track });
    generator = new VideoTrackGenerator();
    self.postMessage({ type: 'output', track: generator.track }, [generator.track]);
    // Frames unverändert durchreichen
    await processor.readable.pipeTo(generator.writable);
  }
  if (data.type === 'pause' && generator) {
    generator.muted = data.paused; // true = kein Bild, false = weiter
  }
};

// main.js
const worker = new Worker('worker.js');
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const [camTrack] = stream.getVideoTracks();
worker.postMessage({ type: 'start', track: camTrack }, [camTrack]);

worker.onmessage = ({ data }) => {
  if (data.type === 'output') {
    document.querySelector('video').srcObject = new MediaStream([data.track]);
  }
};

let paused = false;
document.querySelector('#pause').addEventListener('click', () => {
  paused = !paused;
  worker.postMessage({ type: 'pause', paused });
});

Auf mute/unmute am Ausgabetrack reagieren

// main.js – Track wurde vom Worker übertragen
worker.addEventListener('message', ({ data }) => {
  if (data.type !== 'output') return;
  const track = data.track;
  const badge = document.querySelector('#status');

  track.addEventListener('mute', () => {
    badge.textContent = 'Kamera pausiert';
    console.log('muted:', track.muted);
  });
  track.onunmute = () => {
    badge.textContent = 'Kamera aktiv';
    console.log('muted:', track.muted);
  };
});
muted: true muted: false

// Wichtig · Fallstricke

  • Kompatibilität: VideoTrackGenerator ist derzeit nur in Safari (ab 18) und nur in Dedicated Workers verfügbar. Chromium bietet stattdessen das ältere, nicht standardisierte MediaStreamTrackGenerator (auch im Hauptthread), das keine muted-Eigenschaft besitzt. Vorher mit 'VideoTrackGenerator' in self prüfen.
  • Die Änderung von track.muted und das Auslösen von mute/unmute geschehen asynchron (als eingereihte Aufgabe). Direkt nach dem Setzen kann generator.track.muted noch den alten Wert haben.
  • Das Setzen auf den bereits aktuellen Wert bewirkt nichts; es werden keine doppelten Ereignisse ausgelöst.
  • Während der Stummschaltung geschriebene Frames werden verworfen, nicht gepuffert. Der Stream läuft weiter; Frames aus einem MediaStreamTrackProcessor werden also weiterhin gelesen und dekodiert. Wer Rechenzeit sparen will, sollte die eigene Verarbeitung zusätzlich anhalten.
  • muted ist nicht dasselbe wie MediaStreamTrack.enabled (vom Konsumenten gesetzt, liefert schwarze Frames) oder stop() (beendet den Track endgültig).