【发布时间】:2013-01-19 08:38:44
【问题描述】:
我使用 MediaPlayer 通过 http 播放 mp3 流。在某些特定设备上,它不会太频繁地到达流的末尾。只是停下来。它只出现在 2.3.x 上,在 Jelly Bean 上无法捕捉到这个问题。 logcat 中唯一奇怪的几行:
02-04 17:34:14.379: ERROR/HTTPStream(95): recv failed, server is gone, total received: 54683 bytes
02-04 17:34:14.379: ERROR/HTTPStream(95): recv failed, errno = 9 (Bad file number)
02-04 17:34:14.379: ERROR/NuCachedSource2(95): source returned error -1004
OnCompletionListener 被调用(太早了)
似乎它只下载了 5MB 的流,并没有尝试下载更多。
主要发生在三星 Galaxy Ace 设备上。
【问题讨论】:
-
有同样的问题。主要在三星 Galaxy Ace 上。
-
@Fedor 我有一个建议给你,但我想知道一些关于问题的具体原因。它是简单的 HTTP 流式传输吗?是只有某些流,还是所有流?
-
@Dave 它适用于我测试的所有流。
-
@Fedor 在我看来,该设备上的缓冲区溢出存在问题,因此当缓冲区已满且无法读取新数据时,它认为服务器已关闭。打印出的错误是因为读取返回 -1,但完整的缓冲区通常应返回 0。与 MediaPlayer 的许多问题一样,我认为您可以通过在设备上放置本地代理来解决此问题,以便您拥有更多控制权在流式传输的数据上。看我的回答here。
-
拥有本地代理后,您可以自己缓冲数据并限制发送给播放器的内容。对于嵌入式系统上的视频,我已经完全做到了这一点,并且它非常适合我所需要的。
标签: android audio-streaming android-mediaplayer