gpt4 book ai didi

java - MediaCodec.createInputSurface() 在 Android 模拟器中抛出 IllegalStateException(错误 -38)

转载 作者:行者123 更新时间:2023-11-30 10:33:46 30 4
gpt4 key购买 nike

我有 MediaMuxer:

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);

怎么了?如何解决这个问题呢?帮助。

最佳答案

我遇到了同样的问题。
我认为它不适用于模拟器:https://github.com/google/grafika/issues/2 .在 AVD 中,我将“仿真性能”设置为“硬件”,但并没有解决问题。您应该在真实设备上试用。编辑:好吧,它似乎适用于 API >= 23 的模拟器(即使您的代码应该使用 API 18 运行),但您可能必须在测试期间更改目录,因为:https://developer.android.com/training/permissions/requesting.html

关于java - MediaCodec.createInputSurface() 在 Android 模拟器中抛出 IllegalStateException(错误 -38),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42052567/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com