MediaPlayer 在 Android 5.0 (Lollipop) 中抛出错误
MediaPlayer throwing errors in Android 5.0 (Lollipop)
我编写了一个使用 HTTP 连接流式传输 MP3 的媒体应用程序。这在 Android 版本 2.x - 4.x 上运行良好,但现在在 5.x 中产生错误。该应用循环播放包含 MP3 的播放列表对象,每个 MP3 都有自己唯一的 HTTP 地址。第一个文件流式传输正常,但下一个文件(与 哪个 文件无关)在调用 prepareAsync()
时产生以下错误:
07-04 18:57:19.785 65-10860/? E/NuCachedSource2﹕ source returned error -1, 10 retries left
07-04 18:57:22.874 65-10860/? E/NuCachedSource2﹕ source returned error -1, 9 retries left
07-04 18:57:25.907 65-10860/? E/NuCachedSource2﹕ source returned error -1, 8 retries left
07-04 18:57:28.929 65-10860/? E/NuCachedSource2﹕ source returned error -1, 7 retries left
07-04 18:57:31.972 65-10860/? E/NuCachedSource2﹕ source returned error -1, 6 retries left
07-04 18:57:35.024 65-10860/? E/NuCachedSource2﹕ source returned error -1, 5 retries left
07-04 18:57:38.062 65-10860/? E/NuCachedSource2﹕ source returned error -1, 4 retries left
07-04 18:57:41.085 65-10860/? E/NuCachedSource2﹕ source returned error -1, 3 retries left
07-04 18:57:44.110 65-10860/? E/NuCachedSource2﹕ source returned error -1, 2 retries left
07-04 18:57:47.262 65-10860/? E/NuCachedSource2﹕ source returned error -1, 1 retries left
07-04 18:57:50.294 65-10860/? E/NuCachedSource2﹕ source returned error -1, 0 retries left
07-04 18:57:50.419 65-10857/? E/GenericSource﹕ Failed to init from data source!
07-04 18:57:50.428 9592-9758/net.kicksass.shootingstarbbs.streamstar E/MediaPlayer﹕ error (1, -2147483648)
07-04 18:57:50.429 9592-9592/net.kicksass.shootingstarbbs.streamstar E/MediaPlayer﹕ Error (1,-2147483648)
一般来说,应用调用 MediaPlayer 的 setDataSource(url)
,然后调用 prepareAsync()
,然后等待 onPreparedListener
触发,然后调用 start()
开始流式传输。流式传输完成后,它调用 reset()
,然后调用 setDataSource(url)
,流程再次开始。
为什么 Lollipop 的 MediaPlayer 会抛出这个错误?
看起来 setDataSource(string)
方法用于自动编码传入的 URL 与先前版本的 Android 但不再在 v5.x 中。发生错误是因为 Web 服务器返回 HTTP 404 Not Found。当我在将 URL 传递给 setDataSource()
之前对它进行编码时,它起作用了。
更令人困惑的是,我的应用程序对 URL 的编码不一致,因此有时它可以工作,而其他时候则没有。
我在棒棒糖上也有这个问题。 URL 中的空格对我造成了这个问题。我用 %20 替换了空格,它工作正常。
used to be: mPlayer.setDataSource(myUrl);
changed to: mPlayer.setDataSource(myUrl.replaceAll(" ","%20"));
希望这对曾经遇到过这个问题的人也有帮助。编码技巧对我不起作用,但让我走上了为我解决这个问题的正确轨道。
我编写了一个使用 HTTP 连接流式传输 MP3 的媒体应用程序。这在 Android 版本 2.x - 4.x 上运行良好,但现在在 5.x 中产生错误。该应用循环播放包含 MP3 的播放列表对象,每个 MP3 都有自己唯一的 HTTP 地址。第一个文件流式传输正常,但下一个文件(与 哪个 文件无关)在调用 prepareAsync()
时产生以下错误:
07-04 18:57:19.785 65-10860/? E/NuCachedSource2﹕ source returned error -1, 10 retries left
07-04 18:57:22.874 65-10860/? E/NuCachedSource2﹕ source returned error -1, 9 retries left
07-04 18:57:25.907 65-10860/? E/NuCachedSource2﹕ source returned error -1, 8 retries left
07-04 18:57:28.929 65-10860/? E/NuCachedSource2﹕ source returned error -1, 7 retries left
07-04 18:57:31.972 65-10860/? E/NuCachedSource2﹕ source returned error -1, 6 retries left
07-04 18:57:35.024 65-10860/? E/NuCachedSource2﹕ source returned error -1, 5 retries left
07-04 18:57:38.062 65-10860/? E/NuCachedSource2﹕ source returned error -1, 4 retries left
07-04 18:57:41.085 65-10860/? E/NuCachedSource2﹕ source returned error -1, 3 retries left
07-04 18:57:44.110 65-10860/? E/NuCachedSource2﹕ source returned error -1, 2 retries left
07-04 18:57:47.262 65-10860/? E/NuCachedSource2﹕ source returned error -1, 1 retries left
07-04 18:57:50.294 65-10860/? E/NuCachedSource2﹕ source returned error -1, 0 retries left
07-04 18:57:50.419 65-10857/? E/GenericSource﹕ Failed to init from data source!
07-04 18:57:50.428 9592-9758/net.kicksass.shootingstarbbs.streamstar E/MediaPlayer﹕ error (1, -2147483648)
07-04 18:57:50.429 9592-9592/net.kicksass.shootingstarbbs.streamstar E/MediaPlayer﹕ Error (1,-2147483648)
一般来说,应用调用 MediaPlayer 的 setDataSource(url)
,然后调用 prepareAsync()
,然后等待 onPreparedListener
触发,然后调用 start()
开始流式传输。流式传输完成后,它调用 reset()
,然后调用 setDataSource(url)
,流程再次开始。
为什么 Lollipop 的 MediaPlayer 会抛出这个错误?
看起来 setDataSource(string)
方法用于自动编码传入的 URL 与先前版本的 Android 但不再在 v5.x 中。发生错误是因为 Web 服务器返回 HTTP 404 Not Found。当我在将 URL 传递给 setDataSource()
之前对它进行编码时,它起作用了。
更令人困惑的是,我的应用程序对 URL 的编码不一致,因此有时它可以工作,而其他时候则没有。
我在棒棒糖上也有这个问题。 URL 中的空格对我造成了这个问题。我用 %20 替换了空格,它工作正常。
used to be: mPlayer.setDataSource(myUrl);
changed to: mPlayer.setDataSource(myUrl.replaceAll(" ","%20"));
希望这对曾经遇到过这个问题的人也有帮助。编码技巧对我不起作用,但让我走上了为我解决这个问题的正确轨道。