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);

就可以得到音视频时长。


posted @ 2020-04-20 11:45  尘逐风123  阅读(4418)  评论(0编辑  收藏  举报