Start · Sprachen · JavaScript · Referenz · RTCCodecStats.mimeType

RTCCodecStats.mimeType

Eigenschaft

String mit MIME-Typ und -Subtyp des Codecs in einer WebRTC-Verbindung, z. B. <code>"video/VP8"</code> oder <code>"audio/opus"</code>.

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

Signatur

RTCCodecStats.mimeType

Beschreibung

Die schreibgeschützte Eigenschaft mimeType des Wörterbuchs RTCCodecStats enthält den MIME-Typ des Codecs im Format Typ/Subtyp, zum Beispiel "video/VP9", "video/H264", "video/AV1" oder "audio/opus". Der Wert entspricht dem Codec-Namen, der beim SDP-Aushandeln (Offer/Answer) vereinbart wurde.

Du bekommst RTCCodecStats-Objekte, wenn du RTCPeerConnection.getStats(), RTCRtpSender.getStats() oder RTCRtpReceiver.getStats() aufrufst und im zurückgegebenen RTCStatsReport nach Einträgen mit type === "codec" filterst. Statistiken zu RTP-Streams (inbound-rtp, outbound-rtp) verweisen über ihre Eigenschaft codecId auf den passenden Codec-Eintrag.

Typische Einsatzfälle: in der Diagnose anzeigen, welcher Codec gerade tatsächlich genutzt wird, prüfen, ob eine per setCodecPreferences() gesetzte Bevorzugung gewirkt hat, oder Qualitäts- und Telemetriedaten nach Codec gruppieren.

Rückgabewert

Typ
string
Beschreibung
MIME-Typ und -Subtyp des Codecs, z. B. "audio/opus" oder "video/VP8". Die Groß-/Kleinschreibung des Subtyps kann je nach Browser unterschiedlich ausfallen.

Beispiele

Alle ausgehandelten Codecs einer Verbindung auflisten

const listCodecs = async (pc) => {
  const report = await pc.getStats();
  report.forEach((stats) => {
    if (stats.type === "codec") {
      console.log(`${stats.payloadType}: ${stats.mimeType} @ ${stats.clockRate} Hz`);
    }
  });
};

// pc ist eine bestehende, verbundene RTCPeerConnection
await listCodecs(pc);
111: audio/opus @ 48000 Hz 96: video/VP8 @ 90000 Hz

Aktiv gesendeten Video-Codec über codecId ermitteln

const getActiveVideoCodec = async (pc) => {
  const report = await pc.getStats();
  for (const stats of report.values()) {
    if (stats.type === "outbound-rtp" && stats.kind === "video" && stats.codecId) {
      const codec = report.get(stats.codecId);
      return codec?.mimeType ?? null;
    }
  }
  return null;
};

console.log("Gesendeter Video-Codec:", await getActiveVideoCodec(pc));
Gesendeter Video-Codec: video/VP9

Prüfen, ob die Codec-Bevorzugung gegriffen hat

const receiver = pc.getReceivers().find((r) => r.track.kind === "video");
const report = await receiver.getStats();

const mimeTypes = [...report.values()]
  .filter((s) => s.type === "codec")
  .map((s) => s.mimeType.toLowerCase());

if (mimeTypes.includes("video/av1")) {
  console.log("AV1 wird verwendet");
} else {
  console.warn("AV1 nicht aktiv, stattdessen:", mimeTypes.join(", "));
}
AV1 wird verwendet

// Wichtig · Fallstricke

  • Groß-/Kleinschreibung: MIME-Subtypen sind laut Spezifikation unabhängig von der Schreibweise. Browser liefern etwa "video/H264" oder "video/h264". Vergleiche daher immer mit toLowerCase().
  • Keine Parameter enthalten: mimeType nennt nur Typ und Subtyp. Profilangaben (z. B. profile-level-id bei H.264) findest du in sdpFmtpLine, die Kanalzahl in channels.
  • Nur ausgehandelte, genutzte Codecs: Codec-Statistiken erscheinen erst, wenn die Verbindung ausgehandelt ist, und Browser listen oft nur Codecs auf, auf die ein RTP-Stream verweist. Vor dem Verbindungsaufbau ist der Report leer.
  • Kompatibilität: Moderne Chromium-Browser, Firefox und Safari unterstützen die Eigenschaft. Ältere Versionen liefern teils Namen ohne Typ-Präfix (z. B. nur "VP8"). Robuster Code sollte damit rechnen.
  • Für die Liste der unterstützten Codecs vor dem Verbindungsaufbau nimm RTCRtpSender.getCapabilities(), nicht getStats().