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

在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值是比较准确的

你可能感兴趣的:(解决通过MediaMetadataRetriever获取音频文件时长不准确的问题)