问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

java 怎么取得视频文件的总时长

发布网友 发布时间:2022-05-02 05:11

我来回答

2个回答

好二三四 时间:2022-05-19 16:20

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

很多朋友都想知道java怎么获取视频时长?下面就一起来了解一下吧~

可以通过视频的url地址或者是上传视频 文件有类型为(MultipartFile)的来获取视频的时长。

通过MultipartFile 的文件类型获取视频时长:

这个方式的获取比较好办;直接上码:类名=》VideoUtil.java

/**
     * 通过MultipartFile 的文件类型获取视频时长
     * @param file
     * @return
     */
    public Integer ReadVideoTimeMs(MultipartFile file) {
        Encoder encoder = new Encoder();
        long ms = 0;
        try {
            // 获取文件类型
            String fileName = file.getContentType();
            // 获取文件后缀
            String pref = fileName.indexOf("/") != -1 ? fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()) : null;
            String prefix = "." + pref;
            // 用uuid作为文件名,防止生成的临时文件重复
            final File excelFile = File.createTempFile(UUID.randomUUID().toString().replace("-", ""), prefix);
            // MultipartFile to File
            file.transferTo(excelFile);
            MultimediaInfo m = encoder.getInfo(excelFile);
            ms = m.getDuration();
            //程序结束时,删除临时文件
            VideoUtil.deleteFile(excelFile);
        } catch (Exception e) {
            e.printStackTrace();
        }
        int ss = 1000;
        int mi = ss * 60;
        int hh = mi * 60;
        int dd = hh * 24;
        long day = ms / dd;
        long hour = (ms - day * dd) / hh;
        long minute = (ms - day * dd - hour * hh) / mi;
        long second = (ms - day * dd - hour * hh - minute * mi) / ss;
        Integer timeMS = Math.toIntExact(hour * 3600 + minute * 60 + second);
        return timeMS;
    }
    /**
     * 通过url地址获取视频时长
     * @param fileName
     * @return
     */
    public Integer FileVideoTimeMs(String fileName){
        Encoder encoder = new Encoder();
        long ms = 0;
        try {
            File file = getFileByUrl(fileName);
            MultimediaInfo m = encoder.getInfo(file);
            ms = m.getDuration();
            VideoUtil.deleteFile(file);
        }catch (Exception e){
            e.printStackTrace();
        }
        int ss = 1000;
        int mi = ss * 60;
        int hh = mi * 60;
        int dd = hh * 24;
        long day = ms / dd;
        long hour = (ms - day * dd) / hh;
        long minute = (ms - day * dd - hour * hh) / mi;
        long second = (ms - day * dd - hour * hh - minute * mi) / ss;
        Integer timeMS = Math.toIntExact(hour * 3600 + minute * 60 + second);
        return timeMS;
    }

通过url地址获取视频时长

url地址来获取的时长需要做一定的转换,要先获取文件

主要的方法代码:类名 =》VideoUtil.java

/**
     * 通过url地址获取视频时长
     * @param fileName
     * @return
     */
    public Integer FileVideoTimeMs(String fileName){
        Encoder encoder = new Encoder();
        long ms = 0;
        try {
            File file = getFileByUrl(fileName);
            MultimediaInfo m = encoder.getInfo(file);
            ms = m.getDuration();
            VideoUtil.deleteFile(file);
        }catch (Exception e){
            e.printStackTrace();
        }
        int ss = 1000;
        int mi = ss * 60;
        int hh = mi * 60;
        int dd = hh * 24;
        long day = ms / dd;
        long hour = (ms - day * dd) / hh;
        long minute = (ms - day * dd - hour * hh) / mi;
        long second = (ms - day * dd - hour * hh - minute * mi) / ss;
        Integer timeMS = Math.toIntExact(hour * 3600 + minute * 60 + second);
        return timeMS;
    }

getFileByUrl()方法 :类名 =》VideoUtil.java

public static File getFileByUrl(String url) throws  IOException {
        File tmpFile = File.createTempFile("temp", ".tmp");//创建临时文件
        VideoUrl.toBDFile(url, tmpFile.getCanonicalPath());
        return tmpFile;
    }

