Android 如何使用新的MediaCodec getInputBuffer(int索引)
我有一个例子,我正在使用MediaCodec解码mp3音频,以便使用MediaPlayer和AudioTrack播放。该示例使用的是getInputBuffers(),它现在已在API 21+中被去除。新的getInputBuffer(int index)返回一个缓冲区而不是数组,MediaCodec的API参考仍然显示getInputBuffers()的用例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吗?我开始循环并获取每个缓冲区,然后创建一个数组,但我看到没有一个地方可以获取
有人能解释一下我需要如何使用新方法吗?我每次都只得到索引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
对象内部,但是您不需要保持完整的数组可用,只需要获取每次要使用的单个缓冲区