Signatur
Beschreibung
Die Eigenschaft track eines MediaStreamTrackEvent verweist auf die Audio- oder Videospur, um die es bei dem Ereignis geht. Solche Ereignisse löst ein MediaStream aus, und zwar als addtrack, wenn eine Spur hinzukommt, und als removetrack, wenn eine entfernt wird.
Nützlich ist das vor allem bei WebRTC: Ein entfernter Teilnehmer kann während einer laufenden Verbindung Spuren hinzufügen oder entfernen, zum Beispiel die Kamera ein- und ausschalten oder eine Bildschirmfreigabe starten. Über event.track erfahren Sie, welche Spur betroffen ist (kind, id, label), und können die Oberfläche darauf abstimmen.
Wichtig: Die Ereignisse werden laut Spezifikation nur ausgelöst, wenn der Browser den Stream verändert, etwa durch eine WebRTC-Neuaushandlung. Rufen Sie selbst stream.addTrack() oder stream.removeTrack() auf, wird kein Ereignis ausgelöst.
Rückgabewert
MediaStreamTrack), die dem Stream hinzugefügt oder aus ihm entfernt wurde. Der Wert ist schreibgeschützt und wird beim Erzeugen des Ereignisses festgelegt.Beispiele
Neue Spuren eines entfernten WebRTC-Streams erkennen
const pc = new RTCPeerConnection();
const video = document.querySelector('#remote');
pc.addEventListener('track', ({ streams: [remoteStream] }) => {
if (video.srcObject === remoteStream) return;
video.srcObject = remoteStream;
// Später hinzukommende Spuren (z. B. eine Bildschirmfreigabe)
remoteStream.addEventListener('addtrack', (event) => {
const { kind, id, label } = event.track;
console.log(`Neue ${kind}-Spur: ${label || id}`);
});
});
Entfernte Spur per onremovetrack behandeln
const handleStream = (stream) => {
stream.onremovetrack = (event) => {
const track = event.track;
console.log(`Spur entfernt: ${track.kind} (${track.id})`);
if (track.kind === 'video') {
document.querySelector('#camera-off').hidden = false;
}
};
};
Ereignis selbst erzeugen und track auslesen
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const [audioTrack] = stream.getAudioTracks();
stream.addEventListener('addtrack', (e) => {
console.log(e.track === audioTrack, e.track.kind);
});
// Konstruktor verlangt das track-Feld
const event = new MediaStreamTrackEvent('addtrack', { track: audioTrack });
stream.dispatchEvent(event);
// Wichtig · Fallstricke
addTrack()undremoveTrack()auf einemMediaStreamlösen keineaddtrack- bzw.removetrack-Ereignisse aus. Die Ereignisse gibt es nur bei Änderungen durch den Browser, etwa bei WebRTC.- Verwechseln Sie das nicht mit dem
track-Ereignis vonRTCPeerConnection. Dort ist das Ereignisobjekt einRTCTrackEvent, das zusätzlichstreams,receiverundtransceiverenthält. - Nach einem
removetrackhat die Spur nicht unbedingtreadyState === "ended". Rufen Sie bei Bedarf selbsttrack.stop()auf, um Ressourcen freizugeben. - Der Konstruktor
new MediaStreamTrackEvent(type, { track })wirft einenTypeError, wenntrackfehlt. - Browser-Unterstützung: Chrome, Edge, Firefox und Safari unterstützen die Eigenschaft in aktuellen Versionen. Die Medien-APIs setzen einen sicheren Kontext (HTTPS) voraus.