MediaCodec和输出格式

3
我正在尝试使用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个回答

6
解码器的输出格式不能被设置。实际上,在你从dequeueOutputBuffer()接收到更新的MediaFormat之前,你可能不应该甚至检查它——在返回第一块数据之前,你将得到一个MediaCodec.INFO_OUTPUT_FORMAT_CHANGED结果。
如果您想从OpenGL ES访问解码帧,则应从SurfaceTexture创建一个Surface并将其传递给解码器的configure()调用。这更有效,并且不要求您了解任何有关数据格式的信息。
例如,请参见DecodeEditEncodeTest.java CTS测试,特别注意OutputSurface类及其在checkVideoFile()中的使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接