本文档旨在帮助原始设备制造商 (OEM) 正确实施对 Android 媒体资源管理器和相关 API 的支持。
最大并发编解码器实例数
CodecCapabilities.getMaxSupportedInstances
接口返回支持的最大并发编解码器实例数。
CTS 测试 testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest)
用于强制在 /etc/media_codecs.xml
中设置正确的最大值。
这是一个示例
... <MediaCodecs> ... <Encoders> <MediaCodec name="OMX.<vendor>.video.encoder.avc" type="video/avc" > ... <Limit name="concurrent-instances" max="13" /> </MediaCodec> ... </Encoders> ... </MediaCodecs>
OEM 可以使用此测试来生成通过测试的并发限制。为此,请执行以下操作
- 首先使用 cts-tradefed 运行测试。
- 评估生成的失败消息。这是一个示例
There was 1 failure: 1) testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest) junit.framework.AssertionFailedError: In order to pass the test, please publish following codecs' concurrent instances limit in /etc/media_codecs.xml: <MediaCodec name="OMX.<vendor>.video.encoder.mpeg4" type="video/mp4v-es" > <Limit name="concurrent-instances" max="13" /> </MediaCodec> <MediaCodec name="OMX.<vendor>.video.encoder.h263" type="video/3gpp" > <Limit name="concurrent-instances" max="13" /> </MediaCodec> <MediaCodec name="OMX.<vendor>.video.encoder.avc" type="video/avc" > <Limit name="concurrent-instances" max="13" /> </MediaCodec> <MediaCodec name="OMX.<vendor>.video.encoder.vp8" type="video/x-vnd.on2.vp8" > <Limit name="concurrent-instances" max="13" /> </MediaCodec> <MediaCodec name="OMX.<vendor>.video.decoder.avc" type="video/avc" > <Limit name="concurrent-instances" max="13" /> </MediaCodec> <MediaCodec name="OMX.<vendor>.video.decoder.avc.secure" type="video/avc" > <Limit name="concurrent-instances" max="4" /> </MediaCodec> <MediaCodec name="OMX.<vendor>.video.decoder.mpeg4" type="video/mp4v-es" > <Limit name="concurrent-instances" max="12" /> </MediaCodec> <MediaCodec name="OMX.<vendor>.video.decoder.h263" type="video/3gpp" > <Limit name="concurrent-instances" max="12" /> </MediaCodec> <MediaCodec name="OMX.<vendor>.video.decoder.vp8" type="video/x-vnd.on2.vp8" > <Limit name="concurrent-instances" max="12" /> </MediaCodec>
- 将测试失败消息中建议的
concurrent-instances
行添加到/etc/media_codecs.xml
文件。 - 重新运行测试以验证其成功。
视频编解码器可实现的帧速率
VideoCapabilities.getAchievableFrameRatesFor
接口返回视频大小的可实现视频帧速率范围。OEM 必须通过放置在 /etc/media_codecs_performance.xml
的 XML 文件为每台设备提供此信息。这些设置通过 com.android.cts.videoperf.VideoEncoderDecoderTest
和 android.media.cts.VideoDecoderPerfTest
CTS 测试进行测试。
OEM 可以使用 CTS 测试来生成通过测试的 XML 文件。为此,请执行以下操作
- 首先使用 cts-tradefed 运行测试。考虑到 Android 性能的可变性,建议多次运行测试,以获得更准确的最小值和最大值。
- 使用提供的 get_achievable_rates.py 脚本生成 XML 文件。
- 将 XML 文件放置在:
/etc/media_codecs_performance.xml
这通常通过将 XML 文件放置在设备项目 (device/<vendor>/<product>) 中,并在device.mk
中添加PRODUCT_COPY_FILES
行来实现,如下所示PRODUCT_COPY_FILES += \ ... device/moto/shamu/media_codecs.xml:system/etc/media_codecs.xml \ + device/moto/shamu/media_codecs_performance.xml:system/etc/media_codecs_performance.xml
- 重新运行性能测试以验证其成功。
安全编解码器和非安全编解码器共存
- supports-secure-with-non-secure-codec — 如果安全编解码器实例和非安全编解码器实例不能同时共存,则应在
media_codecs.xml
文件中将其指示为全局设置。<MediaCodecs> <Settings> <Setting name="supports-secure-with-non-secure-codec" value="false" /> </Settings> <Encoders> …
- supports-multiple-secure-codecs — 如果不支持多个安全编解码器实例共存,则应在
media_codecs.xml
文件中将其指示为全局设置。<MediaCodecs> <Settings> <Setting name="supports-multiple-secure-codecs" value="false" /> </Settings> <Encoders> …
- 请注意,这两个设置默认均为 true,这意味着如果支持它们,则无需将设置行添加到
media_codecs.xml
。 - 如果未正确设置这两个设置,
ResourceManagerTest
CTS 测试可能会失败。