本文档旨在帮助 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/<供应商>/<产品>)中,并将PRODUCT_COPY_FILES
行添加到device.mk
中,如下所示: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 测试可能会失败。