如何使用新的MediaCodec getInputBuffer(int index)

时间:2015-07-15 00:14:33

标签: android mp3 android-mediaplayer mediacodec audiotrack

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

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

1 个答案:

答案 0 :(得分:7)

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

在API 21之前,您执行ByteBuffer inputs[] = codec.getInputBuffers()。然后index = codec.dequeueInputBuffer()将返回缓冲区索引,并且您使用inputs[index],最后使用codec.queueInputBuffer(index, ...)提交缓冲区。

请注意,您一次只能触摸inputs[]中的多个元素,而且您只能在dequeueInputBufferqueueInputBuffer来电之间进行触摸。

现在,您不再拥有ByteBuffer个对象数组,而只允许您同时触摸一个对象,而现在应该只获取您要访问的单个ByteBuffer填。也就是说,在index = codec.dequeueInputBuffer()之后,请拨打inputs[index],而不是codec.getInputBuffer(index)

基本上,您以前从getInputBuffers()返回的数组仍然存在于MediaCodec对象内部,但您不需要保持整个数组可用,只需获取每次都要触摸的单个缓冲区。