zoukankan      html  css  js  c++  java
  • vue 上传视频和图片 并且截取视频第一帧作为播放前默认图片

     <el-upload
                    :action="pathUrl+'/api/FileUpload/SaveFiles'"
                    :limit="5"
                    list-type="picture-card"
                    :file-list="sfzzm"
                    :on-preview="handlePictureCardPreview"
                    :on-success="handleDownload"
                    :on-remove="handleRemove"
                    :on-exceed="handleExceed"
                    :before-upload="beforeAvatarUpload"
                  >
                    <i class="el-icon-plus"></i>
                  </el-upload>
                  <el-dialog :visible.sync="dialogVisible">
                    <img width="100%" :src="dialogImageUrl" alt />
                  </el-dialog>

    handleDownload(response, file, fileList) {
        if (file.status) {
            var index = file.name.indexOf("."); //(考虑严谨用lastIndexOf(".")得到)得到"."在第几位
            var tv_id = file.name.substring(index); //截断"."之前的,得到后缀
            this.videoUrl = file.url;
            //如果是视频截取第一个作为图片展示出来
            if (tv_id == ".mp4") {
              //根据后缀,判断是否符合视频格式
                this.findvideocover(this.pathUrl+response.Data[0],file);
              }
              this.sfzzm.push(file);
              this.ListFileUrlDetail.Url = response.Data[0];
              this.ListFileUrlDetail.Size = file.size;
              this.ListFileUrlDetail.uid = file.uid;
            
            this.form.FileUrls.push( Object.assign({}, this.ListFileUrlDetail) );
          }
          console.log("sfzzm" + JSON.stringify(this.sfzzm));
        },
         
        ///超出数量限制
        handleExceed(files, fileList) {
          this.$message.warning(
            `当前限制选择 5 个文件,本次选择了 ${
              files.length
            } 个文件,共选择了 ${files.length + fileList.length} 个文件`
          );
        },
    

      

    //截取视频第一帧作为播放前默认图片
         findvideocover(url,file) {
            const  video = document.getElementById("upvideo"); // 获取视频对象
            // const video = document.createElement("video") // 也可以自己创建video
             video.src=url // url地址 url跟 视频流是一样的
            var canvas = document.getElementById('mycanvas') // 获取 canvas 对象
            const ctx = canvas.getContext('2d'); // 绘制2d
            video.crossOrigin = 'anonymous' // 解决跨域问题,也就是提示污染资源无法转换视频
            video.currentTime = 1 // 第一帧
            video.oncanplay = () => {
              canvas.width = video.clientWidth; // 获取视频宽度
            canvas.height = video.clientHeight; //获取视频高度
            // 利用canvas对象方法绘图
            ctx.drawImage(video, 0, 0, video.clientWidth,video.clientHeight)
            // 转换成base64形式
             this.imgsrc = canvas.toDataURL ("image/png") // 截取后的视频封面
             file.url=this.imgsrc;
    
          }
        },
  • 相关阅读:
    时间单位的档案
    Linux中表示“时间”的结构体和相关函数
    linux 下如何给用户添加权限
    C++中虚函数的作用浅析
    C语言中strstr函数
    测试环境下将centos6.8升级到centos7的操作记录(转)
    CURL常用命令(转)
    Centos7管理selinux及使用firewalld管理防火墙
    UML类图几种关系的总结
    linux下面覆盖文件,如何实现直接覆盖,不提示
  • 原文地址:https://www.cnblogs.com/xiaobing-R/p/13225337.html
Copyright © 2011-2022 走看看