gpt4 book ai didi

Android MediaCodec - 将音频动态编码为 aac

转载 作者:行者123 更新时间:2023-11-29 18:03:58 26 4
gpt4 key购买 nike

我正在尝试使用 MediaCodec从 Android 将原始音频数据编码为 aac。我通过缺乏很多的 Andoid 文档来工作。我目前可以使用 AudioRecord 录制音频并即时进行编码。

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

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

提前致谢!

最佳答案

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

将有效载荷数据复制到一个数组中,该数组对于您的容器来说足够大,只需添加您的位即可。因此,在互联网上搜索我的解决方案后,我编写了一些 fragment

    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);

关于Android MediaCodec - 将音频动态编码为 aac,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14314589/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com