This page was translated from English by the community.Learn more and join the MDN Web Docs community.
MediaRecorder
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since апрель 2021 г..
* Some parts of this feature may have varying levels of support.
TheMediaRecorder это интерфейсMediaStream Recording API представляющий функциональность для простой записи медиа. Создаётся с использованиемMediaRecorder() конструктора.
In this article
Конструктор
MediaRecorder()Создаёт новый объект
MediaRecorder, получающийMediaStreamдля записи. Доступны такие параметры, как установка типа MIME контейнера ("video/webm","video/mp4"и другие) и скорости передачи аудио-и видеодорожек или одной общей скорости.
Свойства
MediaRecorder.mimeTypeТолько для чтенияВозвращает тип MIME, который был выбран в качестве контейнера записи для объекта MediaRecorder при его создании.
MediaRecorder.stateТолько для чтенияВозвращает текущее состояние объекта
MediaRecorder(inactive,recording, илиpaused.)MediaRecorder.streamТолько для чтенияВозвращает поток который был передан конструктору при создании объекта
MediaRecorderMediaRecorder.ignoreMutedMediaПоказывает записывает ли
MediaRecorderдорожкуMediaStreamTrackесли она отключена. Если атрибут равенfalse,MediaRecorderбудет записывать тишину для аудио и чёрные кадры для видео. По умолчанию равноfalseMediaRecorder.videoBitsPerSecondТолько для чтенияВозвращает скорость кодирования видео. Она может отличаться от скорости, определённой в конструкторе (если была предоставлена).
MediaRecorder.audioBitsPerSecond;Только для чтенияВозвращает скорость кодирования аудио. Она может отличаться от скорости, определённой в конструкторе (если была предоставлена).
Методы
MediaRecorder.isTypeSupported()Возвращает
Booleanзначение показывающее поддерживается ли MIME тип текущим user agent.MediaRecorder.pause()Приостанавливает запись медиа.
MediaRecorder.requestData()Запрашивает
Blobсодержащий сохранённые данные полученные с начала записи (или с последнего вызоваrequestData()). После вызова этого метода, запись продолжается, но в новыйBlob.MediaRecorder.resume()Возобновляет запись медиа после паузы.
MediaRecorder.start()Начинает запись медиа. В этот метод можно передать аргумент
timesliceсо значением в миллисекундах. Если он определён, то медиа будет записываться в отдельные блоки заданной продолжительности, вместо записи в один большой блок.MediaRecorder.stop()Останавливает запись, после чего запускается событие
dataavailable, содержащее последнийBlobсохранённых данных.
Обработчики событий
MediaRecorder.ondataavailableВызывает обработчик события
dataavailable, которое запускается раз вtimesliceмиллисекунд (или, еслиtimesliceне был задан - по окончанию записи). Событие типаBlobEvent, сдержит записанное медиа вdata. Вы можете использовать обработчик для сбора и других действий в зависимости от полученных данных.MediaRecorder.onerrorevent handlerвызывается для обработки событияrecordingerror, включающего отчёт об ошибках во время записи. Это фатальные ошибки, приводящие к остановке записи. Полученное событие основано на интерфейсеMediaRecorderErrorEvent, свойство которогоerrorсодержитDOMExceptionописывающие произошедшие ошибки.MediaRecorder.onpauseevent handlerвызывается для обработки событияpause, случившегося во время приостановки медиа.MediaRecorder.onresumeevent handlerвызывается для обработки событияresume, случившегося во время возобновления записи.MediaRecorder.onstartevent handlerвызывается для обработки событияstart, случившегося во время начала записи.MediaRecorder.onstopevent handlerвызывается для обработки событияstop, случившегося во время завершения записи, а так же при окончанииMediaStream— или после вызоваMediaRecorder.stop()
Пример
navigator.getUserMedia = (navigator.getUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.webkitGetUserMedia);if (navigator.getUserMedia) { console.log('getUserMedia supported.'); var constraints = { audio: true }; var chunks = []; var onSuccess = function(stream) { var mediaRecorder = new MediaRecorder(stream); visualize(stream); record.onclick = function() { mediaRecorder.start(); console.log(mediaRecorder.state); console.log("recorder started"); record.style.background = "red"; record.style.color = "black"; } stop.onclick = function() { mediaRecorder.stop(); console.log(mediaRecorder.state); console.log("recorder stopped"); record.style.background = ""; record.style.color = ""; // mediaRecorder.requestData(); } mediaRecorder.onstop = function(e) { console.log("data available after MediaRecorder.stop() called."); var clipName = prompt('Enter a name for your sound clip'); var clipContainer = document.createElement('article'); var clipLabel = document.createElement('p'); var audio = document.createElement('audio'); var deleteButton = document.createElement('button'); clipContainer.classList.add('clip'); audio.setAttribute('controls', ''); deleteButton.innerHTML = "Delete"; clipLabel.innerHTML = clipName; clipContainer.appendChild(audio); clipContainer.appendChild(clipLabel); clipContainer.appendChild(deleteButton); soundClips.appendChild(clipContainer); audio.controls = true; var blob = new Blob(chunks, { 'type' : 'audio/ogg; codecs=opus' }); chunks = []; var audioURL = window.URL.createObjectURL(blob); audio.src = audioURL; console.log("recorder stopped"); deleteButton.onclick = function(e) { evtTgt = e.target; evtTgt.parentNode.parentNode.removeChild(evtTgt.parentNode); } } mediaRecorder.ondataavailable = function(e) { chunks.push(e.data); } } var onError = function(err) { console.log('The following error occured: ' + err); } navigator.getUserMedia(constraints, onSuccess, onError);} else { console.log('getUserMedia not supported on your browser!');}Примечание:Код выше был взят из демо Web Dictaphone. Некоторые строчки были пропущены для краткости. Полный код смотритездесь
Спецификации
| Specification |
|---|
| MediaStream Recording> # mediarecorder-api> |
Совместимость с браузерами
Ещё по теме
- Использование MediaRecorder API
- Web Dictaphone: MediaRecorder + getUserMedia + Web Audio API visualization demo, byChris Mills (source on Github.)
- simpl.info MediaStream Recording demo, bySam Dutton.
Navigator.getUserMedia