オーディオ ファイルを生の PCM データにデコードして、ローカル ネットワークの再生デバイスにストリーミングしたいと考えています。そのために、API レベル 16 で導入された新しいMediaExtractorクラスとMediaCodecクラスを使用します。このデバイスでは、PCM データが 44,100 kHz で、2 つのチャネルと 16 ビットのサンプル サイズが必要です。入力ファイルがこれらの要件にほぼ一致する限り、これは正常に機能します。ただし、たとえば、32,000 kHz のサンプル レートを使用し、チャネルが 1 つしかない MP3 ファイルをデコードしている場合は、MediaCodec クラスから必要な出力が得られません。
MediaCodec クラスの出力形式を指定できないようです。そこで、別の MediaCodec オブジェクトをインスタンス化して、生データを目的の形式に再エンコードすることにしました。サポートされているメディア形式のリストによると、Android は Android 4.1 以降、PCM/Wave へのエンコードをサポートしています。ただし、 PCM/Wave にエンコードする MediaCodec オブジェクトを作成できません。あらゆる種類の MIME タイプを MediaCodec.createEncoderByType(type); に渡してみました。しかし、私は常に IOException で失敗しました:
java.io.IOException: Failed to allocate component instance
at android.media.MediaCodec.native_setup(Native Method)
at android.media.MediaCodec.<init>(MediaCodec.java:210)
at android.media.MediaCodec.createEncoderByType(MediaCodec.java:194)
[..]
PCM/Wave にエンコードする MediaCodec インスタンスを正常に作成でき、実際の例を提供してくれる人はいますか?