Start · Sprachen · JavaScript · Referenz · RTCRemoteInboundRtpStreamStats.transportId

RTCRemoteInboundRtpStreamStats.transportId

Eigenschaft

String-ID, die auf das <code>RTCTransportStats</code>-Objekt des Transports verweist, über den dieser RTP-Stream läuft.

seit JavaScript Baseline: Chrome, Edge, Firefox, Safari (WebRTC St Kategorie: webapi

Signatur

RTCRemoteInboundRtpStreamStats.transportId

Beschreibung

Die Eigenschaft transportId eines RTCRemoteInboundRtpStreamStats-Objekts (Statistiktyp "remote-inbound-rtp") enthält die id des RTCTransportStats-Eintrags. Dieser beschreibt den Transport (in der Regel eine DTLS/ICE-Verbindung), über den der zugehörige RTP-Stream übertragen wird.

remote-inbound-rtp-Statistiken geben an, was die Gegenseite über den Empfang deiner gesendeten Medien meldet, also Paketverlust, Jitter und Round-Trip-Time aus RTCP-Receiver-Reports. Über transportId ordnest du diese Werte der konkreten Verbindung zu. So erfährst du zum Beispiel, welches ICE-Kandidatenpaar gerade aktiv ist (selectedCandidatePairId), welche DTLS-Version und welche Cipher-Suite genutzt werden und wie viele Bytes insgesamt über den Transport gelaufen sind.

Die ID ist nur innerhalb desselben RTCStatsReport gültig. Du löst sie mit report.get(stats.transportId) auf. Bei BUNDLE, dem Standard in modernen Browsern, teilen sich alle Streams einer Verbindung meist denselben Transport und haben deshalb dieselbe transportId.

Rückgabewert

Typ
string
Beschreibung
Die id des zugehörigen RTCTransportStats-Objekts im selben Statistikbericht. Es handelt sich um einen browserspezifischen, undurchsichtigen Bezeichner, z. B. "T01".

Beispiele

Transport zu einem remote-inbound-rtp-Stream auflösen

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

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

  const transport = report.get(stats.transportId);
  console.log(`${stats.kind}: RTT ${stats.roundTripTime ?? '–'} s`);
  console.log('Transport:', transport?.id, 'DTLS:', transport?.dtlsState);
});
video: RTT 0.042 s Transport: T01 DTLS: connected

Aktives ICE-Kandidatenpaar zum gesendeten Stream ermitteln

const getActivePath = async (pc) => {
  const report = await pc.getStats();
  const result = [];

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

    const transport = report.get(stats.transportId);
    const pair = transport && report.get(transport.selectedCandidatePairId);
    const local = pair && report.get(pair.localCandidateId);
    const remote = pair && report.get(pair.remoteCandidateId);

    result.push({
      kind: stats.kind,
      packetsLost: stats.packetsLost,
      local: local ? `${local.address}:${local.port} (${local.candidateType})` : null,
      remote: remote ? `${remote.address}:${remote.port} (${remote.candidateType})` : null,
    });
  }
  return result;
};

console.table(await getActivePath(pc));
[{ kind: 'audio', packetsLost: 3, local: '192.168.1.20:54321 (host)', remote: '203.0.113.5:3478 (relay)' }]

Streams nach Transport gruppieren (BUNDLE prüfen)

const report = await pc.getStats();
const byTransport = new Map();

for (const s of report.values()) {
  if (s.type === 'remote-inbound-rtp') {
    const list = byTransport.get(s.transportId) ?? [];
    list.push(s.kind);
    byTransport.set(s.transportId, list);
  }
}

console.log(Object.fromEntries(byTransport));
{ T01: ['audio', 'video'] }

// Wichtig · Fallstricke

  • Nur innerhalb eines Berichts gültig: IDs können sich zwischen zwei getStats()-Aufrufen ändern, etwa nach einem ICE-Restart oder einer Neuverhandlung. Speichere sie also nicht dauerhaft, sondern löse sie jedes Mal im aktuellen Bericht auf.
  • remote-inbound-rtp-Einträge erscheinen erst, wenn der erste RTCP-Receiver-Report der Gegenseite angekommen ist. Direkt nach dem Verbindungsaufbau fehlen sie deshalb oft.
  • report.get(transportId) kann undefined liefern, zum Beispiel wenn der Transport schon geschlossen ist. Nutze optionales Verketten (?.).
  • Den Wert nicht parsen: Das Format der ID ist nicht standardisiert und unterscheidet sich zwischen Browsern.
  • Kompatibilität: Chromium, Firefox und Safari unterstützen die Eigenschaft. Ältere Versionen liefern teilweise nicht alle Felder des verknüpften RTCTransportStats, zum Beispiel selectedCandidatePairId.