Start · Sprachen · JavaScript · Referenz · MediaStream.id

MediaStream.id

Eigenschaft

Schreibgeschützter String mit 36 Zeichen, der einen <code>MediaStream</code> eindeutig kennzeichnet (UUID/GUID-Format).

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

MediaStream.id

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

Typ
string
Beschreibung
Eine eindeutige Kennung mit 36 Zeichen (UUID-Format), die sich während der Lebensdauer des Streams nicht ändert.

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);
Stream-ID: 6f1c9e2a-3b4d-4e5f-9a8b-7c6d5e4f3a2b Länge: 36

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);
});
Neuer Teilnehmer-Stream: 0a1b2c3d-...

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();
false false true

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung an stream.id wird still ignoriert (im Strict Mode gibt es einen TypeError). Eine eigene ID kann man nicht setzen.
  • clone() und new MediaStream(tracks) erzeugen immer eine neue ID, auch wenn die Spuren dieselben sind. Für einzelne Spuren gibt es MediaStreamTrack.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 leeres event.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).