Signatur
Beschreibung
Die schreibgeschützte Eigenschaft id eines MediaStreamTrack gibt einen String zurück. Er enthält eine eindeutige Kennung, die der Browser beim Erzeugen der Spur vergibt. Meist ist das eine UUID wie "a1b2c3d4-…". Der Wert ändert sich während der Lebensdauer der Spur nicht.
Mit der Kennung kannst du Spuren eindeutig zuordnen, zum Beispiel als Schlüssel in einer Map, um Zusatzdaten (Benutzername, UI-Element, Statistik) an eine Spur zu hängen. Außerdem findest du damit über MediaStream.getTrackById() eine bestimmte Spur in einem Stream wieder.
Wichtig: Die id gilt nur lokal. Überträgt man eine Spur per WebRTC, muss die Spur auf der Gegenseite nicht dieselbe id haben. Zum Abgleich zwischen den Teilnehmern eignen sich eher RTCRtpTransceiver.mid oder eigene Kennungen, die du über einen Datenkanal oder die Signalisierung überträgst.
Rückgabewert
Beispiele
IDs der Kamera- und Mikrofonspuren ausgeben
const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true });
for (const track of stream.getTracks()) {
console.log(`${track.kind}: ${track.id} (${track.label})`);
}
Spur per ID im Stream wiederfinden
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const [videoTrack] = stream.getVideoTracks();
const savedId = videoTrack.id;
// Später, z. B. in einem anderen Programmteil:
const found = stream.getTrackById(savedId);
console.log(found === videoTrack);
found.stop();
Zusatzdaten per Map an Spuren hängen
const trackInfo = new Map();
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const [audioTrack] = stream.getAudioTracks();
trackInfo.set(audioTrack.id, { owner: 'lokal', startedAt: Date.now() });
audioTrack.addEventListener('ended', () => {
trackInfo.delete(audioTrack.id);
console.log('Spur entfernt:', audioTrack.id);
});
console.log(trackInfo.get(audioTrack.id).owner);
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
track.id = 'x'wird im normalen Modus stillschweigend ignoriert. Im Strict Mode (also auch in ES-Modulen) wirft sie einenTypeError. - Nur lokal eindeutig: Bei WebRTC kann die Spur auf der Empfängerseite eine andere
idhaben. Verlasse dich beim Abgleich zwischen den Teilnehmern nicht darauf. - Klone:
track.clone()erzeugt eine neue Spur mit einer neuenid. - Die
idgibt nicht an, von welchem Gerät die Spur stammt. Dafür istgetSettings().deviceIdzuständig. - Wird in allen modernen Browsern unterstützt. Für
getUserMedia()ist ein sicherer Kontext (HTTPS) nötig.