Signatur
Beschreibung
Die Eigenschaft channels eines RTCCodecStats-Objekts gibt an, wie viele Kanäle der ausgehandelte Codec verwendet. Mit 1 ist Mono gemeint, mit 2 Stereo. Der Wert stammt aus der SDP-Aushandlung, genauer aus dem optionalen Kanal-Parameter der a=rtpmap-Zeile (z. B. a=rtpmap:111 opus/48000/2).
Codec-Statistiken rufst du mit RTCPeerConnection.getStats(), RTCRtpSender.getStats() oder RTCRtpReceiver.getStats() ab. Im zurückgegebenen RTCStatsReport haben sie type === "codec". RTP-Stream-Statistiken (inbound-rtp, outbound-rtp) verweisen über codecId auf den passenden Codec-Eintrag.
Typische Einsatzfälle sind Diagnose und Überwachung: Du kannst prüfen, ob eine Verbindung wirklich in Stereo läuft, Codec-Details in Debug-Oberflächen anzeigen oder die Qualität einer Verbindung protokollieren.
Bei Video-Codecs fehlt die Eigenschaft, ihr Wert ist dann undefined.
Rückgabewert
1 oder 2). Bei Video-Codecs oder wenn kein Wert ausgehandelt wurde: undefined.Beispiele
Alle Codecs einer Verbindung mit Kanalanzahl auflisten
const logCodecs = async (pc) => {
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type === 'codec') {
console.log(`${stats.mimeType} @ ${stats.clockRate} Hz, Kanäle: ${stats.channels ?? '–'}`);
}
});
};
// pc ist eine bestehende RTCPeerConnection mit ausgehandelter Verbindung
await logCodecs(pc);
Prüfen, ob der gesendete Audiostream Stereo ist
const isSendingStereo = async (sender) => {
const report = await sender.getStats();
const outbound = [...report.values()].find((s) => s.type === 'outbound-rtp');
if (!outbound?.codecId) return false;
const codec = report.get(outbound.codecId);
return codec?.channels === 2;
};
const audioSender = pc.getSenders().find((s) => s.track?.kind === 'audio');
console.log('Stereo:', await isSendingStereo(audioSender));
Kanalanzahl für den empfangenen Stream überwachen
const monitorChannels = (receiver, intervalMs = 5000) => {
const timer = setInterval(async () => {
const report = await receiver.getStats();
for (const stats of report.values()) {
if (stats.type === 'inbound-rtp' && stats.codecId) {
const { mimeType, channels } = report.get(stats.codecId) ?? {};
console.log(`Empfang: ${mimeType}, ${channels === 1 ? 'Mono' : channels === 2 ? 'Stereo' : channels + ' Kanäle'}`);
}
}
}, intervalMs);
return () => clearInterval(timer);
};
const stop = monitorChannels(pc.getReceivers()[0]);
// später: stop();
// Wichtig · Fallstricke
- Nur bei Audio vorhanden: Bei Video-Codecs ist
channelsundefined. Greif deshalb mit??oder optionaler Verkettung darauf zu. - Ausgehandelter Wert, nicht tatsächlicher Inhalt: Bei Opus steht in der SDP immer
opus/48000/2, deshalb meldetchannelsmeist2. Ob wirklich Stereo übertragen wird, hängt vomfmtp-Parameterstereo=1und von der Audioquelle ab. - Nur Codecs, die ein Stream tatsächlich nutzt: Codec-Statistiken erscheinen im Bericht erst, wenn ein RTP-Stream den Codec wirklich verwendet. Vor Abschluss der Aushandlung fehlen sie.
- Browser-Kompatibilität: Der Stats-Typ
codecwird in aktuellen Versionen von Chromium, Firefox und Safari unterstützt. Ältere Versionen liefern teils unvollständige Felder. Prüfe den Wert deshalb vor der Verwendung.