Android,如何从onBufferingUpdate显示缓冲%

zvz*_*zej 6 android stream buffering media-player

我有一个媒体播放器服务,播放互联网流,但我有问题如何在我的xml中显示缓冲百分比,目前我只是显示一条消息,因为我试过的所有方式给了我一个静态长号.这是我的播放器服务的代码:

@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
    setBufferPosition(percent * getMusicDuration() / 100);
    myMain.EstadoRadio.setText(" Reproductor \n Buffering... ");
}
Run Code Online (Sandbox Code Playgroud)

你可以告诉EstadoRadio是我的xml中的一个文本视图,它在myMain活动中工作,我想显示流的缓冲百分比.谢谢你的帮助.

编辑:我在大多数情况下看到使用onBufferingUpdate(MediaPlayer mp,int percent)的'%',如下所示:

myMain.EstadoRadio.setText(" Reproductor \n" + percent + "%");
Run Code Online (Sandbox Code Playgroud)

但在我的情况下,百分比总是-2147483648,我不知道为什么,或者为什么它不会改变或更新,这里有一点来自我的日志猫:

05-17 13:34:37.005: V/MediaPlayer(25382): message received msg=3, ext1=-2147483648, ext2=0
05-17 13:34:37.005: V/MediaPlayer(25382): buffering -2147483648
05-17 13:34:37.005: V/MediaPlayer(25382): callback application
05-17 13:34:37.005: V/MediaPlayer(25382): getDuration
05-17 13:34:37.015: V/MediaPlayer(25382): back from callback
05-17 13:34:38.016: V/MediaPlayer(25382): message received msg=3, ext1=-2147483648, ext2=0
05-17 13:34:38.016: V/MediaPlayer(25382): buffering -2147483648
05-17 13:34:38.016: V/MediaPlayer(25382): callback application
05-17 13:34:38.016: V/MediaPlayer(25382): getDuration
05-17 13:34:38.016: V/MediaPlayer(25382): back from callback
Run Code Online (Sandbox Code Playgroud)

ste*_*okk 3

您看到的数字是有符号 32 位 int 的最小值。我猜测 Android 无法返回百分比,实际上给你的是垃圾数据。

我会用远程 mp3 URL 替换您的互联网流,以查看缓冲是否获得真正的值(因为这将确认您的其余代码不应该受到指责。)

编辑:有关 OnBufferingUpdateListener 的 Android 文档解释了渐进式 http 下载的用例,而不是无休止的互联网流。

我不认为使用 Android 中的内置侦听器可以显示缓冲百分比。如果不破解 Android 源代码来查找 MediaPlayer 类决定在什么时候开始播放您的流(如果它们甚至提供回调),我怀疑这个问题是否会得到解决。

不过,如果有人可以提供解决方案/解决方法,我会对解决方案/解决方法感兴趣。

http://en.wikipedia.org/wiki/Integer_(computer_science )

http://developer.android.com/reference/android/media/MediaPlayer.OnBufferingUpdateListener.html