java获取视频时长及判断视频横竖拍摄

        
            ws.schild
            jave-all-deps
            2.5.1
        

 

    public AjaxResult uploadFileVideo(MultipartFile file) throws Exception
    {
        try
        {
            // 上传文件路径
            String filePath = Global.getUploadPath();
            // 上传并返回新文件名称
            String fileName = FileUploadUtils.upload(filePath, file , MimeTypeUtils.MEDIA_EXTENSION);
            String url = serverConfig.getUrl() + fileName;
            String actualFileName = fileName.substring(fileName.indexOf("/",10));
            String actualUrl = filePath + actualFileName;
            File temp = new File(actualUrl);
            AjaxResult ajax = AjaxResult.success();
            try {
                double duration = getVedioTime(temp);
                Long limit = 10L;
                if(duration <=0 ){
                    temp.delete();
                    return AjaxResult.error("视频损坏");
                }else if(duration > limit){
                    temp.delete();
                    return AjaxResult.error("视频时长不能超过"+limit+"秒");
                }
                ajax.put("duration", duration);
            } catch (Exception e){
                e.printStackTrace();
                temp.delete();
                return AjaxResult.error("视频解析失败");
            }
            ajax.put("fileName", fileName);
            ajax.put("url", url);
            ajax.put("judge", judgeVerticalAndHorizontal(file));
            return ajax;
        }
        catch (Exception e)
        {
            return AjaxResult.error(e.getMessage());
        }
    }

 

 

    /**
     * @author Uncle
     * @Description TODO 判断视频纵向还是横向
     * @Date  2020/07/27 11:50
     * @param
     * @return 1 横  0 竖
     */
    public int judgeVerticalAndHorizontal(MultipartFile file){
        float v = 0F;
        try{
            File tempFile = FileUploadUtils.MultipartFileToFile(file);
            MultimediaObject instance = new MultimediaObject(tempFile);
            ws.schild.jave.MultimediaInfo m = instance.getInfo();
            //> 1 说明是横的。< 1说明是竖着的
            v = ((float) m.getVideo().getSize().getWidth()) / ((float) m.getVideo().getSize().getHeight());
        }catch (Exception e){
            e.printStackTrace();
        }
        return v>1?1:0;
    }

 

 

    /** 获取视频时长:秒
     *
     * @param file
     * @return
     */
    public static Long getVedioTime(File file) {
        try {
            MultimediaObject instance = new MultimediaObject(file);
            ws.schild.jave.MultimediaInfo result = instance.getInfo();
            long ls = result.getDuration() / 1000;
            return ls;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0L;
    }
/**
     * 功能描述 :MultipartFile转file对象
     * @author Mr.LiuYong
     * @date  2019/5/10 18:30
     * @param
     * @return
     */
    public static File MultipartFileToFile(MultipartFile multiFile) {
        // 获取文件名
        String fileName = multiFile.getOriginalFilename();
        // 获取文件后缀
        String prefix = fileName.substring(fileName.lastIndexOf("."));
        // 用当前时间作为文件名,防止生成的临时文件重复
        try {
            File file = File.createTempFile(System.currentTimeMillis() + "", prefix);

            multiFile.transferTo(file);

            return file;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

 

你可能感兴趣的:(JAVA,视频,横竖屏,时长)