iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >vue如何实现录制视频并压缩视频文件
  • 488
分享到

vue如何实现录制视频并压缩视频文件

2023-07-04 15:07:50 488人浏览 安东尼
摘要

这篇“Vue如何实现录制视频并压缩视频文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue如何实现录制视频并压缩视频文件

这篇“Vue如何实现录制视频并压缩视频文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue如何实现录制视频并压缩视频文件”文章吧。

一、下载gif.js相关文件,可以到这里下载,然后将这几个文件放在根目录的static/js里面。

vue如何实现录制视频并压缩视频文件

gif.js相关文件及存放路径

二、下载依赖包:

npm i timers

三、在页面中声明:

import { setInterval, clearInterval } from "timers";import GIF from "../../static/js/gif.js"

四、html代码块:

<template> <div>   <input ref="changeInput" type="file" accept="video/*" capture="user" @change="changeVideo" />   <div>    <div>视频大小:{{videoSize}}</div>    <div>视频时长:{{videoLength}}</div>    <div>     <video id="myvideo" :src="videoSrc" :width="winWidth" :height="winHeight" ref="videoId" autoplay="true" controls muted></video>     <canvas id="canvas" :width="winWidth" :height="winHeight"></canvas>    </div>   </div> </div></template>

五、在页面加载完成时初始化GIF:

