【问题标题】:MediaCodec and the output formatMediaCodec 和输出格式
【发布时间】:2013-10-24 01:58:24
【问题描述】:

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

这是一个代码sn-p

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 纹理。

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

非常感谢您的任何见解

【问题讨论】:

    标签: android android-mediacodec


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 2021-04-12
      • 2019-07-09
      • 2014-04-19
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      相关资源
      最近更新 更多