canvas绘制video

主要思路:

Canvas中可以使用ctx.drawImage(video, x, y,width,height)来对视频当前帧的图像进行绘制,其中video参数就是HTML5中的video标签。故我们可以通过Canvas的动态效果不断获取video当前画面,渲染到Canvas画布上。并且通过改变video标签的属性,来实现在Canvas中处理视频的一整套效果。可以理解成在Canvas中新建一个播放器,该播放器视频源是video标签创建,播放器的各种方法最终指向对video标签本身属性和方法的改变。而利用Canvas的强大功能,可以进一步进行图像处理、弹幕加载等操作。

html

<div class="videoBox"><img id="poster" src="http://120.77.35.150/video/video-bg.png" alt=""><video id="video"preload="auto"playsinline="true"x-webkit-airplay="true"webkit-playsinline="true"x5-video-player-type="h5"x-video-orientation="h5"x5-video-player-fullscreen="true"muted="false"src="http://120.77.35.150/video/2.mp4"></video><canvas id="canvas"></canvas><div id="btn">点击</div>
</div>

js

<script>const video = document.getElementById('video');const palyBtn = document.getElementById('btn');const canvas = document.getElementById('canvas');const poster = document.getElementById('poster') // 初始化(创建)canvasconst ctx = canvas.getContext('2d')// 获取可视宽高const screen_W = window.innerWidth || document.body.clientWidthconst screen_H = window.innerHeight || document.body.clientHeight// 设置画布宽高(画布宽高,最好是根据设计视频所做实际宽高)canvas.width = screen_W * 3 // 获取屏幕宽度作为canvas的宽度 这个设置的越大,画面越清晰(相当于绘制的图像大,然后被css缩小)canvas.height = screen_H * 3 + 12// 绘制视频palyBtn.addEventListener('touchstart', function (e) {e.preventDefault()poster.style.display = 'none'// 绘制背景ctx.fillStyle = '#000'ctx.fillRect(0, 0, canvas.width, canvas.height)ctx.drawImage(video, 0, 0, canvas.width, canvas.height);if (video.paused) {video.play()} else {video.pause()}})video.addEventListener('play', playCallBack)function playCallBack() {if (video.paused) {return;}captureFrame();setTimeout(playCallBack, 40);}function captureFrame() {ctx.drawImage(video, 0, 0, canvas.width, canvas.height)}
</script>

css

<style>
* {margin: 0;
padding: 0;
}
body {overflow: hidden;
}
.videoBox {width: 100%;
height: 100%;
position: relative;
top: 0;
right: 0;
left: 0;
bottom: 0;
}
img {position: absolute;
display: block;
width: 100%;
height: 100%;
}
#btn {position: absolute;
width: 50px;
height: 50px;
background-color: #ccc;
border-radius: 50%;
bottom: 10%;
left: 50%;
transform: translateX(-50%);
line-height: 50px;
text-align: center;
}
canvas {width: 100%;
height: 100%;
}
video {position: absolute;
display: none;
z-index: 1;
top: 0;
left: 0;
right: 0;
bottom: 0;
width: 100%;
height: 100%;
}
</style>

【注】drawImage

drawImage函数有三种函数原型:

drawImage(image, dx, dy) 在画布指定位置绘制原图
drawImage(image, dx, dy, dw, dh) 在画布指定位置上按原图大小绘制指定大小的图
drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh) 剪切图像,并在画布上定位被剪切的部分:

