Start · Sprachen · JavaScript · Referenz · RTCRemoteOutboundRtpStreamStats.localId

RTCRemoteOutboundRtpStreamStats.localId

Eigenschaft

String mit der <code>id</code> des lokalen <code>RTCInboundRtpStreamStats</code>-Objekts, das denselben RTP-Stream aus Empfängersicht beschreibt.

seit JavaScript WebRTC Statistics API. Chrome/Edge 97+, Firefox 68 Kategorie: webapi

Signatur

RTCRemoteOutboundRtpStreamStats.localId

Beschreibung

Die Eigenschaft localId gehört zu einem Statistik-Objekt vom Typ "remote-outbound-rtp". Ein solches Objekt beschreibt, was die Gegenstelle über ihren ausgehenden RTP-Stream meldet, z. B. gesendete Pakete und Bytes. Diese Daten stammen aus RTCP-Sender-Reports. localId enthält die id des passenden lokalen "inbound-rtp"-Objekts, also die Statistik darüber, wie dieser Stream bei dir ankommt.

Die Verknüpfung gilt in beide Richtungen: RTCInboundRtpStreamStats.remoteId zeigt auf das remote-outbound-rtp-Objekt, und dessen localId zeigt zurück auf das inbound-rtp-Objekt. Über report.get(localId) kommst du direkt an das Gegenstück im selben RTCStatsReport.

Nützlich ist das vor allem für Qualitätsauswertungen. Du kannst die gesendeten Pakete laut Gegenstelle (packetsSent) mit den lokal empfangenen Paketen (packetsReceived) vergleichen. Außerdem lassen sich Zeitstempel und Round-Trip-Werte (roundTripTimeMeasurements, totalRoundTripTime) dem richtigen Empfangsstream zuordnen.

Rückgabewert

Typ
string
Beschreibung
Die id des zugehörigen RTCInboundRtpStreamStats-Eintrags im selben RTCStatsReport. Nur lesbar.

Beispiele

Remote-Outbound-Statistik dem lokalen Empfangsstream zuordnen

// pc ist eine bestehende, verbundene RTCPeerConnection
const report = await pc.getStats();

for (const stats of report.values()) {
  if (stats.type !== 'remote-outbound-rtp') continue;

  const inbound = report.get(stats.localId);
  console.log(`Remote ${stats.kind}: ${stats.packetsSent} Pakete gesendet`);
  console.log(`Lokal empfangen: ${inbound?.packetsReceived ?? 'unbekannt'}`);
}
Remote audio: 4821 Pakete gesendet Lokal empfangen: 4790

Paketverlust aus beiden Perspektiven berechnen

const computeLoss = async (pc) => {
  const report = await pc.getStats();
  const results = [];

  report.forEach((stats) => {
    if (stats.type !== 'remote-outbound-rtp') return;
    const inbound = report.get(stats.localId);
    if (!inbound) return;

    const lost = stats.packetsSent - inbound.packetsReceived;
    const lossRate = stats.packetsSent > 0 ? lost / stats.packetsSent : 0;
    results.push({ kind: stats.kind, ssrc: stats.ssrc, lossRate: (lossRate * 100).toFixed(2) + ' %' });
  });

  return results;
};

console.table(await computeLoss(pc));
┌─────────┬─────────┬────────────┬──────────┐ │ (index) │ kind │ ssrc │ lossRate │ │ 0 │ 'video' │ 2837461234 │ '0.64 %' │ └─────────┴─────────┴────────────┴──────────┘

Verknüpfung in beide Richtungen prüfen

const report = await pc.getStats();

report.forEach((inbound) => {
  if (inbound.type !== 'inbound-rtp' || !inbound.remoteId) return;

  const remote = report.get(inbound.remoteId);
  const consistent = remote?.localId === inbound.id;
  console.log(`${inbound.id} ↔ ${inbound.remoteId}: ${consistent ? 'konsistent' : 'fehlt/abweichend'}`);
});
IT01V2837461234 ↔ ROA2837461234: konsistent

// Wichtig · Fallstricke

  • Erst nach RTCP-Daten verfügbar: remote-outbound-rtp-Einträge gibt es erst, wenn der erste RTCP-Sender-Report angekommen ist. Direkt nach dem Verbindungsaufbau fehlen sie oft. Prüfe also immer, ob der Eintrag existiert.
  • Nur im selben Report gültig: Löse localId immer im selben RTCStatsReport auf. IDs aus einem älteren Report können in einem späteren fehlen, etwa nach einer Neuverhandlung oder wenn ein Transceiver gestoppt wurde.
  • ID-Format nicht auswerten: Das Format der ID ist implementierungsabhängig (z. B. "IT01V…" in Chrome) und kann sich ändern. Behandle den Wert nur als undurchsichtigen Schlüssel.
  • Werte stammen von der Gegenstelle: Die Zähler im remote-outbound-rtp-Objekt meldet die Gegenstelle selbst. Sie können gegenüber der lokalen Messung zeitlich verzögert sein. Kurzzeitig negative Verlustwerte sind deshalb normal.
  • Browser-Kompatibilität: Ältere Browser liefern remote-outbound-rtp teilweise gar nicht oder ohne localId. Hier ist eine Feature-Erkennung sinnvoll, z. B. 'localId' in stats.