MediaCodec 给出 storeMetaDataInBuffers 跟踪错误
MediaCodec is giving a storeMetaDataInBuffers trace error
我在 Android 中通过 MediaCodec 编码时遇到 logcat 下一个错误。
实际编码工作正常并且输出正确生成,所以我真的不明白为什么我得到这个痕迹。它是无害的错误跟踪,还是我遗漏了什么?
E/ACodec(6438): [OMX.qcom.video.encoder.h263] storeMetaDataInBuffers(输出)失败 w/ err -1010
接下来是我获取跟踪的代码
final int BIT_RATE = 4000000;
final int FRAME_RATE = 30;
final int IFRAME_INTERVAL = 5;
final String MIME_TYPE = "video/avc";
final MediaFormat format = MediaFormat.createVideoFormat(MIME_TYPE, width, height);
format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
format.setInteger(MediaFormat.KEY_BIT_RATE, BIT_RATE);
format.setInteger(MediaFormat.KEY_FRAME_RATE, FRAME_RATE);
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, IFRAME_INTERVAL);
MediaCodec encoder = MediaCodec.createEncoderByType(MIME_TYPE);
//---------------------------------
// NEXT LINE PRODUCES THE TRACE
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
//---------------------------------
这是无害的,大多数设备都会显示这一点。参见 Q12 http://bigflake.com/mediacodec/。
这仅说明编码器不支持第一种信号表面编码方式,因此它使用了其他一些设置方式。 (MediaCodec/ACodec 层可以通过多种方式将其告知各个编码器。)
前面的回答已经表明警告是无害的。关于 log
的一些附加信息及其背后的原因
日志中的此跟踪表明 encoder
不支持 output
端口上的 storeMetadataInBuffers
。对于 encoder
,input
和 output
端口都支持此模式。
此模式用于 input
端口以 metadata
格式传递原始图像数据,即仅传递对 gralloc
句柄的引用,encoder
访问数据。 camera
and/or 其他 screen recording
应用程序使用它来将对 YUV
数据的引用传递给编码器。
output
端口支持 metadata
模式,也可以封装输出 bitstream
数据。例如,当 Miracast
或 WiFi-Display
会话处于活动状态并且正在编码的数据是 安全的 就像高级内容一样,有必要在 encoder
和HDCP
加密模块,期间metadata
格式就派上用场了。没有多少 encoder
支持此模式,因此您会看到此警告。
我在 Android 中通过 MediaCodec 编码时遇到 logcat 下一个错误。
实际编码工作正常并且输出正确生成,所以我真的不明白为什么我得到这个痕迹。它是无害的错误跟踪,还是我遗漏了什么?
E/ACodec(6438): [OMX.qcom.video.encoder.h263] storeMetaDataInBuffers(输出)失败 w/ err -1010
接下来是我获取跟踪的代码
final int BIT_RATE = 4000000;
final int FRAME_RATE = 30;
final int IFRAME_INTERVAL = 5;
final String MIME_TYPE = "video/avc";
final MediaFormat format = MediaFormat.createVideoFormat(MIME_TYPE, width, height);
format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
format.setInteger(MediaFormat.KEY_BIT_RATE, BIT_RATE);
format.setInteger(MediaFormat.KEY_FRAME_RATE, FRAME_RATE);
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, IFRAME_INTERVAL);
MediaCodec encoder = MediaCodec.createEncoderByType(MIME_TYPE);
//---------------------------------
// NEXT LINE PRODUCES THE TRACE
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
//---------------------------------
这是无害的,大多数设备都会显示这一点。参见 Q12 http://bigflake.com/mediacodec/。
这仅说明编码器不支持第一种信号表面编码方式,因此它使用了其他一些设置方式。 (MediaCodec/ACodec 层可以通过多种方式将其告知各个编码器。)
前面的回答已经表明警告是无害的。关于 log
的一些附加信息及其背后的原因
日志中的此跟踪表明 encoder
不支持 output
端口上的 storeMetadataInBuffers
。对于 encoder
,input
和 output
端口都支持此模式。
此模式用于 input
端口以 metadata
格式传递原始图像数据,即仅传递对 gralloc
句柄的引用,encoder
访问数据。 camera
and/or 其他 screen recording
应用程序使用它来将对 YUV
数据的引用传递给编码器。
output
端口支持 metadata
模式,也可以封装输出 bitstream
数据。例如,当 Miracast
或 WiFi-Display
会话处于活动状态并且正在编码的数据是 安全的 就像高级内容一样,有必要在 encoder
和HDCP
加密模块,期间metadata
格式就派上用场了。没有多少 encoder
支持此模式,因此您会看到此警告。