关于MediaCodec硬解码输出缓存中的数据

         最近在弄h264视频硬解码的问题,经人推荐找到了Android的MediaCodec类,

这个类可以用来硬解码和编码,当然前提是硬件厂商有对应类型的解码支持。

        网上最常见的用法是将一个surface在初始化的时候传给MediaCodec,然后后

续的渲染操作就不用再费心了。可是因为 某些坑爹的历史遗留原因,我们只能使用

ImageView控件进行显示,这就需要人为的将解码后的数据从输出缓存中取出来,

并转码成bitmap文件,自行渲染,这就需要知道输出缓存中到底是什么数据了。

        经过我和小伙伴的测试,这个输出的数据和机子有关,记得小米2S是YUV420sp

类型的数据来着,具体类型可以从输出缓存的bufferinfo中取出,然后做对应的转码工

作。网上找到某文档说可以在初始化的时候进行设置,好像是setInteger方法,但是

我试了不太管用,所以还是在获取类型后进行转码,吐槽下java转码的效率好低,

1920*1080的ARGB8888要400ms(不保证有效数据哈)。

        当然也可以直接把buffer中的数据输出到Bitmap中,如果是YUVsp就可以看到是

8个灰色的图片排在最上面,然后下面是8个花的,然后找个专业的人看看效果,注意

可能会有硬件对齐的原因导致buffer比理论需要的大,记得把数组搞大,不然会报错的。

       大概就这样,具体使用请自行百度,还有好多问题,困了先不写了,有时间再弄……

你可能感兴趣的:(关于MediaCodec硬解码输出缓存中的数据)