学成在线-mp4格式使用视频时长如何判断转换成功?

27 篇文章 0 订阅
26 篇文章 2 订阅


说明:本人技术有限写的不好的地方敬请原谅,如有什么问题或者更好的建议大家可以留言或者私信

前言

在学成在线第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文件查看返回的时长与比对结果即可
在这里插入图片描述

说明:本人技术有限写的不好的地方敬请原谅,如有什么问题或者更好的建议大家可以留言或者私信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值