多个MediaCodec实例

时间:2013-10-31 20:27:42

标签: android mediacodec

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

 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)

有人能指出一些关于如何正确执行此操作的准则吗?也许不同的线程?我真的想在不同的视频之间进行平滑过渡,但我需要它至少在某些设备上一致地工作。

非常感谢

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

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

您是否可以同时运行多个MediaExtractors?