当前位置: 首页 > news >正文

vue videojs使用canvas截取视频画面

前言
刚开始做的时候太多坑,导致一直报错:
Uncaught (in promise) TypeError: Failed to execute ‘drawImage’ on ‘CanvasRenderingContext2D’: The provided value is not of type ‘(CSSImageValue or HTMLCanvasElement or HTMLImageElement or HTMLVideoElement or ImageBitmap or OffscreenCanvas or SVGImageElement or VideoFrame)’.

直接上代码!!!

1、html

<el-button class="capture-item" type="primary" @click="captureScreenshot">截图</el-button><video id="viewer" class="video-js vjs-default-skin" crossorigin="anonymous" controls><source :src="playVideo.url" type='video/mp4'>
</video>

2、js

/** 初始化视频播放器 */const initViewer = async () => {await nextTick() // 等待 DOM 更新// 初始化 video.jsplayer.value = videojs('viewer', {controls: true,autoplay: true,fluid: true,});}// 截图功能const captureScreenshot = () => {if (!player.value) return;const videoElement = player.value.el().querySelector('video');if (!videoElement) return;// 创建 Canvasconst canvas = document.createElement('canvas');const ctx = canvas.getContext('2d');if (!ctx) return;// 设置 Canvas 尺寸(可排除控制条)const controlHeight = 30; // 控制条高度canvas.width = videoElement.videoWidth;canvas.height = videoElement.videoHeight - controlHeight;// 绘制当前帧ctx.drawImage(videoElement,0, 0,videoElement.videoWidth, videoElement.videoHeight - controlHeight, // 源尺寸0, 0,canvas.width, canvas.height // 目标尺寸);// 转换为 DataURLconst dataUrl = canvas.toDataURL('image/png');downloadImage(dataUrl);};// 下载图片const downloadImage = (dataUrl: string) => {const link = document.createElement('a');link.download = `视频截图_${new Date()}.png`;link.href = dataUrl;link.click();};

我这里是截取完画面下载到浏览器!

3、图例

点击《截图》,直接下载
在这里插入图片描述
截取的画面:
在这里插入图片描述


http://www.mrgr.cn/news/93039.html

相关文章:

  • 基于 DataEase 的企业数据分析实践
  • 硅基流动nodejs流式输出
  • 使用vite创建vue3项目
  • T-SQL 语言基础: SQL 数据库对象元数据及配置信息获取
  • AMD RDNA3 GPU架构解析
  • (十 九)趣学设计模式 之 中介者模式!
  • 【算法】手撕二分查找
  • stm32 jlink烧录时写保护
  • HOW - 在Windows浏览器中模拟MacOS的滚动条
  • 私有云基础架构
  • 多个pdf合并成一个pdf的方法
  • easyExcel使用案例有代码
  • SP导入智能材质球
  • 【子网掩码计算器:Python + Tkinter 实现】
  • 中间件专栏之MySQL篇——MySQL缓存策略
  • 以实例浅析汇编语句和高级语言
  • CDefView::_OnFSNotify函数分析
  • Pytorch xpu环境配置 Pytorch使用Intel集成显卡
  • QT——文件IO
  • Arduino:UNO板的接口和应用