Start · Sprachen · JavaScript · Referenz · MediaStreamTrack.muted

MediaStreamTrack.muted

Eigenschaft

Schreibgeschützter boolescher Wert, der angibt, ob die Spur gerade keine Mediendaten liefern kann, z. B. weil die Quelle vorübergehend nichts sendet.

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

MediaStreamTrack.muted

Beschreibung

Die schreibgeschützte Eigenschaft muted eines MediaStreamTrack gibt true zurück, wenn die Spur vorübergehend keine Mediendaten liefern kann. Der Grund liegt dabei nicht beim Nutzer oder beim eigenen Code, sondern bei der Quelle, etwa bei einem technischen Problem, bei einer vom Betriebssystem stummgeschalteten Kamera oder bei einer WebRTC-Gegenstelle, die gerade keine Pakete sendet. Solange die Spur stummgeschaltet ist, liefert sie Stille (Audio) bzw. schwarze Bilder (Video).

Wichtig ist der Unterschied zu MediaStreamTrack.enabled. Mit enabled steuert dein Code die Ausgabe und kann sie selbst ein- und ausschalten. muted dagegen setzt allein der Browser (User-Agent), es lässt sich nicht beschreiben. Eine Spur liefert nur dann echte Daten, wenn enabled === true und muted === false gilt.

Ändert sich der Zustand, löst der Browser die Ereignisse mute bzw. unmute auf der Spur aus. In der Praxis wertet man diese Ereignisse meist aus, statt muted regelmäßig abzufragen. Typische Einsätze sind Hinweise in der Oberfläche wie „Kamera liefert kein Bild“ oder die Erkennung, dass ein entfernter WebRTC-Teilnehmer kein Video mehr sendet.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn die Spur gerade keine Mediendaten liefern kann, sonst false.

Beispiele

Zustand der Kamera-Spur prüfen

const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const [videoTrack] = stream.getVideoTracks();

console.log(`Spur: ${videoTrack.label}`);
console.log(`muted: ${videoTrack.muted}`);
console.log(`enabled: ${videoTrack.enabled}`);
Spur: FaceTime HD Camera muted: false enabled: true

Auf mute/unmute reagieren (addEventListener und on-Property)

const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const [audioTrack] = stream.getAudioTracks();
const hinweis = document.querySelector('#mikro-hinweis');

const aktualisieren = () => {
  hinweis.textContent = audioTrack.muted
    ? 'Mikrofon liefert derzeit keinen Ton.'
    : 'Mikrofon aktiv.';
};

audioTrack.addEventListener('mute', aktualisieren);
// Alternativ über die on-Property:
audioTrack.onunmute = aktualisieren;

aktualisieren();

WebRTC: Remote-Video ohne Daten erkennen

const pc = new RTCPeerConnection();

pc.addEventListener('track', ({ track, streams }) => {
  const video = document.querySelector('#remote');
  video.srcObject = streams[0];

  const platzhalterZeigen = () => {
    video.classList.toggle('kein-signal', track.muted);
  };

  track.addEventListener('mute', platzhalterZeigen);
  track.addEventListener('unmute', platzhalterZeigen);
  platzhalterZeigen();
});

Tatsächlich Daten liefernde Spuren filtern

const liefertDaten = (track) =>
  track.readyState === 'live' && track.enabled && !track.muted;

const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true });
const aktiv = stream.getTracks().filter(liefertDaten);
console.log(aktiv.map((t) => t.kind));
["audio", "video"]

// Wichtig · Fallstricke

  • Nicht mit enabled verwechseln: Um eine Spur selbst stummzuschalten, setzt du track.enabled = false. Eine Zuweisung an muted wird ignoriert bzw. löst im Strict Mode einen TypeError aus, weil die Eigenschaft nur einen Getter hat.
  • Bei WebRTC-Remote-Spuren ist muted anfangs oft true, bis die ersten RTP-Pakete eintreffen. Verlass dich daher auf das Ereignis unmute, bevor du „Verbindung steht“ anzeigst.
  • Ob ein physischer Stumm-Schalter am Gerät oder eine Stummschaltung durch das Betriebssystem muted auslöst, hängt von Browser und Plattform ab. In Safari auf iOS z. B. wird die Spur beim Wechsel in den Hintergrund oder bei einem Anruf stummgeschaltet.
  • muted sagt nichts darüber aus, ob die Spur beendet ist. Das zeigt readyState === 'ended' an.
  • Verfügbar ist die Eigenschaft nur in sicheren Kontexten (HTTPS), da getUserMedia() einen solchen voraussetzt. Alle modernen Browser unterstützen sie.