Signatur
Beschreibung
Die schreibgeschützte Eigenschaft id eines MediaStream-Objekts liefert eine eindeutige Kennung als String mit 36 Zeichen, typischerweise im UUID-Format (z. B. "f3a1c2d4-5b6e-4f70-8a9b-0c1d2e3f4a5b"). Der Browser erzeugt die ID beim Anlegen des Streams, zum Beispiel über getUserMedia(), getDisplayMedia(), new MediaStream() oder HTMLMediaElement.captureStream().
Gebraucht wird die ID vor allem, um Streams zuzuordnen und zu verwalten: etwa in Konferenz-Anwendungen mit mehreren Teilnehmern, wo eingehende Streams in einer Map nach ihrer ID abgelegt werden, oder um festzustellen, ob ein Stream schon einem <video>-Element zugewiesen wurde.
Bei WebRTC wird die Stream-ID über SDP (a=msid) an die Gegenseite übertragen. Im track-Ereignis von RTCPeerConnection erscheinen in event.streams daher Streams, deren id der des Absenders entspricht. So lassen sich Audio- und Videospuren desselben Absenders zusammenführen.
Rückgabewert
Beispiele
ID eines Kamera-Streams auslesen
const zeigeStreamId = async () => {
const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true });
console.log('Stream-ID:', stream.id);
console.log('Länge:', stream.id.length);
};
zeigeStreamId().catch(console.error);
Eingehende WebRTC-Streams nach ID verwalten
const pc = new RTCPeerConnection();
const entfernteStreams = new Map();
pc.addEventListener('track', (event) => {
const [stream] = event.streams;
if (!stream || entfernteStreams.has(stream.id)) return; // schon bekannt
const video = document.createElement('video');
video.autoplay = true;
video.playsInline = true;
video.srcObject = stream;
video.dataset.streamId = stream.id;
document.body.append(video);
entfernteStreams.set(stream.id, { stream, video });
console.log('Neuer Teilnehmer-Stream:', stream.id);
});
Geklonte und neue Streams bekommen eigene IDs
const vergleiche = async () => {
const original = await navigator.mediaDevices.getUserMedia({ audio: true });
const klon = original.clone();
const neu = new MediaStream(original.getTracks());
console.log(original.id === klon.id); // false
console.log(original.id === neu.id); // false
console.log(original.getTracks()[0] === neu.getTracks()[0]); // true – gleiche Spur
};
vergleiche();
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung an
stream.idwird still ignoriert (im Strict Mode gibt es einenTypeError). Eine eigene ID kann man nicht setzen. clone()undnew MediaStream(tracks)erzeugen immer eine neue ID, auch wenn die Spuren dieselben sind. Für einzelne Spuren gibt esMediaStreamTrack.id.- Bei WebRTC stimmt die ID auf der Empfängerseite mit der des Absenders überein, weil sie über SDP übertragen wird. Sie ist also kein Geheimnis und darf nicht zur Authentifizierung oder als Sicherheitsmerkmal dienen.
- Streams, die ohne Stream-Zuordnung empfangen werden (z. B.
addTrack(track)ohne Stream-Argument), liefern ein leeresevent.streams. Dann gibt es keine ID, die man auswerten könnte. - Die ID gilt nur für die aktuelle Sitzung. Nach einem Neuladen der Seite oder einem neuen
getUserMedia()-Aufruf ist sie eine andere. - Die Eigenschaft wird von allen modernen Browsern unterstützt (Chrome, Firefox, Safari, Edge).
getUserMedia()funktioniert nur in einem sicheren Kontext (HTTPS).