6

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

  1. 无法使用媒体播放器。不允许中间应用。

  2. 必须尽快将来自 MediaCodec 解码器的输出帧绘制到屏幕上(最小化延迟)。

  3. 可用的解码器输出格式如下:
    ColorFormat[0] 0x00000013 COLOR_FormatYUV420Planar
    ColorFormat[1] 0x00000015 COLOR_FormatYUV420SemiPlanar
    ColorFormat[2] 0x7F000001 OMX_SEC_COLOR_FormatNV12TPhysicalAddress
    ColorFormat[3] 0x7FC00002 OMX_SEC_COLOR_FormatNV12Ti

  4. 视频分辨率以及每个输出帧的分辨率为 960x720。

  5. 目标平台是 Galaxy Note II,并且该方法可以特定于该平台(例如,利用可用的硬件功能)。这不需要在其他平台上工作或成为通用解决方案。

花费少于 66 毫秒的方法会很好。少于 33 毫秒会很棒。我目前的方法需要 80-90 毫秒,这很糟糕。(我不会费心去描述它,因为我不想让答案偏向任何特定的方向。)

4

1 回答 1

7

最好的办法是直接解码为Surface. 解码为 aByteBuffer会大大减慢你的速度。bigflake上的一些示例(例如ExtractMpegFramesTest)将解码器的输出发送到屏幕外表面并使用 GLES 对其进行检查,但只需进行简单更改即可使其与屏幕上的SurfaceView一起使用。

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

于 2013-11-26T05:51:15.460 回答