MediaRecorderでブラウザ上で音声と映像を取得してWebm形式で保存する

MediaRecorderでブラウザ上で音声と映像を取得してWebm形式で保存する
目次

GCPやAzure等のSaaSにて音声認識や画像認識を使う際、予め録音しておいた音声データを学習用の元データとして使うことができます。 ここでは、Webブラウザを使って簡単に録画・録音する方法を紹介したいと思います。

ゴール

  • 16kbpsのwebm形式のデータが保存できること

動作環境

今回は以下の環境で実装

  • Google Chrome (v81.0)

MediaRecorderを使って録画、録音する

MediaRecorder を使うことで、簡単にPCのカメラやマイクから簡単にブラウザ上で録画、録音できます。録画・録音する対象は navigator.mediaDevices.getUserMedia で取得できる MediaStream になります。

1  navigator.mediaDevices.getUserMedia({
2    audio: true,
3    video: true
4  }).then((stream) => {
5    // ここに処理を追加する
6  })

取得した MediaStreamを MediaRecorder に渡してインスタンス化します。第二引数にはMIMETYPEやビットレートのオプションを指定できます。

1  var recorder = new MediaRecorder(stream, {
2    mimeType: 'video/webm;codecs=vp8',
3    audioBitsPerSecond: 16 * 1000
4  });

dataavailable イベント発火時にデータが定期的に入ってくるのでデータチャンクに入れるようにリスナーに登録しておきます。

1  var chunks = [];
2  recorder.addEventListener('dataavailable', function(ele) {
3    if (ele.data.size > 0) {
4      chunks.push(ele.data);
5    }
6  });

最後に、MediaRecorder が停止された時にチャンクのデータをダウンロードできるようにオブジェクトを生成します。

1  recorder.addEventListener('stop', function() {
2    var obj = new Blob(chunks);
3    var dl = document.querySelector("#dl");
4    dl.href = URL.createObjectURL(new Blob(chunks));
5    dl.download = 'webm_test.webm';
6  });

MediaRecorder の開始と停止はそれぞれ start stop 関数です。

1  recorder.start();
1  recorder.stop();