Start · Sprachen · JavaScript · Referenz · MediaTrackConstraints.width

MediaTrackConstraints.width

Eigenschaft

Legt als <code>ConstrainULong</code> fest, welche Breite in Pixeln ein Videotrack haben soll – als exakter Wert, Wunschwert oder Bereich.

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

MediaTrackConstraints.width

Beschreibung

Die Eigenschaft width des Wörterbuchs MediaTrackConstraints beschreibt die gewünschte oder verpflichtende Breite eines Videotracks in Pixeln. Man verwendet sie mit navigator.mediaDevices.getUserMedia(), getDisplayMedia() oder MediaStreamTrack.applyConstraints(), um z. B. eine Kamera in HD-Auflösung anzufordern.

Der Wert ist ein ConstrainULong. Er kann eine einfache ganze Zahl sein oder ein Objekt mit den Schlüsseln min, max, exact und ideal. Eine einfache Zahl ist in getUserMedia() ein Wunschwert (wie ideal): Der Browser versucht, möglichst nah heranzukommen, liefert aber notfalls eine andere Breite. Nur min, max und exact sind verpflichtend. Lassen sie sich nicht erfüllen, wird das Promise mit einem OverconstrainedError abgelehnt.

Welche Breite der Track am Ende wirklich hat, liest du mit track.getSettings().width aus. Den Wertebereich, den das Gerät unterstützt, liefert track.getCapabilities().width. Ob der Browser die Einschränkung überhaupt kennt, zeigt navigator.mediaDevices.getSupportedConstraints().width.

Parameter

Name Typ Default Beschreibung
$width number | { min?: number, max?: number, exact?: number, ideal?: number } Breite in Pixeln als ganze Zahl ohne Vorzeichen (ConstrainULong). Eine einfache Zahl gilt als Wunschwert. min, max und exact sind verpflichtend, ideal ist ein Wunschwert.

Rückgabewert

Typ
number | ConstrainULongRange
Beschreibung
Die hinterlegte Einschränkung für die Breite: entweder eine Zahl oder ein Objekt mit min/max/exact/ideal.

Beispiele

Kamera in HD-Auflösung anfordern

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

startCamera().catch(console.error);
Tatsächliche Breite: 1280

Mindestbreite verpflichtend verlangen und Fehler behandeln

const requestFullHd = async () => {
  try {
    const stream = await navigator.mediaDevices.getUserMedia({
      video: { width: { min: 1920 } }
    });
    return stream;
  } catch (err) {
    if (err.name === 'OverconstrainedError') {
      console.warn(`Nicht erfüllbar: ${err.constraint}`);
      // Ausweichlösung ohne harte Vorgabe
      return navigator.mediaDevices.getUserMedia({ video: { width: 1920 } });
    }
    throw err;
  }
};

requestFullHd();
Nicht erfüllbar: width (nur bei Kameras unter 1920 px)

Breite eines laufenden Tracks mit applyConstraints() ändern

const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const [track] = stream.getVideoTracks();

const caps = track.getCapabilities();
console.log('Unterstützt:', caps.width); // z. B. { min: 1, max: 1920 }

await track.applyConstraints({
  width: { ideal: 640, max: caps.width.max }
});
console.log('Neue Breite:', track.getSettings().width);
Unterstützt: { min: 1, max: 1920 } Neue Breite: 640

Unterstützung prüfen

const supported = navigator.mediaDevices.getSupportedConstraints();
console.log(supported.width ? 'width wird unterstützt' : 'width wird nicht unterstützt');
width wird unterstützt

// Wichtig · Fallstricke

  • Zahl heißt Wunschwert: { width: 1280 } ist keine harte Vorgabe. Brauchst du genau diesen Wert, schreibe { exact: 1280 } – dann riskierst du aber einen OverconstrainedError. In applyConstraints() behandeln einige Browser einfache Zahlen strenger.
  • Ausrichtung: Auf Mobilgeräten im Hochformat tauschen Breite und Höhe oft die Rollen. Prüfe das Ergebnis deshalb immer mit getSettings().
  • Skalierung: Chrome kann das Bild selbst herunterskalieren oder zuschneiden, um den Wert zu treffen. Firefox und Safari halten sich eher an die nativen Modi der Kamera.
  • Nur für Video: Die Einschränkung gilt nur für Videotracks. Bei Audiotracks wird sie ignoriert.
  • Sicherer Kontext: getUserMedia() funktioniert nur über HTTPS oder auf localhost und braucht die Erlaubnis der Nutzerin bzw. des Nutzers.
  • Kompatibilität: Wird von allen modernen Browsern unterstützt (Chrome, Edge, Firefox, Safari). Ältere Chrome-Versionen nutzten eine eigene Syntax mit mandatory/optional, die veraltet ist.