Dan*_*iel 35 android buffering media-player
我必须在这里遗漏一些明显的东西,但我似乎无法找到任何东西让我确定MediaPlayer何时缓冲音频.我正在播放互联网音频,我想显示一个缓冲指示器,但我尝试过的任何东西都不能让我知道MediaPlayer何时中断音频缓冲,所以我无法正确显示缓冲指示器.有线索吗?
小智 55
如下所示(API等级≥9):
mp.setOnInfoListener(new OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
switch (what) {
case MediaPlayer.MEDIA_INFO_BUFFERING_START:
loadingDialog.setVisibility(View.VISIBLE);
break;
case MediaPlayer.MEDIA_INFO_BUFFERING_END:
loadingDialog.setVisibility(View.GONE);
break;
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
注意:Android中存在已知错误.在播放HLS流时,它永远不会调用OnInfoListener或OnBuffering.检查此链接OnInfoListener错误
Dan*_*iel 10
好的,我现在感觉有点平反.我检查了Pandora应用程序,它没有显示缓冲指示器.当音乐被中断以进行缓冲时,它只是坐在那里,好像什么也没发生,UI看起来还在播放.所以我得出的结论是,如果你正在使用MediaPlayer,那么就无法确定该曲目是否暂时暂停以进行缓冲.
但是,我注意到有一些可能有用的MediaPlayer常量:MEDIA_INFO_BUFFERING_START和MEDIA_INFO_BUFFERING_END.但它们只能在API级别9+中使用,而且文档中没有任何关于它们的内容.我假设它们可以与OnInfoListener一起使用.
我很失望,但至少我现在可以停止转动轮子并转向别的东西.
@Daniel,根据您对@ JRL的回答的评论,您可以通过启动线程并等待超时来实现此功能.
像DetectBufferTimeout.java(未经测试)之类的东西会做得很好.
但是,我确实同意启动这个单独的线程是一个黑客攻击.也许OnBufferingUpdateListener可以保证它调用的频率,onBufferingUpdate()无论缓冲进度是否发生了变化,这样我们就可以检测出我们是否一遍又一遍地获得相同的值.
| 归档时间: |
|
| 查看次数: |
26448 次 |
| 最近记录: |