SpringBoot 实现大文件视频转码(转码基于FFMPEG实现)

这篇文章详细介绍了Java面试题的解析、核心知识点总结、最新教学视频和实战项目源码,涵盖了Java基础、高级面试、SSM框架、分布式系统等内容,适合提升技术能力和准备求职者。
摘要由CSDN通过智能技术生成

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

inputStream.start();

// 等待ffmpeg命令执行完

int exit = 0;

try {

exit = ffmpeg.waitFor();

} catch (InterruptedException e) {

e.printStackTrace();

}

LOG.info(“—执行结果:—” + (exit == 0 ? “【成功】” : “【失败】”));

if (exit == 0) {

originFile = new File(filePath);

if(originFile.exists()){

originFile.delete();

}

}

return exit;

}

/**

  • 获取文件后缀

  • @param fileName

  • @return java.lang.String

  • @author zxzhang

  • @date 2019/12/10

*/

public String getExt(String fileName) {

return fileName.substring(fileName.lastIndexOf(“.”) + 1);

}

/**

  • 获取文件所在目录

  • @param filePath

  • @return java.lang.String

  • @author zxzhang

  • @date 2019/12/10

*/

public String getFileDir(String filePath) {

return filePath.substring(0, filePath.lastIndexOf(BootstrapConst.PATH_SEPARATOR));

}

/**

  • 获取文件名

  • @param filePath

  • @return java.lang.String

  • @author zxzhang

  • @date 2019/12/10

*/

public String getFileName(String filePath) {

return filePath.substring(filePath.lastIndexOf(BootstrapConst.PATH_SEPARATOR) + 1, filePath.lastIndexOf(“.”));

}

}

