我想将音频文件解码为原始 PCM 数据,以将其流式传输到本地网络中的播放设备。为此,我使用 API 级别 16 引入的新MediaExtractor和MediaCodec类。该设备要求 PCM 数据为 44,100 kHz,具有 2 个通道和 16 位样本大小。只要输入文件大致符合这些要求,它就可以正常工作。但是,每当我解码一个 MP3 文件时,它使用 - 例如 - 32,000 kHz 的采样率并且可能只有一个通道,然后我没有从 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 实例,并且可以为我提供一个工作示例?