我正在寻找拍摄从MediaCodec解码器接收的图像帧并将其绘制到Android设备屏幕的最快方法。重要的约束和解释是:

  • 无法使用MediaPlayer。不允许使用任何中间应用程序。
  • 必须尽快将MediaCodec解码器的输出帧绘制到屏幕上(以最小化延迟)。
  • 可用的解码器输出格式如下:
    ColorFormat [0] 0x00000013 COLOR_FormatYUV420Planar
    ColorFormat [1] 0x00000015 COLOR_FormatYUV420SemiPlanar
    ColorFormat [2] 0x7F000001 OMX_SEC_COLOR_FormatNV12TPhysicalAddress
    ColorFormat [3] 0x7FC00002 OMX_SEC_COLOR_FormatNV12Tiled
  • 视频分辨率以及每个输出帧的分辨率为960x720。
  • 目标平台是Galaxy Note II,该方法可以特定于该平台(例如,利用可用的硬件功能)。这不需要在其他平台上工作或成为通用解决方案。

  • 少于66ms的方法将是很好的。少于33ms会很棒。我当前的方法需要80-90毫秒,这很糟糕。 (因为我不想在任何特定方向上歪曲答案,所以我不会打扰描述它。)

    最佳答案

    最好的选择是直接解码为Surface。解码为ByteBuffer会大大降低您的速度。 bigflake上的许多示例(例如ExtractMpegFramesTest)将解码器的输出发送到屏幕外的表面并使用GLES进行检查,但这是一个简单的更改,使其可以与屏幕上的SurfaceView一起使用。

    更新: Grafika具有两个不同的基于MediaCodec的视频播放器,分别将输出发送到SurfaceView和TextureView。

    10-07 19:29
    查看更多