4

デバイスで MP3 ファイルを再生するためにオーディオ ストリーミングを使用していますが、ICS が登場するまで問題はありませんでした。それから私はそれがフォーマットサポートの問題かもしれないと思ったので、次のコードでOGGファイルを試しました:

MediaPlayer mmp= MediaPlayer.create(context,
                      Uri.parse("http://vorbis.com/music/Epoq-Lepidoptera.ogg"));
mmp.start();

これは以前の OS バージョンでは機能しますが、ICS では失敗します。onPreparesListener atcを使用してメディア プレーヤーを作成しようとしましsetDataSource(this, uri)たが、それでも同じエラーが発生します。

04-08 09:52:12.459: D/MediaPlayer(541): クライアント側でファイルを開けませんでした。サーバー側を試してみてください
04-08 09:52:12.489: E/MediaPlayer(541): メディア プレーヤーを作成できません
04-08 09:52:12.529: D/MediaPlayer(541): 作成に失敗しました:
04-08 09:52:12.529: D/MediaPlayer(541): java.io.IOException: setDataSource が失敗しました: status=0x80000000
04-08 09:52:12.529: D/MediaPlayer(541): android.media.MediaPlayer._setDataSource(ネイティブ メソッド) で
04-08 09:52:12.529: D/MediaPlayer(541): android.media.MediaPlayer.setDataSource(MediaPlayer.java:844)
04-08 09:52:12.529: D/MediaPlayer(541): android.media.MediaPlayer.setDataSource(MediaPlayer.java:806)
04-08 09:52:12.529: D/MediaPlayer(541): android.media.MediaPlayer.setDataSource(MediaPlayer.java:761)
04-08 09:52:12.529: D/MediaPlayer(541): android.media.MediaPlayer.create(MediaPlayer.java:695)
04-08 09:52:12.529: D/MediaPlayer(541): android.media.MediaPlayer.create(MediaPlayer.java:676)

私の質問は、ICS で MediaPlayer を使用してオーディオ ファイルをストリーミングする方法ですか? 誰かが動作するコードを持っていますか、それとも特定のファイル形式とエンコーディングが必要ですか? しかし、新しいOSバージョンが下位互換性がないのは残念です...

4

1 に答える 1

0

私も同様に同じ問題を抱えていたので、ギアを切り替えて代わりにこれを行いましたが、うまくいきました。ただし、サウンド ファイルは res/assets フォルダーに保存する必要があります。

        try {
            AssetFileDescriptor afd = getAssets().openFd("mysound.mp3");
            mPlayer = new MediaPlayer();
            mPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
            mPlayer.prepare();
            mPlayer.start();
        } 
        catch (IllegalStateException e) {
            Log.d(TAG, "IllegalStateException: " + e.getMessage());
        }
        catch (IOException e) {
            Log.d(TAG, "IOException: " + e.getMessage());
        }
        catch (IllegalArgumentException e) {
            Log.d(TAG, "IllegalArgumentException: " + e.getMessage());
        }
        catch (SecurityException e) {
            Log.d(TAG, "SecurityException: " + e.getMessage());
        }  

次に、通常の方法でリソースを解放します。

        if(mPlayer != null) {
            if(mPlayer.isPlaying()) mPlayer.stop();
            mPlayer.release();
            mPlayer = null;
        }

これがあなたにとってもうまくいくことを願っています。

于 2012-05-31T19:07:14.083 に答える