インターネットからストリーミングされたオーディオを再生する Android 携帯用のプログラムを実装しています。おおよそのことは次のとおりです。
- カスタム暗号化形式をダウンロードします。
- 復号化して、通常の MP3 データのチャンクを取得します。
- MP3 データをメモリ バッファ内の生の PCM データにデコードします。
- 生の PCM データを AudioTrack にパイプします
これまでのターゲット デバイスは、Droid と Nexus One です。Nexus One ではすべて問題なく動作しますが、Droid では MP3 のデコードが遅すぎます。Droid に負荷をかけると、オーディオの再生がスキップし始めます。MP3 データを SD カードにデコードすることは許可されていませんが、とにかくそれが問題ではないことはわかっています。
独自の MP3 デコーダーは作成しませんでしたが、MPADEC ( http://sourceforge.net/projects/mpadec/ ) を使用しました。無料で、私たちのプログラムに簡単に統合できました。NDKでコンパイルします。
さまざまなプロファイリング ツールを使用して徹底的に分析した結果、遅れをとっているのはこのデコーダであると確信しています。
私たちが考えているオプションは次のとおりです。
Android NDK でコンパイルできる別の MP3 デコーダーを見つけます。この MP3 デコーダーは、モバイル ARM デバイスで実行するように最適化するか、パフォーマンスを向上させるために整数のみの計算またはその他の最適化を使用する必要があります。
組み込みの Android MediaPlayer サービスは URL を受け取るため、プログラムに小さな HTTP サーバーを実装して、復号化された MP3 を MediaPlayer に提供できる可能性があります。そうすれば、組み込みの MP3 デコーダーを利用できます。
NDK を介して組み込みの MP3 デコーダーにアクセスします。これが可能かどうかはわかりません。
MP3 のデコードを高速化するためにできることについて何か提案はありますか?
-- ロブ・シズ