文章目录
说明:本人技术有限写的不好的地方敬请原谅,如有什么问题或者更好的建议大家可以留言或者私信
前言
在学成在线第14天讲解转换为mp4之后,课件上留了一个判断是否成功的说明,就是把转换前视频的总时长与转换后的对比
说比较时分秒,这里我比较的是总秒数(误差保证在1秒内表示转换成功)
一、准备工作
这里我们用到了一个jar
1.jar包地址
链接:https://pan.baidu.com/s/1LVVNJgUTIZ2OYyHTvbWvwQ
提取码:fexg
2.解压使用maven命令安装到本地仓库
参考链接:https://www.cnblogs.com/yadongliang/p/9829760.html
mvn install:install-file -Dfile=E:\jave-1.0.2.jar -DgroupId=it.sauronsoftware -DartifactId=jave -Dversion=1.0.2 -Dpackaging=jar
参数说明:
安装指定文件到本地仓库命令:mvn install:install-file
-DgroupId= : 设置上传到仓库的包名
-DartifactId= : 设置该包所属的模块名
-Dversion=1.0.0 : 设置该包的版本号
-Dpackaging=jar : 设置该包的类型(很显然jar包)
-Dfile=<myfile.jar> : 设置该jar包文件所在的路径与文件名
3.pom.xml文件引入依赖
<!--用于获取视频时长的jar包-->
<dependency>
<groupId>it.sauronsoftware</groupId>
<artifactId>jave</artifactId>
<version>1.0.2</version>
</dependency>
二、修改代码
1.获取视频时间的方法
//获取视频的时长,参数是视频所在路径
private long getVideoTime(String videoPath){
try {
//转换前的视频的位置
File source = new File(videoPath);
Encoder encoder = new Encoder();
MultimediaInfo multimediaInfo = encoder.getInfo(source);
//获取视频的时长,精确到秒(m.getDuration()是精确到毫秒)
long ls = multimediaInfo.getDuration()/1000;
return ls;
} catch (Exception e) {
log.error("获取视频时长失败,视频路径videoPath:"+videoPath);
e.printStackTrace();
return 0;
}
}
2.比对时间方法
//比对时间的长度返回true或false
private boolean timeResult(long videoTime,long mp4videoTime){
//相等
if (videoTime==mp4videoTime){
return true;
}
//比大小,误差在一秒,一秒及以内也表示视频转换成功,反之不成功
if (videoTime> mp4videoTime) {
if (videoTime-mp4videoTime <= 1) {
return true;
} else {
return false;
}
} else {
if (mp4videoTime-videoTime <= 1) {
return true;
} else {
return false;
}
}
}
3.更改receiveMediaProcessTask方法的代码
因为需求是判断mp4转换是否成功,我们只需要调用方法获取时间,然后比对时间,对不成功的判断增加一个时间
//视频格式不是mp4的才执行转换为mp4
if (!fileType.equals("mp4")){
//需要转换的视频文件的路径
String video_path=this.serverPath+mediaFile.getFilePath()+mediaFile.getFileName();
//调用私有方法获取视频的时长为秒
long videoTime = this.getVideoTime(video_path);
String mp4_name = mediaFile.getFileId()+".mp4";
String mp4folder_path = this.serverPath+mediaFile.getFilePath();//与avi文件还在同一目录
//创建工具类对象调用工具类
Mp4VideoUtil mp4VideoUtil=new Mp4VideoUtil(this.ffmpeg_path,video_path,mp4_name,mp4folder_path);
//调用方法进行处理
String result = mp4VideoUtil.generateMp4();
//处理之后生成mp4文件调用方法获取时长
long mp4videoTime = this.getVideoTime(mp4folder_path + mp4_name);
//调用方法比对时间的大小
boolean timeResult = this.timeResult(videoTime, mp4videoTime);
//判断是否成功
if (result==null|| !result.equals("success")||!timeResult){
//记录处理失败的状态
mediaFile.setProcessStatus("303003");
//定义失败的原因
MediaFileProcess_m3u8 mediaFileProcess_m3u8=new MediaFileProcess_m3u8();
mediaFileProcess_m3u8.setErrormsg(result);
//更新到media_file集合中
mediaFile.setMediaFileProcess_m3u8(mediaFileProcess_m3u8);
this.mediaFileRepository.save(mediaFile);//更新下状态
log.error(mediaFile.getFileOriginalName()+"原视频文件转mp4视频文件失败,mediaId:"+mediaId);
return;
}
}
三.测试
在调用方法获取时间与比较时长的代码打断点上传一个非mp4文件查看返回的时长与比对结果即可
说明:本人技术有限写的不好的地方敬请原谅,如有什么问题或者更好的建议大家可以留言或者私信