使用Android MediaCodec

时间:2015-05-25 23:34:31

标签: android h.264 codec decoding mediacodec

我在使用Android MediaCodec解码h.264时遇到了很多麻烦。我通过自定义API(提供)从无人机接收原始h.264流。 API给了我一个byte []的值。

非常简单,我正在初始化MediaCodec解码器(我在其他地方声明了SPS和PPS):

int width = 640;
int height = 480;
videoFormat = "video/avc";

format = MediaFormat.createVideoFormat( videoFormat, width, height );
format.setString("KEY_MIME", videoFormat );

mCodec = MediaCodec.createDecoderByType( videoFormat );

format.setByteBuffer("csd-0", ByteBuffer.wrap( NAL_sps ));
format.setByteBuffer("csd-1", ByteBuffer.wrap( NAL_pps ));

mCodec.configure( format, null, null, 0 );      

目前,我没有将dequeuedOutputBuffer呈现给Surface,所以我可以检查出来的内容。

奇怪的问题是,一旦我从解码器获得有效的输出缓冲区,结果就是垃圾。对于我的640 x 480测试,我从解码器获得的字节数是正确的(460800字节),我假设是半平面4:2:0(640x480x1.5)。但是,这些值都是垃圾,即0x80 0x80 0x80 ...表示整个字节数组。

有人知道MediaCodec可以解码的h.264限制吗?我已经注意到,根据MediaFormat API,"所有未标记为可选的密钥都是强制性的"。我试图设置所有强制性的' MediaFormat的字段仍然检测不到有效输出。

我尝试将数据直接解码到我的Surface,并注意到大部分窗口都是灰色的,偶尔会看到一些看似有效视频的扫描线,然后再回到灰色。

知道可能导致此行为的原因是什么?

0 个答案:

没有答案