class PrintStream extends Thread {

java.io.InputStream __is = null;

public PrintStream(java.io.InputStream is) {

__is = is;

}

@Override

public void run() {

try {

while (this != null) {

int _ch = __is.read();

if (_ch != -1) {

System.out.print((char) _ch);

} else {

break;

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

2、BootstrapConst类

package com.openailab.oascloud.file.common.consts;

/**

  • @Classname: com.openailab.oascloud.security.common.consts.BootstrapConst

  • @Description: 简单常量定义

  • @Author: zxzhang

  • @Date: 2019/10/8

*/

public class BootstrapConst {

/**

  • 文件缓冲区大小

*/

public static final Integer INPUT_BUFFER_SIZE = 8192;

/**

  • 文件分隔符

*/

public static final char PATH_SEPARATOR = ‘/’;

/**

  • 文件点

*/

public static final char SPOT = ‘.’;

/**

  • 常量一

*/

public static final Integer ONE = 1;

/**

  • 成功

*/

public static final Integer SUCCESS = 1;

/**

  • 失败

*/

public static final Integer FAIL = 0;

/**

  • true

*/

public static final Boolean TRUE = true;

/**

  • false

*/

public static final Boolean FALSE = false;

}

三、FFMPeg DockerFile实现


首先我们构建具有JDK1.8和FFMPeg环境的镜像

FROM jrottenberg/ffmpeg:centos

MAINTAINER oas.cloud

ADD jdk-8u231-linux-x64.tar.gz /usr/local/

ENV JAVA_HOME /usr/local/jdk1.8.0_231

ENV CLASSPATH J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar

ENV PATH P A T H : PATH: PATH:JAVA_HOME/bin

WORKDIR /usr/local/oas/

然后将上述文件构建出的镜像的tag打为我们自己的镜像仓库地址,改为 10.12.1.202:8088/oascloud/ffmpeg:v1.0,我们的应用程序就可以以上述镜像文件(10.12.1.202:8088/oascloud/ffmpeg:v1.0)为基础构建出新的应用程序镜像,应用程序的DockerFile如下:

FROM 10.12.1.202:8088/oascloud/ffmpeg:v1.0

MAINTAINER oas.cloud

ENV LC_ALL=zh_CN.utf8

ENV LANG=zh_CN.utf8

ENV LANGUAGE=zh_CN.utf8

RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8

ARG JAR_FILE

COPY ${JAR_FILE} /usr/local/oas/

WORKDIR /usr/local/oas/

代码结构如下:

附上Kubernetes编排文件,deploy.yaml内容如下:

apiVersion: apps/v1

kind: Deployment

metadata:

name: openailab-data-file-management

namespace: oas-tengine2dev

labels:

name: openailab-data-file-management

spec:

replicas: 1

selector:

matchLabels:

name: openailab-data-file-management

template:

metadata:

labels:

name: openailab-data-file-management

spec:

affinity:

nodeAffinity:

requiredDuringSchedulingIgnoredDuringExecution:

nodeSelectorTerms:

  • matchExpressions:

  • key: env

operator: In

values:

  • tengine2dev

containers:

  • name: openailab-data-file-management

image: 10.12.1.202:8088/tengine2/openailab-data-file-management:latest

env:

  • name: APOLLO_APP_ID

value: ‘tengine2-data-file-management’

  • name: APOLLO_EUREKA_URI

value: ‘http://10.98.100.95:8080/’

  • name: APOLLO_NAMESPACE

value: ‘application’

  • name: SPRING_EUREKA_URI

value: ‘http://10.111.176.222:8080/eureka/’

volumeMounts:

  • name: openailab-data-file-management

mountPath: /usr/local/logs

  • name: file

mountPath: /usr/local/oas/file

command: [‘sh’,‘-c’,‘java -server -Xms2048m -Xmx3072m -Djava.io.tmpdir=/var/tmp -Duser.timezone=Asia/Shanghai -jar openailab-data-file-management-*.jar --server.port=8080 --spring.profiles.active=remote’]

ports:

  • containerPort: 8080

resources:

requests:

memory: 256Mi

cpu: 150m

limits:

memory: 2048Mi

cpu: 300m

initContainers:

  • name: init-apollo

image: busybox

command: [‘sh’, ‘-c’]

args:

  • echo Prepare to apollo initialize…;

until nc -w 1 -z 10.98.100.95 8080;

do echo Waiting for eureka initialization to complete…; sleep 10; done;

echo Eureka is ready.;

until nc -w 1 -z 10.98.100.95 8090;

do echo Waiting for admin initialization to complete…; sleep 10; done;

echo Admin is ready.;

echo Apollo Initialization successful!;

volumes:

  • name: openailab-data-file-management

hostPath:

path: /usr/local/logs

  • name: file

hostPath:

path: /usr/local/oas/file

svc.yaml内容如下:

apiVersion: v1

kind: Service

metadata:

name: openailab-data-file-management

namespace: oas-tengine2dev

labels:

最后

看完上述知识点如果你深感Java基础不够扎实,或者刷题刷的不够、知识不全面

小编专门为你量身定制了一套<Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法>

image

针对知识面不够,也莫慌!还有一整套的<Java核心进阶手册>,可以瞬间查漏补缺

image

全都是一丢一丢的收集整理纯手打出来的

更有纯手绘的各大知识体系大纲,可供梳理:Java筑基、MySQL、Redis、并发编程、Spring、分布式高性能架构知识、微服务架构知识、开源框架知识点等等的xmind手绘图~

image

image
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
量身定制了一套<Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法>

[外链图片转存中…(img-RFGPeASK-1714664047403)]

针对知识面不够,也莫慌!还有一整套的<Java核心进阶手册>,可以瞬间查漏补缺

[外链图片转存中…(img-chr7OR3G-1714664047404)]

全都是一丢一丢的收集整理纯手打出来的

更有纯手绘的各大知识体系大纲,可供梳理:Java筑基、MySQL、Redis、并发编程、Spring、分布式高性能架构知识、微服务架构知识、开源框架知识点等等的xmind手绘图~

[外链图片转存中…(img-Ur3L7hKF-1714664047404)]

[外链图片转存中…(img-inNoZEzz-1714664047404)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
视频分片上传是一种常见的大文件上传方式,可以有效地避免上传过程中网络不稳定、服务器压力过大等问题。下面是使用Vue、Spring BootFFmpeg实现视频分片上传的大致流程: 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 BootFFmpeg实现视频分片上传可以有效地解决大文件上传过程中遇到的问题,提升用户体验,并且保证视频文件的完整性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值