MediaRecorder
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.
* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.
Die MediaRecorder-Schnittstelle der MediaStream Recording API bietet Funktionen zum einfachen Aufzeichnen von Medien. Sie wird mit dem Konstruktor MediaRecorder() erstellt.
Konstruktor
MediaRecorder()-
Erstellt ein neues
MediaRecorder-Objekt für die Aufzeichnung eines übergebenenMediaStream. Über Optionen lassen sich unter anderem der MIME-Typ des Containers (etwa"video/webm"oder"video/mp4") sowie die Bitraten der Audio- und Videospuren oder eine gemeinsame Gesamtbitrate festlegen.
Instanzeigenschaften
MediaRecorder.mimeTypeSchreibgeschützt-
Gibt den MIME-Typ zurück, der beim Erstellen des
MediaRecorder-Objekts als Aufzeichnungscontainer ausgewählt wurde. MediaRecorder.stateSchreibgeschützt-
Gibt den aktuellen Zustand des
MediaRecorder-Objekts zurück (inactive,recordingoderpaused). MediaRecorder.streamSchreibgeschützt-
Gibt den Stream zurück, der beim Erstellen des
MediaRecorderan den Konstruktor übergeben wurde. MediaRecorder.videoBitsPerSecondSchreibgeschützt-
Gibt die aktuell verwendete Bitrate für die Videocodierung zurück. Diese kann von der im Konstruktor angegebenen Bitrate abweichen, sofern eine angegeben wurde.
MediaRecorder.audioBitsPerSecondSchreibgeschützt-
Gibt die aktuell verwendete Bitrate für die Audiocodierung zurück. Diese kann von der im Konstruktor angegebenen Bitrate abweichen, sofern eine angegeben wurde.
MediaRecorder.audioBitrateModeSchreibgeschützt-
Gibt den für die Codierung von Audiospuren verwendeten Bitratenmodus zurück.
Statische Methoden
MediaRecorder.isTypeSupported()-
Eine statische Methode, die
trueoderfalsezurückgibt und damit angibt, ob der aktuelle User Agent den angegebenen Medien-MIME-Typ unterstützt.
Instanzmethoden
MediaRecorder.pause()-
Pausiert die Medienaufzeichnung.
MediaRecorder.requestData()-
Fordert ein
Blobmit den bis dahin gespeicherten Daten an (oder mit den Daten, die seit dem letzten Aufruf vonrequestData()gespeichert wurden). Nach dem Aufruf dieser Methode wird die Aufzeichnung in einem neuenBlobfortgesetzt. MediaRecorder.resume()-
Setzt eine pausierte Medienaufzeichnung fort.
MediaRecorder.start()-
Beginnt die Medienaufzeichnung. Der Methode kann optional ein
timeslice-Argument mit einem Wert in Millisekunden übergeben werden. Ist dieses angegeben, werden die Medien in separaten Abschnitten dieser Dauer aufgezeichnet, statt wie standardmäßig in einem einzigen großen Abschnitt. MediaRecorder.stop()-
Beendet die Aufzeichnung. Dabei wird ein
dataavailable-Ereignis ausgelöst, das das abschließendeBlobmit den gespeicherten Daten enthält. Danach erfolgt keine weitere Aufzeichnung.
Ereignisse
Sie können diese Ereignisse mit addEventListener() überwachen oder der Eigenschaft oneventname dieser Schnittstelle einen Event-Listener zuweisen.
dataavailable-
Wird regelmäßig ausgelöst, sobald jeweils
timesliceMillisekunden Medien aufgezeichnet wurden (oder wenn die gesamte Aufzeichnung abgeschlossen ist, fallstimeslicenicht angegeben wurde). Das Ereignis vom TypBlobEvententhält die aufgezeichneten Medien in seiner Eigenschaftdata. error-
Wird ausgelöst, wenn ein schwerwiegender Fehler die Aufzeichnung beendet. Das empfangene Ereignis basiert auf der Schnittstelle
MediaRecorderErrorEvent. Deren Eigenschafterrorenthält eineDOMException, die den aufgetretenen Fehler beschreibt. pause-
Wird ausgelöst, wenn die Medienaufzeichnung pausiert wird.
resume-
Wird ausgelöst, wenn die Medienaufzeichnung nach einer Pause fortgesetzt wird.
start-
Wird ausgelöst, wenn die Medienaufzeichnung beginnt.
stop-
Wird ausgelöst, wenn die Medienaufzeichnung endet – entweder weil der
MediaStreamendet oder weil die MethodeMediaRecorder.stop()aufgerufen wird.
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 Codebeispiel ist von der Web-Dictaphone-Demo inspiriert. Einige Zeilen wurden der Kürze halber ausgelassen; den vollständigen Code finden Sie im Quelltext.
Spezifikationen
| Spezifikation |
|---|
| MediaStream Recording> # mediarecorder-api> |
Browser-Kompatibilität
Siehe auch
- Verwendung der MediaStream Recording API
- Web Dictaphone: Demo zur Visualisierung mit MediaRecorder, getUserMedia und der Web Audio API, von Chris Mills (Quelltext auf GitHub)
- Aufzeichnen eines Medienelements
- simpl.info-Demo zur MediaStream-Aufzeichnung, von Sam Dutton.
MediaDevices.getUserMedia()- OpenLang: Webanwendung als HTML-Videosprachlabor, die MediaDevices und die MediaStream Recording API zur Videoaufzeichnung verwendet (Quelltext auf GitHub)