6

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

 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)

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

非常感谢

4

2 回答 2

4

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

  • 显而易见的是,在这些情况下,等待第一个编解码器完成,然后才配置第二个编解码器。

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

于 2014-12-03T14:45:44.013 回答
0

您对 format2 使用相同的提取器实例: MediaFormat format2 = >> extractor <<.getTrackFormat(0);

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

于 2013-12-16T09:05:31.840 回答