我们正在开发一个播放播客的应用,我们正在使用服务和媒体播放器来播放服务器中的文件,在我们遇到此错误的一些Marshmallow设备中(摩托罗拉g4):
W/MediaHTTPConnection: readAt 22575768 / 32768 => java.net.ProtocolException: unexpected end of stream
但它只会在应用程序被杀死并且服务开始运行时发生,当应用程序处于前台时它运行良好,我们注意到缓冲工作正常,但是当应用程序被杀死时它无法缓冲更多,它恢复了一个限制,然后它抛出了这个错误...在其他设备中,缓冲效果很好。
以下是准备媒体播放器的代码块。
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "audio/mp3");
headers.put("Accept-Ranges", "bytes");
headers.put("Status", "206");
mp = new MediaPlayer();
Uri uri = Uri.parse(songPath);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setDataSource(getApplicationContext(), uri, headers);
mp.prepareAsync();
标题已添加,因为我们看过一个帖子,但它的结果与没有它的结果相同。
有什么建议吗?
答案 0 :(得分:0)
在后台播放音频比这复杂一点。如果您只是使用MediaPlayer
,那么当Android决定释放资源时,该组件的容器(即Activity
)或打开的http连接可能会被销毁。只要您切换到另一个应用程序,或者当设备(某个其他应用程序)使用太多资源时,或者当操作系统确定它是进行此操作的好时机时,就会发生这种情况。
但是,MediaPlayer
只是后台音频播放的一部分。
我建议您查看有关如何构建音频应用的官方指南。
https://developer.android.com/guide/topics/media-apps/audio-app/building-an-audio-app.html
我还找到了一个解释良好的分步教程,也可以提供帮助 https://code.tutsplus.com/tutorials/background-audio-in-android-with-mediasessioncompat--cms-27030