zoukankan      html  css  js  c++  java
  • java通过url获取音视频文件时长

    问题:项目中需要获取音视频文件时长,通过FFmpeg获取。我们的文件上传用的fastDFS,或者七牛云,经常到我们后台的只有个url,无法成功。通过

    引入相关的jar包,然后使用。
    File mediaFile = new File("http://192.168.31.10:8888/dfs1/M00/00/02/wKgfCl6azIyAE4rXAABcIN-F5V4141.WAV");
    MultimediaObject multimediaObject=new MultimediaObject(mediaFile);
    MultimediaInfo multimediaInfo = multimediaObject.getInfo();
    long playTime = multimediaInfo.getDuration();
    System.out.println(playTime);
    这样会报错找不到文件,Input file not found<D:\devtool\idea\study\newfeatures\http:\192.168.31.10:8888\dfs1\M00\00\02\wKgfCl6azIyAE4rXAABcIN-F5V4141.WAV>;因为new File会创建加上项目地址的文件
    看了很多FFmpeg的都是需要本地文件,或者把远程文件下载下来。这样很麻烦,需要本地保存,就涉及到删除,不删除用公用的同一名字涉及到多线程的情况。

    解决:参照别人的文档然后改进(https://www.cnblogs.com/qq545505061/p/11224871.html

    查看源码,

    MultimediaObject类的getinfo方法

    可以看到ffmpeg放入的是文件的inputFile.getAbsolutepath()的绝对路径。

    因此不能找到文件。

    之前看到的博客说是反编译源码,然后修改代码放入自己的url。重新打包部署。但是这样我们打包不方便管理,而且修改了别人的源码升级不方便。

    所以自己把MultimediaObject类copy成FFmpegFileInfo在自己的项目里面。注意包路径要和MultimediaObject的相同,因为有包内方法和类的调用。有两个报错的地方需要注释下,变量m和token;因为MultimediaObject已经定义了。改写getinfo方法如下

    然后调用
    String url = "http://192.168.31.10:8888/dfs1/M00/00/02/wKgfCl6azIyAE4rXAABcIN-F5V4141.WAV";
    File mediaFile = new File(url);
    FFmpegFileInfo ffmpegFileInfo = new FFmpegFileInfo(mediaFile);
    MultimediaInfo multimediaInfo = null;
    multimediaInfo = ffmpegFileInfo.getInfo(url);
    long playTime = multimediaInfo.getDuration();
    System.out.println(playTime);

    就可以得到音视频时长。


  • 相关阅读:
    MVC基础
    图片水印和图片验证码
    Jquery弹窗
    AJAX基础
    Jquery--动画
    Jquery--动画
    JQuery
    LinkQ 组合查询与分页
    LinQ的简单使用
    JavaScript复习
  • 原文地址:https://www.cnblogs.com/chenbinaiqiuyu/p/12736814.html
Copyright © 2011-2022 走看看