我正在寻找拍摄从MediaCodec解码器接收的图像帧并将其绘制到Android设备屏幕的最快方法。重要的约束和解释是:
ColorFormat [0] 0x00000013 COLOR_FormatYUV420Planar
ColorFormat [1] 0x00000015 COLOR_FormatYUV420SemiPlanar
ColorFormat [2] 0x7F000001 OMX_SEC_COLOR_FormatNV12TPhysicalAddress
ColorFormat [3] 0x7FC00002 OMX_SEC_COLOR_FormatNV12Tiled
少于66ms的方法将是很好的。少于33ms会很棒。我当前的方法需要80-90毫秒,这很糟糕。 (因为我不想在任何特定方向上歪曲答案,所以我不会打扰描述它。)
最佳答案
最好的选择是直接解码为Surface
。解码为ByteBuffer
会大大降低您的速度。 bigflake上的许多示例(例如ExtractMpegFramesTest
)将解码器的输出发送到屏幕外的表面并使用GLES进行检查,但这是一个简单的更改,使其可以与屏幕上的SurfaceView一起使用。
更新: Grafika具有两个不同的基于MediaCodec的视频播放器,分别将输出发送到SurfaceView和TextureView。