H5 video标签列表渲染用canvas截取视频画面做封面

本文介绍如何使用H5的video标签结合canvas截取视频画面作为列表封面。通过监听video的加载和时间更新事件,确保每个视频封面都能正确显示,解决了因视频加载速度不一致导致的封面显示问题。
摘要由CSDN通过智能技术生成

这是一个关于h5的video视频播放标签来做视频播放截取视频画面的问题。

需求是这样的:要渲染一个视频资源列表,在列表中获取视频的画面来做列表的封面。看到这个需求就想,为什么要在列表里截取视频画面做封面,为什么不是后端返回图片url呢?没有那么多为什么,做出来就是了。

首先是找百度,怎么截取h5视频的画面,搜了一遍,大都是通过canvas来画出来的。基本实现过程是:通过video标签把视频加载进来,设置display:none; 把video标签隐藏起来,然后通过canvas的drawImage方法把视频画面画出来,得到一个base6位的图片编码,然后将这个base64位的编码赋给img标签的src即可。

先来一串代码:

html:
<video id="video" :src="videoSrc" x-webkit-airplay="allow" preload="auto" style="display: none"></video>
<div id="output"></div>
js:
captureImage() {
    const output = document.getElementById('output')
    const video = document.getElementById('video')
    const canvas = document.createElement('canvas')
    canvas.width = video.videoWidth * 0.3
    canvas.height = video.videoHeight * 
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 悬停时长设置_audio、videocanvas 对于audio和video,可以使用HTML5中的`title`属性来设置悬停时长,例如: ```html <audio controls title="悬停时长为10秒"> <source src="audio.mp3" type="audio/mpeg"> </audio> <video controls title="悬停时长为20秒"> <source src="video.mp4" type="video/mp4"> </video> ``` 对于canvas,你可以使用`title`属性或者使用JavaScript中的`setTimeout`函数来设置悬停时长,例如: ```html <canvas id="myCanvas" width="200" height="200" title="悬停时长为5秒"></canvas> <script> setTimeout(function() { document.getElementById("myCanvas").title = "悬停时长为10秒"; }, 5000); </script> ``` 2. 截取视频设置封面截取某个时间画面截取视频的某个时间画面作为封面,可以使用HTML5中的`poster`属性,例如: ```html <video controls poster="cover.jpg"> <source src="video.mp4" type="video/mp4"> </video> ``` 如果要截取视频的某个时间画面,可以使用JavaScript中的`canvas`元素和`drawImage`方法,例如: ```html <video controls id="myVideo"> <source src="video.mp4" type="video/mp4"> </video> <canvas id="myCanvas" width="200" height="200"></canvas> <script> var video = document.getElementById("myVideo"); var canvas = document.getElementById("myCanvas"); var ctx = canvas.getContext("2d"); video.addEventListener("timeupdate", function() { ctx.drawImage(video, 0, 0, canvas.width, canvas.height); }); </script> ``` 这个例子会在canvas上实时绘制视频当前时间的画面。 3. 根据鼠标实时更新视频封面 要根据鼠标实时更新视频封面,可以使用JavaScript中的`mousemove`事件和`canvas`元素和`drawImage`方法,例如: ```html <video controls id="myVideo"> <source src="video.mp4" type="video/mp4"> </video> <canvas id="myCanvas" width="200" height="200"></canvas> <script> var video = document.getElementById("myVideo"); var canvas = document.getElementById("myCanvas"); var ctx = canvas.getContext("2d"); canvas.addEventListener("mousemove", function(e) { var rect = canvas.getBoundingClientRect(); var x = e.clientX - rect.left; var y = e.clientY - rect.top; var w = canvas.width; var h = canvas.height; ctx.drawImage(video, 0, 0, w, h); ctx.fillStyle = "rgba(0, 0, 0, 0.5)"; ctx.fillRect(0, 0, w, h); ctx.drawImage(video, x - 50, y - 50, 100, 100, 0, 0, w, h); }); </script> ``` 这个例子会在canvas上绘制视频当前时间的画面,并在鼠标位置处显示一个100x100的区域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值