Android 从原始H.264字节缓冲区使用正确的MediaFormat配置MediaCodec

Android 从原始H.264字节缓冲区使用正确的MediaFormat配置MediaCodec,android,h.264,android-mediacodec,Android,H.264,Android Mediacodec,我必须用AndroidMediaCodecAPI解码H.264流。问题是此时我不知道输出流的大小(我指的是帧的分辨率:640x360?1280x720?1920x1080?…)。我使用自己的access/demuxer代码作为ByteBuffer对象获取输入流。创建我的MediaCodec的第一步是: MediaCodec mediaCodec = MediaCodec.createDecoderByType("video/avc"); 然后,为了配置它,我希望有适当的MediaFormat信

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

MediaCodec mediaCodec = MediaCodec.createDecoderByType("video/avc");
然后,为了配置它,我希望有适当的
MediaFormat
信息来配置我的
MediaCodec
对象。目前,我有:

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

谢谢

编辑:我从流中提取SP和PPS,并在配置步骤(通过
MediaFormat
)将其提供给编解码器,执行以下操作:

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