ist es möglich, ein HTML5-Video als Teil der Leinwand anzuzeigen?
im Grunde genauso wie Sie ein Bild auf der Leinwand zeichnen.
context.drawVideo(vid, 0, 0);
vielen Dank!
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var video = document.getElementById('video');
video.addEventListener('play', function () {
var $this = this; //cache
(function loop() {
if (!$this.paused && !$this.ended) {
ctx.drawImage($this, 0, 0);
setTimeout(loop, 1000 / 30); // drawing at 30fps
}
})();
}, 0);
Ich denke, der obige Code ist selbsterklärend. Wenn Sie unten keinen Kommentar ablegen, werde ich versuchen, die obigen paar Codezeilen zu erklären
Bearbeiten:
Hier ist ein Online-Beispiel, nur für Sie :)
Demo
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var video = document.getElementById('video');
// set canvas size = video size when known
video.addEventListener('loadedmetadata', function() {
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
});
video.addEventListener('play', function() {
var $this = this; //cache
(function loop() {
if (!$this.paused && !$this.ended) {
ctx.drawImage($this, 0, 0);
setTimeout(loop, 1000 / 30); // drawing at 30fps
}
})();
}, 0);
<div id="theater">
<video id="video" src="http://upload.wikimedia.org/wikipedia/commons/7/79/Big_Buck_Bunny_small.ogv" controls="false"></video>
<canvas id="canvas"></canvas>
<label>
<br />Try to play me :)</label>
<br />
</div>
Ich möchte eine Lösung bereitstellen, die modernere Syntax verwendet und weniger ausführlich ist als die bereits zur Verfügung gestellten:
const canvas = document.querySelector("canvas");
const ctx = canvas.getContext("2d");
const video = document.querySelector("video");
video.addEventListener('play', () => {
function step() {
ctx.drawImage(video, 0, 0, canvas.width, canvas.height)
requestAnimationFrame(step)
}
requestAnimationFrame(step);
})
Einige nützliche Links:
Sie müssen das currentTime-Videoelement aktualisieren und dann den Rahmen im Canvas-Bereich zeichnen. Initialisieren Sie kein play () -Ereignis für das Video.
Sie können auch zum Beispiel verwenden. dieses Plugin https://github.com/tstabla/stVideo