Android 如何使用新的MediaCodec getInputBuffer(int索引)

Android 如何使用新的MediaCodec getInputBuffer(int索引),android,mp3,android-mediaplayer,android-mediacodec,audiotrack,Android,Mp3,Android Mediaplayer,Android Mediacodec,Audiotrack,我有一个例子,我正在使用MediaCodec解码mp3音频,以便使用MediaPlayer和AudioTrack播放。该示例使用的是getInputBuffers(),它现在已在API 21+中被去除。新的getInputBuffer(int index)返回一个缓冲区而不是数组,MediaCodec的API参考仍然显示getInputBuffers()的用例 有人能解释一下我需要如何使用新方法吗?我每次都只得到索引0吗?我开始循环并获取每个缓冲区,然后创建一个数组,但我看到没有一个地方可以获取

我有一个例子,我正在使用MediaCodec解码mp3音频,以便使用MediaPlayer和AudioTrack播放。该示例使用的是getInputBuffers(),它现在已在API 21+中被去除。新的getInputBuffer(int index)返回一个缓冲区而不是数组,MediaCodec的API参考仍然显示getInputBuffers()的用例


有人能解释一下我需要如何使用新方法吗?我每次都只得到索引0吗?我开始循环并获取每个缓冲区,然后创建一个数组,但我看到没有一个地方可以获取可用缓冲区的长度。

您不应该尝试获取所有缓冲区

在API 21之前,您需要执行
字节缓冲输入[]=codec.getInputBuffers()
。然后
index=codec.dequeueInputBuffer()
将返回一个缓冲区索引,您将使用
inputs[index]
,最后使用
codec.queueInputBuffer(index,…)
提交缓冲区

请注意,在
inputs[]
中,一次绝不会触摸多个元素,并且只允许在
dequeueInputBuffer
queueInputBuffer
调用之间触摸该元素

现在,不再使用一个
ByteBuffer
对象数组,一次只使用一个,而是只获取要填充的单个
ByteBuffer
。也就是说,在
index=codec.dequeueInputBuffer()
之后,不要使用
inputs[index]
,而是调用
codec.getInputBuffer(index)

因此,基本上,您用来从
getInputBuffers()
返回的数组仍然存在于
MediaCodec
对象内部,但是您不需要保持完整的数组可用,只需要获取每次要使用的单个缓冲区