2

私は現在、ストリーミング可能なデータソースが提供されているメディアプレーヤーを持っています。HTCThunderboltとSamsungGalaxySIISkyrocketの2つのテストデバイスがあります。

HTCデバイスはファイルを完全に正常にストリーミングできます。ただし、Galaxy sIIはまったく使用できず、メディアプレーヤーのエラーコードが大量に表示されます。

私はメディアプレーヤーに関連するすべてを適切に実装しています...しかし、私はこの問題に頭を悩ませることができません...なぜそれは一方の電話では機能しますが、もう一方の電話では機能しませんか?その同じリンク。

何か案は?以下のデバイスからのログ。必要に応じて私のコードを投稿することもできます。

ありがとう!

HTCデバイスからのログ:

06-25 18:19:23.192: D/MainAudioService(23564): next song is: http://soundcloud.com/stopdroprave/chromeo-night-by-night/download/s-bpPu1
06-25 18:19:26.675: W/MediaPlayer(23564): info/warning (1, 902)
06-25 18:19:28.497: D/dalvikvm(23564): GC_EXTERNAL_ALLOC freed 515K, 50% free 3544K/7047K, external 477K/989K, paused 22ms
06-25 18:19:31.250: D/MainAudioService(23564): Song length in minutes is: -6:5
06-25 18:19:31.250: D/MediaPlayer(23564): start() in
06-25 18:19:31.250: D/MediaPlayer(23564): start() out
06-25 18:19:31.310: I/MediaPlayer(23564): Info (1,902)
06-25 18:19:31.310: D/MainAudioService(23564): On Info in MP: 1and 902
06-25 18:19:50.909: D/MediaPlayer(23564): stop() in
06-25 18:19:50.919: D/MediaPlayer(23564): stop() out
06-25 18:19:50.919: D/MediaPlayer(23564): reset() in
06-25 18:19:50.929: D/MediaPlayer(23564): reset() out
06-25 18:19:50.939: D/MainAudioService(23564): next song is: http://soundcloud.com/stopdroprave/subvibe-mizukis-last-chance/download/s-Jaezp
06-25 18:19:55.433: W/MediaPlayer(23564): info/warning (1, 902)
06-25 18:19:58.656: D/dalvikvm(23564): GC_EXTERNAL_ALLOC freed 503K, 57% free 3099K/7047K, external 1102K/1614K, paused 45ms
06-25 18:20:00.338: D/MainAudioService(23564): Song length in minutes is: -6:39
06-25 18:20:00.338: D/MediaPlayer(23564): start() in
06-25 18:20:00.338: D/MediaPlayer(23564): start() out
06-25 18:20:00.408: I/MediaPlayer(23564): Info (1,902)

SGSIIからのログ:

06-25 18:27:32.797: E/MediaPlayer(24277): stop called in state 0
06-25 18:27:32.797: E/MediaPlayer(24277): error (-38, 0)
06-25 18:27:32.807: D/MainAudioService(24277): next song is: http://soundcloud.com/stopdroprave/doctor-p-watch-out-crazes-locd/download/s-qQhJP
06-25 18:27:32.807: E/MediaPlayer-JNI(24277): setDataSource: outside path in JNI is �x@
06-25 18:27:33.498: E/MediaPlayer(24277): error (1, -2147483648)
06-25 18:27:33.498: E/MediaPlayer(24277): Error (1,-2147483648)
06-25 18:27:33.498: D/MainAudioService(24277): Error in MP: 1 and -2147483648
06-25 18:27:33.498: E/MediaPlayer(24277): stop called in state 0
06-25 18:27:33.498: E/MediaPlayer(24277): error (-38, 0)
06-25 18:27:33.508: D/MainAudioService(24277): next song is: http://soundcloud.com/stopdroprave/digitalism-circle-eric-prydz/download/s-XlYFv
06-25 18:27:33.508: E/MediaPlayer-JNI(24277): setDataSource: outside path in JNI is �x@
06-25 18:27:34.149: E/MediaPlayer(24277): error (1, -2147483648)
06-25 18:27:34.149: E/MediaPlayer(24277): Error (1,-2147483648)
06-25 18:27:34.149: D/MainAudioService(24277): Error in MP: 1 and -2147483648

編集:

ここでデータソースを設定します。

SdrPlaylist p = mPlaylist.get(currentNum);

            String path = p.songUrl;

            artistInfo = p.songName;
            nextSong = Toast.makeText(getApplicationContext(),
                    "Buffering Next Song...", Toast.LENGTH_LONG);
            nextSong.setGravity(Gravity.TOP, 0, 110);
            nextSong.show();

            try {
                Log.d(TAG, "next song is: " + path);

                mediaPlayer.setDataSource(path);

                mediaPlayer.prepareAsync();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
4

2 に答える 2

2

MediaPlayerの状態に関するドキュメント:

ストリームの場合は、prepareAsync()を呼び出す必要があります。これは、十分なデータがバッファリングされるまでブロックするのではなく、すぐに戻ります。

だから私はそれを試すことから始めます。準備が戻った後に準備が終了したと想定する代わりに、OnPreparedListenerを使用してstart()を呼び出す必要があります。

private MediaPlayer mp = new MediaPlayer();
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer arg0) {
        mp.start();

    }
});

mp.reset(); //<--- you probably shouldn't need this here.
mp.setDataSource(soundUri);
mp.prepareAsync();

そうすれば、MediaPlayerが準備される前にstart()を呼び出さないことが保証されます。

この変更後も問題が解決しない場合、次の推測はコーデックに関連していることです。アンドロイドでのメディア再生は少し厄介です、そしてそれはストリーミングメディアに二重に当てはまります。どのタイプのファイルを再生しようとしていますか?

于 2012-06-26T00:13:28.977 に答える
0

ここでメディアプレーヤーのデータソースを設定するのは問題のようです。これを行う方法は次のとおりです。

private MediaPlayer mp = new MediaPlayer();
mp.reset();
mp.setDataSource(soundUri);
mp.prepare();
mp.start();

または、ここで完全な回答を確認できます: https://stackoverflow.com/a/9061259/1084764

于 2012-06-26T00:04:57.680 に答える