Signatur
Beschreibung
Die schreibgeschützte Eigenschaft active eines MediaStream zeigt an, ob der Stream gerade aktiv ist. Ein Stream gilt als aktiv, wenn mindestens einer seiner MediaStreamTracks nicht den readyState "ended" hat. Sind alle Spuren beendet oder enthält der Stream keine Spuren, liefert active den Wert false.
In der Praxis brauchen Sie die Eigenschaft, um nach getUserMedia(), getDisplayMedia() oder bei WebRTC-Verbindungen zu prüfen, ob ein Stream noch Daten liefert – etwa bevor Sie ihn einem <video>-Element zuweisen, eine Aufnahme mit MediaRecorder starten oder die Oberfläche („Kamera an/aus“) aktualisieren.
Wichtig: active sagt nichts darüber aus, ob eine Spur stummgeschaltet (muted) oder deaktiviert (enabled = false) ist. Eine deaktivierte, aber nicht beendete Spur hält den Stream aktiv. Erst track.stop() oder das Beenden durch den Browser/Nutzer (z. B. Bildschirmfreigabe beenden) setzt die Spur auf "ended".
Rückgabewert
true, wenn mindestens eine Spur nicht beendet ist; sonst false.Beispiele
Kamera-Stream öffnen und Status prüfen
const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true });
console.log('Aktiv nach Start:', stream.active);
// Alle Spuren beenden
stream.getTracks().forEach((track) => track.stop());
console.log('Aktiv nach stop():', stream.active);
Vor dem Aufnehmen sicherstellen, dass der Stream lebt
const startRecording = (stream) => {
if (!stream.active) {
console.warn('Stream ist nicht mehr aktiv – Aufnahme abgebrochen.');
return null;
}
const recorder = new MediaRecorder(stream);
recorder.start();
return recorder;
};
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const recorder = startRecording(stream);
console.log(recorder?.state);
Bildschirmfreigabe: Ende erkennen und UI aktualisieren
const button = document.querySelector('#share');
const stream = await navigator.mediaDevices.getDisplayMedia({ video: true });
const updateUi = () => {
button.textContent = stream.active ? 'Freigabe läuft' : 'Freigabe starten';
};
// Nutzer beendet die Freigabe über die Browser-Leiste
stream.getVideoTracks()[0].addEventListener('ended', () => {
updateUi();
console.log('active:', stream.active);
});
updateUi();
enabled = false hält den Stream aktiv
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const [mic] = stream.getAudioTracks();
mic.enabled = false; // nur stummschalten
console.log(stream.active); // weiterhin true
mic.stop(); // wirklich beenden
console.log(stream.active);
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
stream.active = falsewird ignoriert (im strikten ModusTypeError). Zum Beendentrack.stop()auf allen Spuren aufrufen. - Nicht mit
enabled/mutedverwechseln: Stummgeschaltete oder deaktivierte Spuren zählen weiterhin als aktiv – die Kamera-LED kann also noch leuchten. - Kein Polling nötig: Statt
activeregelmäßig abzufragen, auf dasended-Ereignis der einzelnen Spuren hören. Die früheren Stream-Ereignisseactive/inactivesind nicht standardisiert und nur in Chromium verfügbar – nicht darauf verlassen. - Ein leerer Stream (
new MediaStream()ohne Spuren) istfalse; durchaddTrack()einer lebenden Spur wird er aktiv. getUserMedia()funktioniert nur in sicheren Kontexten (HTTPS oderlocalhost) und erfordert eine Nutzerfreigabe.- Die ältere Eigenschaft
MediaStream.endedist veraltet und wurde durchactiveersetzt.