La méthode captureStream()
permet de capturer un MediaStream
à partir d'un élément <canvas>
, <audio>
ou <video>
.
Cela permet d'enregistrer un flux vidéo ou audio de l'un de ces éléments, de le diffuser en direct via WebRTC, ou de combiner des effets ou d'autres MediaStream
dans une <canvas>
. En d'autres termes, captureStream()
permet à MediaStream
de faire des allers-retours multimédias entre des éléments de canevas, audio ou vidéo, ou vers un RTCPeerConnection
ou un MediaRecorder
.
Dans la démonstration suivante (disponible dans les exemples WebRTC), un MediaStream
capturé à partir d'un élément de canevas à gauche est diffusé en streaming via une connexion pair WebRTC à l'élément vidéo de droite:
(Vous trouverez ci-dessous des liens vers d'autres toiles et exemples de vidéos.)
Le code captureStream()
est simple.
Pour <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;
Pour <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;
};
Mais pourquoi ?
La méthode captureStream()
permet d'enregistrer ou de diffuser du contenu en direct à partir d'éléments de canevas et multimédias:
- Enregistrer et diffuser des parties de jeu depuis un
<canvas>
- Enregistrez une vidéo avec une caméra, puis ajoutez du contenu ou des effets supplémentaires
- Créez des effets Picture-in-picture à partir de plusieurs vidéos via un
<canvas>
- Combiner des vidéos et des images (à partir de fichiers ou d'un appareil photo, ou les deux) dans un
<canvas>
- Diffusion en direct d'une vidéo lue à partir d'un fichier
- Utiliser un enregistrement audio ou vidéo pour un message vocal ou vidéo
captureStream()
permet essentiellement à JavaScript de construire et d'injecter des éléments dans un MediaStream.
Les petits caractères
Si vous tentez d'utiliser
captureStream()
avec un élément multimédia qui implémente la protection du contenu via des extensions multimédias chiffrées, une exception est générée.Lors de la capture à partir d'un
<canvas>
, la fréquence d'images maximale est définie lorsquecaptureStream()
est appelé. Par exemple,canvas.captureStream(10)
signifie que le canevas génère une sortie entre 0 et 10 FPS. Rien n'est capturé lorsque rien n'est peint sur la<canvas>
et que 10 FPS sont capturés même si le<canvas>
est peint à 30 FPS. Un bug pour lequel nous expliquons davantage a été signalé dans la spécificationcaptureStream
.Les dimensions d'une vidéo
captureStream()
correspondent au<canvas>
pour lequel elle a été appelée.
Démonstrations
Canevas
- Diffuser du contenu en streaming depuis un élément de canevas vers un élément vidéo
- Diffusion d'un contenu en streaming depuis un élément de canevas vers une connexion appairée
Vidéo
- Diffuser du contenu en streaming depuis un élément vidéo vers un élément vidéo
- Diffusion en streaming d'un élément vidéo vers une connexion appairée
Assistance
- Canvas
captureStream()
: Firefox 43 ou version ultérieure, Chrome 50 ou version ultérieure avec chrome://flags/#enable-experimental-web-platform-features activé ou Chrome 52 ou version ultérieure par défaut. - Vidéo et audio
captureStream()
: Firefox 47, Chrome 52 et versions ultérieures avec chrome://flags/#enable-experimental-web-platform-features activé ou Chrome 53 ou version ultérieure par défaut.