Merekam MediaStream dari elemen kanvas, video, atau audio

Metode captureStream() memungkinkan pengambilan MediaStream dari elemen <canvas>, <audio>, atau <video>.

Hal ini memungkinkan streaming video atau audio dari salah satu elemen ini direkam, di-live stream melalui WebRTC, atau digabungkan dengan efek atau MediaStream lainnya dalam <canvas>. Dengan kata lain, captureStream() memungkinkan MediaStream meneruskan media bolak-balik antara elemen kanvas, audio, atau video — atau ke RTCPeerConnection atau MediaRecorder.

Dalam demo berikut (tersedia dari contoh WebRTC), MediaStream yang diambil dari elemen kanvas di sebelah kiri di-streaming melalui koneksi peer WebRTC ke elemen video di sebelah kanan:

(Ada link ke contoh kanvas dan video lainnya di bawah.)

Kode captureStream() sederhana.

Untuk <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.srcObject = stream;

Untuk <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.srcObject = stream;
};

Namun, mengapa?

Metode captureStream() memungkinkan Anda merekam atau melakukan live stream dari kanvas dan elemen media:

  • Merekam dan melakukan streaming gameplay dari <canvas>
  • Merekam video dari kamera, lalu menambahkan konten atau efek tambahan
  • Membuat efek picture-in-picture dari beberapa video melalui <canvas>
  • Menggabungkan video dan gambar (dari file atau kamera atau keduanya) dalam <canvas>
  • Live streaming video yang diputar dari file
  • Menggunakan pesan audio atau video yang direkam untuk pesan suara atau video

Pada dasarnya, captureStream() memungkinkan JavaScript membuat dan "memasukkan hal" ke dalam MediaStream.

Detail lainnya

  • Mencoba menggunakan captureStream() dengan elemen media yang menerapkan perlindungan konten melalui Ekstensi Media Terenkripsi akan menampilkan pengecualian.

  • Saat mengambil gambar dari <canvas>, kecepatan frame maksimum ditetapkan saat captureStream() dipanggil. Misalnya, canvas.captureStream(10) berarti output kanvas antara 0 dan 10 fps. Tidak ada yang direkam jika tidak ada yang digambar di <canvas>, dan 10 fps direkam meskipun <canvas> digambar pada 30 fps. Ada bug dengan diskusi lebih lanjut yang diajukan pada spesifikasi captureStream.

  • Dimensi video captureStream() cocok dengan <canvas> tempatnya dipanggil.

Demo

Kanvas

Video

Dukungan

  • Canvas captureStream(): Firefox 43 atau yang lebih baru; Chrome 50 dan yang lebih baru dengan chrome://flags/#enable-experimental-web-platform-features diaktifkan, atau Chrome 52 dan yang lebih baru secara default.
  • Video dan audio captureStream(): Firefox 47; Chrome 52 dan yang lebih baru dengan chrome://flags/#enable-experimental-web-platform-features diaktifkan, atau Chrome 53 dan yang lebih baru secara default.

Cari tahu selengkapnya