我正在使用MediaCodec
API来播放我通过以太网端口接收的视频流(H.264)。
根据我从官方文档和各种示例中的理解,我需要执行以下操作。
MediaCodec
的{{1}})video/avc
个实例
H.264
和decoder.configure()
。如果一切顺利,解码器配置正确,没有例外。decoder.start()
后,我们可以向解码器提供所有剩余的帧(已卸载的NAL单元)。 MediaCodec
outputBufferId = decoder.dequeueOutputBuffer(info, 1000);
decoder.releaseOutputBuffer(outputBufferId, true);
在Android 6.0上返回 -3 。
官方文档说明,如果decoder.dequeueOutputBuffer()
期间只有 -1 (dequeueOutputBuffer()
)和 -2 (INFO_TRY_AGAIN_LATER
)出现任何错误返回并且 -3 (INFO_OUTPUT_FORMAT_CHANGED
)已弃用。那我为什么要收到 -3 ?
我该怎么纠正这个?
INFO_OUTPUT_BUFFERS_CHANGED
如果您发现任何其他错误,请告知我们。将不胜感激!
答案 0 :(得分:1)
我没有看到任何说它永远不会被退回的事。文档说明了这一点:
此常量在API级别21中已弃用。 可以忽略此返回值,因为不推荐使用getOutputBuffers()。客户端应该在每次出列时使用get-buffer或get-image方法请求当前缓冲区。
也就是说,如果您正在使用getOutputBuffers(),则需要侦听此返回值并对其执行操作 - 但不建议这样做。如果你没有使用getOutputBuffers(),只需忽略这个返回值,即再次使用相同的参数调用dequeueOutputBuffer()并查看之后返回的内容。