Start · Sprachen · JavaScript · Referenz · MediaTrackSupportedConstraints.latency

MediaTrackSupportedConstraints.latency

Eigenschaft

Boolescher Wert in <code>getSupportedConstraints()</code>, der angibt, ob der Browser die Constraint <code>latency</code> für Audiospuren unterstützt.

seit JavaScript Chromium-Browser (Chrome, Edge, Opera); nicht in F Kategorie: webapi

Signatur

MediaTrackSupportedConstraints.latency

Beschreibung

Die Eigenschaft latency gehört zum Wörterbuch MediaTrackSupportedConstraints. Dieses Objekt erhalten Sie von navigator.mediaDevices.getSupportedConstraints(). Ist der Wert true, versteht der User-Agent die Constraint latency. Damit können Sie beim Anfordern oder Anpassen einer Audiospur eine gewünschte Latenz in Sekunden angeben, also die Zeit zwischen dem Eintreffen des Signals an der Quelle und seiner Weitergabe an die Anwendung.

Wenn der Browser die Constraint nicht kennt, fehlt die Eigenschaft einfach. Den Wert false liefert sie in diesem Fall nicht. Prüfen Sie deshalb am besten mit if (supported.latency) oder "latency" in supported.

Diese Prüfung lohnt sich vor allem bei Anwendungen, die auf kurze Reaktionszeiten angewiesen sind: WebRTC-Telefonie, Musik-Apps mit Live-Monitoring, Karaoke oder Spracherkennung in Echtzeit. Wird die Constraint nicht unterstützt, ignoriert der Browser sie. Mit der Prüfung erkennen Sie das vorher und können einen Ersatzweg wählen oder die Nutzer informieren.

Rückgabewert

Typ
boolean | undefined
Beschreibung
true, wenn der Browser die Constraint latency unterstützt. Andernfalls fehlt die Eigenschaft und der Zugriff ergibt undefined.

Beispiele

Unterstützung prüfen

const supported = navigator.mediaDevices.getSupportedConstraints();

if (supported.latency) {
  console.log('Die Constraint latency wird unterstützt.');
} else {
  console.log('Die Constraint latency wird nicht unterstützt.');
}
Die Constraint latency wird unterstützt.

Mikrofon mit geringer Latenz anfordern

const startLowLatencyMic = async () => {
  const supported = navigator.mediaDevices.getSupportedConstraints();
  const audio = { echoCancellation: false };

  if (supported.latency) {
    // Ziel: etwa 10 ms Latenz
    audio.latency = { ideal: 0.01 };
  }

  const stream = await navigator.mediaDevices.getUserMedia({ audio });
  const [track] = stream.getAudioTracks();
  console.log('Tatsächliche Latenz:', track.getSettings().latency);
  return stream;
};

startLowLatencyMic().catch(err => console.error(err.name, err.message));
Tatsächliche Latenz: 0.01

Latenz einer laufenden Spur nachträglich ändern

const tuneLatency = async (track, seconds) => {
  const { latency } = navigator.mediaDevices.getSupportedConstraints();
  if (!latency) {
    console.warn('latency wird nicht unterstützt – Einstellung bleibt unverändert.');
    return;
  }
  await track.applyConstraints({ latency: { ideal: seconds } });
  console.log('Neue Latenz:', track.getSettings().latency);
};

const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
await tuneLatency(stream.getAudioTracks()[0], 0.02);
Neue Latenz: 0.02

// Wichtig · Fallstricke

  • Nur ein Hinweis auf Unterstützung: true heißt nur, dass der Browser die Constraint versteht. Ob Gerät und Treiber die gewünschte Latenz tatsächlich erreichen, zeigt erst track.getSettings().latency.
  • Eigenschaft kann fehlen: Ohne Unterstützung gibt es die Eigenschaft nicht, statt dass sie false enthält. Vergleichen Sie deshalb nicht streng mit === false.
  • Einheit Sekunden: Latenzwerte werden in Sekunden als Gleitkommazahl angegeben, zum Beispiel 0.01 für 10 ms, nicht in Millisekunden.
  • Vorsicht mit exact: exact oder max kann bei getUserMedia() einen OverconstrainedError auslösen. Mit ideal sind Sie flexibler.
  • Kompatibilität: Chromium-basierte Browser unterstützen die Eigenschaft. Firefox und Safari unterstützen sie derzeit nicht. Die Media-Capture-API gibt es außerdem nur in sicheren Kontexten (HTTPS).