MediaCodec和输出格式

时间:2013-10-23 16:36:48

标签: android mediacodec

我正在尝试使用MediaDecoder类编写视频播放器,我遇到了阻碍我开发的问题,

这是一段代码片段

extractor = new MediaExtractor();
extractor.setDataSource(filename);

MediaFormat format = extractor.getTrackFormat(i);
extractor.selectTrack(0);

MediaCodec decoder = MediaCodec.createDecoderByType(mime);
decoder.configure(format, null, null, 0);

decoder.start();

ByteBuffer[] inputBuffers = decoder.getInputBuffers();
ByteBuffer[] outputBuffers = decoder.getOutputBuffers();

Log.d(TAG, " "+decoder.getOutputFormat());

问题是每个设备的输出格式打印更改都无法将其打印到Open GL纹理。

有没有办法强制解码器输出始终相同的格式?  如果不是,是否有人知道任何可用于转换的库?

非常感谢任何见解

1 个答案:

答案 0 :(得分:4)

无法设置解码器的输出格式。事实上,在您从MediaFormat收到更新的dequeueOutputBuffer()之前,您可能不应该检查它 - 在返回第一个数据块之前,您将获得MediaCodec.INFO_OUTPUT_FORMAT_CHANGED结果。

如果您想从OpenGL ES访问已解码的帧,您应该从Surface创建SurfaceTexture并将其传递到解码器configure()。它效率更高,并且不需要您了解数据格式。

有关示例,请参阅DecodeEditEncodeTest.java CTS test,并特别注意OutputSurface类及其在checkVideoFile()中的使用方式。