您的位置:首页 > 汽车 > 时评 > uniapp中生成视频的第一帧图片

uniapp中生成视频的第一帧图片

2024/12/21 20:09:49 来源:https://blog.csdn.net/weixin_45389051/article/details/140849033  浏览:    关键词:uniapp中生成视频的第一帧图片

需求

页面显示这个视频,封面要求是视频里面的内容,然后点击出现弹窗,视频在弹窗里面播放
const video_url = '.mp4'

一.最好用的办法是,直接用背景图

<view class="vide-img":style="{background:'url('+video_url+'?x-oss-process=video/snapshot,t_0,f_jpg'+') no-repeat center center/cover'}"@click="" //点击打开弹窗
>
</view>

二.就是用renderjs了(因为app没有dom),通过创建video标签,然后通过canvas绘制图片的方式

<template>  <view>  <view :vsrc="vsrc" :change:vsrc="renderScript.getVideoImg">  <video src="_doc/uniapp_save/16891612452645.mp4"></video>  </view>  <image :src="imgSrc" mode=""></image>  <!-- <button @click="setUrl('_doc/uniapp_save/16891612452645.mp4')">设置链接</button> -->  <button @click="setUrl('https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/2minute-demo.mp4')">设置链接</button>  </view>  
</template>  <script>  export default {  data() {  return {  vsrc: {}, //用于renderjs通信  imgSrc: ""  }  },  methods: {  // 接收图片的base64编码  receiveImg(data) {  //data.test为返回的封面图  console.log("接收到的数据", data);  this.imgSrc = data.test  },  //视频封面图  setUrl(url) {  console.log("setUrl触发了", url);  let options = {};  options.width = 300;  options.height = 300;  options.src = url;  this.vsrc = options;  }  }  }  
</script>  <script module="renderScript" lang="renderjs">  export default {  data() {  return {  test: ""  }  },  methods: {  //通过视频获得缩略图  getVideoImg(newValue, oldValue, ownerInstance, vm) {  console.log("getVideoImg触发了", newValue, oldValue);  if (newValue == null)  return;  let that = this;  // 在缓存中创建video标签  let video = document.createElement("VIDEO")  // 添加一个静音的属性,否则自动播放会有声音  // video.setAttribute('muted', true)  video.muted = true  // 通过setAttribute给video dom元素添加自动播放的属性,因为视频播放才能获取封面图  video.autoplay = true;  //允许跨域访问  video.crossOrigin = 'anonymous';  // 上面我们只是创建了video标签,视频播放需要内部的source的标签,scr为播放源  video.innerHTML = '<source src=' + newValue.src + ' type="audio/mp4">'  // 再创建canvas画布标签  let canvas = document.createElement('canvas');  let ctx = canvas.getContext('2d');  // video注册canplay自动播放事件  video.addEventListener('canplay', function() {  console.log("canplay事件触发了");  // 创建画布的宽高属性节点,就是图片的大小,单位PX  let anw = document.createAttribute("width");  anw.nodeValue = newValue.width;  let anh = document.createAttribute("height");  anh.nodeValue = newValue.height;  canvas.setAttributeNode(anw);  canvas.setAttributeNode(anh);  // 画布渲染  ctx.drawImage(video, 0, 0, newValue.width, newValue.height);  // 生成图片  that.test = canvas.toDataURL('image/png') // 这就是封面图片的base64编码  // 视频结束播放的事件  video.pause()  // 返回图片的base64编码  ownerInstance.callMethod('receiveImg', {  test: that.test  })  }, false)  },  }  }  
</script>  <style lang="scss">  </style>

点击【设置连接】按钮会给vsrc赋值,触发renderScript.getVideoImg,成功返回图片的base64编码

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com