我正在尝试使用Amazon S3制作Android流媒体歌曲的媒体播放器。 我在公共场合制作了歌曲,当我用bowser流动它时它工作正常。 但是当它来到android时,它会抛出一个类似的异常。
11-20 01:28:37.720: W/System.err(736): java.io.FileNotFoundException: /https:/s3.amazonaws.com/soul-media/mp3s/1234.mp3: open failed: ENOENT (No such file or directory)
这是我的播放器代码
MediaPlayer mid= new MediaPlayer();
try {
FileInputStream fid= new FileInputStream("https://s3.amazonaws.com/soul-media/mp3s/1234.mp3");
mid.setDataSource(fid.getFD());
mid.prepare();
mid.start();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
它与Android 4.1一起使用但不能与2.2一起使用,这可能是问题吗? 我还尝试了除Amazon S3以外的一些网址,它确实有用。这与亚马逊有关吗?
答案 0 :(得分:0)
您有什么理由可以跳过创建FileInputStream
并通过this overload致电mid.setDataSource("https://s3.amazonaws.com/...")
吗?这有用吗?
编辑:
显然,不应该为流调用prepare
,而应该调用prepareAsync
,它应该立即返回,如下所示:
MediaPlayer mid = new MediaPlayer();
try {
mid.setDataSource("http://soul-media.s3.amazonaws.com/mp3s/1234.mp3");
mid.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
mid.setOnErrorListener(new OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
return false;
}
});
mid.prepareAsync();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
这有帮助吗?