MediaCodec createInputSurface()抛出非法状态异常

时间:2016-05-16 21:57:34

标签: android

在我的Android应用中,我需要在gpu中编码实时摄像头视频。以下是一些相关代码:

    MediaFormat format = MediaFormat.createVideoFormat(MIME_TYPE, WIDTH, HEIGHT);
    format.setInteger(MediaFormat.KEY_COLOR_FORMAT,
            MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
    format.setInteger(MediaFormat.KEY_BIT_RATE, BITRATE);
    format.setInteger(MediaFormat.KEY_FRAME_RATE, FRAME_RATE);
    format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, IFRAME_INTERVAL);

    this._encoder = MediaCodec.createEncoderByType(MIME_TYPE);
    this._encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
    Surface s = this._encoder.createInputSurface();

MIME_TYPEMediaFormat.MIMETYPE_VIDEO_AVC,时,此代码按预期工作。但是,当mime类型为MediaFormat.MIMETYPE_VIDEO_VP8,时,对createInputSurface()的调用会引发非法状态异常。以下是来自logcat的更多信息:

I/ACodec: setupVideoEncoder succeeded
E/OMXNodeInstance: OMX_GetExtensionIndex OMX.google.android.index.storeMetaDataInBuffers failed
E/ACodec: [OMX.google.vpx.encoder] onCreateInputSurface returning error -2147483648
W/MediaCodec: createInputSurface failed, err=-2147483648

我在想设备上有vp8编码器。否则,MediaCodec.configure()将失败。欣赏您对createInputSurface()失败原因的见解?问候。

1 个答案:

答案 0 :(得分:1)

我的测试是在运行OS 4.3的设备上进行的。似乎这个问题已在4.4及更高版本中得到修复,根据此讨论:https://code.google.com/p/android/issues/detail?id=58834