Il metodo captureStream()
consente di acquisire un MediaStream
da un elemento <canvas>
, <audio>
o <video>
.
Ciò consente di registrare uno stream video o audio da uno di questi elementi, di trasmetterlo in live streaming tramite WebRTC o di combinarlo con effetti o altri elementi MediaStream
in un elemento <canvas>
. In altre parole, captureStream()
consente a MediaStream
di passare
contenuti multimediali tra elementi canvas, audio o video oppure a un
RTCPeerConnection
o MediaRecorder
.
Nella demo seguente (disponibile dagli esempi di WebRTC) un MediaStream
acquisito da un elemento canvas a sinistra viene trasmesso in streaming tramite una connessione peer WebRTC all'elemento video a destra:
Di seguito sono riportati i link ad altri esempi di canvas e video.
Il codice captureStream()
è semplice.
Per <canvas>
:
var canvas = document.querySelector('canvas');
var video = document.querySelector('video');
// Optional frames per second argument.
var stream = canvas.captureStream(25);
// Set the source of the <video> element to be the stream from the <canvas>.
video.srcObject = stream;
Per <video>
:
var leftVideo = document.getElementById('leftVideo');
var rightVideo = document.getElementById('rightVideo');
leftVideo.onplay = function() {
// Set the source of one <video> element to be a stream from another.
var stream = leftVideo.captureStream();
rightVideo.srcObject = stream;
};
Ma perché?
Il metodo captureStream()
consente di
registrare o
trasmettere in live streaming da elementi canvas ed elementi multimediali:
- Registra e riproduci in streaming il gameplay da un
<canvas>
- Acquisisci video da una fotocamera, poi aggiungi altri contenuti o effetti
- Crea effetti Picture in picture a partire da più video tramite una
<canvas>
- Combina video e immagini (da file o da una fotocamera o entrambi) in un
<canvas>
- Video in live streaming riprodotto da un file
- Utilizza un messaggio audio o video registrato per un videomessaggio o un messaggio vocale
Essenzialmente, captureStream()
abilita JavaScript per creare e "inserire elementi" in un
MediaStream.
Clausole
Il tentativo di utilizzare
captureStream()
con un elemento multimediale che implementa la protezione dei contenuti tramite Encrypted Media Extensions genererà un'eccezione.Se scatti da
<canvas>
, la frequenza fotogrammi massima viene impostata quando viene chiamatocaptureStream()
. Ad esempio,canvas.captureStream(10)
significa che il canvas ha un output compreso tra 0 e 10 f/s. Non viene acquisito nulla se non viene dipinto nulla sulla<canvas>
e vengono acquisiti 10 f/s anche se la<canvas>
viene visualizzata a 30 f/s. Esiste un bug con ulteriori discussioni registrato nella specifica dicaptureStream
.Le dimensioni di un video
captureStream()
corrispondono alle<canvas>
su cui è stato chiamato.
Demo
Tela
- Trasmettere in streaming da un elemento canvas a un elemento video
- Trasmettere in streaming da un elemento canvas a una connessione peer
Video
- Riprodurre in streaming da un elemento video a un elemento video
- Trasmettere contenuti da un elemento video a una connessione peer
Assistenza
- Canvas
captureStream()
: Firefox 43 o versioni successive; Chrome 50 e versioni successive con chrome://flags/#enable-experimental-web-platform-features abilitato oppure a Chrome 52 e versioni successive per impostazione predefinita. - Video e audio
captureStream()
: Firefox 47, Chrome 52 e versioni successive con chrome://flags/#enable-experimental-web-platform-features abilitato oppure Chrome 53 e versioni successive per impostazione predefinita.