我正在使用Android的MediaPlayer在我的应用程序中设置URL流。我已经尝试了几篇不同的文章来处理退出代码和错误:(1,-2147483648)。
我尝试了几种不同的流,但好像无法让MediaPlayer正常工作。我考虑过转到Google的ExoPlayer,但它更复杂,我不想跳船,以防我错过了什么。
MediaPlayer:
private MediaPlayer player;
String url = "http://199.180.75.118:80/stream"; //temp stream
private void initializeMediaPlayer() {
player = new MediaPlayer();
player.setAudioAttributes( new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build());
try {
player.setDataSource(url);
player.prepareAsync();
player.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
我还包括了安卓权限:
<uses-permission android:name="android.permission.INTERNET" />
我尝试使用原始流类型(但它会抛出一个已弃用的警告):
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
因此,我改用.setAudioAttributes(...)
。我尝试只运行prepare()
而不是prepareAsync()
,这给出了问题的标题,但我仍然遇到同样的错误。我查看了实际错误定义,但没有找到解决方法(Android MediaPlayer error (1, -2147483648))。我认为这不是源代码的问题,因为我已经尝试过多个其他流。如果我跳过了可能导致错误的关键步骤,请告诉我。
编辑
如果有帮助的话,我一直在检查我的调用,发现MediaPlayer从未调用onPrepared(...)
。我检查了所有我测试的媒体的Content-Type,它们都是audio/MPEG头文件。所以我不明白为什么MediaPlayer无法访问onPrepared。