Start · Sprachen · JavaScript · Referenz · MediaTrackSettings.width

MediaTrackSettings.width

Eigenschaft

Ganzzahl, die angibt, wie viele Pixel breit ein Video-<code>MediaStreamTrack</code> derzeit tatsächlich konfiguriert ist.

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

MediaTrackSettings.width

Beschreibung

Die Eigenschaft width des Wörterbuchs MediaTrackSettings enthält die tatsächlich wirksame Breite eines Video-Tracks in Pixeln. Du erhältst das Objekt über MediaStreamTrack.getSettings(). Anders als bei den Einschränkungen (Constraints), die du bei getUserMedia() oder applyConstraints() angibst, steht hier der Wert, den Browser und Gerät wirklich eingestellt haben.

Das ist wichtig, weil Einschränkungen wie { width: { ideal: 1920 } } nur Wünsche sind. Kamera oder Treiber liefern oft eine andere Auflösung, zum Beispiel 1280 statt 1920. Mit settings.width (meist zusammen mit settings.height) findest du heraus, welche Auflösung tatsächlich ankommt. Das brauchst du etwa, um die Größe eines Canvas festzulegen, Layouts anzupassen oder die Aufnahmequalität zu protokollieren.

Die Eigenschaft gibt es nur bei Video-Tracks. Bei Audio-Tracks fehlt sie im Rückgabeobjekt. Ob der Browser die Einschränkung grundsätzlich kennt, prüfst du vorher mit navigator.mediaDevices.getSupportedConstraints().width.

Rückgabewert

Typ
number | undefined
Beschreibung
Ganzzahlige Breite des Tracks in Pixeln. Bei Audio-Tracks oder fehlender Unterstützung ist der Wert undefined, weil die Eigenschaft dann im Objekt fehlt.

Beispiele

Tatsächliche Kamera-Auflösung auslesen

const zeigeAufloesung = async () => {
  const stream = await navigator.mediaDevices.getUserMedia({
    video: { width: { ideal: 1920 }, height: { ideal: 1080 } }
  });
  const [track] = stream.getVideoTracks();
  const { width, height } = track.getSettings();
  console.log(`Gewünscht: 1920x1080, erhalten: ${width}x${height}`);
};

zeigeAufloesung().catch(console.error);
Gewünscht: 1920x1080, erhalten: 1280x720

Canvas passend zur Videobreite dimensionieren

const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const [track] = stream.getVideoTracks();
const { width = 640, height = 480 } = track.getSettings();

const canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
document.body.append(canvas);

const video = document.createElement('video');
video.srcObject = stream;
await video.play();
canvas.getContext('2d').drawImage(video, 0, 0, width, height);
console.log(`Schnappschuss mit ${canvas.width}px Breite erstellt`);
Schnappschuss mit 640px Breite erstellt

Breite nach applyConstraints() überprüfen

const aendereBreite = async (track, zielBreite) => {
  if (!navigator.mediaDevices.getSupportedConstraints().width) {
    console.warn('width-Constraint wird nicht unterstützt');
    return;
  }
  try {
    await track.applyConstraints({ width: { exact: zielBreite } });
  } catch (err) {
    console.warn(`Nicht möglich: ${err.name}`);
  }
  console.log('Aktuelle Breite:', track.getSettings().width);
};

const stream = await navigator.mediaDevices.getUserMedia({ video: true });
await aendereBreite(stream.getVideoTracks()[0], 320);
Aktuelle Breite: 320

// Wichtig · Fallstricke

  • Einstellung ist nicht gleich Einschränkung: getSettings().width liefert den wirksamen Wert, getConstraints().width dagegen den angeforderten, zum Beispiel { ideal: 1920 }. Verwechsle die beiden nicht.
  • Ausrichtung auf Mobilgeräten: Dreht sich das Gerät, können width und height vertauscht sein. Für die angezeigte Größe sind video.videoWidth und video.videoHeight oft verlässlicher.
  • Werte können sich ändern: Nach applyConstraints() oder bei Bildschirmfreigaben (getDisplayMedia(), z. B. wenn ein Fenster seine Größe ändert) veraltet ein früher gelesener Wert. Rufe getSettings() deshalb bei Bedarf erneut auf.
  • Audio-Tracks: Hier fehlt die Eigenschaft. Plane beim Destrukturieren einen Standardwert ein.
  • Kompatibilität: Wird von Chrome, Edge, Firefox und Safari unterstützt. getUserMedia() funktioniert nur in einem sicheren Kontext (HTTPS oder localhost) und nach Freigabe durch die Nutzerin oder den Nutzer.