错误:OMX.TI.DUCATI1.VIDEO.MPEG4E不支持颜色格式[android]

时间:2013-06-27 09:32:13

标签: android encoder

我正在尝试使用MediaCodec应用编码器。我使用的MediaFormat如下。

 MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/mp4v-es", 640, 480);
    mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 125000);
    mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
    mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV422PackedSemiPlanar);
    mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);

该演示在虚拟机上运行良好。但是,当我在真机(三星Galaxy Tab GT3113)上进行测试时失败了。该演示报告了codec.configure(mediaFormat, null /* surface */, null /* crypto */, MediaCodec.CONFIGURE_FLAG_ENCODE /* flags */); codec.start();行的错误 logcat说:

  

06-24 15:16:54.582:E / ACodec(3146):[OMX.TI.DUCATI1.VIDEO.MPEG4E]   不支持颜色格式19 06-24 15:16:54.582:E / ACodec(3146):   [OMX.TI.DUCATI1.VIDEO.MPEG4E] configureCodec返回错误   -2147483648

     

06-24 15:16:54.582:E / MediaCodec(3146):编解码器报告错误。 (OMX   错误0x80001001,internalError -2147483648)

我已经尝试了Android提供的所有 KEY_COLOR_FORMAT ,但都没有。 谁能帮我?谢谢!

1 个答案:

答案 0 :(得分:4)

可能你正在尝试使用错误的编码器。在启动编码器之前,您应该使用某种方式“探测”现有的编码器:

HashMap<String, CodecCapabilities> mEncoderInfos;
void initEncoderInfos(){
    for(int i = MediaCodecList.getCodecCount() - 1; i >= 0; i--){
        MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);
        if(codecInfo.isEncoder()){
            for(String t : codecInfo.getSupportedTypes()){
                try{
                    mEncoderInfos.put(t, codecInfo.getCapabilitiesForType(t));
                } catch(IllegalArgumentException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

所有信息都将在mEncoderInfos中收集。在此之后,您可以使用最合适的编码器。

换句话说:您不应该假设某些编码器(在您的情况下为“video / mp4v-es”)支持某种颜色格式(在您的情况下为MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV422PackedSemiPlanar)。