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

我正在尝试通过使用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 / *标志* /)处报告错误. codec.start();
日志说:

06-24 15:16:54.582: E/ACodec(3146): [OMX.TI.DUCATI1.VIDEO.MPEG4E] does
not support color format 19 06-24 15:16:54.582: E/ACodec(3146):
[OMX.TI.DUCATI1.VIDEO.MPEG4E] configureCodec returning error
-2147483648

06-24 15:16:54.582: E/MediaCodec(3146): Codec reported an error. (omx
error 0x80001001, internalError -2147483648)

我已经尝试了Android提供的所有KEY_COLOR_FORMAT,但是它们都不起作用.
谁能帮我?谢谢!

解决方法:

可能是您尝试使用错误的编码器.在开始编码器之前,您应该使用某种方法“探测”现有的编码器:

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).

上一篇:为Linux开发


下一篇:Code Search