14

最近、Android でAAC+ ラジオ ストリームをストリーミングMediaPlayerする際の問題に直面しています。ドキュメントに関しては、Android 4.1 で AAC+ のストリーミングをサポートする必要があります。(テスト デバイスは Android 4.2.2 を搭載した Nexus 2 です)

関連する質問をいくつか見つけました (こちらこちら、またはこちらを確認してください) が、それらは主に古い Android バージョンに関連しているか、4.1 のリリースより前の日付です。AACPlayerAndroidライブラリを見つけましたが、そこでライセンスを購入する必要があります..

AACPlus ストリームをストリーミングしようとすると、MediaPlayer はMediaPlayerError (1,-2147483648)「サポートされていないメディア形式」として定義されている をスローします。ただし、エミュレーターで同じ AAC+ ストリームを開始すると、正常に動作します!

私がこれまでに試したこと:

  • エミュレータで同じコードを試すとうまくいく?!? (なぜ..ローカルマシンでコーデックがサポートされているのでしょうか?)

  • 4.1 または 4.2 で他の 2 つのデバイスをテストしても失敗します

  • 手動ヘッダーと を使用して AAC+ ストリームを設定しますがsetDataSource(String path)、機能しません (http ヘッダーの変更も失敗します)。

  • 新しいSimpleMediaPlayerプロジェクトをセットアップします->失敗します

  • Android デバイスが間違った URL にリダイレクトされた場合、ネットワーク トラフィックをチェックしようとしています。実際に をCharles使ってデバイスを接続しましProxyたが、Android ブラウザしか監視できませんでした。それでもリダイレクトは正しいと思います!

これが私の Streaming.class の setDataSource の実装です

public AmplifyMediaPlayer(PlayerStationObject playerStationObject, Context context) {
     super();
     this.setAudioStreamType(AudioManager.STREAM_MUSIC);
     this.mCurrentStationObject = playerStationObject;
     try {
        //AAC+ TestStream #1: NOT WORKING
        //Uri uri = Uri.parse("http://up-gc2.webnow.com.br/alpha.aac");

        //AAC+ TestStream #2: NOT WORKING   
        //Audio codec: 64 kbit/s 44.1 kHz AAC+, 128 kbit/s 44.1 kHz MP3
        //Uri uri = Uri.parse("http://relay.publicdomainproject.org:80/jazz_swing.aac   ");

        //Setting HTTP header for fixing some issues with normal setDataSource Header from Android
        //User-Agent "iTunes" was set to force re-direct to shoutcast streaming url     
        Map<String, String> headers = new HashMap<String, String>();
        headers.put("User-Agent", "iTunes");

        setDataSource(context, uri, headers);

        //AAC Codec works fine...
        //setDataSource("http://fri.net.pl:8000/fri");

        prepareAsync();

        //...

だから実際に私は次の質問をしています:

サポートされているはずの Android 4.1 以降で ACC+ ストリームを再生できないのはなぜですか?

Android から MediaPlayer クラスで正常にストリーミングできる ACC+ ストリームを持っている人はいますか? (私のプレーヤー統合に何かがあるかどうかを確認するためだけに)

ACC+ がサポートされていない場合、問題をどのように解決したか、適切なライブラリまたはサンプル プロジェクトを知っていますか?

ありがとう、または提案やアドバイス!

テストしたその他の AAC+ ストリーム: http://jam-aacp.rautemusik.fm

編集 これまでのところ、私は次のようになりました:それは不可能です。AACP-Decoder Library は優れたソリューションですが、まだ安定していません。Androidがこれをすぐにサポートすることを願っています。同意しない場合は、コメントしてください。

4

3 に答える 3

3

私のアプリでも同じ問題がありました。

私は MediaPlayer でたくさんプレイしましたが、成功しませんでした。古いAndroidバージョンでMP3ストリームをストリーミングするために使用されるアプリ内のプロキシでテストしました

また、aacplayer-android / aacdecoder- android もテストしましたが、テストではあまり安定していませんでした...

見つけることができなかったので、Android用のBASSに行き着きました。

ただし、 AAC特許ライセンスも必要です*アプリを公開したい場合(私的使用は気にしないと思います...)、非営利団体でない限り、 BASSライセンスも必要です。

*) Android アプリは、消費者向け PC ソフトウェアとしてではなく、消費者向け製品としてカウントされます...アプリで犯した間違いを避けるためです...

[更新]
なぜ特許料が必要なのですか?
製品 (この場合はアプリ) が独自のデコーダー (またはエンコーダー) を持ってくるとすぐに料金を支払う必要があります。BASS と aacdecoder-android の両方が独自のデコーダー コードを持ってくるため、AAC ライセンスが必要です。ホストシステムで利用可能なデコーダーを使用できる場合にのみ (ホストシステムの開発者 (この場合は Google) がライセンスを取得/支払います)、それは「無料」です。しかし、現在、デバイスコーデックにアクセス/使用する方法がないようです...

于 2013-03-13T13:00:08.007 に答える
0

これも調べたところ、独自のデコーダーを含める場合はライセンス料を支払う必要があることがわかりました。

Vialicensing (AAC) は次のように回答しました。

「アプリに AAC エンコーダーまたはデコーダーが含まれないように、Android のネイティブ AAC サポートを利用する場合、ライセンスの必要性や義務はありません。あなたの製品は特許を侵害していません。」</ p>

つまり、ロイヤルティなしで AAC を再生できる唯一の方法は、ネイティブの Android プレーヤーが組み込みのデコーダーで AAC をサポートしている場合です。見た目では、4 ではこれがサポートされていません。プレーヤーに AAC ストリームを供給しようとしましたが、永久にバッファリングされます。

于 2016-04-04T11:44:15.913 に答える
0

Nexus 2 を USB で接続して実行adb shellし、ターミナルを取得できる場合はstagefright、サポートされている利用可能なコーデックとプロファイルを確認するために使用できます。

たとえば、stagefright -landstagefright -pは 2 つの便利なコマンドです。

于 2013-03-12T00:54:49.053 に答える