gpt4 book ai didi

android - 使用 Surface 的 MediaCodec 编码器在各种设备上崩溃不一致

转载 作者:行者123 更新时间:2023-11-29 00:21:40 29 4
gpt4 key购买 nike

我正在开发一个应用程序,通过将图形和文本应用到视频来对视频进行后期处理。我的代码是基于Android CTS测试DecodeEditEncodeTest它在 Nexus 4 和 Nexus 5 (4.4) 上运行良好,但在我尝试过的任何其他设备上运行不佳;甚至 4.4 上的 Nexus 7 II 也不行。例如,在 Galaxy S3 上,我收到以下错误:

E/ACodec(17651):  configureCodec multi window instance fail  appPid : 17651
E/ACodec(17651): [OMX.qcom.video.decoder.avc] configureCodec returning error -38
E/MediaCodec(17651): Codec reported an error. (omx error 0x80001001, internalError -38)

相关代码:

        MediaCodecInfo codecInfo = selectCodec(MIME_TYPE);
if (codecInfo == null) {
// Don't fail CTS if they don't have an AVC codec (not here, anyway).
Log.e(TAG, "Unable to find an appropriate codec for " + MIME_TYPE);
return false;
}
if (VERBOSE) Log.d(TAG, "found codec: " + codecInfo.getName());

// We avoid the device-specific limitations on width and height by using values that
// are multiples of 16, which all tested devices seem to be able to handle.
MediaFormat format = MediaFormat.createVideoFormat(MIME_TYPE, mWidth, mHeight);

// Set some properties. Failing to specify some of these can cause the MediaCodec
// configure() call to throw an unhelpful exception.
format.setInteger(MediaFormat.KEY_COLOR_FORMAT,
MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
format.setInteger(MediaFormat.KEY_BIT_RATE, mBitRate);
format.setInteger(MediaFormat.KEY_FRAME_RATE, FRAME_RATE);
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, IFRAME_INTERVAL);
if (VERBOSE) Log.d(TAG, "format: " + format);
output.setMediaFormat(format);

// Create a MediaCodec for the desired codec, then configure it as an encoder with
// our desired properties.
encoder = MediaCodec.createByCodecName(codecInfo.getName());
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);

它在其他设备上以不同的方式失败;我已经尝试过 Nexus 7 II、G3 和 HTC One(没有失败,但创建了一个垃圾视频)。

基于此错误,系统似乎对上述代码是从使用 MediaPlayer 和 SurfaceView 显示原始视频的 Fragment 执行这一事实感到不满。

我想保持此 View 可见,所以我尝试重置 () 和销毁 () MediaPlayer,实际上这使应用程序在 Nexus 7 上正常工作,但在 G3 和 HTC One 上仍然不行.

还有什么我需要发布的吗?或者我是否被迫销毁 fragment 并使用不同的 fragment 进行后期处理?

最佳答案

答案是输入和输出视频都不要超过 720p

关于android - 使用 Surface 的 MediaCodec 编码器在各种设备上崩溃不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22581107/

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