Kể từ ngày 27 tháng 3 năm 2025, bạn nên sử dụng android-latest-release
thay vì aosp-main
để xây dựng và đóng góp cho AOSP. Để biết thêm thông tin, hãy xem phần Thay đổi đối với AOSP.
Phần phụ thuộc OEM cho trình quản lý tài nguyên đa phương tiện
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Tài liệu này nhằm giúp các nhà sản xuất thiết bị gốc (OEM) triển khai đúng cách tính năng hỗ trợ cho trình quản lý tài nguyên đa phương tiện Android và các API có liên quan.
Số thực thể bộ mã hoá và giải mã đồng thời tối đa
Giao diện CodecCapabilities.getMaxSupportedInstances
trả về số lượng tối đa các thực thể bộ mã hoá và giải mã đồng thời được hỗ trợ.
Bài kiểm thử CTS testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest)
được dùng để thực thi mức tối đa thích hợp được đặt trong /etc/media_codecs.xml
.
Dưới đây là ví dụ:
...
<MediaCodecs>
...
<Encoders>
<MediaCodec name="OMX.<vendor>.video.encoder.avc" type="video/avc" >
...
<Limit name="concurrent-instances" max="13" />
</MediaCodec>
...
</Encoders>
...
</MediaCodecs>
Nhà sản xuất thiết bị gốc (OEM) có thể sử dụng quy trình kiểm thử này để tạo các giới hạn đồng thời vượt qua quy trình kiểm thử.
Để thực hiện việc này:
- Trước tiên, hãy chạy kiểm thử bằng cts-tradefed.
- Đánh giá thông báo lỗi thu được. Dưới đây là ví dụ:
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>
- Thêm các dòng
concurrent-instances
được đề xuất trong thông báo lỗi kiểm thử vào tệp /etc/media_codecs.xml
.
- Chạy lại quy trình kiểm thử để xác minh quy trình đó thành công.
Tốc độ khung hình có thể đạt được cho bộ mã hoá và giải mã video
Giao diện VideoCapabilities.getAchievableFrameRatesFor
trả về phạm vi tốc độ khung hình video có thể đạt được cho một kích thước video. Nhà sản xuất thiết bị gốc phải cung cấp thông tin này cho từng thiết bị thông qua một tệp XML được đặt tại /etc/media_codecs_performance.xml
. Các chế độ cài đặt này được kiểm thử bằng các bài kiểm thử CTS com.android.cts.videoperf.VideoEncoderDecoderTest
và android.media.cts.VideoDecoderPerfTest
.
Nhà sản xuất thiết bị gốc (OEM) có thể sử dụng các bài kiểm thử CTS để tạo các tệp XML vượt qua các bài kiểm thử. Để thực hiện việc này:
- Trước tiên, hãy chạy các chương trình kiểm thử bằng cts-tradefed. Do hiệu suất của Android có thể thay đổi, bạn nên chạy các bài kiểm thử nhiều lần để có được giá trị tối thiểu và tối đa chính xác hơn.
- Sử dụng tập lệnh
get_achievable_rates.py được cung cấp để tạo tệp XML.
- Đặt tệp XML tại:
/etc/media_codecs_performance.xml
Bạn thường thực hiện việc này bằng cách đặt tệp XML trong dự án thiết bị
(device/<vendor>/<product>) và thêm dòng
PRODUCT_COPY_FILES
vào device.mk
như sau:
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
- Chạy lại các bài kiểm thử hiệu suất để xác minh hiệu quả của các bài kiểm thử đó.
Sự tồn tại đồng thời của bộ mã hoá và giải mã bảo mật và bộ mã hoá và giải mã không bảo mật
- supports-secure-with-non-secure-codec – Nếu thực thể của bộ mã hoá và giải mã bảo mật và thực thể của bộ mã hoá và giải mã không bảo mật không thể cùng tồn tại, thì bạn phải chỉ định đó là chế độ cài đặt chung trong tệp
media_codecs.xml
.
<MediaCodecs>
<Settings>
<Setting name="supports-secure-with-non-secure-codec" value="false" />
</Settings>
<Encoders>
…
- supports-multiple-secure-codecs – Nếu không hỗ trợ việc cùng tồn tại nhiều thực thể bộ mã hoá và giải mã bảo mật, thì bạn phải cho biết điều đó dưới dạng chế độ cài đặt chung trong tệp
media_codecs.xml
.
<MediaCodecs>
<Settings>
<Setting name="supports-multiple-secure-codecs" value="false" />
</Settings>
<Encoders>
…
- Xin lưu ý rằng cả hai chế độ cài đặt đều là true theo mặc định, nghĩa là nếu các chế độ cài đặt này được hỗ trợ, bạn không cần thêm dòng cài đặt vào
media_codecs.xml
.
- Các kiểm thử CTS
ResourceManagerTest
có thể không thành công nếu bạn không thiết lập đúng hai chế độ cài đặt này.
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-27 UTC."],[],[],null,["# OEM dependencies for media resource manager\n\nThis document is intended to help original equipment manufacturers (OEMs)\nproperly implement support for Android media resource manager and related APIs.\n\nMax concurrent codec instances\n------------------------------\n\nThe `CodecCapabilities.getMaxSupportedInstances` interface\nreturns the maximum number of supported concurrent codec instances.\n\nThe CTS test\n`testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest)`\nis used to enforce the proper maximum is set in\n`/etc/media_codecs.xml`.\n\nHere is an example: \n\n```\n...\n\u003cMediaCodecs\u003e\n ...\n \u003cEncoders\u003e\n \u003cMediaCodec name=\"OMX.\u003cvendor\u003e.video.encoder.avc\" type=\"video/avc\" \u003e\n ...\n \u003cLimit name=\"concurrent-instances\" max=\"13\" /\u003e\n \u003c/MediaCodec\u003e\n ...\n \u003c/Encoders\u003e\n ...\n\u003c/MediaCodecs\u003e\n```\n\nOEMs can use this test to generate the concurrent limits that pass the test.\nTo do this:\n\n1. Run the test first using cts-tradefed.\n2. Evaluate the resulting failure message. Here is an example: \n\n ```\n There was 1 failure:\n 1) testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest)\n junit.framework.AssertionFailedError: In order to pass the test, please publish\n following codecs' concurrent instances limit in /etc/media_codecs.xml:\n \u003cMediaCodec name=\"OMX.\u003cvendor\u003e.video.encoder.mpeg4\" type=\"video/mp4v-es\" \u003e\n \u003cLimit name=\"concurrent-instances\" max=\"13\" /\u003e\n \u003c/MediaCodec\u003e\n \u003cMediaCodec name=\"OMX.\u003cvendor\u003e.video.encoder.h263\" type=\"video/3gpp\" \u003e\n \u003cLimit name=\"concurrent-instances\" max=\"13\" /\u003e\n \u003c/MediaCodec\u003e\n \u003cMediaCodec name=\"OMX.\u003cvendor\u003e.video.encoder.avc\" type=\"video/avc\" \u003e\n \u003cLimit name=\"concurrent-instances\" max=\"13\" /\u003e\n \u003c/MediaCodec\u003e\n \u003cMediaCodec name=\"OMX.\u003cvendor\u003e.video.encoder.vp8\" type=\"video/x-vnd.on2.vp8\" \u003e\n \u003cLimit name=\"concurrent-instances\" max=\"13\" /\u003e\n \u003c/MediaCodec\u003e\n \u003cMediaCodec name=\"OMX.\u003cvendor\u003e.video.decoder.avc\" type=\"video/avc\" \u003e\n \u003cLimit name=\"concurrent-instances\" max=\"13\" /\u003e\n \u003c/MediaCodec\u003e\n \u003cMediaCodec name=\"OMX.\u003cvendor\u003e.video.decoder.avc.secure\" type=\"video/avc\" \u003e\n \u003cLimit name=\"concurrent-instances\" max=\"4\" /\u003e\n \u003c/MediaCodec\u003e\n \u003cMediaCodec name=\"OMX.\u003cvendor\u003e.video.decoder.mpeg4\" type=\"video/mp4v-es\" \u003e\n \u003cLimit name=\"concurrent-instances\" max=\"12\" /\u003e\n \u003c/MediaCodec\u003e\n \u003cMediaCodec name=\"OMX.\u003cvendor\u003e.video.decoder.h263\" type=\"video/3gpp\" \u003e\n \u003cLimit name=\"concurrent-instances\" max=\"12\" /\u003e\n \u003c/MediaCodec\u003e\n \u003cMediaCodec name=\"OMX.\u003cvendor\u003e.video.decoder.vp8\" type=\"video/x-vnd.on2.vp8\" \u003e\n \u003cLimit name=\"concurrent-instances\" max=\"12\" /\u003e\n \u003c/MediaCodec\u003e\n ```\n3. Add the `concurrent-instances` lines suggested in the test failure message to the `/etc/media_codecs.xml` file.\n4. Re-run the test to verify its success.\n\nAchievable frame rates for video codecs\n---------------------------------------\n\nThe `VideoCapabilities.getAchievableFrameRatesFor` interface\nreturns the range of achievable video frame rates for a video size. This\ninformation must be provided by the OEM for each device via an XML file placed at\n`/etc/media_codecs_performance.xml`. These settings are tested by\nthe `com.android.cts.videoperf.VideoEncoderDecoderTest` and\n`android.media.cts.VideoDecoderPerfTest` CTS tests.\n\nOEMs can use the CTS tests to generate the XML files that pass the tests. To do this:\n\n1. Run the tests first using cts-tradefed. Given the variability of Android performance, it is recommended the tests are run multiple times to get more accurate minimum and maximum values.\n2. Use the provided [get_achievable_rates.py](https://android.googlesource.com/platform/cts/+/android16-release/tools/cts-media/get_achievable_rates.py) script to generate the XML file.\n3. Place the XML file at: `/etc/media_codecs_performance.xml` \n This is usually done by placing the XML file in the device project (device/*\\\u003cvendor\\\u003e* /*\\\u003cproduct\\\u003e* ) and adding a `PRODUCT_COPY_FILES` line to `device.mk` like so: \n\n ```\n PRODUCT_COPY_FILES += \\\n ...\n device/moto/shamu/media_codecs.xml:system/etc/media_codecs.xml \\\n + device/moto/shamu/media_codecs_performance.xml:system/etc/media_codecs_performance.xml\n ```\n4. Re-run the performance tests to verify their success.\n\nCoexistence of secure codec and non-secure codec\n------------------------------------------------\n\n- supports-secure-with-non-secure-codec --- If the instance of secure codec and the instance of non-secure codec can't coexist at the same time, that should be indicated as global setting in the `media_codecs.xml` file. \n\n ```\n \u003cMediaCodecs\u003e\n \u003cSettings\u003e\n \u003cSetting name=\"supports-secure-with-non-secure-codec\" value=\"false\" /\u003e\n \u003c/Settings\u003e\n \u003cEncoders\u003e\n …\n ```\n- supports-multiple-secure-codecs --- If the coexistence of multiple secure codec instances is not supported, that should be indicated as a global setting in the `media_codecs.xml` file. \n\n ```\n \u003cMediaCodecs\u003e\n \u003cSettings\u003e\n \u003cSetting name=\"supports-multiple-secure-codecs\" value=\"false\" /\u003e\n \u003c/Settings\u003e\n \u003cEncoders\u003e\n …\n ```\n- Note that the both settings are true by default, meaning if they are supported, there's no need to add the setting line to the `media_codecs.xml`.\n- The `ResourceManagerTest` CTS tests may fail if these two settings were not set properly."]]