使用原始H.264字节缓冲区中的适当MediaFormat配置MediaCodec

时间:2016-12-19 09:01:16

标签: android h.264 mediacodec

我必须使用Android MediaCodec API解码H.264流。问题是我此时不知道输出流的大小(我的意思是帧的分辨率:640x360?1280x720?1920x1080?...)。我使用自己的访问/解复用程序代码将输入流作为ByteBuffer对象获取。创建我的MediaCodec的第一步是:

MediaCodec mediaCodec = MediaCodec.createDecoderByType("video/avc");

然后,要配置它,我希望有正确的MediaFormat信息来配置我的MediaCodec对象。目前,我这样做:

MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", 1280, 720);

但是大小并不总是1280x720而我的MediaFormat需要更多信息(在某些测试设备上,解码器会产生奇怪的结果,但在其他测试设备上工作正常)。我阅读了文档,但我发现我们可以使用MediaFormatMediaExtractor获得正确的getTrackFormat(/* idx */);。但是如何将MediaExtractor用于我的原始ByteBuffersetDataSource(...)只能处理文件描述符或uris)?还有其他方法可以处理吗?

谢谢!

编辑:我从我的流中提取了SPS和PPS,并在配置步骤(通过MediaFormat)执行时将其提供给编解码器:

mediaFormat.setByteBuffer("csd-0", bufferSPS);
mediaFormat.setByteBuffer("csd-1", bufferPPS);
/*...*/
mediaCodec.configure(mediaFormat, null, null, 0);

0 个答案:

没有答案