使用canvas播放视频
前期规划
- 将视频隐藏正常播放
- 将播放取到画面使用setInterval循环在画布上显示画面,因为 1s 差不多25-30帧,选择每40ms循环一次
- 绘画中的大小,宽度等于100%,高度垂直居中。x 为 0,y 为(canvas.height - video.height)/2/canvas缩放倍数
- 视频暂停或者播放结束后,清除定时器
代码如下
html代码
<video id="main-video" playsinline="true" webkit-playsinline="true" x5-playsinline="true" x5-video-orientation="portraint" x5-video-player-fullscreen="true" x5-video-player-type="h5" style="display: none">
<source id="js-video-source" src="<%=detail.videoUrl || ''%>" ></source>';
</video>
<canvas style="width: 100%; height:100%" id="canvas"></canvas>js代码
function renderCanvas () {
let $canva, ctx, $video, setInter;
$canva =$('#canvas');
$video = $("#main-video");
ctx = $canva[0].getContext('2d');
$canva.style.width = $canva.parents().width() / 2;
$canva.style.height = $canva.parents().height() / 2;
$video[0].play();
render();
setInter = setInterval(r => {
render();
}, 40)
function render () {
ctx.drawImage($video[0], 0, (canvas.height - video.height)/2/2, video.width(), video.height());
}
// 视频播放结束
$video[0].on('ended', function () {
clearInterval(setInter);
});
// 视频被暂停
$video[0].on('pause', function () {
clearInterval(setInter);
});
}本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!