Start · Sprachen · JavaScript · Referenz · MediaStream.getTrackById()

MediaStream.getTrackById()

Methode

Gibt die <code>MediaStreamTrack</code> mit der angegebenen ID aus dem Stream zurück oder <code>null</code>, wenn keine passende Spur existiert.

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

MediaStream.prototype.getTrackById(id)

Beschreibung

Die Methode getTrackById() durchsucht die Spuren (Audio und Video) eines MediaStream und gibt die MediaStreamTrack zurück, deren Eigenschaft id genau mit der übergebenen Zeichenkette übereinstimmt. Gibt es keine solche Spur, ist der Rückgabewert null.

Nützlich ist das vor allem, wenn Sie nur die ID einer Spur gespeichert oder übertragen haben, z. B. in der WebRTC-Signalisierung, in einem Zustandsobjekt Ihrer Anwendung oder in einer Auswahlliste. So kommen Sie gezielt an die Spur, ohne getTracks() selbst durchlaufen und filtern zu müssen.

Die ID einer Spur ist eine vom Browser erzeugte, eindeutige Zeichenkette (meist eine UUID). Sie ändert sich während der Lebensdauer der Spur nicht. Geklonte Spuren (track.clone()) bekommen allerdings eine neue ID.

Parameter

Name Typ Default Beschreibung
$id Pflicht string Die ID der gesuchten Spur, also der Wert von MediaStreamTrack.id. Groß- und Kleinschreibung werden unterschieden.

Rückgabewert

Typ
MediaStreamTrack | null
Beschreibung
Die passende MediaStreamTrack oder null, wenn der Stream keine Spur mit dieser ID enthält.

Beispiele

Spur über gespeicherte ID wiederfinden

const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true });

// ID der Videospur merken, z. B. im Anwendungszustand
const videoId = stream.getVideoTracks()[0].id;

// Später: Spur gezielt abrufen
const track = stream.getTrackById(videoId);
console.log(track.kind, track.label);
video FaceTime HD Camera

Mikrofon stummschalten, mit null-Prüfung

const toggleMute = (stream, trackId) => {
  const track = stream.getTrackById(trackId);
  if (!track) {
    console.warn(`Keine Spur mit ID ${trackId} gefunden`);
    return;
  }
  track.enabled = !track.enabled;
  console.log(`${track.kind}: ${track.enabled ? 'aktiv' : 'stumm'}`);
};

const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const audioId = stream.getAudioTracks()[0].id;
toggleMute(stream, audioId);
toggleMute(stream, 'unbekannte-id');
audio: stumm Keine Spur mit ID unbekannte-id gefunden

Nach removeTrack() ist die Spur nicht mehr auffindbar

const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const track = stream.getVideoTracks()[0];

stream.removeTrack(track);
console.log(stream.getTrackById(track.id)); // null

stream.addTrack(track);
console.log(stream.getTrackById(track.id) === track); // true
null true

// Wichtig · Fallstricke

  • Immer auf null prüfen: Wurde die Spur mit removeTrack() entfernt oder hat die Gegenseite sie in WebRTC entfernt, gibt die Methode null zurück und wirft keinen Fehler.
  • Beendete Spuren bleiben im Stream: Eine mit track.stop() gestoppte Spur wird weiterhin gefunden. Prüfen Sie bei Bedarf track.readyState === 'ended'.
  • IDs in WebRTC: Auf der Empfängerseite stimmt MediaStreamTrack.id nicht unbedingt mit der ID beim Sender überein. Verwenden Sie für die Zuordnung besser RTCRtpTransceiver.mid oder die Stream-IDs aus dem track-Event.
  • Klone: track.clone() und stream.clone() erzeugen neue IDs. Alte IDs finden die Klone nicht.
  • Die Methode wird von allen modernen Browsern unterstützt. getUserMedia() funktioniert nur in sicheren Kontexten (HTTPS oder localhost).