Signatur
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
"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`);
}
});
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));
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);
// Wichtig · Fallstricke
- Nicht nur nach
kindfiltern: Auchinbound-rtp-,outbound-rtp- undcodec-Statistiken können ein FeldkindodermimeTypeenthalten. Prüfe deshalb immer zuersttype === "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. BeireplaceTrack(null)kann der Eintrag wieder verschwinden. - Die Eigenschaft ist schreibgeschützt. Da der Bericht ein Schnappschuss ist, bringen Änderungen am Objekt nichts.