最近自己写项目,在项目中涉及功能点又截取视频帧的点;需求澄清:移动端封面展示,平台上传图片(多张上传)取第一张上传图片为封面图;如上传视频则截取视频第一帧作为封面图;

实现思路;h5  video标签,canvas;上传视频成功之后把返回视频地址放到video标签内,通过canvas画布截取视频第一帧;

组件代码:

<el-form-item ref="videocontentvideo" style="display:none;">
<img :src="imgurl">
<video width="320" height="240" controls id="upvideo">
</video>
<img :src="modlevidel" />
</el-form-item>
<el-form-item class="upload-demo-content" v-show="formLabelAlign.type==2">
<el-upload class="upload-demo" :limit="1" :on-exceed="exceedhandle" drag :file-list="filsListArray" :action="configuploadurl" :on-success="successuploadhandle" accept="video" name="fileList" :before-upload="beforeUploadVideo">
<i class="el-icon-upload"></i>
<div class="el-upload__text">将视频文件拖到此处,或
<em>点击上传</em>
</div>
<div class="el-upload__tip" slot="tip"></div>
</el-upload>
</el-form-item>
successuploadhandle(response, file, fileList) {
this.formLabelAlign.video = this.modlevidel =
response.data.fileList[0].url;
this.filsListArray = [];
this.filsListArray.push({
name: this.formLabelAlign.video,
url: this.formLabelAlign.video
});
this.findvideocover();
},
 exceedhandle(files, fileList) {
this.$message.error("只能上传一个视频额");
},
 beforeUploadVideo(file) {
if (
[
"video/mp4",
"video/ogg",
"video/flv",
"video/avi",
"video/wmv",
"video/rmvb"
].indexOf(file.type) == -1
) {
this.$message.error("请上传正确的视频格式");
return false;
}
},

主要代码=》截取视频第一帧:

   findvideocover() {
let _this = this;
this.$nextTick(() => {
let video = document.getElementById("upvideo");
let source = document.createElement("source");
// source.src = require("../../assets/5b086751dbb7af1ea8fa8d05e66fe5c3.mp4");this.formLabelAlign.video
source.src = this.formLabelAlign.video;
source.type = "video/mp4";
video.appendChild(source);
video.addEventListener("loadeddata", function() {
var canvas = document.createElement("canvas");
canvas.width = "320";
canvas.height = "320";
canvas
.getContext("2d")
.drawImage(video, 0, 0, canvas.width, canvas.width);
var img = document.createElement("img");
let imgsrc = canvas.toDataURL("image/png");
_this.Videoframehandle(imgsrc.split(",")[1]);
});
});
},

视频预览:

 showvideohandle() {
this.$alert(
`<video width="320" height="240" controls>
<source src="${
this.filsListArray[0].url
}" type="video/mp4">
您的浏览器不支持 HTML5 video 标签。
</video>`,
"视频预览",
{
dangerouslyUseHTMLString: true
}
);
},

效果:

最新文章

  1. git常用命令(持续更新中)
  2. Atitit MATLAB 图像处理 经典书籍attilax总结
  3. 1125mysqbinlog日志
  4. var关键字获取数据类型
  5. XMPP即时通信(基础)
  6. Castle.Net 基本应用
  7. php获取checkbox复选框的内容
  8. 【python】lxml中多个xml采用相同节点时出现的问题
  9. 错误之thinkphp模型使用发生的错误
  10. Linux QtCreator设置mingw编译器生成windows程序
  11. Maven Dependency Scope用法
  12. WAF SSI
  13. ADS的使用
  14. 利用iptables来配置linux禁止所有端口登陆和开放指定端口
  15. C语言超级经典400道题目
  16. usaco training 4.1.2 Fence Rails 题解
  17. Android service 服务的应用之电话监听器以及短信监听器
  18. ssh远程登录命令简单实例
  19. 使用restTemplate来访问https
  20. 画PCB之电流与线宽的关系

热门文章

  1. 如何让 Windows 上的命令行工具更好用
  2. ural 1707. Hypnotoad&#39;s Secret(线段树)
  3. Chromium多线程模型设计和实现分析
  4. oracle 数据库中数据导出到excel
  5. 弗拉特利定律:Illumina怎样缔造基因革命
  6. Springboot 之 引入Thymeleaf
  7. Comparable与Comparator源码分析
  8. window下安装svn
  9. Centos7中 文件大小排序
  10. vue-cli简介(中文翻译)