我正在开发一个应用程序,通过将图形和文本应用于视频来处理视频。我的代码基于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显示原始视频的片段执行的事实感到不满。
我想保持此视图可见,所以我尝试重置()并销毁()MediaPlayer,事实上这使得应用程序在Nexus 7上正常工作,但仍然没有在G3上也没有HTC One。
我需要发布其他东西吗?或者我是否被迫销毁片段并使用不同的片段进行后期处理?
答案 0 :(得分:1)
答案是输入和输出视频都不要超过720p
答案 1 :(得分:0)
有时,唯一的方法是重启设备,编码器继续正常工作。 nexus 5 .. android 4.2.2。
答案 2 :(得分:0)
当我开始并持续停止视频解码时,我在压力测试期间也遇到了完全相同的错误日志。
我的问题是我错过了发布视频解码器实例。之后我没有遇到这个问题。
当超过720p
时,我没有遇到这个问题