WebRTCを使ってローカルPCのカメラ映像を録画する
MediaRecorder
を使用すると、WebRTCのストリームを保存することができます。この仕組みを利用して、ローカルPCのカメラ映像を保存することができます。また、同様の方法でリモートのストリームも保存することができます。
前処理
getUserMedia()
を使用してMediaStream
を取得します。次の例では、MediaStream
を_localStream
で管理します。
スマホのカメラ
リアカメラを指定する場合は、次のようなオプションを video
に指定します。ただし、PCの場合はエラーとなるため、facingMode
キーを削除するか、facingMode: {}
としてください。
MediaRecorderによる録画
MediaRecorder
を生成し、start()
メソッドを呼び出すことでストリームデータを取得できます。
以下は、5秒ごとにデータを取得し、録画停止時に保存するサンプルです。
ボタン押下時や、先に記載したstartMedia()
の処理終了後にstartRecording()
を呼び出すことで、録画を開始できます。
dataavailableイベント
start()
メソッドのパラメータtimeslice
で指定した時間(ミリ秒)ごとにデータが通知されます。また、stop()
を実行した際にも、stop
イベントの前に通知が行われます。
長時間の録画について
長時間の録画時には、次のような方法でファイル分割できます。
timeslice
(データ通知間隔)=録画ファイルの時間(例:3分など)にし、stop()
→start()
を繰り返すstart()
でtimeslice
を指定せずに、停止時に全て保存する
dataavailable
イベントごとにデータを保存しても、2つ目以降のファイルにはヘッダ情報が存在しないため、再生できません。
ファイル保存処理
stop
イベントの受信処理では、アンカータグを利用してファイルをダウンロードさせることで保存しています。
まず、すべてのデータを結合してBlob
を作成します。
次に、Blob
を表す URL を生成し、そのURLを含む文字列をアンカータグで指定して、ファイルをダウンロードさせます。
createObjectURL
指定したオブジェクト(BlobやFile)に対する一時的なURLを生成します。
revokeObjectURL
生成されたオブジェクトURLを解放し、それ以上そのURLが使用されないようにします。解放された後にそのURLは使用できません。