Signatur
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
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.');
}
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));
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);
// Wichtig · Fallstricke
- Nur ein Hinweis auf Unterstützung:
trueheißt nur, dass der Browser die Constraint versteht. Ob Gerät und Treiber die gewünschte Latenz tatsächlich erreichen, zeigt ersttrack.getSettings().latency. - Eigenschaft kann fehlen: Ohne Unterstützung gibt es die Eigenschaft nicht, statt dass sie
falseenthält. Vergleichen Sie deshalb nicht streng mit=== false. - Einheit Sekunden: Latenzwerte werden in Sekunden als Gleitkommazahl angegeben, zum Beispiel
0.01für 10 ms, nicht in Millisekunden. - Vorsicht mit
exact:exactodermaxkann beigetUserMedia()einenOverconstrainedErrorauslösen. Mitidealsind 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).