Start · Sprachen · JavaScript · Referenz · RTCTransportStats.type

RTCTransportStats.type

Eigenschaft

Die Eigenschaft <code>type</code> eines <code>RTCTransportStats</code>-Objekts ist ein String mit dem festen Wert <code>"transport"</code>.

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

Signatur

RTCTransportStats.type

Beschreibung

Die schreibgeschützte Eigenschaft type kennzeichnet ein Statistikobjekt als RTCTransportStats. Sie hat für diesen Typ immer den Wert "transport". Geerbt wird sie vom Basis-Wörterbuch RTCStats, das jedes Objekt in einem RTCStatsReport implementiert.

Ein RTCStatsReport, den RTCPeerConnection.getStats() liefert, enthält viele verschiedene Statistikarten, etwa "inbound-rtp", "candidate-pair", "certificate" oder eben "transport". Mit type filtert man den Bericht nach den Einträgen, die man braucht. Transport-Statistiken beschreiben die zugrunde liegende DTLS/ICE-Transportschicht. Typische Felder sind bytesSent, bytesReceived, dtlsState, iceState, selectedCandidatePairId und tlsVersion.

Man braucht die Eigenschaft vor allem für Verbindungsdiagnosen und für Qualitäts-Dashboards. Ein weiterer Anwendungsfall: Über selectedCandidatePairId ermittelt man das aktuell genutzte ICE-Kandidatenpaar.

Rückgabewert

Typ
string
Beschreibung
Immer der String "transport". Er ist ein Wert der Aufzählung RTCStatsType.

Beispiele

Transport-Statistiken aus dem Bericht filtern

const pc = new RTCPeerConnection();
// ... Verbindung aufbauen (Offer/Answer, ICE) ...

const logTransportStats = async () => {
  const report = await pc.getStats();
  report.forEach((stats) => {
    if (stats.type === 'transport') {
      console.log('Transport-ID:', stats.id);
      console.log('Gesendet:', stats.bytesSent, 'Bytes');
      console.log('Empfangen:', stats.bytesReceived, 'Bytes');
      console.log('DTLS-Status:', stats.dtlsState);
    }
  });
};

logTransportStats();
Transport-ID: T01 Gesendet: 48213 Bytes Empfangen: 51022 Bytes DTLS-Status: connected

Aktives Kandidatenpaar über den Transport ermitteln

const getActiveCandidatePair = async (pc) => {
  const report = await pc.getStats();
  const transport = [...report.values()].find((s) => s.type === 'transport');
  if (!transport?.selectedCandidatePairId) return null;
  return report.get(transport.selectedCandidatePairId);
};

const pair = await getActiveCandidatePair(pc);
if (pair) {
  console.log(`RTT: ${pair.currentRoundTripTime * 1000} ms`);
}
RTT: 23 ms

Durchsatz periodisch messen

let last = null;

setInterval(async () => {
  const report = await pc.getStats();
  for (const stats of report.values()) {
    if (stats.type !== 'transport') continue;
    if (last) {
      const seconds = (stats.timestamp - last.timestamp) / 1000;
      const kbps = ((stats.bytesReceived - last.bytesReceived) * 8) / seconds / 1000;
      console.log(`Eingehend: ${kbps.toFixed(1)} kbit/s`);
    }
    last = stats;
  }
}, 1000);
Eingehend: 812.4 kbit/s

// Wichtig · Fallstricke

  • Vergleiche immer mit dem genauen String 'transport'. Die Werte von RTCStatsType sind klein geschrieben und nutzen Bindestriche, zum Beispiel 'candidate-pair'.
  • Bei Bundling (bundlePolicy: 'max-bundle', heute Standard) gibt es meist nur ein einziges Transport-Objekt. Ohne Bundling können es mehrere sein, etwa getrennt für Audio und Video.
  • Firefox hat "transport"-Statistiken lange nicht oder nur teilweise geliefert. Einzelne Felder wie selectedCandidatePairId oder tlsVersion können je nach Browser fehlen. Prüfe deshalb mit optionaler Verkettung (?.) oder auf undefined.
  • Rufe getStats() nicht zu oft auf. Die Abfrage ist asynchron und kostet Rechenzeit, ein Intervall von etwa einer Sekunde reicht in der Regel aus.