Springboot實(shí)現(xiàn)視頻上傳及壓縮功能
在SpringBoot項(xiàng)目中實(shí)現(xiàn)視頻的上傳和下載,地址都是存放至阿里云的,但是由于視頻數(shù)量越來越多占用的內(nèi)存也越來越大,導(dǎo)致服務(wù)器內(nèi)存不足,公司為了減少服務(wù)器開支,要求我們研發(fā)人員把最好把內(nèi)存利用到極致,盡量減少不必要的浪費(fèi),所以就需要把視頻進(jìn)行壓縮。
一、定義視頻上傳請(qǐng)求接口
public AjaxResult videoUploadFile(MultipartFile file){
try {
if(null == file || file.isEmpty()){
return AjaxResult.error("文件為空");
}
String ossFilePrefix = StringUtils.genUUID();
String fileName = ossFilePrefix +"-"+ file.getOriginalFilename();
String fileurl = AliOssUtils.videoUploadFile(file,fileName);
AjaxResult ajax = AjaxResult.success();
ajax.put("fileName", "after_"+fileName);
ajax.put("url", fileurl);
return ajax;
} catch (Exception e) {
return AjaxResult.error(e.getMessage());
}
}二、視頻暫存至本地文件夾
public static final String uploadVideo(String baseDir, MultipartFile file, String fileName) throws FileSizeLimitExceededException, IOException {
File desc = getAbsoluteFile(baseDir, fileName);
file.transferTo(desc);
String pathFileName = getPathFileName(baseDir, fileName);
return pathFileName;
}三、開始?jí)嚎s視頻
public static boolean toCompressFile(String convertFile,String targetFile){
try{
/**將視頻壓縮為 每秒15幀 平均碼率600k 畫面的寬與高 為1280*720*/
String cutCmd="ffmpeg -i " + convertFile + " -r 15 -b:v 600k -s 1280x720 "+ targetFile;
log.info("cutCmd: " + cutCmd);
runCmd(cutCmd);
log.info("文件:"+convertFile+" 視屏壓縮完成");
}catch(Exception e){
e.printStackTrace();
log.info("壓縮文件出現(xiàn)異常:"+e.getMessage());
return false;
}
return true;
}四、上傳至阿里云并獲取壓縮后的視頻路徑
private static String getFileUrl(String path) throws IOException {
File file = new File(path);
FileInputStream fileInputStream = new FileInputStream(file);
MultipartFile multipartFile1 = new MockMultipartFile(file.getName(), file.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);
uploadFile(multipartFile1, file.getName());
String url = getUrl(file.getName());
return url;
}五、核心調(diào)用
public static String videoUploadFile(MultipartFile multipartFile, String fileName) throws IOException {
//存放路徑
String filePath = FileUploadUtils.uploadVideo(getDefaultBaseDir(), multipartFile, fileName);
String convertFile = filePath.replace("/profile", getDefaultBaseDir()).replaceAll("http://", "/");
//字符串第一個(gè)字符最后出現(xiàn)的下標(biāo)
int lastIndex = convertFile.lastIndexOf("/");
StringBuilder sb = new StringBuilder(convertFile);
String convertFile1 = sb.insert(lastIndex + 1, "after_").toString();
boolean flag = toCompressFile(convertFile, convertFile1);
if (!flag) {
throw new CustomException("文件壓縮出現(xiàn)異常");
}
//讀取壓縮后的文件并上傳至阿里云
String url = getFileUrl(convertFile1);
//刪除本地暫存文件
FileUtils.deleteFile(convertFile);
log.info("文件:" + convertFile + " 刪除成功");
FileUtils.deleteFile(convertFile1);
log.info("文件:" + convertFile1 + " 刪除成功");
return url;
}六、spring boot的yml配置文件
修改application.yml文件:
spring:
servlet:
mvc:
async:
request-timeout: 2000000
修改application-prd.yml文件:
spring:
servlet:
multipart:
max-file-size: 1024MB
max-request-size: 1024MB
視頻上傳至阿里云這一塊代碼沒有貼出來,每個(gè)項(xiàng)目都大同小異,可根據(jù)自己項(xiàng)目實(shí)際情況做調(diào)整,這篇最核心的是視頻壓縮的方法及思路。
到此這篇關(guān)于Springboot實(shí)現(xiàn)視頻上傳及壓縮功能的文章就介紹到這了,更多相關(guān)Springboot視頻上傳壓縮內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringMVC中的DispatcherServlet詳細(xì)解析
這篇文章主要介紹了SpringMVC中的DispatcherServlet詳細(xì)解析,DispatcherServlet也是一個(gè)Servlet,它也能通過Servlet的API來響應(yīng)請(qǐng)求,從而成為一個(gè)前端控制器,Web容器會(huì)調(diào)用Servlet的doGet()以及doPost()等方法,需要的朋友可以參考下2023-12-12
SpringBoot如何使用validator框架優(yōu)雅地校驗(yàn)參數(shù)
文章介紹了如何使用SpringValidation進(jìn)行參數(shù)校驗(yàn),包括引入依賴、@requestBody和@requestParam參數(shù)校驗(yàn)、統(tǒng)一異常處理、分組校驗(yàn)、嵌套校驗(yàn)、自定義校驗(yàn)、業(yè)務(wù)規(guī)則校驗(yàn)以及@Valid和@Validated的區(qū)別,同時(shí),列舉了常用的BeanValidation和HibernateValidator注解2025-02-02
關(guān)于maven依賴 ${xxx.version}報(bào)錯(cuò)問題
這篇文章主要介紹了關(guān)于maven依賴 ${xxx.version}報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Springboot 如何指定獲取出 yml文件里面的配置值
這篇文章主要介紹了Springboot 如何指定獲取出 yml文件里面的配置值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java創(chuàng)建隨機(jī)數(shù)的四種方式總結(jié)
這篇文章主要介紹了java的四種隨機(jī)數(shù)生成方式的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下2022-07-07
springboot 設(shè)置局域網(wǎng)訪問的實(shí)現(xiàn)步驟
Spring Boot是一個(gè)開源Java-based框架,用于創(chuàng)建獨(dú)立的、生產(chǎn)級(jí)別的Spring應(yīng)用,它旨在簡化Spring應(yīng)用的初始搭建及開發(fā)過程,通過提供各種自動(dòng)配置的starter包,Spring Boot使得項(xiàng)目配置變得簡單快速,感興趣的朋友一起看看吧2024-02-02

