作者:okkkokkokkkokka | 来源:互联网 | 2023-09-14 16:36
显然没有抛出异常,因此我可以在缓冲流音频内容时识别错误.例如,我已断开我的路由器,应用程序将继续尝试缓冲整个时间.当我重新连接然后它完成缓冲并且甚至在断开连接超过一分钟后继续!所以
显然没有抛出异常,因此我可以在缓冲流音频内容时识别错误.例如,我已断开我的路由器,应用程序将继续尝试缓冲整个时间.当我重新连接然后它完成缓冲并且甚至在断开连接超过一分钟后继续!
所以问题是我不能让我的用户长时间坐在那里而不考虑问题.检测Android媒体播放器缓冲问题的正确方法是什么?
我正在考虑使用Timer超时.我可能会在15秒后开始(使用代理我测试了5kbps连接,这是最糟糕的情况,能够在6-10秒内开始播放,所以我认为15秒将是一个合理的超时时间).这听起来像个好计划吗?如果是这样,我应该在每次缓冲区尝试时创建一个新的Timer,还是应该在播放服务的整个生命周期内保持相同的Timer?
所以基本上我问两个问题:
1)检测缓冲区是否有问题的正确方法是什么?我有一个倾听的倾听者吗?我已经尝试了MediaPlayer.OnErrorListener当然不会在我的测试中触发.我的结论是我必须超时才能检测到缓冲错误.
2)如果我在第一名上是正确的,那么使用计时器的正确方法是什么?每次缓冲区尝试创建一个或重用相同的缓冲区?编辑我还应该重启(或取消并创建一个新的)Timer onBufferUpdate吗?使用onBufferUpdate监听器,我应该知道有些数据会回来,所以应该重置计时器.
解决方法:
根据您的问题,我了解主要目标是在您的播放器因缓冲而停滞并采取某些措施时检测情况.为了处理这种情况,我觉得以下2个听众可能有助于识别相同的情况.
MediaPlayer.onBufferingUpdate
将提供缓冲的及时进度.因此,如果有2个回调具有相同的百分比值,则这可能表示潜在的缓冲.
还有另一个听众MediaPlayer.onInfoListener
,其中包含一些您可能感兴趣的特定事件.在这个监听器上,如果是MEDIA_INFO_BUFFERING_START
,则表示播放器正在暂停播放以进行缓冲,即触发逻辑.类似地,MEDIA_INFO_BUFFERING_END
表示在填充缓冲区后重新开始播放.