에서 IllegalStateException이 예외 :MediaCodec.createInputSurface는() 나는 <code>MediaMuxer</code>이 안드로이드 에뮬레이터 (오류 -38)
MediaMuxer mMediaMuxer = new MediaMuxer(new File(Environment.getExternalStorageDirectory(), "video.mp4").getPath(), MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
그리고 코드, 기록 비디오 :
MediaFormat mMediaFormat = MediaFormat.createVideoFormat("video/avc", width, height);
mMediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, CodecCapabilities.COLOR_FormatSurface);
mMediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 128000);
mMediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, fps);
mMediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 10);
MediaCodec mMediaCodec = MediaCodec.createEncoderByType("video/avc");
mMediaCodec.configure(mMediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
Surface mSurface = mMediaCodec.createInputSurface();
...
마지막 문자열 mMediaCodec.createInputSurface()
이 나에게 java.lang.IllegalStateException
를 던졌습니다 . 스택 추적 : 에뮬레이터의
java.lang.IllegalStateException
at android.media.MediaCodec.createInputSurface(Native Method)
at com.mypackage.Cam$Recorder$VideoRecorder.run(Cam.java:307)
그리고 로그 :이 문자열을 관찰
02-05 07:42:55.024: I/OMXClient(2643): Using client-side OMX mux.
02-05 07:42:55.024: I/SoftAVCEncoder(2643): Construct SoftAVCEncoder
02-05 07:42:55.024: E/SoftAVCEncoder(2643): internalSetParameter: StoreMetadataInBuffersParams.nPortIndex not zero!
02-05 07:42:55.024: E/OMXNodeInstance(2643): OMX_SetParameter() failed for StoreMetaDataInBuffers: 0x80001001
02-05 07:42:55.024: E/ACodec(2643): [OMX.google.h264.encoder] storeMetaDataInBuffers (output) failed w/ err -2147483648
02-05 07:42:55.024: I/ACodec(2643): setupVideoEncoder succeeded
02-05 07:42:55.024: E/OMXNodeInstance(2643): createInputSurface requires COLOR_FormatSurface (AndroidOpaque) color format
02-05 07:42:55.024: E/ACodec(2643): [OMX.google.h264.encoder] onCreateInputSurface returning error -38
02-05 07:42:55.024: W/MediaCodec(2643): createInputSurface failed, err=-38
02-05 07:42:55.024: E/TAG(2643): java.lang.IllegalStateException
02-05 07:42:55.224: I/OMXClient(2643): Using client-side OMX mux.
02-05 07:42:55.254: W/SoftAACEncoder2(2643): Requested bitrate 128000 unsupported, using 48000
E/OMXNodeInstance(2643): createInputSurface requires COLOR_FormatSurface (AndroidOpaque) color format
내 Surface
이 COLOR_FormatSurface
에 있어야합니다 말한다, 그러나 나는 이미 그것을
mMediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, CodecCapabilities.COLOR_FormatSurface);
뭐가 잘못 됐니? 이 문제를 해결하는 방법? 도움.
나에게 꽤 좋다. bitrate (높은 값과 낮은 값의 넓은 범위)를 어지럽히고 오류가 해결되는지 확인하십시오. – nyttimangus
@nyttimangus, 어떤 Android 버전을 테스트 했습니까? 이상하지만, 비트율 값을 변경할 때 아무런 변화가 없습니다. 여전히 * KEY_FRAME_RATE * (fps)와 * KEY_I_FRAME_INTERVAL *을 변경하려고했습니다. 도움이되지 않습니다. –
코드를 테스트하지는 않았지만 API 19 및 23의 MediaCodec을 사용한 내 자신의 작업 중 일부를 테스트했습니다.하지만 믿을 만하지만 18과 호환됩니다. 내 비트 전송률을 잘못했을 때 유사한 문제가 발생했다고 생각했습니다. . – nyttimangus