无法在Intel x86设备上使用H264(video / avc)编码器,Android 4.2.2

时间:2014-02-13 12:42:22

标签: android x86 intel mediacodec

我打算将原始YUV数据编码为H264数据,我正在使用Android的MediaCodec接口。以下是我为此提供的代码片段:

MediaCodec mEncoder = MediaCodec.createEncoderByType("video/avc");

MediaFormat mVideoFormat = MediaFormat.createVideoFormat("video/avc", 640 , 480);
mVideoFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, CodecCapabilities.COLOR_FormatYUV420SemiPlanar);
mVideoFormat.setInteger(MediaFormat.KEY_BIT_RATE, 64000);
mVideoFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 24);
mVideoFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
mVideoFormat.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AVCProfileBaseline);

mEncoder.configure(mVideoFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mEncoder.start();
ByteBuffer[] mInputVideoBuffers = mEncoder.getInputBuffers();
ByteBuffer[] mOutputVideoBuffers = mEncoder.getOutputBuffers();

虽然在ARM设备上运行良好,但它在我拥有的Intel x86设备上失败(Samsung Tab 3),但有以下消息:

  

E / ACodec(21756):[OMX.Intel.VideoEncoder.AVC] ERROR(0x80001001)

     

E / MediaCodec(21756):编解码器报告错误。 (omx错误0x80001001,   internalError -2147483648)

对此有任何帮助都很有用。

3 个答案:

答案 0 :(得分:3)

找到问题的修复程序。在创建另一个之前,我没有发布我创建的Codec。在Intel x86设备上运行的Samsung Tab 3上不允许使用多个Encoder实例。这种行为在Android设备上非常不一致;与我测试过我的代码的其他设备不同。

答案 1 :(得分:0)

显示的代码不适用于某些ARM设备。

在任何地方都不支持COLOR_FormatYUV420SemiPlanar

您需要在运行时检测可用颜色格式集。请参阅EncodeDecodeTest中的isRecognizedFormat()方法。要传递CTS,设备必须允许其中一种格式。列出了五个,但实际上只有两个(平面和半平面),它们并没有根本不同。

答案 2 :(得分:0)

对于Intel Devices Encoder.getOutput是Crashing,创建了一种媒体格式并直接提供给编码器

MediaFormat mVideoFormat = MediaFormat.createVideoFormat("video/avc", 640 , 480);
mVideoFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
mVideoFormat.setInteger(MediaFormat.KEY_BIT_RATE, 64000);
mVideoFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 24);
mVideoFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);

mTrackIndex = mMuxer.addTrack(mVideoFormat);