通过Java获取视频时长,可以通过jave和ffmpeg这两种工具来获取,jave和ffmpeg都能拿到本地视频文件的时长,可如果是播放视频URL,就只能通过ffmpeg来获取.
现在视频文件基本上都是放到CDN上的,不太可能把文件下下来再逐个获取视频时长,在解决这个问题的时候,曾看到浏览器可以直接获取在线视频的播放时长,因此你可以将数据库的视频文件地址放到浏览器页面上,循环获取视频时长,效率也快(总比你下载要快的多吧),可这里有个前提,就是你必须借助浏览器来获取视频时长,你必定的打开一个页面吧.如果你想一次性更新数据库的视频文件,搞个临时的程序也不错,之后再上传的视频文件先拿到时长,在存进去也不错.但我们能不能搞个东西像浏览器一样,只需拿到视频文件的数据头就能拿到视频时长等信息,答案是可以的.
这就是ffmpeg了,不得不说ffmpeg的功能很多,但我们只想通过它获取视频地址时长.个人在解决这个问题的时候真的有瞎猫碰上死耗子的赶脚.因为在网上查的ffmpeg的命令语法,还真没有测试在线视频的这种,我执行将本地文件路径换成视频文件地址,没想到是可以的.
获取视频信息的dos命令语法:"ffprobe 资源地址",资源地址可以是本地视频文件绝对路径,也可以是http协议的视频文件地址都可以.知道这个命令就能通过java调用外部程序来获取命令执行结果.可是这里也出问题了,你在dos执行命令可以很清晰的看到这个命令返回的视频信息.可是到java就是拿不到(通过ipconfig命令可以很容易拿到),要不咋说这玩意不走寻常路呢,正常的输出信息都会在执行的输出流中,可人家把信息输出到错误输出流.这里哔哔了,不多说直接上代码.
execDos方法:
其中"IOUtils"是apache工具包的数据流读取工具类,你可以替换成自己的数据流读取.其他没什么.
还有就是不论你在Linux还是windows都需要安装ffmpeg软件,windows比较容易,直接下载解压,将软件bin目录放到混进变量中,Linux需要下载源码编译安装,编译时间比较长(大概半小时吧),make安装后不需要配置环境变量的.这里给出ffmpeg官网地址:http://ffmpeg.org/
关于Linux上安装ffmpeg,这里不在多数,网上有很多这样的教程.