【问题标题】:FileNotFoundException Amazon S3FileNotFoundException Amazon S3
【发布时间】:2012-11-21 08:18:23
【问题描述】:

我正在尝试在来自 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 以外的一些 url,它可以工作。那么这与亚马逊有关吗?

【问题讨论】:

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


    【解决方案1】:

    您有什么理由不能跳过创建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();
    }
    

    这有帮助吗?

    【讨论】:

    • 是的,我也试过了。但它给了我一个错误说:Parpare Failed
    • 哦,我明白了。我想也许 MediaPlayer 不支持 HTTPS,所以你需要 HTTP URL,这是不同的。使用这个:“soul-media.s3.amazonaws.com/mp3s/1234.mp3”相应地编辑源。让它在我的机器上工作。
    猜你喜欢
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 2010-11-24
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多