Signatur
Beschreibung
Die Eigenschaft kind einer MediaStreamTrack-Instanz liefert einen String, der die Art des Medien-Tracks beschreibt: "audio" für Audio-Tracks (z. B. Mikrofon, Audio aus einem <audio>-Element) und "video" für Video-Tracks (z. B. Kamera, Bildschirmfreigabe, Canvas-Aufnahme).
Der Wert wird beim Erzeugen des Tracks festgelegt und bleibt während der ganzen Lebensdauer gleich, auch nachdem der Track mit stop() beendet wurde. Das macht kind zu einem sicheren Unterscheidungsmerkmal, wenn man Tracks aus einem gemischten MediaStream filtern, unterschiedlich weiterverarbeiten oder in WebRTC gezielt Sender und Empfänger zuordnen will.
Für einfache Fälle gibt es mit MediaStream.getAudioTracks() und MediaStream.getVideoTracks() bequemere Methoden. kind ist dagegen nützlich, wenn man einzelne Tracks in der Hand hat, etwa im track-Ereignis einer RTCPeerConnection, bei addtrack-Ereignissen eines Streams oder beim Durchlaufen von getTracks().
Rückgabewert
"audio", wenn es sich um einen Audio-Track handelt, sonst "video" für einen Video-Track.Beispiele
Tracks eines Kamera-Streams nach Art auflisten
const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true });
for (const track of stream.getTracks()) {
console.log(`${track.kind}: ${track.label}`);
}
Mikrofon stummschalten, Kamera weiterlaufen lassen
const toggleMute = (stream) => {
stream.getTracks()
.filter((track) => track.kind === 'audio')
.forEach((track) => {
track.enabled = !track.enabled;
console.log(`Mikrofon ${track.enabled ? 'aktiv' : 'stumm'}`);
});
};
const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true });
toggleMute(stream);
Eingehende WebRTC-Tracks passenden Elementen zuordnen
const pc = new RTCPeerConnection();
const videoEl = document.querySelector('#remote-video');
const audioEl = document.querySelector('#remote-audio');
pc.addEventListener('track', ({ track, streams }) => {
if (track.kind === 'video') {
videoEl.srcObject = streams[0];
} else if (track.kind === 'audio') {
audioEl.srcObject = streams[0];
}
console.log(`Remote-Track empfangen: ${track.kind}`);
});
kind ist schreibgeschützt
const [track] = (await navigator.mediaDevices.getUserMedia({ audio: true })).getTracks();
track.kind = 'video'; // wird still ignoriert (im Strict Mode: TypeError)
console.log(track.kind);
track.stop();
console.log(track.kind); // bleibt auch nach stop() erhalten
// Wichtig · Fallstricke
- Schreibgeschützt: Wenn man
kindeinen Wert zuweist, wird das im Sloppy Mode einfach ignoriert. Im Strict Mode (auch in ES-Modulen) wirft die Zuweisung einenTypeError. - Nur zwei Werte: Die Spezifikation kennt nur
"audio"und"video". Untertitel oder Datenkanäle sind keineMediaStreamTracks. Für Daten in WebRTC gibt esRTCDataChannel. - Nicht verwechseln mit
MediaDeviceInfo.kind, das Werte wie"audioinput","videoinput"oder"audiooutput"liefert, und mitHTMLTrackElement.kind("subtitles","captions"…). - Bildschirmfreigabe: Bei
getDisplayMedia()ist der Audio-Track optional und je nach Browser oder Betriebssystem oft nicht vorhanden. Deshalb vorher mitkindodergetAudioTracks().lengthprüfen. - Kompatibilität: Wird von allen modernen Browsern unterstützt (Chrome, Edge, Firefox, Safari).
getUserMediafunktioniert nur in einem sicheren Kontext (HTTPS oderlocalhost).