如何从MediaCodec输出缓冲区中获取pcm数据缓冲区

How to get pcm data buffers from MediaCodec output buffers?

本文关键字:缓冲区 获取 pcm 数据 输出 MediaCodec      更新时间:2023-10-16

我想将mp3文件解码为pcm或wav数据。(Android应用程序:API 20)

我使用这种方法来解码mp3中的数据,但在使用C++的原生平台上。

解码后,我知道从解码器填充的输出缓冲数据是"声音/原始"格式。这个缓冲数据存储在uint8_t*中,所以它是uint8_t(字节)数组(0-255之间的值)。

如果可能的话,我如何将这些数组转换为pcm或wav格式?

音频解码器目前都返回16位PCM音频,因此只需将uint8_t*转换为int16_t*,即可读取PCM样本。如果您有size字节的数据,则可以从int16_t*指针读取size/2样本。您可能还想从输出格式中检查AMEDIAFORMAT_KEY_CHANNEL_COUNT——如果您总共有size/2个样本,那么每个通道将有size/(2*channels)个样本元组。