Signatur
Beschreibung
Die Eigenschaft codecId eines RTCRemoteOutboundRtpStreamStats-Eintrags (Statistiktyp "remote-outbound-rtp") enthält einen String. Er gehört zu dem RTCCodecStats-Objekt (Typ "codec") im selben RTCStatsReport, das den Codec dieses RTP-Streams beschreibt. Der Wert ist also ein Verweis und nicht der Codec-Name selbst.
remote-outbound-rtp-Statistiken beschreiben den Stream, den der entfernte Peer sendet. Sie beruhen auf RTCP-Sender-Reports, die der Gegenseite zugestellt wurden. Mit codecId findest du heraus, welchen Codec (z. B. video/VP8 oder audio/opus) die Gegenseite für diesen Stream verwendet, samt Payload-Typ, Taktrate und sdpFmtpLine.
Typische Nutzung: Du holst mit RTCPeerConnection.getStats() oder RTCRtpReceiver.getStats() einen Bericht und suchst die remote-outbound-rtp-Einträge heraus. Den passenden Codec schlägst du dann mit report.get(stats.codecId) nach. Das ist hilfreich für Diagnose-Dashboards oder um die Codec-Aushandlung zu prüfen.
Rückgabewert
RTCCodecStats-Eintrags im selben RTCStatsReport. undefined, wenn der Browser die Eigenschaft nicht liefert oder noch kein Codec feststeht.Beispiele
Codec des entfernten Senders ermitteln
// pc ist eine verbundene RTCPeerConnection
const logRemoteCodecs = async (pc) => {
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type !== 'remote-outbound-rtp') return;
const codec = stats.codecId ? report.get(stats.codecId) : undefined;
console.log(`${stats.kind}: ${codec?.mimeType ?? 'unbekannt'} (${codec?.clockRate ?? '?'} Hz)`);
});
};
await logRemoteCodecs(pc);
Statistik pro Empfänger mit Codec-Details
const describeReceiver = async (receiver) => {
const report = await receiver.getStats();
const remote = [...report.values()].find((s) => s.type === 'remote-outbound-rtp');
if (!remote?.codecId) return null;
const { mimeType, payloadType, sdpFmtpLine } = report.get(remote.codecId) ?? {};
return { ssrc: remote.ssrc, mimeType, payloadType, sdpFmtpLine };
};
for (const receiver of pc.getReceivers()) {
console.log(await describeReceiver(receiver));
}
Codec-Wechsel der Gegenseite überwachen
let lastCodecId = null;
const timer = setInterval(async () => {
const report = await pc.getStats();
for (const stats of report.values()) {
if (stats.type === 'remote-outbound-rtp' && stats.kind === 'video') {
if (stats.codecId && stats.codecId !== lastCodecId) {
lastCodecId = stats.codecId;
console.log('Neuer Video-Codec:', report.get(stats.codecId)?.mimeType);
}
}
}
}, 2000);
// Aufräumen beim Schließen der Verbindung
pc.addEventListener('connectionstatechange', () => {
if (pc.connectionState === 'closed') clearInterval(timer);
});
// Wichtig · Fallstricke
- Nur ein Verweis:
codecIdist eine ID und kein Codec-Name. Die Details liest du erst überreport.get(codecId)aus. Das funktioniert nur im selben Bericht, weil IDs zwischen zweigetStats()-Aufrufen nicht garantiert gleich bleiben. - Verzögerte Verfügbarkeit:
remote-outbound-rtp-Einträge gibt es erst, wenn RTCP-Sender-Reports der Gegenseite eingetroffen sind. Direkt nach dem Verbindungsaufbau können sie fehlen. - Browser-Kompatibilität: Wie vollständig die Einträge sind, hängt vom Browser ab. Firefox liefert
remote-outbound-rtpschon lange, Chromium-Browser erst in neueren Versionen. Prüfe deshalb immer, obcodecIdvorhanden ist, statt es vorauszusetzen. - Der Wert ist schreibgeschützt: Das Statistik-Objekt ist nur eine Momentaufnahme, Änderungen daran wirken sich nicht auf die Verbindung aus.