【问题标题】:Multiple MediaCodec instances多个 MediaCodec 实例
【发布时间】:2016-03-31 18:43:17
【问题描述】:

我使用 MediaCodec 库制作了一个视频播放器,我想添加一个播放列表功能。我尝试使用两个 MediaCodec 实例,以便在两个连续视频之间进行更平滑的过渡,但这似乎很危险,在某些设备中(我尝试了带有氰的 S4)它运行良好,但是在带有 TouchWiz 的 S4 中相同代码在媒体编解码器声明中崩溃。这是代码sn-p:

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

 MediaFormat format = extractor.getTrackFormat(0);
 String mime = format.getString(MediaFormat.KEY_MIME);

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

 MediaExtractor extractor2 = new MediaExtractor();
 extractor2.setDataSource(path2);

 MediaFormat format2 = extractor2.getTrackFormat(0);
 String mime2 = format.getString(MediaFormat.KEY_MIME);

 extractor2.selectTrack(0);
 MediaCodec decoder2 = MediaCodec.createDecoderByType(mime2);
 decoder2.configure(format2, null, null, 0);

我在 TouchWiz S4 上遇到的例外是

E/ACodec(17651):  configureCodec multi window instance fail  appPid : 17651
E/ACodec(17651): [OMX.qcom.video.decoder.avc] configureCodec returning error -38
E/MediaCodec(17651): Codec reported an error. (omx error 0x80001001, internalError -38)

谁能给我一些关于如何正确执行此操作的指南?也许不同的线程?我真的很想在不同视频之间进行平滑过渡,但我需要它至少在某些设备上能够始终如一地工作。

非常感谢

【问题讨论】:

    标签: android android-mediacodec


    【解决方案1】:

    根据我的经验,当资源不足而无法创建相同编解码器的两个实例时,就会出现您的问题。例如,当我尝试并行配置两个 1080p、h264 解码器时,我在 S3 上得到了它,但是有一个 720p 和一个 1080p,或者两个 720p 解码器,运行得很好。尽管没有完美的解决方案,但您可以做什么:

    • 很明显,在这些情况下,等待第一个编解码器完成,然后才配置第二个。

    • 在解码器列表中搜索同一文件的替代解码器。这可能在某些设备上有效,但在其他设备上无效,或者它只是找到一个可能无法实时解码的 sw 解码器(如 S3 上的情况)

    【讨论】:

      【解决方案2】:

      您正在为 format2 使用相同的提取器实例: MediaFormat format2 = >> 提取器

      您是否能够同时运行多个 MediaExtractor?

      【讨论】:

      • 该死,是一个错字,我编辑了,但错误仍然存​​在,我确实将其缩小到仅使用 android 相机拍摄的视频。
      • @roimatola 我很好奇你是否找到了解决方案?
      猜你喜欢
      • 1970-01-01
      • 2014-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 2010-09-24
      • 2017-01-29
      • 2014-03-05
      相关资源
      最近更新 更多