Mit der Methode captureStream()
können Sie einen MediaStream
aus einem <canvas>
-, <audio>
- oder <video>
-Element erfassen.
So können Video- oder Audiostreams von jedem dieser Elemente aufgezeichnet, über WebRTC gestreamt oder mit Effekten oder anderen MediaStream
s in einem <canvas>
kombiniert werden. Mit captureStream()
kann MediaStream
Medien zwischen Canvas-, Audio- oder Videoelementen oder an eine RTCPeerConnection
oder MediaRecorder
übergeben.
In der folgenden Demo (verfügbar in den WebRTC-Beispielen) wird ein MediaStream
, das von einem Canvas-Element auf der linken Seite erfasst wurde, über eine WebRTC-Peer-Verbindung an das Videoelement auf der rechten Seite gestreamt:
Unten finden Sie Links zu weiteren Canvas- und Videobeispielen.
Der captureStream()
-Code ist einfach.
Für <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;
Für <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;
};
Aber warum?
Mit der captureStream()
-Methode können Sie Canvas- und Medienelemente aufzeichnen oder live streamen:
- Gameplay auf einem
<canvas>
aufzeichnen und streamen - Video mit einer Kamera aufnehmen und dann zusätzliche Inhalte oder Effekte hinzufügen
- Bild-im-Bild-Effekte aus mehreren Videos über eine
<canvas>
erstellen - Videos und Bilder (aus Dateien oder einer Kamera oder aus beiden) in einem
<canvas>
- Livestreams von Videos, die von einer Datei abgespielt werden
- Aufgenommene Audio- oder Videonachrichten für eine Video- oder Sprachnachricht verwenden
Im Grunde ermöglicht captureStream()
JavaScript, Inhalte zu erstellen und in einen MediaStream einzuschleusen.
Das Kleingedruckte
Wenn du
captureStream()
mit einem Medienelement verwendest, das den Inhaltsschutz über Encrypted Media Extensions implementiert, wird eine Ausnahme ausgelöst.Bei der Aufnahme von einem
<canvas>
wird die maximale Framerate festgelegt, wenncaptureStream()
aufgerufen wird.canvas.captureStream(10)
bedeutet beispielsweise, dass der Canvas zwischen 0 und 10 fps ausgibt. Wenn auf der<canvas>
nichts dargestellt wird, wird auch nichts erfasst. Es werden 10 fps erfasst, auch wenn die<canvas>
mit 30 fps dargestellt wird. In dercaptureStream
-Spezifikation wurde ein Fehler mit weiteren Informationen gemeldet.Die Abmessungen eines
captureStream()
-Videos stimmen mit dem<canvas>
überein, auf dem es aufgerufen wurde.
Demos
Canvas
- Von einem Canvas-Element zu einem Videoelement streamen
- Von einem Canvas-Element zu einer Peer-Verbindung streamen
Video
- Von einem Videoelement zu einem anderen streamen
- Von einem Videoelement zu einer Peer-Verbindung streamen
Support
- Canvas
captureStream()
: Firefox 43 oder höher, Chrome 50 oder höher mit aktivierter Option „chrome://flags/#enable-experimental-web-platform-features“ oder standardmäßig Chrome 52 oder höher. - Video und Audio
captureStream()
: Firefox 47; Chrome 52 und höher mit aktivierter Option chrome://flags/#enable-experimental-web-platform-features oder Chrome 53 und höher standardmäßig