我必须在这里丢失一些明显的东西,但似乎找不到任何可以让我确定何时MediaPlayer正在缓冲音频的东西。我正在流式传输互联网音频,我想显示一个缓冲指示符,但我试过的任何东西都不允许我知道MediaPlayer何时中断要缓冲的音频,所以我无法正确显示缓冲指示符。任何线索?Android - 如何判断MediaPlayer何时缓冲
回答
@丹尼尔,根据你对@ JRL的回答的评论,你可能会通过旋转线程并等待超时来获得这个工作。
像DetectBufferTimeout.java(未经测试)会很好。
但是,我确实认为旋转这个单独的线程是有点破解的。也许OnBufferingUpdateListener
可以保证它调用onBufferingUpdate()
的频率,不管缓冲进度是否发生了变化,所以我们可以检测到我们是否一遍又一遍地获得相同的值。
谢谢,马特。我遇到的问题是没有通知MediaPlayer何时实际暂停要缓冲的轨道。但是你的建议还是不错的。我认为应用同样的技术......而不是检查缓冲进度,我应该检查播放进度。如果它没有更新并且没有从我的末端暂停或停止,则MediaPlayer实例必须暂停它以便缓冲更多音频数据。谢谢! – Daniel 2011-04-13 04:46:59
啊,是的,我没有意识到你想知道赛道何时暂停_specifically_,因为它已经通过它的缓冲区。 – 2011-04-15 03:03:33
注册一个OnBufferingUpdate监听器。
谢谢。我已经这样做了,但这似乎只是告诉我缓冲的音轨的百分比。我试图与赛道的当前比赛时间进行比较。我想也许我可以看到当前缓冲区百分比是否等于当前播放时间百分比。但是这不起作用,因为MediaPlayer似乎有一些缓冲代码被烘焙,以便在缓冲区完全运行之前进行缓冲。所以我仍然无法告诉(或控制)曲目何时缓冲。希望我错过了什么? – Daniel 2010-12-16 21:53:11
好吧,我现在觉得有点平反。我检查了潘多拉的应用程序,它不显示缓冲指标。当音乐中断缓冲时,它就像没有任何事情发生一样,UI看起来还在播放。所以我得出的结论是,如果您使用的是MediaPlayer,则无法确定曲目是否暂时暂停以进行缓冲。
但是,我确实注意到有几个MediaPlayer常量可以使用: MEDIA_INFO_BUFFERING_START和MEDIA_INFO_BUFFERING_END。但是他们只能在9级以上的API中使用,而且文档对此没有提及。我假设他们可以与OnInfoListener一起使用。
我很失望,但至少我现在可以停止旋转我的轮子并转向其他东西。
像下面(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;
}
});
注意:有一个已知的错误在机器人。在播放HLS流时,它从不调用OnInfoListener或OnBuffering。检查此链接OnInfoListener bug
您可以使用一个线程来检查MediaPlayer的当前位置。如果位置不变,您可以得出结论媒体处于缓冲状态。这里是我写的完整教程:http://www.ottodroid.net/?p=260
- 1. Android MediaPlayer流缓冲
- 2. Android - MediaPlayer中的缓冲区
- 3. 使用MediaPlayer Android Gingerbread缓冲
- 4. Android MediaPlayer - 位置在缓冲时跳过
- 5. 如何判断dom重复何时完成冲压元素
- 6. 如何判断Facebook删除Javascript缓存
- 7. Android Webview - 如何判断页面是否从缓存中加载?
- 8. 如何判断何时显示活动
- 9. 如何判断animateLayoutChanges何时完成?
- 10. 如何判断Windows何时无效
- 11. 如何判断视图何时激活
- 12. 如何判断DevExpress FindPanel何时关闭?
- 13. 如何判断进程挂起是否由于填充缓冲区(TCP,stdin,stdout)?
- 14. Android:如何判断服务何时完成
- 15. 如何判断Android设备何时具有Geocoder后端服务?
- 16. Android API 23 vs Android API 25 MediaPlayer缓冲速度
- 17. 检测缓冲错误(或超时)Android MediaPlayer - 使用计时器超时?
- 18. 如何判断套接字何时断开
- 19. Leetcode OJ如何判断?
- 20. 如何判断jQuery的TMPL
- 21. 如何判断AsyncTaskLoader运行
- 22. 如何判断方法“performSegueWithIdentifier:sender:”?
- 23. 如何判断空对象?
- 24. Json或Html?如何判断?
- 25. 如何判断http代理
- 26. 如何判断使用wx.aui
- 27. 如何判断Image.FromStream完成
- 28. 定时器中断MediaPlayer
- 29. 在MediaPlayer上更改缓冲区大小
- 30. 如何判断相册何时添加到MediaStore
对此有何更新?我正在尝试制作流媒体视频播放器。所有评论欢迎。 – Sen 2011-05-12 09:17:07