【问题标题】:on some Samsung devices decoding H264 stream at hight resolution with MediaCodec, dequeueOutputBuffer always return -1在使用 MediaCodec 以高分辨率解码 H264 流的某些三星设备上,dequeueOutputBuffer 始终返回 -1
【发布时间】:2015-09-27 08:40:00
【问题描述】:

我正在尝试使用 MediaCodec API 通过 Android 客户端解码 H264 流。 示例代码:

int decoderStatus = decoder.dequeueOutputBuffer(mBufferInfo, TIMEOUT_USEC); 

当远端H264码流分辨率较大时(如:1600*1200),该函数会一直返回-1(MediaCodec.INFO_TRY_AGAIN_LATER),所以解码失败但无法捕获异常。如果分辨率较低(例如 1920*1080、1280*720),则解码机制正常。

这只发生在某些三星设备上:Galaxy S3、Note2 和 note。

我也查了这些支持H264 profile Level的机器,都是Level 4的设备,理论上可以支持最大分辨率大小2048*1024(https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Levels)。

有人遇到过这个问题吗?我尝试修改queueInputBufferdequeueOutputBuffer时的参数,但未能修复。

【问题讨论】:

    标签: android h.264 android-mediacodec


    【解决方案1】:

    这个原因是由于三星设备使用 EXYNOS4412/EXYNOS4210 处理器。这些类型的处理器使用 Mali-400 MP4 GPU。

    SoC 集成了 ARM Mali-400 MP4 GPU(440 MHz 时为 15.8 GFLOPS)。即使在 1280 x 720 像素等高分辨率下,典型的智能手机游戏 (2012) 也能流畅运行。视频可以通过多格式视频解码器(1080p AVI、WMV、H.264、H.263、VC1、MPEG2、MPEG4)进行加速。 (http://www.notebookcheck.net/Samsung-Exynos-4412-Quad-ARM-SoC.86876.0.html)

    因此,如果视频分辨率超过 1080P,解码器将冻结。

    【讨论】:

      猜你喜欢
      • 2015-02-24
      • 1970-01-01
      • 2020-04-29
      • 2016-10-18
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      相关资源
      最近更新 更多