资讯专栏INFORMATION COLUMN

解决通过MediaMetadataRetriever获取音频文件时长不准确的问题

CoderDock / 3751人阅读

摘要:在中,获取音频文件的信息可以通过这个类来获取,比如获取文件的时长,通过如下方法来获取但是,通过这种方法获取的可能不准确,对于格式的,可能远远比真实的长度小。对于这个问题,可以用比特率和文件大小来计算单位,秒通过这种方式得到的值是比较准确的

在Android中,获取音频文件的信息可以通过 MediaMetadataRetriever 这个类来获取,比如获取文件的时长,通过如下方法来获取:

MediaMetadataRetriever mmr = new MediaMetadataRetriever();
try {
    mmr.setDataSource(file.getFile().getAbsolutePath());
    String strDuration = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
    long duration = Long.valueOf(strDuration);
}catch (Exception e){

}
  

但是,通过这种方法获取的duration可能不准确,对于VBR格式的mp3,duration可能远远比真实的长度小。对于这个问题,可以用比特率和文件大小来计算:

long fileSize = file.getFile().length();
long bitRate = Long.parseLong(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE));
long duration = (fileSize*8) /(bitRate);//单位,秒

通过这种方式得到的duration值是比较准确的

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67081.html

相关文章

  • Audio: 如果你愿意一层一层剥开我

    摘要:基本用法属性目前只支持你可以看出他们在里表现的差异关于标签支持的音频类型,可以参考常用属性音频流文件就绪后是否自动播放无需预加载只需要加载元数据,例如音频时长,文件大小等。 我觉得DOM就好像是元素周期表里的元素,JS就好像是实验器材,通过各种化学反应,产生各种魔术。 showImg(https://segmentfault.com/img/bVO9vK?w=1440&h=814); ...

    wangjuntytl 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<