2

Amazon S3 から曲をストリーミングする 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の何かですか?

4

1 に答える 1

0

このオーバーロードを介しての作成FileInputStreamと呼び出しをスキップできない理由はありますか? それは動作しますか?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();
}

それは役に立ちますか?

于 2012-11-20T22:23:13.610 に答える