mounted(){  //初始gif  this.gif = new GIF({   workers: 1,   quality: 1000,   width: window.innerWidth,   height: window.innerHeight,   workerScript: '../../static/js/gif.worker.js',  }); },

六、当input录制完视频返回页面中,获取到这个视频文件,每次拿到视频文件需要先移除之前的监听:

//input文件走向  changeVideo(e){   var file = e.target.files[0];   const video = document.getElementById('myvideo');   //视频开始播放   video.removeEventListener('play', this.videoPlay, false);   //视频播放完   video.removeEventListener('ended', this.videoEnded, false);    this.AndroidFile(file);  },

七、上一步提到的this.androidFile方法,是通过这个视频文件,在页面播放一遍,在这个播放过程处理视频,完成整个转换过程,获取到最终的文件:

//安卓拍摄视频  androidFile(file){   //视频字节大小   this.videoSize = file.size;   const that = this;   const video = document.getElementById('myvideo');   const canvas = document.getElementById('canvas');   var context = canvas.getContext('2d');   this.gifSetTime = true;   this.gif.abort()   this.gif.frames = [];   //file转base64   var reader = new FileReader();   reader.readAsDataURL(file);   reader.onload = function () {    that.videoSrc = this.result;    video.play();   }   //视频开始播放   video.addEventListener('play', this.videoPlay, false);   //视频播放完   video.addEventListener('ended', this.videoEnded, false);    //获取到所有的图片并渲染完后执行   this.gif.on('finished', function(blob) {    if(that.fileAndroid.size == blob.size) return;    console.log("gif的blob文件",blob);    //file    that.fileAndroid = that.convertBase64UrlToFile(blob);    //上传视频文件    that.uploadVideo(that.fileAndroid);   });  },

八、步骤七所说的this.videoPlay方法。视频在页面播放过程中,每200毫秒通过canvas截取一张图片,把这些图片一张张给gif.js堆叠:

//视频开始播放  videoPlay(){   const that = this;   const video = document.getElementById('myvideo');   const canvas = document.getElementById('canvas');   var context = canvas.getContext('2d');   console.log("视频时长",video.duration);   this.videoLength = video.duration;    //画布上画视频,需要动态地获取它,一帧一帧地画出来    var times = setInterval(function(){      context.drawImage(video, 0, 0, that.winWidth, that.winHeight);      that.gif.addFrame(context, {       copy: true      });      if(that.gifSetTime == false){       clearInterval(times);      }    }, 200);  },

九、步骤七所说的this.videoEnded方法。视频播放完,通过gif.js将图片堆叠的动态图渲染出来:

//视频播放完  videoEnded(){   this.gifSetTime = false;   console.log("视频播放完毕!")   this.gif.render();  },

十、步骤七所说的that.convertBase64UrlToFile方法。将gif.js生成的Blob文件转换成File格式:

//blob to file  convertBase64UrlToFile(blob) {   var d = new Date().getTime();   var type = 'image/gif'   return new File([blob],"fileGif-" + d + '.gif', {type:type});  },

最后通过步骤七所说的that.uploadVideo方法,上传图片给服务器

//上传视频  uploadVideo(file){   console.log("上传的视频文件", file)  },

在这提供我的全部代码,Android的视频文件比较大所以做压缩,而iOS本身存在视频压缩,所以我这里做了区分

<template> <div>   <input ref="changeInput" type="file" accept="video/*" capture="user" @change="changeVideo" />   <div>    <div>视频大小:{{videoSize}}</div>    <div>视频时长:{{videoLength}}</div>    <div>     <video id="myvideo" :src="videoSrc" :width="winWidth" :height="winHeight" ref="videoId" autoplay="true" controls muted></video>     <canvas id="canvas" :width="winWidth" :height="winHeight"></canvas>    </div>   </div> </div></template><script>import { setInterval, clearInterval } from "timers";import GIF from "../../static/js/gif.js"export default { data(){  return {   videoSize: '',   videoSrc: '',   videoLength: '',   isAndroid: false,   fileAndroid: {},   winWidth: window.innerWidth,   winHeight: window.innerHeight,   gifSetTime: false,   gif: '',  } }, created() {  //判断终端  var u = navigator.userAgent;  var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端  var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端  if(isAndroid){   console.log('isAndroid')   this.isAndroid = true;  }else if(isiOS){   console.log('isiOS')   this.isAndroid = false;  } }, mounted(){  //初始gif  this.gif = new GIF({   workers: 1,   quality: 1000,   width: this.winWidth,   height:this.winHeight,   workerScript: '../../static/js/gif.worker.js',  }); }, methods:{  //input文件走向  changeVideo(e){   var file = e.target.files[0];   const video = document.getElementById('myvideo');      if(file !== undefined){    //判断走向    if(this.isAndroid){     //视频开始播放     video.removeEventListener('play', this.videoPlay, false);     //视频播放完     video.removeEventListener('ended', this.videoEnded, false);      this.androidFile(file);    }else{     this.iphoneFile(file);    }   }  },  //IOS拍摄视频  iphoneFile(file){   const that = this;   //视频字节大小   this.videoSize = file.size;      var url = null ;    //file转换成blob   if (window.createObjectURL!=undefined) { // basic    url = window.createObjectURL(file) ;   } else if (window.URL!=undefined) { // mozilla(firefox)    url = window.URL.createObjectURL(file) ;   } else if (window.WEBkitURL!=undefined) { // webkit or chrome    url = window.webkitURL.createObjectURL(file) ;   }   this.videoSrc = url;   if(file.size < 2100000 && file.size > 500000){    this.uploadVideo(file);   }else if(file.size >= 2100000){    this.$vux.toast.text('视频太大,请限制在10秒内');   }else{    this.$vux.toast.text('视频录制不能少于5秒');   }  },  //安卓拍摄视频  androidFile(file){   //视频字节大小   this.videoSize = file.size;   const that = this;   const video = document.getElementById('myvideo');   const canvas = document.getElementById('canvas');   var context = canvas.getContext('2d');   this.gifSetTime = true;   this.gif.abort()   this.gif.frames = [];   //file转base64   var reader = new FileReader();   reader.readAsDataURL(file);   reader.onload = function () {    that.videoSrc = this.result;    video.play();   }   //视频开始播放   video.addEventListener('play', this.videoPlay, false);   //视频播放完   video.addEventListener('ended', this.videoEnded, false);       this.gif.on('finished', function(blob) {    if(that.fileAndroid.size == blob.size) return;    console.log("gif的blob文件",blob);    that.fileAndroid = that.convertBase64UrlToFile(blob);    that.uploadVideo(that.fileAndroid);   });  },  //视频开始播放  videoPlay(){   const that = this;   const video = document.getElementById('myvideo');   const canvas = document.getElementById('canvas');   var context = canvas.getContext('2d');   console.log("视频时长",video.duration);   this.videoLength = video.duration;    //画布上画视频,需要动态地获取它,一帧一帧地画出来    var times = setInterval(function(){      context.drawImage(video, 0, 0, that.winWidth, that.winHeight);      that.gif.addFrame(context, {       copy: true      });      if(that.gifSetTime == false){       clearInterval(times);      }    }, 200);  },  //视频播放完  videoEnded(){   this.gifSetTime = false;   console.log("视频播放完毕!")   this.gif.render();  },  //blob to file  convertBase64UrlToFile(blob) {   var d = new Date().getTime();   var type = 'image/gif'   return new File([blob],"fileGif-" + d + '.gif', {type:type});  },  //上传视频  uploadVideo(file){   console.log("上传的视频文件", file)  }, }};</script><style scoped></style>

以上就是关于“vue如何实现录制视频并压缩视频文件”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: vue如何实现录制视频并压缩视频文件

本文链接: https://www.lsjlt.com/news/346061.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue如何实现录制视频并压缩视频文件
    这篇“vue如何实现录制视频并压缩视频文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue如何实现录制视频并压缩视频文件...
    99+
    2023-07-04
  • Springboot如何实现视频上传及压缩功能
    这篇“Springboot如何实现视频上传及压缩功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Springboot如何实...
    99+
    2023-07-05
  • Springboot实现视频上传及压缩功能
    目录一、定义视频上传请求接口二、视频暂存至本地文件夹三、开始压缩视频四、上传至阿里云并获取压缩后的视频路径五、核心调用六、spring boot的yml配置文件  在SpringBo...
    99+
    2023-03-03
    Springboot视频上传压缩 Springboot视频上传 Springboot上传压缩
  • JavaScript如何实现控制视频
    这篇文章将为大家详细讲解有关JavaScript如何实现控制视频,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体代码如下所示:<html lang=&q...
    99+
    2024-04-02
  • 如何在Ubuntu中录制视频
    在Ubuntu中录制视频的方法:在Ubuntu 18.04中有一个内置的录屏工具,我们可以通过快捷键的方式将其启动或关闭,启动方式:快捷键【Ctrl + Alt + Shift + R】,开启后会看到 Ubuntu 桌面的右上方多了一个红色...
    99+
    2024-04-02
  • C++ Opencv实现录制九宫格视频
    目录库的导入开启摄像头定义所需变量捕获图片并生成视频实现图片的抓取、转换与保存补充在项目开始之前,我的环境已配置完成,具体环境如何配置可参考网络教程。下面我们开始项目的实现 库的导入...
    99+
    2024-04-02
  • 十分钟实现 Android Camera2 视频录制
    1. 前言 因为工作中要使用Android Camera2 API,但因为Camera2比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,并在CSDN上记录了下,希望能帮助到更...
    99+
    2023-09-08
    android 音视频 相机 Camera 视频录制
  • 使用AVFoundation实现视频录制详解
    目录一、前言二、AVCaptureSession + AVCaptureMovieFileOutput一、前言 AVCaptureSession 是 AVFoundation 的核心...
    99+
    2024-04-02
  • Qt音视频开发之视频文件保存功能的实现
    目录一、前言二、效果图三、体验地址四、相关代码五、功能特点5.1 基础功能5.2 特色功能5.3 视频控件5.4 内核ffmpeg一、前言 和音频存储类似,视频的存储也对应三种格式,...
    99+
    2022-12-08
    Qt视频文件保存 Qt视频保存 Qt 文件保存
  • WinForm中如何播放音频或视频文件
    在WinForm中播放音频或视频文件可以使用Windows Media Player控件,以下是一个简单的示例代码: using S...
    99+
    2024-04-08
    winform
  • Android视频录制功能的实现步骤
    官方使用指南请查看Google音频和视频指南 视频录制基本步骤 1.申明权限 <uses-permission android:name="android.permiss...
    99+
    2024-04-02
  • vue中如何实现视频播放暂停
    这篇文章主要为大家展示了“vue中如何实现视频播放暂停”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue中如何实现视频播放暂停”这篇文章吧。vue中的视频播放...
    99+
    2024-04-02
  • Android如何实现下载m3u8视频文件功能
    本篇内容主要讲解“Android如何实现下载m3u8视频文件功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android如何实现下载m3u8视频文件功能”吧!简介Aria下载器采用开源框架A...
    99+
    2023-07-05
  • vue视频如何添加滚动文字
    在Vue中,可以通过使用CSS样式和JavaScript代码来实现滚动文字效果。首先,可以在Vue组件的模板中添加一个包含滚动文字的...
    99+
    2023-08-08
    vue
  • Android如何实现播放视频
    这篇文章将为大家详细讲解有关Android如何实现播放视频,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、通过intent的方式,调用系统自带的播放器  Uri uri&n...
    99+
    2023-05-31
    android
  • html5如何实现视频播放
    这篇文章主要为大家展示了“html5如何实现视频播放”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“html5如何实现视频播放”这篇文章吧。一、html5技术优势...
    99+
    2024-04-02
  • Django如何实现视频播放
    这篇文章主要讲解了“Django如何实现视频播放”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Django如何实现视频播放”吧!view视图import reimport ...
    99+
    2023-06-30
  • Python如何实现视频裁剪
    小编给大家分享一下Python如何实现视频裁剪,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!环境依赖本文主要使用到的不是ffmpeg,而是ffprobe也在上面这...
    99+
    2023-06-28
  • Python如何实现视频分帧
    这篇文章主要介绍“Python如何实现视频分帧”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python如何实现视频分帧”文章能帮助大家解决问题。下载依赖pip install ...
    99+
    2023-07-05
  • JavaScript如何实现上传文件,图片,视频功能
    这篇文章给大家分享的是有关JavaScript如何实现上传文件,图片,视频功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体代码如下所示:// 上传目标触发点&nb...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作