Signatur
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
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}`);
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));
// Wichtig · Fallstricke
- Nicht mit
enabledverwechseln: Um eine Spur selbst stummzuschalten, setzt dutrack.enabled = false. Eine Zuweisung anmutedwird ignoriert bzw. löst im Strict Mode einenTypeErroraus, weil die Eigenschaft nur einen Getter hat. - Bei WebRTC-Remote-Spuren ist
mutedanfangs ofttrue, bis die ersten RTP-Pakete eintreffen. Verlass dich daher auf das Ereignisunmute, bevor du „Verbindung steht“ anzeigst. - Ob ein physischer Stumm-Schalter am Gerät oder eine Stummschaltung durch das Betriebssystem
mutedauslö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. mutedsagt nichts darüber aus, ob die Spur beendet ist. Das zeigtreadyState === 'ended'an.- Verfügbar ist die Eigenschaft nur in sicheren Kontexten (HTTPS), da
getUserMedia()einen solchen voraussetzt. Alle modernen Browser unterstützen sie.