FileNotFoundException Amazon S3

时间:2012-11-20 06:38:30

标签: amazon-s3 audio-streaming android-mediaplayer

我正在尝试使用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以外的一些网址,它确实有用。这与亚马逊有关吗?

1 个答案:

答案 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();
}

这有帮助吗?