captureStream()
メソッドを使用すると、<canvas>
要素、<audio>
要素、<video>
要素から MediaStream
をキャプチャできます。
これにより、これらの要素のいずれかからの動画または音声ストリームを録画したり、WebRTC 経由でライブ配信したり、<canvas>
内のエフェクトや他の MediaStream
と組み合わせたりできます。つまり、captureStream()
を使用すると、MediaStream
はキャンバス要素、音声要素、動画要素の間で、または RTCPeerConnection
または MediaRecorder
にメディアをやり取りできます。
次のデモ(WebRTC サンプルから入手可能)では、左側のキャンバス要素からキャプチャされた MediaStream
が、WebRTC ピア接続を介して右側の動画要素にストリーミングされます。
(下記に、その他のキャンバスと動画の例へのリンクがあります)。
captureStream()
コードはシンプルです。
<canvas>
:
var canvas = document.querySelector('canvas');
var video = document.querySelector('video');
// Optional frames per second argument.
var stream = canvas.captureStream(25);
// Set th<e sou>rce of the video element to be the <stream> from the canvas.
video.srcO
bject = stream;
<video>
:
var leftVideo = document.getElementById('leftVideo');
var rightVideo = document.getElementById('rightVideo');
leftVideo.onplay = function() {
// Set th<e sou>rce of one video element to be a stream from another.
var stream = leftVideo.captureStream();
rightVideo.srcObje
ct = stream;
};
なぜでしょうか?
captureStream()
メソッドを使用すると、キャンバスとメディア要素から録画またはライブ配信できます。
<canvas>
からゲームプレイを録画してストリーミングする- カメラから動画をキャプチャし、コンテンツやエフェクトを追加する
<canvas>
を使用して複数の動画からピクチャー イン ピクチャー エフェクトを作成する- 動画と画像(ファイルまたはカメラ、またはその両方)を
<canvas>
に結合する - ファイルから再生された動画をライブ配信する
- 動画やボイスメールに録音した音声または動画メッセージを使用する
基本的に、captureStream()
を使用すると、JavaScript で MediaStream を作成して「コンテンツを挿入」できます。
注意事項
Encrypted Media Extensions を介してコンテンツ保護を実装するメディア要素で
captureStream()
を使用すると、例外がスローされます。<canvas>
からキャプチャする場合、最大フレームレートはcaptureStream()
が呼び出されたときに設定されます。たとえば、canvas.captureStream(10)
は、キャンバスの出力が 0 ~ 10 fps であることを意味します。<canvas>
に何もペイントされていない場合は何もキャプチャされず、<canvas>
が 30 fps でペイントされていても 10 fps がキャプチャされます。captureStream
仕様に関するバグと詳細な議論が提出されています。captureStream()
動画のサイズが、呼び出された<canvas>
と一致している。
デモ
キャンバス
動画
サポート
- キャンバス
captureStream()
: Firefox 43 以上、Chrome 50 以上(chrome://flags/#enable-experimental-web-platform-features が有効)、または Chrome 52 以上(デフォルト)。 - 動画と音声
captureStream()
: Firefox 47、chrome://flags/#enable-experimental-web-platform-features が有効になっている Chrome 52 以降、またはデフォルトで Chrome 53 以降。