6

AndroidのMediaPlayerでオーディオストリーマーを作成しようとしています。Android 2.1以降で動作しない場合は、問題ありません。SHOUTcastストリームからオーディオを再生できるようにする必要があります。これが私のコードです:

player = new MediaPlayer();
try {
player.setDataSource("http://87.230.103.107:8000");
player.prepareAsync();
} 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();
}
player.start();

何らかの理由で、このコードは何も再生しません。アプリの権限に関係しているのではないかと思います。誰かが何が起こっているのか知っていますか?

ありがとう!

[更新]次のエラーが発生します:

04-25 23:35:15.432: ERROR/MediaPlayer(283): start called in state 4
04-25 23:35:15.432: ERROR/MediaPlayer(283): error (-38, 0)
04-25 23:35:15.602: ERROR/MediaPlayer(283): Error (-38,0)
04-25 23:35:17.542: INFO/AwesomePlayer(33): calling prefetcher->prepare()
04-25 23:35:18.547: INFO/Prefetcher(33): [0x17650] cache below low water mark, filling cache.
04-25 23:35:18.762: INFO/AwesomePlayer(33): prefetcher is done preparing
04-25 23:35:19.769: ERROR/AwesomePlayer(33): Not sending buffering status because duration is unknown.
4

3 に答える 3

5

返信が遅くなり申し訳ありません。別の問題への回答を探しているときに、これに遭遇しました。

まだ回答が必要な場合は、start()まだ準備中に電話をかけています。PrepareAsync()とは異なり、すぐに戻りますprepare()。ストリームで 'prepare()` を使用する際の問題は、再生を開始するのに十分なデータが得られるまでブロックされることです。

あなたがしたいことは、 を設定しOnPreparedListenerstart()そこから を呼び出すことです。

于 2011-06-22T00:57:46.160 に答える
3

問題は、コンテンツ タイプ「audio/aacp」ストリーミングが直接サポートされていないことです。一部のデコード ライブラリは、「aacp」を再生するために訴えられる可能性があります。以下の解決策を参照してください。

Android 用のフリーウェア Advanced Audio (AAC) デコーダー

このライブラリを使用するには?

詳しくはこちらをご覧ください

使用中は法的な問題を考慮してください

  • プロジェクトhttp://code.google.com/p/aacplayer-android/は GPL の下でライセンスされているため、その上に商用アプリを * 作成できますが、GPL を完全に満たす必要があります - 主にコードを公開することを意味します同じように。* 2 番目のプロジェクト http://code.google.com/p/aacdecoder-android/を使用する場合は、 * コードを公開する必要はありません (ライブラリは LGPL の下でライセンスされています)。
于 2012-01-12T13:38:19.603 に答える
-1

1)prepare()の使用を避け、代わりにprepareAsyc()を使用してください。(または)再生ロジックを動作中のスレッドまたは別のスレッドに配置します。1)player.prepare()の使用を避け、代わりにplayer.prepareAsync();を使用します。

(または)ロジックを別のスレッドに保持します。(インテントサービス、AsyncTaskなどを使用できます)

2)静的コンストラクターMediaPlayer.create(Uri);も試してください。

于 2012-07-10T13:29:44.827 に答える