Start · Sprachen · JavaScript · Referenz · RTCVideoSourceStats.kind

RTCVideoSourceStats.kind

Eigenschaft

Schreibgeschützter String, der bei <code>RTCVideoSourceStats</code> immer <code>"video"</code> ist und die Statistik als Videoquelle kennzeichnet.

seit JavaScript Chrome 108+, Safari 17+; Firefox: nicht unterstütz Kategorie: webapi

Signatur

RTCVideoSourceStats.kind

Beschreibung

Die Eigenschaft kind gehört zum Wörterbuch RTCVideoSourceStats. Solche Objekte liefert RTCPeerConnection.getStats() bzw. RTCRtpSender.getStats() mit type === "media-source", wenn die Quelle ein Video-Track ist (z. B. Kamera oder Bildschirmfreigabe). Bei einer Videoquelle ist der Wert immer "video".

Im Statistikbericht haben Audio- und Videoquellen denselben type, nämlich "media-source". Erst über kind erkennst du, ob es sich um ein RTCAudioSourceStats-Objekt ("audio") oder ein RTCVideoSourceStats-Objekt ("video") handelt. Danach weißt du, welche Felder vorhanden sind, etwa width, height, frames und framesPerSecond bei Video.

Wichtig: Die Eigenschaft beschreibt die lokale Quelle vor der Kodierung. Wie viel tatsächlich gesendet wird, steht nicht hier, sondern in den outbound-rtp-Statistiken.

Rückgabewert

Typ
string
Beschreibung
Immer "video" bei RTCVideoSourceStats. Bei RTCAudioSourceStats steht an dieser Stelle "audio".

Beispiele

Videoquellen im Statistikbericht finden

const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const pc = new RTCPeerConnection();
stream.getTracks().forEach((track) => pc.addTrack(track, stream));

const report = await pc.getStats();
report.forEach((stats) => {
  if (stats.type === 'media-source' && stats.kind === 'video') {
    console.log(`Videoquelle ${stats.id}: ${stats.width}x${stats.height} @ ${stats.framesPerSecond} fps`);
  }
});
Videoquelle SV1: 640x480 @ 30 fps

Audio- und Videoquellen getrennt auswerten

const summarizeSources = async (pc) => {
  const report = await pc.getStats();
  const result = { audio: [], video: [] };
  for (const stats of report.values()) {
    if (stats.type !== 'media-source') continue;
    if (stats.kind === 'video') {
      result.video.push({ id: stats.id, frames: stats.frames });
    } else if (stats.kind === 'audio') {
      result.audio.push({ id: stats.id, level: stats.audioLevel });
    }
  }
  return result;
};

console.log(await summarizeSources(pc));
{ audio: [ { id: 'SA1', level: 0.02 } ], video: [ { id: 'SV2', frames: 1520 } ] }

Quellstatistik eines einzelnen Senders abfragen

const [sender] = pc.getSenders().filter((s) => s.track?.kind === 'video');
const senderReport = await sender.getStats();
const source = [...senderReport.values()].find(
  (s) => s.type === 'media-source' && s.kind === 'video'
);
console.log(source?.kind, source?.trackIdentifier);
video 3f2a9c1e-…

// Wichtig · Fallstricke

  • Nicht nur nach kind filtern: Auch inbound-rtp-, outbound-rtp- und codec-Statistiken können ein Feld kind oder mimeType enthalten. Prüfe deshalb immer zuerst type === "media-source".
  • Browser-Unterstützung: Chromium-Browser und Safari liefern media-source-Statistiken. Firefox gibt sie derzeit nicht aus. Rechne daher damit, dass das Objekt fehlt, und verwende optionale Verkettung (?.).
  • Die Quellstatistik gibt es erst, wenn ein Track über addTrack() oder einen Transceiver an einen Sender gebunden ist. Bei replaceTrack(null) kann der Eintrag wieder verschwinden.
  • Die Eigenschaft ist schreibgeschützt. Da der Bericht ein Schnappschuss ist, bringen Änderungen am Objekt nichts.