Start · Sprachen · JavaScript · Referenz · MediaTrackSupportedConstraints.width

MediaTrackSupportedConstraints.width

Eigenschaft

Boolescher Wert, der anzeigt, ob der Browser die Constraint <code>width</code> (Videobreite in Pixeln) für Medienspuren kennt und unterstützt.

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

MediaTrackSupportedConstraints.width

Beschreibung

Die Eigenschaft width gehört zum Wörterbuch MediaTrackSupportedConstraints. Dieses Objekt liefert navigator.mediaDevices.getSupportedConstraints(). Ist width darin enthalten und hat den Wert true, dann versteht der User-Agent die gleichnamige Constraint. Mit ihr lässt sich die gewünschte Breite einer Videospur in Pixeln festlegen, etwa bei getUserMedia() oder MediaStreamTrack.applyConstraints().

Wird die Constraint nicht unterstützt, fehlt die Eigenschaft ganz. Sie steht dann nicht auf false. Prüfe deshalb mit if (supported.width) oder dem in-Operator.

Die Prüfung hilft, wenn du Constraints nur dann setzen willst, wenn der Browser sie auch auswertet. So kannst du etwa auf eine Auflösung wie 1280×720 hinarbeiten oder auf einen Standard zurückfallen. Wichtig: true heißt nur, dass der Browser die Constraint kennt. Ob ein bestimmtes Gerät eine bestimmte Breite liefern kann, sagt der Wert nicht. Das beantworten MediaStreamTrack.getCapabilities() bzw. getSettings().

Rückgabewert

Typ
boolean
Beschreibung
true, wenn die Constraint width unterstützt wird. Ohne Unterstützung fehlt die Eigenschaft (Zugriff ergibt undefined).

Beispiele

Unterstützung der width-Constraint prüfen

const supported = navigator.mediaDevices.getSupportedConstraints();

if (supported.width) {
  console.log('width-Constraint wird unterstützt');
} else {
  console.log('width-Constraint wird NICHT unterstützt');
}
width-Constraint wird unterstützt

Kamera mit gewünschter Breite öffnen (mit Fallback)

const startCamera = async () => {
  const supported = navigator.mediaDevices.getSupportedConstraints();
  const video = supported.width
    ? { width: { ideal: 1280 }, height: supported.height ? { ideal: 720 } : undefined }
    : true;

  const stream = await navigator.mediaDevices.getUserMedia({ video });
  const [track] = stream.getVideoTracks();
  console.log('Tatsächliche Breite:', track.getSettings().width);
  document.querySelector('video').srcObject = stream;
};

startCamera().catch((err) => console.error('Kamera-Fehler:', err.name));
Tatsächliche Breite: 1280

Breite einer laufenden Spur nachträglich ändern

const setTrackWidth = async (track, width) => {
  if (!('width' in navigator.mediaDevices.getSupportedConstraints())) {
    console.warn('width wird nicht unterstützt');
    return;
  }
  const { width: range } = track.getCapabilities?.() ?? {};
  if (range && (width < range.min || width > range.max)) {
    console.warn(`Breite muss zwischen ${range.min} und ${range.max} liegen`);
    return;
  }
  await track.applyConstraints({ width: { exact: width } });
  console.log('Neue Breite:', track.getSettings().width);
};

const stream = await navigator.mediaDevices.getUserMedia({ video: true });
await setTrackWidth(stream.getVideoTracks()[0], 640);
Neue Breite: 640

// Wichtig · Fallstricke

  • Kein false: Wird die Constraint nicht unterstützt, fehlt die Eigenschaft, statt auf false zu stehen. Ein Vergleich mit === false greift also nie.
  • Unterstützung ≠ Gerätefähigkeit: true heißt nicht, dass die Kamera jede Breite liefern kann. Den tatsächlichen Wertebereich zeigt getCapabilities().
  • exact kann fehlschlagen: Mit { exact: … } lehnt getUserMedia() bzw. applyConstraints() mit einem OverconstrainedError ab, wenn der Wert nicht erreichbar ist. ideal ist robuster.
  • Zusammen mit height kann der Browser das Seitenverhältnis anpassen oder das Bild zuschneiden. Das hängt von resizeMode ab, soweit der Browser es unterstützt.
  • navigator.mediaDevices gibt es nur in sicheren Kontexten (HTTPS oder localhost). Die Eigenschaft wird von allen modernen Browsern unterstützt.