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

就可以得到音视频时长。



免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM