MediaRecorder.ondataavailable

MediaRecorder.ondataavailable イベントハンドラ(MediaStream Recording API の一部)は dataavailable イベントを処理します。 これにより、Blob データが使用可能になったことに応じてコードを実行できます。

dataavailable イベントは、MediaRecorder がメディアデータをアプリで使用するために引き渡すときに発生します。 データはデータを含む Blob オブジェクトで提供されます。 これは次の4つの状況で発生します。

  • メディアストリームが終了すると、ondataavailable ハンドラにまだ引き渡されていないメディアデータはすべて単一の Blob で渡されます。
  • MediaRecorder.stop() を呼び出すと、記録を開始してから、または最後に dataavailable イベントが発生してからキャプチャされたすべてのメディアデータが Blob で引き渡されます。 この後、キャプチャは終了します。
  • MediaRecorder.requestData() を呼び出すと、記録を開始してから、または最後に dataavailable イベントが発生してからキャプチャされたすべてのメディアデータが引き渡されます。 その後、新しい Blob が作成され、メディアのキャプチャがその blob に対して続行されます。
  • メディアキャプチャを開始した MediaRecorder.start() メソッドに timeslice プロパティを渡した場合は、timeslice ミリ秒ごとに dataavailable イベントが発生します。 つまり、各 blob は特定の期間を持つことになります(最後の blob を除いてで、最後のイベント以降に残っているものは何でもということになるので、これはもっと短いかもしれません)。 そのため、メソッド呼び出しが次のようになっていれば — recorder.start(1000);dataavailable イベントはメディアキャプチャの毎秒後に発生し、イベントハンドラは一秒の長さのメディアデータの blob で毎秒呼ばれるでしょう。 MediaRecorder.stop() および MediaRecorder.requestData() と共に timeslice を使用して、複数の同じ長さの blob と他の短い blob を生成することもできます。

メディアデータを含む Blob は、dataavailable イベントの data プロパティで利用できます。

構文

MediaRecorder.ondataavailable = function(event) { ... }
MediaRecorder.addEventListener('dataavailable', function(event) { ... })

...
  var chunks = [];

  mediaRecorder.onstop = function(e) {
    console.log("MediaRecorder.stop() 呼び出し後に利用可能なデータ。");

    var audio = document.createElement('audio');
    audio.controls = true;
    var blob = new Blob(chunks, { 'type' : 'audio/ogg; codecs=opus' });
    var audioURL = window.URL.createObjectURL(blob);
    audio.src = audioURL;
    console.log("レコーダー停止");
  }

  mediaRecorder.ondataavailable = function(e) {
    chunks.push(e.data);
  }

...

仕様

仕様 状態 コメント
MediaStream Recording
MediaRecorder.ondataavailable の定義
草案 初期定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
ondataavailableChrome 完全対応 49Edge 完全対応 79Firefox 完全対応 25IE 未対応 なしOpera 完全対応 36Safari 未対応 なしWebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 25Opera Android 完全対応 36Safari iOS 未対応 なしSamsung Internet Android 完全対応 5.0

凡例

完全対応  
完全対応
未対応  
未対応

関連情報