如何使用新的 MediaCodec getInputBuffer(int index)
How do I use the new MediaCodec getInputBuffer(int index)
我有一个正在使用 MediaCodec 解码 mp3 音频以使用 MediaPlayer 和 AudioTrack 播放的示例。该示例使用的是 getInputBuffers(),现在已在 API 21+ 中描述。新的 getInputBuffer(int index) returns 一个缓冲区而不是一个数组,MediaCodec 的 API 参考仍然显示了 getInputBuffers() 的用例。
谁能解释一下我需要如何使用新方法?我每次都只得到索引 0 吗?我开始循环并获取每个并制作一个数组,但我没有看到一个地方可以获取可用缓冲区的长度。
您不应该尝试获取所有缓冲区。
在 API 21 之前,您会做 ByteBuffer inputs[] = codec.getInputBuffers()
。然后 index = codec.dequeueInputBuffer()
将 return 一个缓冲区索引,然后您将使用 inputs[index]
,最后使用 codec.queueInputBuffer(index, ...)
.
提交缓冲区
请注意,您一次只能触摸 inputs[]
中的一个元素,并且您只能在 dequeueInputBuffer
和 queueInputBuffer
调用之间触摸该元素。
现在,您一次只使用一个 ByteBuffer
对象数组,现在应该只获取要填充的单个 ByteBuffer
对象。也就是说,在 index = codec.dequeueInputBuffer()
之后,而不是使用 inputs[index]
,调用 codec.getInputBuffer(index)
.
所以基本上,您用来从 getInputBuffers()
获取 return 的数组仍然存在于 MediaCodec
对象内部,但您不需要保留完整数组可用,每次只获取您要使用的单个缓冲区。
我有一个正在使用 MediaCodec 解码 mp3 音频以使用 MediaPlayer 和 AudioTrack 播放的示例。该示例使用的是 getInputBuffers(),现在已在 API 21+ 中描述。新的 getInputBuffer(int index) returns 一个缓冲区而不是一个数组,MediaCodec 的 API 参考仍然显示了 getInputBuffers() 的用例。
谁能解释一下我需要如何使用新方法?我每次都只得到索引 0 吗?我开始循环并获取每个并制作一个数组,但我没有看到一个地方可以获取可用缓冲区的长度。
您不应该尝试获取所有缓冲区。
在 API 21 之前,您会做 ByteBuffer inputs[] = codec.getInputBuffers()
。然后 index = codec.dequeueInputBuffer()
将 return 一个缓冲区索引,然后您将使用 inputs[index]
,最后使用 codec.queueInputBuffer(index, ...)
.
请注意,您一次只能触摸 inputs[]
中的一个元素,并且您只能在 dequeueInputBuffer
和 queueInputBuffer
调用之间触摸该元素。
现在,您一次只使用一个 ByteBuffer
对象数组,现在应该只获取要填充的单个 ByteBuffer
对象。也就是说,在 index = codec.dequeueInputBuffer()
之后,而不是使用 inputs[index]
,调用 codec.getInputBuffer(index)
.
所以基本上,您用来从 getInputBuffers()
获取 return 的数组仍然存在于 MediaCodec
对象内部,但您不需要保留完整数组可用,每次只获取您要使用的单个缓冲区。