Android的mediacodec configureFailed(Android mediaco

2019-10-19 05:59发布

继此我曾尝试下面的代码初始化MediaCodec,但它失败了! GitHub的托管项目运行没有任何问题。 更新日志如下

01-27 02:02:25.125: I/OMXClient(8956): Using client-side OMX mux.
01-27 02:02:25.140: I/ACodec(8956): setupVideoEncoder succeeded
01-27 02:02:25.140: E/OMXNodeInstance(1910): OMX_GetExtensionIndex failed
01-27 02:02:25.140: A/ACodec(8956): frameworks/av/media/libstagefright/ACodec.cpp:3234 CHECK_EQ( (status_t)OK,mCodec->initNativeWindow()) failed: 0 vs. -2147483648
01-27 02:02:25.140: A/libc(8956): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 8990 (CodecLooper)

代码 - 法登的答案后更新

format = MediaFormat.createVideoFormat("video/avc", 480, 800);
format.setInteger(MediaFormat.KEY_BIT_RATE,400000 );
format.setInteger(MediaFormat.KEY_FRAME_RATE, 25);
format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar);
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);

coder = MediaCodec.createEncoderByType("video/avc");
//  coder = MediaCodec.createDecoderByType("video/avc");
if(format != null)
    coder.configure(format, mSurface, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
Log.e("After","Configure");

Answer 1:

看起来你不是配置所有的强制性键 。

见MediaFormat文档,并注意它说:“没有标明可选的所有键都是强制性的”。

更新:

它坠毁到一个失败的断言。 由行号和断言消息来看,你正在运行JB-MR1(Android 4.2版本,API 17); 源文件是在这里 。

它抱怨“本地窗口”,这是说它不喜欢你传递的表面既然你配置一个编码器,你不应该传递一个表面在所有的另一种方式 - 这就是只为呈现的输出。 更改mSurfacenull

如果你想通过表面以提供输入,则需要使用MediaCodec#createInputSurface()这是不可用,直到API 18。



文章来源: Android mediacodec configureFailed