gpt4 book ai didi

java - Android MediaPlayereekTo()/getDuration() 未按预期工作

转载 作者:行者123 更新时间:2023-12-01 10:03:37 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com