Start · Sprachen · JavaScript · Referenz · MediaStreamTrack.getConstraints()

MediaStreamTrack.getConstraints()

Methode

Gibt ein <code>MediaTrackConstraints</code>-Objekt mit den zuletzt über <code>getUserMedia()</code> oder <code>applyConstraints()</code> gesetzten Einschränkungen des Tracks zurück.

seit JavaScript Baseline: alle modernen Browser (seit ca. 2017) Kategorie: webapi

Signatur

MediaStreamTrack.prototype.getConstraints()

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

Typ
MediaTrackConstraints
Beschreibung
Ein Objekt mit den zuletzt gesetzten Einschränkungen. Wurden keine Einschränkungen angegeben (z. B. 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());
{ width: { ideal: 1280 }, height: { ideal: 720 }, facingMode: 'user' }

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);
Angefordert: { ideal: 1920 } { ideal: 60 } Tatsächlich: 1280 30

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);
}
Neu gesetzt: { facingMode: 'environment', width: { ideal: 1280 }, height: { ideal: 720 } }

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);
Keine Einschränkungen gesetzt

// 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. immer getSettings() 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 von getConstraints() per Spread-Syntax mit den neuen Werten zusammenführen.
  • Schlägt applyConstraints() fehl (OverconstrainedError), bleiben die vorherigen Einschränkungen erhalten und werden weiterhin von getConstraints() 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.