Mit der Methode captureStream()
kann ein MediaStream
aus einem <canvas>
-, <audio>
- oder <video>
-Element erfasst werden.
Dadurch kann ein Video- oder Audiostream von einem dieser Elemente aufgezeichnet, live über WebRTC übertragen oder mit Effekten oder anderen MediaStream
s in einer <canvas>
kombiniert werden. Mit anderen Worten, captureStream()
ermöglicht es MediaStream
, Medien zwischen Canvas-, Audio- oder Videoelementen oder an ein RTCPeerConnection
- oder MediaRecorder
-Element zu übertragen.
In der folgenden Demo (in den WebRTC-Beispielen verfügbar) wird ein MediaStream
, das von einem Canvas-Element auf der linken Seite erfasst wurde, über eine WebRTC-Peer-Verbindung zum Videoelement rechts gestreamt:
Links zu weiteren Leinwand- und Videobeispielen finden Sie unten.
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 the source of the <video> element to be the stream from the <canvas>.
video.srcObject = stream;
Für <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;
};
Aber warum?
Mit der Methode captureStream()
können Sie über Canvas- und Medienelemente aufzeichnen oder live streamen:
- Spiele von einem
<canvas>
aufzeichnen und streamen - Nimm ein Video von einer Kamera auf und füge dann zusätzliche Inhalte oder Effekte hinzu
- Mit
<canvas>
kannst du Bild-im-Bild-Effekte aus mehreren Videos erstellen - Kombiniere Videos und Bilder (aus Dateien, einer Kamera oder beidem) in einem
<canvas>
- Livestream-Video, das über eine Datei wiedergegeben wird
- Aufgezeichnete Audio- oder Videonachrichten für ein Video oder eine Mailboxnachricht verwenden
Im Wesentlichen ermöglicht captureStream()
JavaScript, Inhalte zu erstellen und in einen MediaStream einzufügen.
Das Kleingedruckte
Wenn Sie versuchen,
captureStream()
mit einem Medienelement zu verwenden, das den Inhaltsschutz über verschlüsselte Medienerweiterungen implementiert, wird eine Ausnahme ausgelöst.Bei der Aufnahme mit einem
<canvas>
wird die maximale Framerate beim Aufruf voncaptureStream()
festgelegt. Zum Beispiel bedeutetcanvas.captureStream(10)
, dass der Canvas zwischen 0 und 10 fps (Bilder pro Sekunde) ausgegeben wird. Es wird nichts aufgenommen, wenn auf<canvas>
nichts dargestellt wird. 10 fps werden auch dann aufgenommen, wenn<canvas>
mit 30 fps dargestellt wird. In dercaptureStream
-Spezifikation ist ein Fehler mit weiteren Informationen enthalten.Die Abmessungen eines
captureStream()
-Videos entsprechen der<canvas>
, für die es aufgerufen wurde.
Demos
Canvas
- Von einem Canvas-Element zu einem Videoelement streamen
- Von einem Canvas-Element an eine Peer-Verbindung streamen
Video
- Von einem Videoelement zu einem Videoelement streamen
- Von einem Videoelement an eine Peer-Verbindung streamen
Support
- Canvas
captureStream()
: Firefox 43 oder höher, Chrome 50 und höher mit aktiviertem chrome://flags/#enable-experimental-web-platform-features oder standardmäßig Chrome 52 und höher - Video und Audio
captureStream()
: Firefox 47, Chrome 52 und höher mit aktiviertem chrome://flags/#enable-experimental-web-platform-features oder standardmäßig Chrome 53 und höher