Signatur
Beschreibung
Die Methode getConstraints() der Schnittstelle MediaStreamTrack liefert die Einschränkungen (Constraints), die zuletzt für den Track festgelegt wurden – entweder beim Erzeugen über navigator.mediaDevices.getUserMedia() bzw. getDisplayMedia() oder später über MediaStreamTrack.applyConstraints().
Wichtig: Zurückgegeben werden die angeforderten Werte, also genau das, was Ihr Code verlangt hat, einschließlich Angaben wie ideal, min, max oder exact. Welche Werte der Browser tatsächlich verwendet, liefert dagegen getSettings(). Welche Wertebereiche das Gerät überhaupt unterstützt, verrät getCapabilities().
Die Methode eignet sich vor allem, um bestehende Einschränkungen zu lesen, gezielt zu verändern und anschließend mit applyConstraints() erneut anzuwenden – etwa um die Auflösung zu ändern, ohne die übrigen Vorgaben zu verlieren. Außerdem hilft sie bei der Fehlersuche, wenn angeforderte und tatsächliche Werte voneinander abweichen.
Rückgabewert
video: true), ist es ein leeres Objekt {}. Das Objekt ist eine Kopie – Änderungen daran wirken sich erst nach applyConstraints() aus.Beispiele
Angeforderte Einschränkungen eines Kamera-Tracks auslesen
const stream = await navigator.mediaDevices.getUserMedia({
video: { width: { ideal: 1280 }, height: { ideal: 720 }, facingMode: 'user' }
});
const [track] = stream.getVideoTracks();
console.log(track.getConstraints());
Angefordert vs. tatsächlich: getConstraints() und getSettings() vergleichen
const stream = await navigator.mediaDevices.getUserMedia({
video: { width: { ideal: 1920 }, frameRate: { ideal: 60 } }
});
const [track] = stream.getVideoTracks();
const angefordert = track.getConstraints();
const tatsaechlich = track.getSettings();
console.log('Angefordert:', angefordert.width, angefordert.frameRate);
console.log('Tatsächlich:', tatsaechlich.width, tatsaechlich.frameRate);
Bestehende Einschränkungen erweitern und neu anwenden
const stream = await navigator.mediaDevices.getUserMedia({
video: { facingMode: 'environment', width: { ideal: 640 } }
});
const [track] = stream.getVideoTracks();
// Auflösung erhöhen, facingMode beibehalten
const neu = { ...track.getConstraints(), width: { ideal: 1280 }, height: { ideal: 720 } };
try {
await track.applyConstraints(neu);
console.log('Neu gesetzt:', track.getConstraints());
} catch (err) {
console.error('Einschränkung nicht erfüllbar:', err.constraint);
}
Leeres Objekt bei fehlenden Einschränkungen
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const [audioTrack] = stream.getAudioTracks();
const c = audioTrack.getConstraints();
console.log(Object.keys(c).length === 0 ? 'Keine Einschränkungen gesetzt' : c);
// Wichtig · Fallstricke
- Nicht mit
getSettings()verwechseln:getConstraints()liefert die angeforderten Wünsche, nicht die tatsächlich aktiven Werte. Für die echte Auflösung, Bildrate usw. immergetSettings()verwenden. applyConstraints()ersetzt vollständig: Ein neuer Aufruf überschreibt alle bisherigen Einschränkungen. Wer nur einzelne Werte ändern will, sollte wie im Beispiel die Rückgabe vongetConstraints()per Spread-Syntax mit den neuen Werten zusammenführen.- Schlägt
applyConstraints()fehl (OverconstrainedError), bleiben die vorherigen Einschränkungen erhalten und werden weiterhin vongetConstraints()geliefert. - Browser können die Darstellung normalisieren: Manche geben z. B. einfache Werte (
width: 1280) unverändert zurück, andere in Objektform. Nicht auf exakt identische Struktur vertrauen. - Der Zugriff auf Mediengeräte erfordert einen sicheren Kontext (HTTPS oder
localhost) und die Zustimmung des Nutzers. Die Methode selbst wird von allen modernen Browsern (Chrome, Firefox, Safari, Edge) unterstützt.