遇到一个需求,需要获取音视频文件的播放时间。首先考虑的是在前台获取其播放时间。代码如下。
<audio id="audio">
<source src="horse.mp3" type="audio/mpeg">
</audio>
<script>
$(function(){
("#audio").addEventListener("canplay", function(){
//监听audio是否加载完毕,如果加载完毕,则读取audio播放时间
var time =("#audio").duration;
var minute = time / 60;
var minutes = parseInt(minute);
if (minutes < 10) {
minutes = "0" + minutes;
}
var second = time % 60;
var seconds = Math.round(second);
if (seconds < 10) {
seconds = "0" + seconds;
var allTime = parseInt(minutes*60 + seconds);
});
})
</script>
但这样对于从后台获取多个音频文件。需要等待audio加载完才能去获得它的播放时间,就会出现有些能拿到播放时间,有些拿不到。于是只能考虑从后台获取它的播放时间再显示出来。
在网上搜了一大堆解决方案,最终找到适合自己项目得解决方案。目前从后台获取音频文件播放时间的采用的方法是采用Jave。
这是Jave的官网。http://www.sauronsoftware.it/projects/jave/index.php
这是它的下载地址。http://www.sauronsoftware.it/projects/jave/download.php
把这个解压出来。再使用mvn命令安装。
mvn install:install-file -DgroupId=com.xinyartech -DartifactId=easyexcel -Dversion=1.1.1 -Dpackaging=jar -Dfile=D:\Maven\repository\it\sauronsoftware\jave\1.0.2jave-1.0.2.jar
仓库里面也有Jave。
但非常可惜的是它给的资源地址是访问不到jave。
好在天无绝人之路,我发现别的项目有引用到了Jave。
获取音乐的具体代码如下:
//voice是图片访问地址(http)
Map<String, Object> multipartMap = UrlToMultipartFile.urlToMultipartFile(voice);
Map<String, Object> readVideoTimeMap = VideoUtil.ReadVideoTimeMs((MultipartFile) multipartMap.get("multipartFile"));
map.put("times",readVideoTimeMap.get("times"));
//程序结束时,删除临时文件
UrlToMultipartFile.deleteFile((File) multipartMap.get("file"));
UrlToMultipartFile.deleteFile((File) readVideoTimeMap.get("file"