Start · Sprachen · JavaScript · Referenz · RTCCodecStats.type

RTCCodecStats.type

Eigenschaft

Die schreibgeschützte Eigenschaft <code>type</code> eines <code>RTCCodecStats</code>-Objekts enthält immer den String <code>"codec"</code>.

seit JavaScript Baseline: Chrome, Edge, Firefox, Safari (neuere Ve Kategorie: webapi

Signatur

RTCCodecStats.type

Beschreibung

Die Eigenschaft type gehört zum Wörterbuch RTCCodecStats, das von RTCPeerConnection.getStats() (bzw. RTCRtpSender.getStats() und RTCRtpReceiver.getStats()) im zurückgegebenen RTCStatsReport geliefert wird. Bei Codec-Statistiken hat sie immer den Wert "codec".

Ein RTCStatsReport ist eine Map-ähnliche Struktur mit vielen Statistikobjekten unterschiedlicher Art, etwa "inbound-rtp", "outbound-rtp", "candidate-pair" oder eben "codec". Über type filtert man den Bericht und findet die Einträge mit Codec-Angaben wie mimeType, clockRate, channels, payloadType und sdpFmtpLine.

Typischer Einsatz: in einer laufenden WebRTC-Sitzung feststellen, welcher Audio- oder Video-Codec (z. B. video/VP8, video/H264, audio/opus) tatsächlich ausgehandelt wurde. Die codecId-Eigenschaft der RTP-Statistiken verweist dabei auf die id des passenden "codec"-Eintrags.

Rückgabewert

Typ
string
Beschreibung
Immer der String "codec" (ein Wert aus der Aufzählung RTCStatsType).

Beispiele

Alle Codec-Statistiken einer Verbindung auflisten

const listCodecs = async (pc) => {
  const report = await pc.getStats();
  report.forEach((stats) => {
    if (stats.type === "codec") {
      console.log(stats.id, stats.mimeType, stats.clockRate, stats.payloadType);
    }
  });
};

// Aufruf mit einer bestehenden, verbundenen RTCPeerConnection
await listCodecs(peerConnection);
COT01_111_minptime=10;useinbandfec=1 audio/opus 48000 111 COT01_96 video/VP8 90000 96

Tatsächlich genutzten Video-Codec des Senders ermitteln

const getSendVideoCodec = async (pc) => {
  const sender = pc.getSenders().find((s) => s.track?.kind === "video");
  if (!sender) return null;

  const report = await sender.getStats();
  const outbound = [...report.values()].find((s) => s.type === "outbound-rtp");
  if (!outbound?.codecId) return null;

  const codec = report.get(outbound.codecId);
  // Sicherheitshalber den Typ prüfen
  return codec?.type === "codec" ? codec.mimeType : null;
};

console.log(await getSendVideoCodec(peerConnection));
video/VP8

Codec-Einträge per filter als Array sammeln

const report = await peerConnection.getStats();
const codecs = [...report.values()]
  .filter(({ type }) => type === "codec")
  .map(({ mimeType, channels, sdpFmtpLine }) => ({ mimeType, channels, sdpFmtpLine }));

console.table(codecs);
Tabelle mit mimeType, channels und sdpFmtpLine je Codec

// Wichtig · Fallstricke

  • type ist schreibgeschützt und für RTCCodecStats konstant – der Wert dient nur zur Unterscheidung von anderen Statistiktypen im RTCStatsReport.
  • Codec-Einträge erscheinen erst, wenn die Verbindung ausgehandelt ist und der Codec tatsächlich von einem RTP-Stream genutzt wird. Vor dem Verbindungsaufbau liefert getStats() oft keine "codec"-Einträge.
  • Die id von Codec-Einträgen ist browserspezifisch formatiert – nicht parsen, sondern nur über codecId referenzieren.
  • Ältere Browser lieferten teils abweichende Felder (z. B. fehlendes transportId oder sdpFmtpLine); Firefox und Safari unterstützen Codec-Statistiken erst in neueren Versionen. Felder daher optional behandeln (?.).
  • Das veraltete, callbackbasierte getStats() von Chrome liefert ein anderes Format ohne diesen Typ – nur die Promise-Variante verwenden.