2
我有一個畫布,在一個div定義的視頻:匹配屏幕的分辨率 - 疊加
<div id="videos">
<canvas id="my-canvas"></canvas>
<video id="remote-video" autoplay></video>
</div>
這裏是CSS:
#my-canvas {
display: block;
height: 100%;
max-height: 100%;
max-width: 100%;
object-fit: cover;
/* no letterboxing */
opacity: 1;
z-index: 2;
position: absolute;
-moz-transform: rotateY(180deg);
-ms-transform: rotateY(180deg);
-o-transform: rotateY(180deg);
-webkit-transform: rotateY(180deg);
transform: rotateY(180deg);
transition: opacity 1s;
width: 100%;
}
#remote-video {
display: block;
height: 100%;
max-height: 100%;
max-width: 100%;
object-fit: cover;
/* no letterboxing */
opacity: 0;
-moz-transform: rotateY(180deg);
-ms-transform: rotateY(180deg);
-o-transform: rotateY(180deg);
-webkit-transform: rotateY(180deg);
transform: rotateY(180deg);
transition: opacity 1s;
width: 100%;
}
當我畫在畫布中,分辨率似乎不符合視頻的分辨率。下面是JavaScript代碼:
var my_canvas = (function() {
var options;
var video;
var canvas;
var context;
var renderTimer;
function initVideoStream() {
if (options.videoElement) {
video = document.getElementById(options.videoElement);
video.setAttribute('width', options.width);
video.setAttribute('height', options.height);
initCanvas();
} else {
options.onNotSupported();
}
}
function initCanvas() {
canvas = document.createElement("canvas");
canvas.setAttribute('width', options.width);
canvas.setAttribute('height', options.height);
context = canvas.getContext('2d');
startCapture();
}
function startCapture() {
renderTimer = setInterval(function() {
try {
context.drawImage(video, 0, 0, video.width, video.height);
options.onFrame(canvas);
} catch (e) {
// TODO
}
}, Math.round(1000/options.fps));
}
function stopCapture() {
if (renderTimer) {
clearInterval(renderTimer);
}
options.onClear();
}
return {
init: function(captureOptions) {
var doNothing = function(){};
options = captureOptions || {};
options.fps = options.fps || 30;
options.width = options.width || 640;
options.height = options.height || 480;
options.videoElement = options.videoElement || null;
options.onSuccess = options.onSuccess || doNothing;
options.onError = options.onError || doNothing;
options.onNotSupported = options.onNotSupported || doNothing;
options.onFrame = options.onFrame || doNothing;
options.onClear = options.onClear || doNothing;
initVideoStream();
},
start: startCapture,
stop: stopCapture
};
})();
注:
1)options.videoElement =的document.getElementById( '我的畫布');
2)我玩options.width和height的不同值。它沒有修復。
如何在畫面上完全疊加畫布?
我建議使用的'requestAnimationFrame'代替'setInterval',以防止任何vsinc問題,性能問題以及更高的電源效率 – 350D
感謝您的建議,您可以請提供一個例子嗎?我不是一個html5專家! – ssk
功能startCapture(){ \t變種... \t功能渲染(){ \t \t使例程... \t \t window.requestAnimationFrame(渲染); \t} \t render(); } – 350D