如果Android MediaCodec dequeueOutputBuffer()返回-3

时间:2016-09-08 10:48:59

标签: android h.264 mediacodec

我正在使用MediaCodec API来播放我通过以太网端口接收的视频流(H.264)。

根据我从官方文档和各种示例中的理解,我需要执行以下操作。

  1. 根据mimetype(MediaCodec的{​​{1}})
  2. 创建video/avc个实例
  3. Feed" csd-0"使用SPS帧数据。 SPS帧应以0x00000001
  4. 开头
  5. Feed" csd-1"具有PPS帧数据的缓冲区。 PPS帧应以0x00000001
  6. 开头
  7. 致电H.264decoder.configure()。如果一切顺利,解码器配置正确,没有例外。
  8. 配置decoder.start()后,我们可以向解码器提供所有剩余的帧(已卸载的NAL单元)。
  9. 成功出列后,可以按如下方式将解码后的缓冲区渲染到屏幕上。
  10. 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

    如果您发现任何其他错误,请告知我们。将不胜感激!

1 个答案:

答案 0 :(得分:1)

我没有看到任何说它永远不会被退回的事。文档说明了这一点:

  

此常量在API级别21中已弃用。   可以忽略此返回值,因为不推荐使用getOutputBuffers()。客户端应该在每次出列时使用get-buffer或get-image方法请求当前缓冲区。

也就是说,如果您正在使用getOutputBuffers(),则需要侦听此返回值并对其执行操作 - 但不建议这样做。如果你没有使用getOutputBuffers(),只需忽略这个返回值,即再次使用相同的参数调用dequeueOutputBuffer()并查看之后返回的内容。