canvas绘制video相关推荐

  1. canvas绘制视频封面

    一.需求:上传视频,同时截取视频某一帧作为视频的封面. 二.实现思路:利用canvas绘制图像的功能,绘制图像某一帧,这里绘制了第一帧,很简单就实现了. 三.代码: <!DOCTYPE html ...

  2. 教你如何用Canvas绘制整身的哆啦A梦

    教你如何用Canvas绘制整身的哆啦A梦 上牌你文章我们说到了如何使用canvas绘制哆啦A梦,但当时只是绘制了哆啦A梦的头部,之后有学员留言说可不可以教大家绘制整身的哆啦A梦,想了想,决定安排一下. ...

  3. canvas绘制图片

    canvas绘制图片 方法 canvas支持image,svg,video,canvas的绘制drawImage(image, x, y) 在坐标x,y处绘制图片 drawImage(image, x ...

  4. JS 用CANVAS自定义VIDEO播放器

    JS 用CANVAS自定义VIDEO播放器 概述 CANVAS绘制核心代码 播放器代码 使用页面HTML代码 使用页面JS代码 使用示例 概述 HTML5用规范的VIDEO标签取代了以往需要借助外部控 ...

  5. 史上最详细的使用canvas绘制五星红旗的方法

    史上最详细的使用canvas绘制五角星的方法 昨天我们在课堂上讲到了HTML5中的canvas标签,canvas标签用于绘制图像(通过脚本,通常是 JavaScript).当天布置的作业就是利用can ...

  6. 视频封面图片修改html代码,canvas绘制视频封面的方法

    一.需求:上传视频,同时截取视频某一帧作为视频的封面. 二.实现思路:利用canvas绘制图像的功能,绘制图像某一帧,这里绘制了第一帧,很简单就实现了. 三.代码: capture screen vi ...

  7. canvas绘制的文字如何换行

    <html><head><title>canvas绘制的文字如何换行</title><style type="text/css" ...

  8. HTML5 canvas绘制雪花飘落

    Canvas是HTML5新增的组件,它就像一块幕布,可以用JavaScript在上面绘制各种图表.动画等.没有Canvas的年代,绘图只能借助Flash插件实现,页面不得不用JavaScript和Fl ...

  9. canvas绘制时钟

    听了慕课网Sliav Zhou 的课程canvas绘制时钟,记录下来的代码,每句做了注解便于以后学习,原先每次边听别的课边敲码,错误百出,明明原封不动复制的代码,就会出错,还找不到原因,今天可能运气好 ...

最新文章

  1. Graph Without Long Directed Paths
  2. 经典C语言程序100例之七九
  3. hive 分区_代码 | Spark读取mongoDB数据写入Hive普通表和分区表
  4. SwipeRefreshlayout+RecyclerView+binding实现上拉和下拉刷新
  5. 字体--Ubuntu手记之系统配置
  6. 万兆以太网测试仪应该具备什么功能
  7. 前端基础-html-视频标签的介绍
  8. MyBatis之sql映射文件
  9. Chrome插件安装 程序包无效
  10. java整型转换成字符串_java整型转换成字符串
  11. uniapp 运行到手机或模拟器
  12. 一起来学SpringCloud之 - 服务认证(JWT)
  13. winows10和centos 双系统 安装记录
  14. 如何将链接生成二维码
  15. 【MVC 4】4.MVC 基本工具(Visual Studio 的单元测试、使用Moq)
  16. 下载Android App的历史版本
  17. 【图文教程】MySQL 主从
  18. 电影天堂电视剧批量下载的地址
  19. C/C++、Qt4实现FTP客户端(有无界面版)
  20. 数据库之数据库的部署与管理

热门文章

  1. WinXP SP2 系统服务优化设置详解
  2. 勇敢说:「要求加薪」,不必低声下气(上)
  3. SmartPTT、SmartICS 工业产品存在多个严重漏洞,影响全球90国
  4. Oracle 11g安装过程出现“未找到文件”
  5. OpenStack Liberty 版本 All-In-One 一键安装ISO 及安装指导
  6. 复指数的欧拉公式计算,你算对了吗?
  7. GhostnetV1(2020)
  8. 股票买入方法,股池和和公式
  9. Pytorch复现STGCN:基于图卷积时空神经网络在交通速度中的预测
  10. DeepLearn学习步骤