--- title: MediaRecorder slug: Web/API/MediaRecorder tags: - API - Audio - Interface - Media - Media Capture - Media Capture and Streams - Media Recorder API - MediaRecorder - Reference - Video translation_of: Web/API/MediaRecorder ---
MediaStream Recording API の MediaRecorder インターフェイスは、メディアを簡単に記録するための機能を提供します。 これは、{{domxref("MediaRecorder.MediaRecorder", "MediaRecorder()")}} コンストラクタを使用して作成します。
MediaRecorder オブジェクトを作成します。 コンテナの MIME タイプ( "video/webm" や "video/mp4" など)、音声トラックと動画トラックのビットレート、または単一の全体的なビットレートの設定などを行うためのオプションがあります。MediaRecorder オブジェクトの作成時にその記録コンテナとして選択した MIME タイプを返します。MediaRecorder オブジェクトの現在の状態(inactive(非活動)、recording(記録中)、paused(一時停止中))を返します。MediaRecorder を作成したときにコンストラクタに渡したストリームを返します。MediaRecorder インスタンスが入力を記録するかどうかを示します。 この属性が false の場合、MediaRecorder は音声には無音を、動画には黒のフレームを記録します。 デフォルトは false です。requestData() が呼び出されてから受信した)。 このメソッドを呼び出した後、記録は続行されますが、新しい Blob に格納されます。timeslice 引数を渡すことができます。 これが指定されている場合、メディアは単一の大きなチャンクにメディアを記録するというデフォルトのふるまいではなく、その期間の別々のチャンクにキャプチャされます。Blob を含む {{event("dataavailable")}} イベントが発生します。 これ以上記録は行われません。timeslice のミリ秒単位のメディアが記録されるたびに(または timeslice が指定されていない場合はメディア全体が記録されると)定期的にトリガされる {{event("dataavailable")}} イベントを処理するために呼び出されます。 {{domxref("BlobEvent")}} 型のイベントには、{{domxref("BlobEvent.data", "data")}} プロパティに記録済みメディアが含まれています。 その後、このイベントハンドラを使用して、その記録済みメディアのデータを収集して操作することができます。addEventListener() を使用するか、このインタフェースの oneventname プロパティにイベントリスナを割り当てることによって、これらのイベントを監視します。
erroronerror プロパティからも入手できます。if (navigator.mediaDevices) {
console.log('getUserMedia supported.');
var constraints = { audio: true };
var chunks = [];
navigator.mediaDevices.getUserMedia(constraints)
.then(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.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 = 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);
}
})
.catch(function(err) {
console.log('The following error occurred: ' + err);
})
}
このコードサンプルは、ウェブディクタフォン(Web Dictaphone)のデモから着想を得たものです。 簡潔にするために一部の行は省略されています。 完全なコードについてはソースを参照してください。
| 仕様 | 状態 | コメント |
|---|---|---|
| {{SpecName("MediaStream Recording", "#MediaRecorderAPI")}} | {{Spec2("MediaStream Recording")}} | 初期定義 |
{{Compat("api.MediaRecorder")}}