我正在尝试使用Android的MediaCodec套件编写音频重采样器。如何处理Android MediaCodec解码器的第一个输出ByteBuffers?
我目前正在将一个MP3立体声音频文件送入MediaExtractor,然后由MediaCodec解码。源音频的采样速率为48000
我不明白的是我从解码器接收到前四个输出缓冲器:
- 大小为0,时间0
- 大小为0,时间24000
- 大小4312,时间48000
- 大小4608,时间72000
- 大小4608,时间96000
- 等
从this answer,this answer和this article,我相信前两个缓冲区只是传播“编码器延迟”,并可能只是扔出去。但是,我列出的第三个缓冲区会引发一个循环。
对于缓冲#4(及以后),数学作品出来:
((4608 bytes)/(2 bytes/sample)/(2 channels))
/((48,000 samples/sec)/(1,000,000 us/sec))
= 24,000 us (i.e. the change in time between buffers)
这是怎么回事与缓冲区#3,但?一个简单的数据表明,音频开始播放时间48000 us,然后在72000us标记之前暂时停顿,此时它开始连续播放,没有中断。
似乎更有可能在缓冲区#3的数据之前有296个隐藏的0,但是这个偏移量似乎没有被我的代码中的任何变量指示。任何人都可以为我阐明这一点吗?