在背景中播放的MediaPlayer会引发流的意外结尾



我们正在开发一个播放播客的应用程序,我们正在使用服务和媒体播放器播放服务器中的文件,在某些棉花糖设备中,我们遇到了此错误(Motorola 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();

添加了标题,因为我们看到了一个帖子,但其结果与没有。

有任何建议?

在后台播放音频比这更复杂。如果您只是使用MediaPlayer,那么当Android决定发布资源时,该组件的容器(即Activity)或打开的HTTP连接可能会被破坏。当您切换到另一个应用程序,或者设备(其他应用程序)使用太多资源时,或者操作系统决定是这样做的好时机时,这可能会发生这种情况。

但是,MediaPlayer只是背景音频播放的一部分。我会建议您查看有关如何构建音频应用程序的Oficial指南。https://developer.android.com/guide/topics/media-apps/audio-app/building-an-audio-app.html

我还找到了一个解释良好的分步教程,也可以帮助您https://code.tutsplus.com/tutorials/background-audio-in-indroid-with-mediasessioncompat-cms-cms-27030

最新更新