android - 检测缓冲错误(或超时)Android MediaPlayer - 使用定时器超时?

标签 android timer android-mediaplayer

显然没有抛出异常,因此我可以在缓冲流式音频内容时识别错误。例如,我断开了我的路由器,应用程序将继续尝试缓冲整个时间。当我重新连接时,它会完成缓冲并在断开连接超过一分钟后继续!

所以问题是我不能让我的用户在那里坐那么久而不考虑这个问题。检测 Android 媒体播放器缓冲问题的正确方法是什么?

我正在考虑使用 Timer超时。我可能会从 15 秒开始(我使用代理测试了 5kbps 连接,这是最坏的情况,能够在 6-10 秒内开始播放,所以我认为 15 秒是一个合理的超时时间)。这听起来是个好计划吗?如果是这样,我应该为每次缓冲区尝试创建一个新的计时器,还是应该在播放服务的整个生命周期内保留同一个计时器?

所以基本上我要问两个问题:

1) 检测缓冲区是否有问题的正确方法是什么?有没有我忽略的听众?我已经尝试过 MediaPlayer.OnErrorListener 当然不会在我的测试中触发。我的结论是我必须有一个超时来检测缓冲错误。

2) 如果我在第一点上是正确的,那么使用计时器的正确方法是什么?每次缓冲区尝试创建一个或重复使用相同的缓冲区? 编辑 我还应该重新启动(或取消并创建一个新的)计时器 onBufferUpdate 吗?使用 onBufferUpdate 监听器,我应该知道一些数据正在返回,所以也许应该用它重置计时器。

最佳答案

根据您的问题,我了解到主要目标是检测您的播放器是否因缓冲而停滞并采取一些措施。针对这种情况,我觉得下面的2个listeners可能有助于识别相同的情况。

MediaPlayer.onBufferingUpdate将提供缓冲的及时进展。因此,如果有 2 个回调具有相同的 percent 值,这可能表明存在潜在缓冲。

还有一个监听器MediaPlayer.onInfoListener其中有一些您可能感兴趣的特定事件。在这个监听器上,如果 whatMEDIA_INFO_BUFFERING_START ,这表明播放器正在暂停播放以进行缓冲,即触发您的逻辑。同样MEDIA_INFO_BUFFERING_END表示填充缓冲区后重新开始播放。

关于android - 检测缓冲错误(或超时)Android MediaPlayer - 使用定时器超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15482168/

相关文章:

android - 如何检测 NFC P2P 事件

javascript - 使用clearInterval 将 jQuery 计时器停止在 0

android - 为什么 MediaPlayer prepare() 不与流一起使用?

java - 计时器在指定时间后继续

c# - ASP.NET - 添加新行后刷新 gridview(DataTable 源)(由计时器触发)

android - onPause后TextureView播放视频变黑

android - Android:高效的声音播放方式

android - Retrofit getBodyAs() 解析服务器错误失败

android - 如何在 GridView 上绘制我的自定义 View ?

android - 哪个更好 : Loader or Headless Fragments