gpt4 book ai didi

android - MediaCodec 和输出格式

转载 作者:搜寻专家 更新时间:2023-11-01 08:02:13 26 4
gpt4 key购买 nike

我正在尝试使用 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 纹理。

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

非常感谢任何见解

最佳答案

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

如果您想从 OpenGL ES 访问解码帧,您应该从 SurfaceTexture 创建一个 Surface 并将其传递到解码器 configure() 调用。它更高效,并且不需要您了解任何有关数据格式的信息。

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

关于android - MediaCodec 和输出格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19547410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com