VUE2+ffmpeg处理非h264编码格式视频

1、安装npm install @ffmpeg/ffmpeg@0.10.0 @ffmpeg/core@0.9.8 video.js@8.12.0

2、在vue.config.js中devServer配置

 headers: {
            // 如果需要用到ffmpeg确保ShareArrayBuffer能够正常使用,可能会有安全隐患
            'Cross-Origin-Embedder-Policy': 'require-corp',
            'Cross-Origin-Opener-Policy': 'same-origin',
        }

3、拷贝下面三个文件到public静态文件夹下

4、创建convert文件

import FFmpeg from "@ffmpeg/ffmpeg";
const { createFFmpeg, fetchFile } = FFmpeg;
const ffmpeg = createFFmpeg({
    corePath: "/ffmpeg-core.js",
    log: true
})

export const transCode = async (url = "") => {
    if (!url) {
        return;
    }
    if (!ffmpeg.isLoaded()) {
        await ffmpeg.load();
    }

    ffmpeg.FS('writeFile', 'name', await fetchFile(url));
    await ffmpeg.run('-i', 'name', 'output.mp4');
    const data = ffmpeg.FS('readFile', 'output.mp4');
    return URL.createObjectURL(new Blob([data.buffer], { type: 'video/mp4' }))
}

5、创建播放组件

<script>
import videojs from "video.js";
import "video.js/dist/video-js.css";
import { transCode } from "./convert";
export default {
  name: "VideoPlayer",
  props: {
    height: {
      default: "100%",
    },
    width: {
      default: "100%",
    },
  },
  data() {
    return {
      player: null,
      options: {
        autoplay: "muted",
        controls: true,
        loop: true,
        muted: true,
        poster: "", //播放前加载图片
        preload: "auto", //是否预加载
        src: "", //视频地址
      },
    };
  },
  mounted() {
    this.init();
  },
  methods: {
    async init() {
      this.player = videojs(this.$refs.player, this.options);
      const buffer = await transCode(/**地址 */);
      this.player.src({
        type: "video/mp4",
        src: buffer,
      });
      this.player.ready(() => {});
    },
    destory() {
      this.player && this.player.dispose();
    },
  },
};
</script>
<template>
  <div class="video-player" :style="{ width, height }">
    <video class="player video-js vjs-default-skin" ref="player"></video>
  </div>
</template>
<style scoped lang="scss">
.video-player {
  position: relative;
  .player {
    height: 100%;
    width: 100%;
  }
}
</style>

注:

1、只能处理小视频,容易造成内存溢出;

2、等待时间较长,不是最优解;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
视频分片上传是一种常见的大文件上传方式,可以有效地避免上传过程中网络不稳定、服务器压力过大等问题。下面是使用Vue、Spring Boot和FFmpeg实现视频分片上传的大致流程: 1. 前端使用Vue编写上传组件,将视频文件进行分片并上传到服务器。 2. 后端使用Spring Boot接收前端上传的视频分片,并将分片存储到服务器上。 3. 在所有分片上传完成后,后端使用FFmpeg将分片合并成一个完整的视频文件。 下面是具体实现步骤: 前端: 1. 安装vue-upload-component组件,在Vue组件中引入该组件。 2. 在Vue组件中编写上传方法,将视频文件进行分片并上传到服务器。分片的大小可以根据实际情况进行设置,一般为1MB ~ 2MB。 3. 在上传过程中,可以实现进度条、暂停上传、继续上传等功能,以提升用户体验。 后端: 1. 使用Spring Boot编写接收上传分片的接口,将分片存储到服务器上。可以使用Spring Boot提供的MultipartFile类来接收前端上传的文件。 2. 在接收到所有分片后,使用FFmpeg将分片合并成一个完整的视频文件。可以使用FFmpeg的命令行工具,也可以使用FFmpeg的Java API。 3. 合并完成后,可以将视频文件存储到服务器的指定路径下,或者将视频文件存储到云存储中。 综上所述,使用Vue、Spring Boot和FFmpeg实现视频分片上传可以有效地解决大文件上传过程中遇到的问题,提升用户体验,并且保证视频文件的完整性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值