【问题标题】:MediaPlayer throwing errors in Android 5.0 (Lollipop)MediaPlayer 在 Android 5.0 (Lollipop) 中抛出错误
【发布时间】:2018-06-12 04:02:51
【问题描述】:

我编写了一个使用 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 会抛出这个错误?

【问题讨论】:

  • 由于涉及到侦听器、被调用的方法等,因此要发布很多代码。我试图按照它们的顺序总结我正在调用的 MediaPlayer 方法叫。我希望其他人已经看到了这些错误并找到了解决方案,否则我将不得不开始试验。

标签: android android-mediaplayer


【解决方案1】:

看起来setDataSource(string) 方法用于自动对传入的 URL 进行编码,之前版本的 Android 但不再在 v5.x 中。发生错误是因为 Web 服务器返回 HTTP 404 Not Found。当我在将 URL 传递给setDataSource() 之前对其进行编码时,它可以工作。

更令人困惑的是,我的应用程序对 URL 的编码不一致,因此有时它可以正常工作,而有时则不能。

【讨论】:

  • 你是如何编码的。我有这个简单的网址clips.vorwaerts-gmbh.de/big_buck_bunny.mp4 这个需要编码吗?
  • @Diffy 我基本上使用String encodedPath = URLEncoder.encode(thePath, "UTF-8") 进行编码,然后不得不将一些百分比编码改回ASCII。例如,encodedPath = encodedPath.replace("%2F", "/")。我也为空格和加号做了这个(不是一个包含所有麻烦字符的列表。)
【解决方案2】:

我在棒棒糖上也遇到过这个问题。 URL 中的空格给我造成了这个问题。我用 %20 替换了空格,效果很好。

used to be: mPlayer.setDataSource(myUrl);
changed to: mPlayer.setDataSource(myUrl.replaceAll(" ","%20"));

希望这对曾经遇到此问题的人也有所帮助。编码技巧对我不起作用,但让我走上了为我解决这个问题的正确轨道。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 2014-12-31
    • 2015-05-13
    • 2016-03-13
    • 1970-01-01
    • 2015-01-28
    相关资源
    最近更新 更多