Signatur
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
"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);
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));
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(", "));
}
// 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 mittoLowerCase(). - Keine Parameter enthalten:
mimeTypenennt nur Typ und Subtyp. Profilangaben (z. B.profile-level-idbei H.264) findest du insdpFmtpLine, die Kanalzahl inchannels. - 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(), nichtgetStats().