我打算将原始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]错误(0x80001001)
e/mediacodec(21756):编解码器报告了一个错误。(OMX错误0x80001001,
内部错误-2147483648)
这方面的任何帮助都是有用的。

最佳答案

找到问题的解决方法。在创建另一个编解码器之前,我没有释放该编解码器。在Intel x86设备上运行的Samsung Tab 3上不允许有多个编码器实例。在android设备中,这种行为是非常不一致的;考虑到我测试过代码的其他设备。

09-04 22:45