Start · Sprachen · JavaScript · Referenz · MediaStreamTrack.label

MediaStreamTrack.label

Eigenschaft

Schreibgeschützter String mit einem vom Browser vergebenen, menschenlesbaren Namen der Track-Quelle, z. B. <code>"Integrierte Kamera"</code>.

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

MediaStreamTrack.label

Beschreibung

Die schreibgeschützte Eigenschaft label der Schnittstelle MediaStreamTrack liefert einen String, den der User-Agent vergibt, um die Quelle des Tracks zu beschreiben. Das ist zum Beispiel "Internal microphone", "FaceTime HD Camera" oder bei Bildschirmfreigaben der Name des geteilten Fensters oder Bildschirms.

Gedacht ist label vor allem für die Anzeige in der Oberfläche, etwa um Nutzern zu zeigen, welches Mikrofon oder welche Kamera gerade aktiv ist. Zum eindeutigen Erkennen eines Geräts sollte man dagegen deviceId aus track.getSettings() verwenden, weil Labels nicht eindeutig sind und sich je nach Browser, Sprache oder Treiber unterscheiden können.

Wenn ein Track keine Quelle hat, etwa weil er künstlich erzeugt wurde, oder wenn der Browser das Label nicht preisgibt, ist der Wert ein leerer String "". Der Wert bleibt während der gesamten Lebensdauer des Tracks gleich, auch nachdem der Track mit stop() beendet wurde.

Rückgabewert

Typ
string
Beschreibung
Vom User-Agent vergebener Name der Quelle, oder ein leerer String "", wenn keiner bekannt ist.

Beispiele

Aktive Kamera und aktives Mikrofon anzeigen

const zeigeGeraete = async () => {
  const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true });
  for (const track of stream.getTracks()) {
    console.log(`${track.kind}: ${track.label || '(unbekannte Quelle)'}`);
  }
};

zeigeGeraete().catch(err => console.error('Zugriff verweigert:', err.name));
audio: MacBook Pro Microphone (Built-in) video: FaceTime HD Camera (Built-in)

Label im UI neben der Videovorschau ausgeben

const video = document.querySelector('#vorschau');
const info = document.querySelector('#kamera-name');

const starteVorschau = async () => {
  const stream = await navigator.mediaDevices.getUserMedia({ video: true });
  const [videoTrack] = stream.getVideoTracks();
  video.srcObject = stream;
  // textContent statt innerHTML: das Label ist fremder Text
  info.textContent = `Kamera: ${videoTrack.label}`;
};

starteVorschau();

Bildschirmfreigabe: Name der geteilten Quelle

const teileBildschirm = async () => {
  const stream = await navigator.mediaDevices.getDisplayMedia({ video: true });
  const [track] = stream.getVideoTracks();
  console.log('Geteilt wird:', track.label);
  console.log('Oberflächentyp:', track.getSettings().displaySurface);
  track.addEventListener('ended', () => console.log(`Freigabe "${track.label}" beendet`));
};

document.querySelector('#teilen').addEventListener('click', teileBildschirm);
Geteilt wird: screen:0:0 Oberflächentyp: monitor

Label mit deviceId abgleichen statt umgekehrt

const findeGeraet = async () => {
  const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
  const [track] = stream.getAudioTracks();
  const { deviceId } = track.getSettings();
  const geraete = await navigator.mediaDevices.enumerateDevices();
  const geraet = geraete.find(d => d.deviceId === deviceId);
  console.log(track.label === geraet?.label); // meist true
};

findeGeraet();
true

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung wie track.label = "X" wird ohne Fehlermeldung ignoriert (im Strict Mode kommt ein TypeError).
  • Nicht eindeutig: Mehrere Geräte können dasselbe Label haben, und das Label kann sich je nach Systemsprache oder Treiber ändern. Zum Speichern von Nutzerwünschen deshalb deviceId verwenden.
  • Datenschutz: Labels sind ein Merkmal für Fingerprinting. Browser geben Geräte-Labels (auch über enumerateDevices()) erst frei, wenn die Seite eine Medienberechtigung hat. Bei Tracks, die nicht von Geräten stammen, z. B. aus canvas.captureStream() oder aus WebRTC-Remote-Tracks, ist das Label oft leer oder eine technische ID.
  • Sicherheit: Das Label ist Text, den man nicht selbst kontrolliert (bei Bildschirmfreigaben z. B. ein Fenstertitel). Deshalb mit textContent ausgeben, nie mit innerHTML.
  • Browserunterschiede: Das Format ist nicht festgelegt. Chrome liefert z. B. "screen:0:0" oder "window:1234:0" bei Bildschirmfreigaben, Firefox und Safari liefern andere Werte. Code sollte sich nicht auf ein bestimmtes Format verlassen. Die API funktioniert nur in sicheren Kontexten (HTTPS).