MediaRecorder
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.
* Some parts of this feature may have varying levels of support.
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.mimeTypeSchreibgeschützt-
Gibt den MIME-Typ zurück, der als Aufzeichnungscontainer für das
MediaRecorder-Objekt ausgewählt wurde, als es erstellt 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
MediaRecorderin den Konstruktor übergeben wurde. MediaRecorder.videoBitsPerSecondSchreibgeschützt-
Gibt die verwendete Video-Codierungsrate zurück. Diese kann sich von der im Konstruktor angegebenen Bitrate unterscheiden (falls diese angegeben wurde).
MediaRecorder.audioBitsPerSecondSchreibgeschützt-
Gibt die verwendete Audio-Codierungsrate zurück. Diese kann sich von der im Konstruktor angegebenen Bitrate unterscheiden (falls diese angegeben wurde).
MediaRecorder.audioBitrateModeSchreibgeschü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
Bloban, 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 finalenBlobder 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
timesliceMillisekunden Medien aufgezeichnet wurden (oder wenn das gesamte Medium aufgezeichnet wurde, fallstimeslicenicht 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 eineDOMExceptionenthä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
MediaStreamendet 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
Loading…
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)