Start · Sprachen · JavaScript · Referenz · RTCCodecStats.transportId

RTCCodecStats.transportId

Eigenschaft

String mit der eindeutigen ID des <code>RTCTransportStats</code>-Objekts, über dessen Transport dieser Codec genutzt wird.

seit JavaScript Baseline: Chrome 80+, Firefox 112+, Safari 13.1+ ( Kategorie: webapi

Signatur

RTCCodecStats.transportId

Beschreibung

Die Eigenschaft transportId des Wörterbuchs RTCCodecStats enthält die id des zugehörigen RTCTransportStats-Eintrags im selben RTCStatsReport. Damit lässt sich feststellen, über welchen Transport (DTLS/ICE-Verbindung) ein bestimmter Codec tatsächlich verwendet wird.

In der Praxis dient transportId als Fremdschlüssel: Man ruft den Bericht mit RTCPeerConnection.getStats() ab, sucht Einträge vom Typ "codec" und schlägt anschließend mit report.get(codec.transportId) den Transport-Eintrag nach. So kommt man etwa an den Zustand der DTLS-Verbindung, das gewählte ICE-Kandidatenpaar oder die übertragene Datenmenge.

Weil Codec-Einträge pro Transport erzeugt werden, kann derselbe Codec (gleicher mimeType und payloadType) mehrfach im Bericht vorkommen, wenn mehrere Transporte bestehen – z. B. ohne Bundling. Bei max-bundle (dem üblichen Standard) teilen sich meist alle Codecs einen einzigen Transport.

Rückgabewert

Typ
string
Beschreibung
Die eindeutige Kennung (id) des RTCTransportStats-Objekts im selben RTCStatsReport. Der Wert ist eine vom Browser vergebene, nicht vorhersagbare Zeichenkette (z. B. "T01").

Beispiele

Alle Codecs mit ihrer Transport-ID auflisten

const listCodecTransports = async (pc) => {
  const report = await pc.getStats();
  report.forEach((stat) => {
    if (stat.type === 'codec') {
      console.log(`${stat.mimeType} (PT ${stat.payloadType}) -> Transport ${stat.transportId}`);
    }
  });
};

// pc ist eine bereits verbundene RTCPeerConnection
await listCodecTransports(pc);
audio/opus (PT 111) -> Transport T01 video/VP8 (PT 96) -> Transport T01

Transport-Eintrag zu einem Codec nachschlagen

const getCodecTransportInfo = async (pc) => {
  const report = await pc.getStats();
  const result = [];
  for (const stat of report.values()) {
    if (stat.type !== 'codec') continue;
    const transport = report.get(stat.transportId);
    result.push({
      codec: stat.mimeType,
      dtlsState: transport?.dtlsState ?? 'unbekannt',
      bytesSent: transport?.bytesSent ?? 0
    });
  }
  return result;
};

console.table(await getCodecTransportInfo(pc));
Tabelle mit codec, dtlsState (z. B. "connected") und bytesSent je Codec

Codecs nach Transport gruppieren

const groupCodecsByTransport = async (pc) => {
  const report = await pc.getStats();
  const groups = new Map();
  for (const stat of report.values()) {
    if (stat.type !== 'codec') continue;
    const list = groups.get(stat.transportId) ?? [];
    list.push(stat.mimeType);
    groups.set(stat.transportId, list);
  }
  return groups;
};

const groups = await groupCodecsByTransport(pc);
console.log(`Anzahl Transporte: ${groups.size}`);
console.log(Object.fromEntries(groups));
Anzahl Transporte: 1 { T01: ['audio/opus', 'video/VP8'] }

// Wichtig · Fallstricke

  • Keine stabile ID: Der Wert wird vom Browser vergeben, unterscheidet sich zwischen Browsern und kann sich nach einer ICE-Neuverhandlung ändern. Nicht speichern oder über Sitzungen hinweg vergleichen – immer innerhalb desselben RTCStatsReport auflösen.
  • Nur nutzbar nach Verhandlung: Codec-Einträge erscheinen erst, wenn Offer/Answer abgeschlossen sind und der Codec tatsächlich von einem RTP-Stream referenziert wird. Vorher liefert getStats() keine "codec"-Einträge.
  • Optional Chaining verwenden: report.get(transportId) kann in Randfällen undefined liefern (z. B. bei älteren Implementierungen), daher defensiv zugreifen.
  • Kompatibilität: Ältere Browser unterstützten RTCCodecStats unvollständig; Firefox liefert Codec-Statistiken erst in neueren Versionen. Vor produktivem Einsatz auf Vorhandensein prüfen ('transportId' in stat).