在我的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_TYPE
为MediaFormat.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()
失败原因的见解?问候。
答案 0 :(得分:1)
我的测试是在运行OS 4.3的设备上进行的。似乎这个问题已在4.4及更高版本中得到修复,根据此讨论:https://code.google.com/p/android/issues/detail?id=58834