Signatur
Beschreibung
Die Eigenschaft type eines RTCRemoteInboundRtpStreamStats-Objekts enthält immer den String "remote-inbound-rtp". Damit lässt sich dieser Statistiktyp in der RTCStatsReport-Map eindeutig von anderen Einträgen wie "outbound-rtp", "inbound-rtp" oder "candidate-pair" unterscheiden.
Ein remote-inbound-rtp-Eintrag beschreibt, wie die Gegenstelle einen von Ihnen gesendeten RTP-Stream empfängt. Die Daten stammen aus RTCP-Receiver-Reports (RR) der Gegenstelle und enthalten unter anderem packetsLost, fractionLost, jitter und roundTripTime. Damit eignet sich der Typ gut, um die Verbindungsqualität aus Sicht des Empfängers zu überwachen.
Üblicherweise iteriert man über das Ergebnis von RTCPeerConnection.getStats() oder RTCRtpSender.getStats() und filtert nach stats.type === "remote-inbound-rtp". Über localId gelangt man zum zugehörigen outbound-rtp-Eintrag.
Rückgabewert
"remote-inbound-rtp" (ein Wert aus der Aufzählung RTCStatsType).Beispiele
Remote-Inbound-Statistiken aus dem Report filtern
const pc = new RTCPeerConnection();
// ... Verbindung aufbauen und Tracks hinzufügen ...
const logRemoteInbound = async () => {
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type === "remote-inbound-rtp") {
console.log(stats.type, stats.kind, stats.roundTripTime);
}
});
};
setInterval(logRemoteInbound, 2000);
Paketverlust pro gesendetem Stream überwachen
const checkSenderQuality = async (sender) => {
const report = await sender.getStats();
for (const stats of report.values()) {
if (stats.type !== "remote-inbound-rtp") continue;
const lossPercent = ((stats.fractionLost ?? 0) * 100).toFixed(1);
console.log(`SSRC ${stats.ssrc}: ${lossPercent} % Verlust, RTT ${stats.roundTripTime ?? "–"} s`);
}
};
for (const sender of pc.getSenders()) {
checkSenderQuality(sender);
}
Zugehörigen outbound-rtp-Eintrag über localId finden
const report = await pc.getStats();
const remoteInbound = [...report.values()].filter((s) => s.type === "remote-inbound-rtp");
for (const remote of remoteInbound) {
const outbound = report.get(remote.localId);
console.log(outbound?.type, outbound?.packetsSent, "gesendet /", remote.packetsLost, "verloren");
}
// Wichtig · Fallstricke
- Die Eigenschaft ist schreibgeschützt und hat immer denselben Wert. Sinnvoll ist sie nur als Filterkriterium innerhalb eines
RTCStatsReport. - Nicht mit
"inbound-rtp"verwechseln:inbound-rtpbeschreibt Streams, die Sie empfangen,remote-inbound-rtpdagegen die Sicht der Gegenstelle auf Streams, die Sie senden. - Einträge tauchen erst auf, wenn die Gegenstelle einen RTCP-Receiver-Report geschickt hat. Direkt nach dem Verbindungsaufbau kann der Typ daher noch fehlen, und Werte wie
roundTripTimekönnenundefinedsein. - Browser unterstützen nicht alle Felder gleich gut. Ältere Versionen haben teilweise veraltete Typnamen verwendet (z. B.
"inboundrtp"in alten Firefox-Versionen). Deshalb Feldzugriffe mit?./??absichern. - Kurze Abfrage-Intervalle bei
getStats()(unter ca. 1 s) bringen kaum Gewinn, weil RTCP-Reports nur etwa alle paar Sekunden eintreffen.