媒体播放器的getDuration()
方法为我提供了某些音频文件的错误值。我认为所有这些文件的共同特征是它们是使用 Audacity 或其他一些音频编辑工具进行操作的。当尝试将 MediaPlayer 进度绑定到进度栏时,这是一个问题。
我继续记录它:
while(mPlayer.isPlaying())
Log.i("progress/total",
mPlayer.getCurrentPosition() +
"/" + mPlayer.getDuration());
并发现了这个:
I/progress/total(643): 14615/14620
I/progress/total(643): 14647/14620
这只是数千行的两个日志行,但重点是在进度超过 getDuration() 认为的歌曲总持续时间后,它会继续进行。因为 MediaPlayer 实际上可以给出正确的总持续时间,所以有没有办法使用它来获得我的 ProgressBar 的适当最大值?
当 MediaPlayer.getDuration() 返回 542434 毫秒的 mp3 文件(带有 ICS 4.0.3 的 HTC Desire C)时,我遇到了类似的问题。
文件本身大约是89秒,差别太大了。
我检查了 mp3 文件内容并看到了一些奇怪的 xml,例如:
<?xpacket begin="п»ї" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.2-c063 53.351735, 2008/07/22-18:04:26 ">
将此文件保存为新文件后,xml 被删除并且 getDuration() 返回正确的值。
我知道它不会帮助那些需要播放无法修改的文件的人,但对于那些可以修改的人来说 - 它应该有所帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)