Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

MediaRecorder: dataavailable-Ereignis

Baseline
Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit April 2021 browserübergreifend verfügbar.

Das dataavailable-Ereignis der MediaRecorder-Schnittstelle wird ausgelöst, wenn der MediaRecorder Ihrer Anwendung Mediendaten zur Verfügung stellt. Die Daten werden in einem Blob-Objekt bereitgestellt. Dies geschieht in vier Situationen:

  • Wenn der Medienstrom endet, werden alle Mediendaten, die noch nicht an Ihren ondataavailable-Handler übergeben wurden, in einem einzigen Blob bereitgestellt.
  • Wenn MediaRecorder.stop() aufgerufen wird, werden alle Mediendaten, die seit Beginn der Aufzeichnung oder seit dem letzten dataavailable-Ereignis erfasst wurden, in einem Blob bereitgestellt. Danach endet die Erfassung.
  • Wenn MediaRecorder.requestData() aufgerufen wird, werden alle Mediendaten bereitgestellt, die seit Beginn der Aufzeichnung oder seit dem letzten dataavailable-Ereignis erfasst wurden. Anschließend wird ein neuer Blob erstellt und die Medienerfassung darin fortgesetzt.
  • Wenn der Methode MediaRecorder.start(), mit der die Medienerfassung gestartet wurde, ein timeslice-Wert übergeben wurde, wird alle timeslice Millisekunden ein dataavailable-Ereignis ausgelöst. Normalerweise enthält daher jeder Blob Mediendaten mit einer bestimmten Dauer. Der letzte Blob kann kürzer sein, da er nur die seit dem letzten Ereignis verbleibenden Daten enthält. Lautet der Methodenaufruf beispielsweise recorder.start(1000);, wird das dataavailable-Ereignis nach jeder Sekunde der Medienerfassung ausgelöst. Unser Event-Handler wird dann jede Sekunde mit einem Blob aufgerufen, der eine Sekunde Mediendaten enthält. Sie können timeslice zusammen mit MediaRecorder.stop() und MediaRecorder.requestData() verwenden, um mehrere gleich lange Blobs sowie weitere kürzere Blobs zu erzeugen.

Hinweis: Wie andere Zeitwerte in Web-APIs ist timeslice nicht exakt. Die tatsächlichen Intervalle können sich durch andere ausstehende Aufgaben, Browserfunktionen (etwa das Pausieren von Kamera und Mikrofon in Safari), browserspezifisches Verhalten (das Sperren des Bildschirms während einer Aufzeichnung in Chrome unter Android pausiert das dataavailable-Ereignis) oder andere Browserfehler verzögern. Dadurch können auch erheblich größere Datenabschnitte entstehen.

Verlassen Sie sich daher bei der Berechnung der verstrichenen Zeit nicht auf timeslice und die Anzahl der empfangenen Datenabschnitte, da sich Fehler aufsummieren können. Verwenden Sie stattdessen einen separaten Timer mit Event.timeStamp oder einer ähnlichen Lösung, um die seit dem Start insgesamt verstrichene Zeit zu erfassen.

Der Blob mit den Mediendaten ist über die data-Eigenschaft des dataavailable-Ereignisses verfügbar.

Syntax

Verwenden Sie den Ereignisnamen in addEventListener():

js
addEventListener("dataavailable", (event) => { })

Alternativ können Sie die Event-Handler-Eigenschaft der Schnittstelle zuweisen:

js
ondataavailable = (event) => { }

Ereignistyp

Ein BlobEvent. Erbt von Event.

Event BlobEvent

Beispiel

js
const chunks = [];

mediaRecorder.onstop = (e) => {
  console.log("data available after MediaRecorder.stop() called.");

  const audio = document.createElement("audio");
  audio.controls = true;
  const blob = new Blob(chunks, { type: mediaRecorder.mimeType });
  const audioURL = window.URL.createObjectURL(blob);
  audio.src = audioURL;
  console.log("recorder stopped");
};

mediaRecorder.ondataavailable = (e) => {
  chunks.push(e.data);
};

Spezifikationen

Spezifikation
MediaStream Recording
# dom-mediarecorder-ondataavailable

Browser-Kompatibilität

Siehe auch