【问题标题】:Decoding the output buffer from MediaCodec从 MediaCodec 解码输出缓冲区
【发布时间】:2013-08-25 01:05:46
【问题描述】:

我正在使用 Android MediaCodec 库来解码存储在文件系统上的视频。我得到一个看起来合法的输出缓冲区(带有正确的bufferinfo.offsetsize)。它的格式似乎是 256(即 JPEG)。我尝试用BitmapFactory.decodeByteArray解码,结果却是null

有人知道确定输出缓冲区格式的正确方法吗?开始解码输出字节数组的正确方法是什么?

【问题讨论】:

    标签: android android-mediacodec


    【解决方案1】:

    MediaCodec 颜色格式由MediaCodecInfo.CodecCapabilities 类定义。 256 在内部使用,通常并不意味着您有 JPEG 数据的缓冲区。这里的混淆可能是因为您正在查看 ImageFormat 类中的常量,但这些仅适用于相机输出。 (例如,ImageFormat.NV16 是 YCbCr 格式,而 COLOR_Format32bitARGB8888 是 RGB,但两者的数值都是 16。)

    MediaCodec 使用的一些示例,包括到练习 MediaCodec 的 CTS 测试的链接,可以在 here 找到。在某些设备上,您将无法解码来自ByteBuffer 输出的数据,而必须解码为Surface

    【讨论】:

    • 我其实有点想通了。 MediaCodec 有一个名为“输出格式已更改”的“事件”。在这里,您可以访问一个新的 MediaFormat 对象,该对象应该具有输出缓冲区的颜色格式。就我而言,它不是 256(JPEG 数据)。它来自 MediaCodecInfo.CodecCapabilities 类 - developer.android.com/reference/android/media/…
    • 是的。如果您在我链接的页面上查看EncodeDecodeTest.java,它会在第 619 行获取格式,并将其传递给checkFrame()。在第 966 行,将颜色格式与已知格式进行比较,以决定如何进行。
    猜你喜欢
    • 2016-05-01
    • 1970-01-01
    • 2014-10-06
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    相关资源
    最近更新 更多