Start · Sprachen · JavaScript · Referenz · RTCCodecStats.channels

RTCCodecStats.channels

Eigenschaft

Positive Ganzzahl mit der Anzahl der Audiokanäle, die der Codec nutzt (z. B. 1 = Mono, 2 = Stereo). Nur bei Audio-Codecs vorhanden.

seit JavaScript Baseline 2023: Chrome, Edge, Firefox, Safari (neue Kategorie: webapi

Signatur

RTCCodecStats.channels

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

Typ
number | undefined
Beschreibung
Positive Ganzzahl mit der Anzahl der Kanäle (z. B. 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);
audio/opus @ 48000 Hz, Kanäle: 2 video/VP8 @ 90000 Hz, Kanäle: –

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));
Stereo: true

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();
Empfang: audio/opus, Stereo

// Wichtig · Fallstricke

  • Nur bei Audio vorhanden: Bei Video-Codecs ist channels undefined. 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 meldet channels meist 2. Ob wirklich Stereo übertragen wird, hängt vom fmtp-Parameter stereo=1 und 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 codec wird 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.