MediaRecorder
Die MediaRecorder
-Schnittstelle der MediaStream Recording API bietet Funktionen zum einfachen Aufzeichnen von Medien. Sie wird mit dem MediaRecorder()
-Konstruktor erstellt.
Konstruktor
MediaRecorder()
-
Erstellt ein neues
MediaRecorder
-Objekt, basierend auf einemMediaStream
, das aufgezeichnet werden soll. Es stehen Optionen zur Verfügung, um Dinge einzustellen wie den MIME-Typ des Containers (z. B."video/webm"
oder"video/mp4"
) und die Bitraten der Audio- und Videospuren oder eine einzige Gesamtbitrate.
Instanz-Eigenschaften
MediaRecorder.mimeType
Schreibgeschützt-
Gibt den MIME-Typ zurück, der als Aufzeichnungscontainer für das
MediaRecorder
-Objekt ausgewählt wurde, als es erstellt wurde. MediaRecorder.state
Schreibgeschützt-
Gibt den aktuellen Zustand des
MediaRecorder
-Objekts zurück (inactive
,recording
oderpaused
). MediaRecorder.stream
Schreibgeschützt-
Gibt den Stream zurück, der beim Erstellen des
MediaRecorder
in den Konstruktor übergeben wurde. MediaRecorder.videoBitsPerSecond
Schreibgeschützt-
Gibt die verwendete Video-Codierungsrate zurück. Diese kann sich von der im Konstruktor angegebenen Bitrate unterscheiden (falls diese angegeben wurde).
MediaRecorder.audioBitsPerSecond
Schreibgeschützt-
Gibt die verwendete Audio-Codierungsrate zurück. Diese kann sich von der im Konstruktor angegebenen Bitrate unterscheiden (falls diese angegeben wurde).
MediaRecorder.audioBitrateMode
Schreibgeschützt Experimentell-
Gibt den Bitratenmodus zurück, der zum Codieren von Audiospuren verwendet wird.
Statische Methoden
MediaRecorder.isTypeSupported()
-
Eine statische Methode, die einen
true
- oderfalse
-Wert zurückgibt, der anzeigt, ob der gegebene MIME-Medientyp vom aktuellen Benutzeragenten unterstützt wird.
Instanz-Methoden
MediaRecorder.pause()
-
Pausiert die Aufzeichnung von Medien.
MediaRecorder.requestData()
-
Fordert ein
Blob
an, das die bisher empfangenen gespeicherten Daten enthält (oder seit dem letzten Aufruf vonrequestData()
). Nach dem Aufruf dieser Methode wird die Aufzeichnung fortgesetzt, jedoch in einem neuenBlob
. MediaRecorder.resume()
-
Setzt die Aufnahme von Medien nach einer Pause fort.
MediaRecorder.start()
-
Beginnt mit der Aufnahme von Medien; dieser Methode kann optional ein
timeslice
-Argument mit einem Wert in Millisekunden übergeben werden. Wenn dies angegeben ist, wird das Medium in separaten Abschnitten dieser Dauer aufgenommen, anstatt im Standardverhalten das Medium in einem großen Abschnitt aufzunehmen. MediaRecorder.stop()
-
Beendet die Aufzeichnung, woraufhin ein
dataavailable
-Ereignis ausgelöst wird, das den finalenBlob
der gespeicherten Daten enthält. Es erfolgt keine weitere Aufzeichnung.
Ereignisse
Hören Sie diese Ereignisse mit addEventListener()
ab oder weisen Sie einen Ereignislistener der oneventname
-Eigenschaft dieser Schnittstelle zu.
dataavailable
-
Wird periodisch jedes Mal ausgelöst, wenn
timeslice
Millisekunden Medien aufgezeichnet wurden (oder wenn das gesamte Medium aufgezeichnet wurde, fallstimeslice
nicht angegeben wurde). Das Ereignis, vom TypBlobEvent
, enthält die aufgezeichneten Medien in seinerdata
-Eigenschaft. error
-
Wird ausgelöst, wenn es zu schwerwiegenden Fehlern kommt, die die Aufzeichnung stoppen. Das empfangene Ereignis basiert auf der
MediaRecorderErrorEvent
-Schnittstelle, derenerror
-Eigenschaft eineDOMException
enthält, die den tatsächlich aufgetretenen Fehler beschreibt. pause
-
Wird ausgelöst, wenn die Medienaufnahme pausiert wird.
resume
-
Wird ausgelöst, wenn die Medienaufnahme nach einer Pause fortgesetzt wird.
start
-
Wird ausgelöst, wenn die Medienaufnahme startet.
stop
-
Wird ausgelöst, wenn die Medienaufnahme endet, entweder wenn der
MediaStream
endet oder nachdem die MethodeMediaRecorder.stop()
aufgerufen wurde.
Beispiel
if (navigator.mediaDevices) {
console.log("getUserMedia supported.");
const constraints = { audio: true };
let chunks = [];
navigator.mediaDevices
.getUserMedia(constraints)
.then((stream) => {
const mediaRecorder = new MediaRecorder(stream);
record.onclick = () => {
mediaRecorder.start();
console.log(mediaRecorder.state);
console.log("recorder started");
record.style.background = "red";
record.style.color = "black";
};
stop.onclick = () => {
mediaRecorder.stop();
console.log(mediaRecorder.state);
console.log("recorder stopped");
record.style.background = "";
record.style.color = "";
};
mediaRecorder.onstop = (e) => {
console.log("data available after MediaRecorder.stop() called.");
const clipName = prompt("Enter a name for your sound clip");
const clipContainer = document.createElement("article");
const clipLabel = document.createElement("p");
const audio = document.createElement("audio");
const deleteButton = document.createElement("button");
const mainContainer = document.querySelector("body");
clipContainer.classList.add("clip");
audio.setAttribute("controls", "");
deleteButton.textContent = "Delete";
clipLabel.textContent = clipName;
clipContainer.appendChild(audio);
clipContainer.appendChild(clipLabel);
clipContainer.appendChild(deleteButton);
mainContainer.appendChild(clipContainer);
audio.controls = true;
const blob = new Blob(chunks, { type: "audio/ogg; codecs=opus" });
chunks = [];
const audioURL = URL.createObjectURL(blob);
audio.src = audioURL;
console.log("recorder stopped");
deleteButton.onclick = (e) => {
const evtTgt = e.target;
evtTgt.parentNode.parentNode.removeChild(evtTgt.parentNode);
};
};
mediaRecorder.ondataavailable = (e) => {
chunks.push(e.data);
};
})
.catch((err) => {
console.error(`The following error occurred: ${err}`);
});
}
Hinweis: Dieses Code-Beispiel ist vom Web Diktiergerät-Demo inspiriert. Einige Zeilen wurden der Kürze halber weggelassen; sehen Sie sich die Quelle an, um den vollständigen Code zu erhalten.
Spezifikationen
Specification |
---|
MediaStream Recording # mediarecorder-api |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- Verwendung der MediaStream Recording API
- Web Dictaphone: MediaRecorder + getUserMedia + Web Audio API Visualisierungs-Demo, von Chris Mills (Quelle auf GitHub.)
- Aufnahme eines Medienelements
- simpl.info MediaStream Recording Demo, von Sam Dutton.
MediaDevices.getUserMedia()
- OpenLang: HTML-Video-Sprachlabor-Webanwendung unter Verwendung von MediaDevices und der MediaStream Recording API für Videoaufnahmen (Quelle auf GitHub)