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.
Giao diện MediaRecorder của MediaStream Recording API cung cấp chức năng ghi lại media một cách dễ dàng. Giao diện này được tạo bằng constructor MediaRecorder().
Constructor
MediaRecorder()-
Tạo một đối tượng
MediaRecordermới, với mộtMediaStreamđể ghi. Các tùy chọn cho phép đặt MIME type của vùng chứa, chẳng hạn"video/webm"hoặc"video/mp4", cùng với tốc độ bit của các track âm thanh và video, hoặc một tốc độ bit tổng duy nhất.
Thuộc tính instance
MediaRecorder.mimeTypeRead only-
Trả về MIME type đã được chọn làm vùng chứa ghi cho đối tượng
MediaRecorderkhi nó được tạo. MediaRecorder.stateRead only-
Trả về trạng thái hiện tại của đối tượng
MediaRecorder(inactive,recordinghoặcpaused). MediaRecorder.streamRead only-
Trả về stream đã được truyền vào constructor khi
MediaRecorderđược tạo. MediaRecorder.videoBitsPerSecondRead only-
Trả về tốc độ bit mã hóa video đang được dùng. Giá trị này có thể khác với tốc độ bit được chỉ định trong constructor, nếu có.
MediaRecorder.audioBitsPerSecondRead only-
Trả về tốc độ bit mã hóa âm thanh đang được dùng. Giá trị này có thể khác với tốc độ bit được chỉ định trong constructor, nếu có.
MediaRecorder.audioBitrateModeRead only Experimental-
Trả về chế độ bitrate được dùng để mã hóa các track âm thanh.
Phương thức tĩnh
MediaRecorder.isTypeSupported()-
Một phương thức tĩnh trả về giá trị
truehoặcfalsecho biết kiểu media MIME đã cho có được hỗ trợ bởi user agent hiện tại hay không.
Phương thức instance
MediaRecorder.pause()-
Tạm dừng việc ghi media.
MediaRecorder.requestData()-
Yêu cầu một
Blobchứa dữ liệu đã lưu nhận được cho đến thời điểm đó (hoặc kể từ lần cuốirequestData()được gọi). Sau khi gọi phương thức này, quá trình ghi vẫn tiếp tục, nhưng trong mộtBlobmới. MediaRecorder.resume()-
Tiếp tục ghi media sau khi đã tạm dừng.
MediaRecorder.start()-
Bắt đầu ghi media; phương thức này có thể nhận tùy chọn đối số
timeslicevới giá trị tính bằng mili giây. Nếu được chỉ định, media sẽ được ghi thành các phần riêng có độ dài đó, thay vì hành vi mặc định là ghi vào một phần lớn duy nhất. MediaRecorder.stop()-
Dừng ghi, tại thời điểm đó một sự kiện
dataavailablechứaBlobcuối cùng của dữ liệu đã lưu sẽ được phát ra. Không còn việc ghi nào diễn ra nữa.
Sự kiện
Nghe các sự kiện này bằng addEventListener() hoặc bằng cách gán một trình xử lý sự kiện cho thuộc tính oneventname của giao diện này.
dataavailable-
Được phát định kỳ mỗi khi đã ghi đủ
timeslicemili giây media (hoặc khi toàn bộ media đã được ghi xong, nếu không chỉ địnhtimeslice). Sự kiện, thuộc kiểuBlobEvent, chứa media đã ghi trong thuộc tínhdata. error-
Được phát khi có lỗi nghiêm trọng làm dừng việc ghi. Sự kiện nhận được dựa trên giao diện
MediaRecorderErrorEvent, trong đó thuộc tínherrorchứa mộtDOMExceptionmô tả lỗi thực sự đã xảy ra. pause-
Được phát khi việc ghi media bị tạm dừng.
resume-
Được phát khi việc ghi media tiếp tục sau khi bị tạm dừng.
start-
Được phát khi việc ghi media bắt đầu.
stop-
Được phát khi việc ghi media kết thúc, hoặc khi
MediaStreamkết thúc, hoặc sau khi phương thứcMediaRecorder.stop()được gọi.
Ví dụ
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}`);
});
}
Note: Đoạn mã này được lấy cảm hứng từ demo Web Dictaphone. Một số dòng đã được lược bỏ để ngắn gọn; tham khảo mã nguồn để xem mã đầy đủ.
Thông số kỹ thuật
| Specification |
|---|
| MediaStream Recording> # mediarecorder-api> |
Tương thích trình duyệt
Xem thêm
- Using the MediaStream Recording API
- Web Dictaphone: demo trực quan hóa MediaRecorder + getUserMedia + Web Audio API, bởi Chris Mills (mã nguồn trên GitHub.)
- Recording a media element
- simpl.info MediaStream Recording demo, bởi Sam Dutton.
MediaDevices.getUserMedia()- OpenLang: ứng dụng web phòng lab học ngôn ngữ bằng video HTML sử dụng MediaDevices và MediaStream Recording API để ghi video (mã nguồn trên GitHub)