Signatur
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
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');
}
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));
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]);
// Wichtig · Fallstricke
- Nicht mit
=== falseprüfen: Wird die Beschränkung nicht unterstützt, fehlt die Eigenschaft ganz und istundefined. Prüfe deshalb auf truthy, zum Beispiel mitif (supported.channelCount). - Browser-Unterstützung ist nicht gleich Geräte-Unterstützung: Auch wenn die Eigenschaft
trueist, liefern viele eingebaute Mikrofone nur Mono. Ein Wert mitidealwird dann stillschweigend angepasst. Mitexact: 2schlägt der Aufruf dagegen mitOverconstrainedErrorfehl. - 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
channelCountingetUserMedia()teilweise trotzdem auswerten.getUserMedia()funktioniert außerdem nur in einem sicheren Kontext (HTTPS oder localhost).