Android MediaCodec播放h.264文件dequeueOutputBuffer一直返回-1

解析本地h.264文件,通过mCodec.queueInputBuffer将一帧帧数据传入解码器后,通过mCodec.dequeueOutputBuffer查询解码输出,此函数一直是返回-1,没有成功解码。

网上搜索到的文章,有说是surfaceView设置的问题,也有说是创建解码器时要指定分辨率跟h.264文件的视频大小一样。

经过测试,并非上面原因,而是解析h.264线程有误。

解析h.264,就是搜索两个“00 00 01”位置,将 00 00 01和下一个00 00 01(不包括)之前的数据通过queueInputBuffer传入解码器即可。另外,创建解码器时,也不需要指定"csd-0" "csd-1"两个参数数组,因为h.264文件里就有这2个参数帧。

另外,自己测试了几个硬件平台,创建解码器时,设置的width和height跟获取到的surfaceView的width和height大小一样就可以了,800x600、1280x720、1920x1080都可以正常解码显示。

测试过的例子,已经上传到 https://download.csdn.net/download/kinggate518/10587095 。

测试例子源于参考文章: http://blog.csdn.net/a512337862/article/details/72629779  ,感谢博主分享。

猜你喜欢

转载自blog.csdn.net/kinggate518/article/details/81475244