我正在尝试使用 Android 的 MediaCodec 套件编写音频重采样器。
我目前正在将 MP3 立体声音频文件输入 MediaExtractor,然后由 MediaCodec 解码。源音频的采样率为 48000。
我不明白的是我从解码器收到的前四个输出缓冲区:
- 尺寸 0,时间 0
- 大小 0,时间 24000
- 尺寸 4312,时间 48000
- 尺寸 4608,时间 72000
- 尺寸 4608,时间 96000
- 等等
从这个答案,这个答案和这篇文章,我相信前两个缓冲区只是传播“编码器延迟”,可能会被丢弃。但是,我列出的第三个缓冲区让我陷入了循环。
对于缓冲区 #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 时间开始播放,然后在 72000 us 标记之前暂停,此时它开始连续播放,没有中断。
似乎更有可能在缓冲区#3 的数据之前有 296 个隐藏的 0,但是我的代码中的任何变量似乎都没有指示这个偏移量。任何人都可以为我阐明这一点吗?