- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 android MediaPlayer 库来播放一些 MP3 文件。我不负责这些文件,也无法更改它们,只能播放它们。
我当前更新了一个进度条,显示用户当前浏览文件的进度,将进度条的最大值设置为 mediaPlayer.getDuration()
。我知道这个返回的值是正确的。我每 500 毫秒发布一个 Runnable,以用 mediaPlayer.getCurrentPosition
的值更新进度条。这一切都按预期正常工作。
当我尝试使用seekTo方法时会出现此问题(但是偶尔它会按我的预期工作)。我创建的媒体播放器对象注册了一个 OnSeekCompleteListener 。当我调用 mediaPlayer.seekTo(50000)
时,使用 mediaPLayer.getCurrentPosition()
在 OnSeekCompleteListener 中输出的值是我告诉它寻求的正确值(在本例中为 51000(假设我们从文件的 1000 毫秒开始)。但是,当 postDelayed runnable 运行以更新进度条时,mediaPlayer.getCurrentPosition()
返回的值通常(95% 的时间)远低于 OnSeekCompleteListener 中输出的值。
最终返回的值似乎没有任何押韵或原因,因为即使发生完全相同的情况,它们每次也不同。
编辑:在说这些值总是不同之后,事实证明这并不完全正确。如果我尝试寻找音频的最后,它总是会跳回到同一点(如果 getCurrentPosition() 方法可信的话,大约是在 2-3 小时之前)。
为了让事情变得更复杂,如果我使用 Audacity 和 LAME(使用默认设置)重新编码原始文件,这个问题就会消失。我只能将其作为测试,因为当我的应用程序上线时,我将无法控制文件编码。
如果有人对此有任何想法,我们将不胜感激。
供引用:以下是在 Mac 上通过 afinfo 命令获取的原始文件的值:
File: Test.mp3
File type ID: MPG3
Num Tracks: 1
----
Data format: 2 ch, 44100 Hz, '.mp3' (0x00000000) 0 bits/channel, 0 bytes/packet, 1152 frames/packet, 0 bytes/frame
no channel layout.
estimated duration: 35997.544490 sec
audio bytes: 216835607
audio packets: 1378031
bit rate: 48000 bits per second
packet size upper bound: 1052
maximum packet size: 522
audio data file offset: 1630
optimized
以及我重新编码且工作正常的音频文件中的信息:
File: Test2.mp3
File type ID: MPG3
Num Tracks: 1
----
Data format: 2 ch, 44100 Hz, '.mp3' (0x00000000) 0 bits/channel, 0 bytes/packet, 1152 frames/packet, 0 bytes/frame
no channel layout.
estimated duration: 35997.596735 sec
audio bytes: 293659748
audio packets: 1378033
bit rate: 65000 bits per second
packet size upper bound: 1052
maximum packet size: 835
audio data file offset: 1560
optimized
audio 1587491712 valid frames + 576 priming + 1728 remainder = 1587494016
编辑:此功能正在 Sony Xperia 上的 Android 6.0 上进行测试
最佳答案
这是媒体播放器的一个已知问题,据我所知没有解决方案:
https://code.google.com/p/android/issues/detail?id=11590 https://code.google.com/p/android/issues/detail?id=2559
关于java - Android MediaPlayereekTo()/getDuration() 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36624019/
我正在使用 android MediaPlayer 库来播放一些 MP3 文件。我不负责这些文件,也无法更改它们,只能播放它们。 我当前更新了一个进度条,显示用户当前浏览文件的进度,将进度条的最大值设
我是一名优秀的程序员,十分优秀!