Vue移动端获取video怎么获取第一帧的图片作为预览图片呢?

clipboard.png

移动端的图片我想获取第一帧播放的图片作为预览图,然后点击播放按钮预览图消失开始播放视屏,这个如何解决呢?

<div class="swiper-container">
            <div class="swiper-wrapper">
                <div class="swiper-slide">
                    <video id="videoSource_two" controls webkit-playsinline="true" playsinline="true" oncontextmenu="return false;"
                     preload="auto">
                        <source src="./video/hangge.mp4" type="video/mp4">
                        </source>
                    </video>
                </div>
                <div ref="textre" class="swiper-slide zoomImage2" v-for="(img,index) in cimg" :key="img" style="background-color: #fff"
                 :style="getImge(img)">
                </div>
            </div>
            <div class="swiper-pagination"></div>
        </div>

我怎么获取视屏的第一帧呢? 因为每个详情的视屏都不一致 不能写死

阅读 12.3k
3 个回答

poster默认获取第一帧,不过貌似兼容不咋地

const width = 400
const height = 300
// 创建一个video节点
const video = document.createElement("video")
video.width = width
video.height = height
video.currentTime = 1 // 第一帧
//创建canvas对象
const canvas = document.createElement("canvas")
canvas.width = width
canvas.height = height
// 等待video获取到第一帧后
video.oncanplay = () => {
    // 利用canvas对象方法绘图
    canvas.getContext("2d").drawImage(video, 0, 0, canvas.width, canvas.height);
    // 转换成base64形式
    const img = canvas.toDataURL("image/jpeg") // 这个就是图片的base64
}

大概思路就是这样

最好是后端解决,不然对用户流量不友好(服务器开销也多,毕竟流量贵)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题