使用Android MediaPlayer进行流媒体播放 - 捕获错误和缓冲

Chr*_*ris 7 streaming android buffering media-player

MediaPlayer从HTTP URL流式传输时,我无法恢复弹性.

如果我开始播放文件,但随后丢弃连接(例如飞行模式),则MediaPlayer#OnErrorListener生成what=1, extra=-17然后不久what=-38, extra=0.

我没有在API中看到这个表示的文档,除了extra是"通常依赖于实现".我正在使用HTC Hero(好吧,它是T-Mobile UK的G2 Touch).

其他人是否获得相同的值,并且可以安全地捕获这些值,因为连接已经消失了吗?

连接重新出现时,如何才能最好地恢复?(保存当前的搜索偏好,并每5秒重试一次?)

我怎么知道设备何时决定开始播放它正在缓冲的内容 - 是否有回调(除了轮询isPlaying())?

此外,我不完全确定onBufferingUpdate提供什么.我正在使用40分钟的播客MP3 (64kbps bitrate)- 缓冲分为1%,2%,3%.当我寻求大约30分钟,它显示75%,然后当我寻求回到开始回到5% - 这个回调的重点是什么,除了显示大约什么是缓存?

最后 - 有什么方法可以管道流式传输到MP3什么?

Lys*_*gen 5

取自这个类似的堆栈溢出问题

我对MEDIA_INFO_BUFFERING_START和MEDIA_INFO_BUFFERING_END挂钩感到很失望......真糟糕.

我检查了Pandora应用程序,它没有显示缓冲指示器.当音乐被中断以进行缓冲时,它只是坐在那里,好像什么也没发生,UI看起来还在播放.所以我得出的结论是,如果你正在使用MediaPlayer,那么就无法确定该曲目是否暂时暂停以进行缓冲.

但是,我注意到有一些可能有用的MediaPlayer常量:MEDIA_INFO_BUFFERING_START和MEDIA_INFO_BUFFERING_END.但它们只能在API级别9+中使用,而且文档中没有任何关于它们的内容.我假设它们可以与OnInfoListener一起使用.

我很失望,但至少我现在可以停止转动轮子并转向别的东西.


小智 1

我认为你应该监听网络的丢失/增益。看一下:检测 3G 或 Wifi 网络恢复