toBDFile() 方法:类名 =》VideoUrl.java

public static void toBDFile(String urlStr, String bdUrl) throws IOException, UnknownHostException {
        URL url = new URL(urlStr);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        DataInputStream in = new DataInputStream(conn.getInputStream());
        byte[] data = toByteArray(in);
        in.close();
        FileOutputStream out = new FileOutputStream(bdUrl);
        out.write(data);
        out.close();
    }
toByteArray()方法:类名 =》VideoUrl.java
public static byte[] toByteArray(InputStream in) throws IOException {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024 * 4];
        int n = 0;
        while ((n = in.read(buffer)) != -1) {
            out.write(buffer, 0, n);
        }
        return out.toByteArray();
    }

不要忘记删除自己生成的临时文件:类名 =》VideoUtil.java

/**
     * 删除临时文件
     * @param files
     */
    private static void deleteFile(File... files) {
        for (File file : files) {
            if (file.exists()) {
                file.delete();
            }
        }
    }

总结

两个方法的获取视频的时长,最后读取的数据单位都是s(秒)。

以上就是小编今天的分享,希望能够帮到大家。


热心网友 时间:2022-05-19 13:28

解决办法:
调用DLL文件,只要找到一个可以比较好解析播放时长的DLL,然后JNI调用,CPP或者Delphi都好,只要能实现就oK了,DLL放在BIN目录
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
何为“存在”,“存在”的定义是什么? ...可以吗?真能增加性生活时间吗?另外这样有没什么危害? 过户费用属于什么科目 车过户费用挂什么科目 房屋过户费记什么科目 车辆过户费入什么科目 房屋过户费属于什么科目 车辆保险过户需要什么科目? 隆回六中录取分数线是多少? 桃花流水鳜鱼肥的上一句是什么诗 日喀则旅游攻略??? 橙光游戏里有很多感人的爱情故事,你最喜欢哪一款? 去日喀则旅游攻略 深圳宏电这家公司怎么样啊?有人了解吗~~~主要是做哪方面的? 厦门信达物联科技有限公司怎么样? 我看到厦门四信的ZigBee的点到点的通信距离理论上已经达到两千米,但实际是六百米,这可能吗? 工业级4G路由器与民用的路由器区别在哪里? 四信---请问厦门四信怎么样?是做什么的? 厦门四信DTU怎么样? 求大佬解答,ps怎么p动漫人物的红晕,带斜线的那种 微博上最近的有卡通人物的p图神器是什么 什么p图软件可以把照片p成卡通的 什么p图软件能把人p的很动漫,但又像真人 P图大神快来呀!把下面的图片都P成漫画风格(有一张例子) 有什么p图软件可以把相片p成卡通点的??急求!! 我想问一下这种图片是怎么把这样的动漫头p上去的? 牛奶水果果冻的做法,牛奶水果果冻怎么做好吃 好吃的水果果冻拌是怎么做的呢? 水果啫喱制作中,有哪些水果不宜添加? 怎么做啫喱果冻 Java 获取视频播放总时长 java 如何获取一段视频的 时长 java 获取视频长度 java网络编程中,想获得网络时间 java从网络中读取数据 耗时过长的问题 PLSQL几种循环语句用法 电脑屏保怎么修改密码 小锅卫星信号接收器安装在哪里最好 自己用java做的网站,视频加载很慢,点了视频后有时得加载20来分钟才能看。 个人安装电视信号接收器违法吗? 急急急!!! 怎么在Java web 程序中 获得 已知局域网IP的网络摄像头的视频流 java中怎么判断网络响应时间 宝骏610遥控信号接收器怎么安装 球体体积公式是什么 球体体积公式 球的体积怎么计算? java语言采集一个页面的视频的播放地址(随便哪个网站都行) java如何获得当前的网络传输速度 球体的体积公式是多少? 我的恶魔城月下夜想曲怎么看不到怪物图鉴?
  • 焦点

最新推荐

猜你喜欢

热门推荐