我最初的问题是我需要播放3个视频文件而没有间隙或重叠,而这些文件具有可见性和不透明性。
我的新想法是将所有内容都写到画布上,但是透明度似乎搞砸了。
我已经尝试了预乘Alpha和笔直。
视频标签可以完美地处理它们。
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 / 60); // drawing at 30fps
}
})();
}, 0);
<div id="theater">
<video width="auto" controls="false" height="auto" autoplay="true" id="video" class="stack">
<source src="http://njastad.com/telenorligaen/straight.webm" type="video/webm">
</video>
<canvas id="canvas"></canvas>
<label>
<br />Try to play me :)</label>
<br />
</div>
有什么想法吗?
答案 0 :(得分:0)
没关系,我只是忘了清除每一帧之间的画布...
答案 1 :(得分:0)
为了清除画布可以使用:
ctx.clearRect(0, 0, canvas.width, canvas.height);
然后
ctx.drawImage(video, 0, 0);
注意:clearRect 的所有参数都是必需的