Il metodo captureStream() consente
di acquisire un MediaStream da un elemento <canvas>,
<audio> o <video>.
Ciò consente di registrare un flusso video o audio da uno qualsiasi di questi elementi,
di trasmetterlo in live streaming tramite WebRTC o di combinarlo con effetti o altri MediaStream in un
<canvas>. In altre parole, captureStream() consente a MediaStream di trasferire
i contenuti multimediali avanti e indietro tra canvas, elementi audio o video oppure a un
RTCPeerConnection o MediaRecorder.
Nella seguente demo (disponibile negli
esempi 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 tela 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 di canvas
e multimediali:
- Registrare e trasmettere in streaming il gameplay da un
<canvas> - Acquisire video da una fotocamera, quindi aggiungere altri contenuti o effetti
- Crea effetti picture in picture da più video tramite un
<canvas> - Combina video e immagini (da file, da una videocamera o da entrambi) in un
<canvas> - Trasmettere in live streaming un video riprodotto da un file
- Utilizzare un messaggio audio o video registrato per un video o un messaggio vocale
In sostanza, captureStream() consente a JavaScript di costruire e "inserire
cose" 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.Quando acquisisci da un
<canvas>, il frame rate massimo viene impostato quando viene chiamatocaptureStream(). Ad esempio,canvas.captureStream(10)significa che il canvas genera tra 0 e 10 fps. Non viene acquisito nulla quando non viene disegnato nulla sul<canvas>e vengono acquisiti 10 fps anche se il<canvas>viene disegnato a 30 fps. È stato segnalato un bug con ulteriori discussioni nella specificacaptureStream.Le dimensioni di un video
captureStream()corrispondono a quelle del<canvas>su cui è stato chiamato.
Demo
Tela
- Trasmettere contenuti da un elemento canvas a un elemento video
- Trasmettere in streaming da un elemento canvas a una connessione peer
Video
- Trasmettere in streaming da un elemento video a un altro elemento video
- Trasmettere in streaming 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 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 attivato oppure Chrome 53 e versioni successive per impostazione predefinita.