我正在尝试使用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配置文件级别的这些机器,它们都是4级设备,理论上可支持最大分辨率2048 * 1024(https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Levels)。
有人遇到这个问题吗?我尝试在queueInputBuffer
和dequeueOutputBuffer
时修改参数,但未能修复它。
答案 0 :(得分:1)
这个原因是由于使用EXYNOS4412 / EXYNOS4210处理器的三星设备。这些类型的处理器使用Mali-400 MP4 GPU。
SoC集成了ARM Mali-400 MP4 GPU(440 MHz时为15.8 GFLOPS)。典型的智能手机游戏(2012)即使在1280 x 720像素等高分辨率下也能流畅运行。视频可以通过多格式视频解码器(1080p AVI,WMV,H.264,H.263,VC1,MPEG2,MPEG4)加速。 (http://www.notebookcheck.net/Samsung-Exynos-4412-Quad-ARM-SoC.86876.0.html)
因此,如果视频分辨率超过1080P,解码器将被冻结。