Signatur
Beschreibung
Die schreibgeschützte Eigenschaft kind eines RTCRemoteInboundRtpStreamStats-Objekts gibt an, ob der beschriebene RTP-Stream Audio oder Video transportiert. Mögliche Werte sind "audio" und "video". Der Wert stimmt mit kind des zugehörigen MediaStreamTrack überein.
Statistiken vom Typ "remote-inbound-rtp" beschreiben, wie die Gegenstelle einen Stream empfängt, den der lokale Peer sendet. Die Daten stammen aus RTCP-Receiver-Reports (RR) und liefern z. B. packetsLost, jitter, roundTripTime und fractionLost. Mit kind lassen sich diese Werte nach Medienart trennen, etwa um die Audioqualität getrennt von der Videoqualität zu überwachen.
Man verwendet kind meist beim Durchlaufen des RTCStatsReport, den RTCPeerConnection.getStats() oder RTCRtpSender.getStats() liefert. So kann man z. B. bei hohem Videoverlust die Bitrate senken, ohne den Audiostream anzufassen.
Rückgabewert
"audio", wenn der Stream Audio enthält, oder "video", wenn er Video enthält.Beispiele
Remote-Inbound-Statistiken nach Medienart ausgeben
const logRemoteInbound = async (pc) => {
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type === 'remote-inbound-rtp') {
console.log(`${stats.kind}: verloren=${stats.packetsLost}, RTT=${stats.roundTripTime ?? '–'} s`);
}
});
};
// pc ist eine bestehende, verbundene RTCPeerConnection
await logRemoteInbound(pc);
Videobitrate bei hohem Paketverlust senken
const adaptVideo = async (pc) => {
const report = await pc.getStats();
for (const stats of report.values()) {
if (stats.type !== 'remote-inbound-rtp' || stats.kind !== 'video') continue;
if (stats.fractionLost > 0.1) {
const sender = pc.getSenders().find((s) => s.track?.kind === 'video');
if (!sender) return;
const params = sender.getParameters();
if (!params.encodings?.length) return;
params.encodings[0].maxBitrate = 300_000; // 300 kbit/s
await sender.setParameters(params);
console.log('Videobitrate reduziert, Verlustrate:', stats.fractionLost);
}
}
};
setInterval(() => adaptVideo(pc), 5000);
Statistiken eines einzelnen Senders abfragen
const [audioSender] = pc.getSenders().filter((s) => s.track?.kind === 'audio');
const report = await audioSender.getStats();
const remote = [...report.values()].find((s) => s.type === 'remote-inbound-rtp');
console.log(remote?.kind, remote?.jitter);
// Wichtig · Fallstricke
remote-inbound-rtp-Einträge erscheinen erst, wenn der erste RTCP-Receiver-Report der Gegenstelle angekommen ist. Direkt nach dem Verbindungsaufbau fehlen sie daher oft.- Ältere Browser und ältere Fassungen der Spezifikation nutzten
mediaTypestattkind. Für ältere Umgebungen hilftstats.kind ?? stats.mediaType. kindnennt nur die Medienart, nicht den Codec. Dafür löst mancodecIdim selben Bericht auf.- Filtere immer zuerst nach
type: Auch andere Statistiktypen (inbound-rtp,outbound-rtp,remote-outbound-rtp) haben eine Eigenschaftkind. - Die genaue Unterstützung einzelner Statistikfelder unterscheidet sich je nach Browser. Prüfe das vor dem Einsatz in Produktion.