3

我正在尝试使用 Android 的MediaCodec将原始音频数据编码为 aac。我通过了缺少很多的 Andoid 文档。我目前能够使用AudioRecord录制音频并即时进行编码。

问题是生成的输出似乎无效。没有播放器可以播放,MediaExtractor也无法打开文件。后者可能是因为输出未包装到有效容器中。没有关于如何处理编码器的输入缓冲区大小的明确文档。所以我试图在我再次排队之前完全填充每个输入缓冲区但没有成功。我还尝试使用最后一个缓冲区提交 END_OF_STREAM_FLAG 也没有成功。

是否有人成功使用了 MediaEncoder 并可以提供一些有关如何正确使用它的信息?是否有可能生成像 mpeg4 这样的有效媒体容器?

提前致谢!

4

2 回答 2

2

为它选择一个容器。我更喜欢广告。

将有效负载数据复制到对您的容器足够大的数组中,只需添加您的位即可。所以在网上搜索我的解决方案后,我做了一些片段

    profile =( configParams[0]>>3 )&0x1f;

    frequency_index = (this.configParams[0]&0x7) <<1 | (this.configParams[1]>>7) &0x1;

    channel_config = (this.configParams[1]>>3) &0xf;

    int finallength = encoded_length + 7;       
    ENCodedByteArray[0] = (byte) 0xff;
    ENCodedByteArray[1] = (byte) 0xf1;
    ENCodedByteArray[2] = (byte) ( ((profile - 1) << 6) + (frequency_index << 2) +(channel_config >> 2));
    ENCodedByteArray[3] = (byte) (((channel_config & 0x3) << 6) + (finallength >> 11));
    ENCodedByteArray[4] = (byte)( (finallength & 0x7ff) >> 3);
    ENCodedByteArray[5] = (byte) (((finallength & 7) << 5) + 0x1f) ;
    ENCodedByteArray[6] = (byte) 0xfc;

使用类似的东西

            byte chunkADTS[]=new byte[info.size + 7];
            fillInADTSHeader(chunkADTS,info.size);
            outputBuffers[bR].get(chunkADTS,7,info.size);
            buffer.pushData(chunkADTS);
于 2013-06-28T04:01:39.450 回答
1

您可以使用 MediaCodec AAC 解码器再次解码原始数据。请务必按照在 Android 上使用 MediaCodec API 解码 AAC中所述正确设置它

于 2013-01-15T18:52:42.643 回答