Start · Sprachen · JavaScript · Referenz · MediaTrackSupportedConstraints.channelCount

MediaTrackSupportedConstraints.channelCount

Eigenschaft

Boolean-Eigenschaft, die angibt, ob der User Agent die Beschränkung <code>channelCount</code> (Anzahl der Audiokanäle) für Medienspuren unterstützt.

seit JavaScript Chrome 55+, Edge 12+, Opera 42+; Firefox und Safar Kategorie: webapi

Signatur

MediaTrackSupportedConstraints.channelCount

Beschreibung

Die Eigenschaft channelCount des Wörterbuchs MediaTrackSupportedConstraints steckt in dem Objekt, das navigator.mediaDevices.getSupportedConstraints() zurückgibt. Sie ist nur vorhanden und hat dann den Wert true, wenn der Browser die Beschränkung channelCount kennt. Kennt er sie nicht, fehlt die Eigenschaft, und ein Zugriff darauf liefert undefined. Den Wert false findest du hier in der Praxis nicht.

Mit der Beschränkung channelCount legst du bei getUserMedia() oder MediaStreamTrack.applyConstraints() fest, wie viele Audiokanäle eine Spur haben soll, zum Beispiel 1 für Mono oder 2 für Stereo. Das ist nützlich für Musik-Streaming, Aufnahmen mit Stereo-Mikrofonen oder Sprachanwendungen, bei denen Mono Bandbreite spart.

Wichtig: Die Eigenschaft sagt nur, ob der Browser die Beschränkung kennt. Ob ein bestimmtes Gerät die gewünschte Kanalzahl liefern kann, verrät sie nicht. Welche Werte ein Gerät tatsächlich unterstützt, liest du mit MediaStreamTrack.getCapabilities() aus. Welcher Wert gerade wirksam ist, zeigt MediaStreamTrack.getSettings().

Rückgabewert

Typ
boolean | undefined
Beschreibung
true, wenn der User Agent die Beschränkung channelCount unterstützt. Andernfalls fehlt die Eigenschaft und liefert undefined.

Beispiele

Unterstützung prüfen

const supported = navigator.mediaDevices.getSupportedConstraints();

if (supported.channelCount) {
  console.log('channelCount wird unterstützt');
} else {
  console.log('channelCount wird nicht unterstützt');
}
channelCount wird unterstützt

Stereo-Aufnahme nur bei Unterstützung anfordern

const startAudio = async () => {
  const supported = navigator.mediaDevices.getSupportedConstraints();
  const audio = { echoCancellation: false };

  // channelCount nur setzen, wenn der Browser die Beschränkung kennt
  if (supported.channelCount) {
    audio.channelCount = { ideal: 2 };
  }

  const stream = await navigator.mediaDevices.getUserMedia({ audio });
  const [track] = stream.getAudioTracks();
  console.log('Kanäle:', track.getSettings().channelCount ?? 'unbekannt');
  return stream;
};

startAudio().catch((err) => console.error(err.name, err.message));
Kanäle: 2

Kanalzahl nachträglich auf Mono ändern

const switchToMono = async (track) => {
  if (!navigator.mediaDevices.getSupportedConstraints().channelCount) {
    console.warn('channelCount nicht verfügbar');
    return;
  }
  // Welche Kanalzahlen kann das Gerät liefern?
  const caps = track.getCapabilities?.() ?? {};
  console.log('Mögliche Kanäle:', caps.channelCount);

  await track.applyConstraints({ channelCount: 1 });
  console.log('Aktuell:', track.getSettings().channelCount);
};

const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
await switchToMono(stream.getAudioTracks()[0]);
Mögliche Kanäle: { min: 1, max: 2 } Aktuell: 1

// Wichtig · Fallstricke

  • Nicht mit === false prüfen: Wird die Beschränkung nicht unterstützt, fehlt die Eigenschaft ganz und ist undefined. Prüfe deshalb auf truthy, zum Beispiel mit if (supported.channelCount).
  • Browser-Unterstützung ist nicht gleich Geräte-Unterstützung: Auch wenn die Eigenschaft true ist, liefern viele eingebaute Mikrofone nur Mono. Ein Wert mit ideal wird dann stillschweigend angepasst. Mit exact: 2 schlägt der Aufruf dagegen mit OverconstrainedError fehl.
  • Audioverarbeitung: Echounterdrückung, Rauschunterdrückung und automatische Verstärkung können in manchen Browsern die Ausgabe auf Mono zwingen. Für echtes Stereo solltest du diese Funktionen abschalten.
  • Kompatibilität: Laut MDN geben Chromium-basierte Browser die Eigenschaft zurück. Firefox und Safari melden sie derzeit nicht, auch wenn sie channelCount in getUserMedia() teilweise trotzdem auswerten. getUserMedia() funktioniert außerdem nur in einem sicheren Kontext (HTTPS oder localhost).