Android 10 trở lên bao gồm một số thành phần phương tiện có thể cập nhật cho phép cập nhật các thành phần khung thông qua cơ sở hạ tầng Cửa hàng Google Play hoặc thông qua cơ chế không dây (OTA) do đối tác cung cấp. Các thành phần phương tiện được đóng gói cùng nhau trong các mô-đun cho phép cung cấp các bản cập nhật bảo mật và cập nhật tính năng mà không yêu cầu cập nhật hình ảnh toàn bộ hệ thống.
Các thành phần phương tiện có thể cập nhật tồn tại trong các mô-đun sau.
Phương tiện truyền thông. Mô-đun này bao gồm các trình trích xuất phương tiện , API
MediaSession2
và APIMediaParser
.Codec truyền thông . Mô-đun này bao gồm các thành phần Codec2 phần mềm có thể cập nhật.
Nhà cung cấp phương tiện truyền thông . Mô-đun này tối ưu hóa siêu dữ liệu được lập chỉ mục (âm thanh, video và hình ảnh từ thẻ SD và thiết bị USB) và cung cấp dữ liệu đó cho các ứng dụng thông qua API công khai MediaStore .
Để biết chi tiết về cách thêm bộ giải mã và bộ giải mã tùy chỉnh, hãy xem Tùy chỉnh thành phần phương tiện .
Trình trích xuất phương tiện
Trong Android 9 trở xuống, trình giải nén được biên dịch thành một tệp libstagefright.so
duy nhất. Trong Android 10 trở lên, trình trích xuất phương tiện là các thành phần riêng biệt. Mỗi trình trích xuất có tệp .so
riêng với một điểm vào cung cấp chức năng đánh hơi để xác định xem trình trích xuất có thể xử lý tệp phương tiện đã cho hay không và một hàm xuất xưởng tạo phiên bản của trình trích xuất cho tệp phương tiện đã cho. Mỗi trình trích xuất được đặt tên (để trợ giúp gỡ lỗi) và được phiên bản để cho biết trình trích xuất nào là mới nhất.
Khung phương tiện tự động tải tất cả các tệp .so
trình giải nén có sẵn, vì vậy bạn có thể tạo các trình giải nén của riêng mình bằng cách thêm tệp .so
mới mà không cần sửa đổi libstagefright
hoặc các thư viện khung phương tiện khác. Bạn cũng có thể đảm bảo rằng trình trích xuất tùy chỉnh được ưu tiên hơn trình trích xuất do Google cung cấp.
API MediaSession2
API MediaSession2 cho phép các ứng dụng đa phương tiện hiển thị các điều khiển truyền tải và thông tin phát lại của chúng cho các quy trình khác như khung Android và các ứng dụng khác. Thành phần này không thể được tùy chỉnh.
API MediaParser
API MediaParser cho phép ExoPlayer sử dụng hiệu quả các trình phân tích cú pháp bộ chứa phương tiện khung để trích xuất các mẫu phương tiện từ các bộ chứa phương tiện. MediaParser bao gồm những thay đổi sau đối với ranh giới mã nguồn:
frameworks/base/apex/media/framework/java/android/media/MediaParser.java
. Triển khai API và lớp mỏng.external/exoplayer/
. Các nguồn nguyên văn của Exoplayer mà MediaParser được xây dựng trên đó.
Không thể tùy chỉnh API MediaParser. Để kiểm tra MediaParser, hãy sử dụng các thử nghiệm trong cts/tests/tests/mediaparser/
.
Bộ giải mã phương tiện
Mô-đun Media Codecs bao gồm các thành phần Codec2 phần mềm có thể cập nhật. Hỗ trợ tùy chỉnh khác nhau giữa các bản phát hành:
Ở Android 11 trở lên (cụ thể là Google Play System Update v292100200 ), bạn có thể tùy chỉnh thông số phân bổ bộ nhớ ION (xem chi tiết bên dưới).
Trong Android 9 trở xuống, API codec OMX không thể cập nhật được nhưng bạn vẫn có thể sử dụng nó trong phân vùng nhà cung cấp.
Phân bổ bộ nhớ ION
Trong Android 11 trở lên và Bản cập nhật hệ thống Google Play v292100200 trở lên, bạn có thể tùy chỉnh các tham số sau để phân bổ bộ nhớ ION.
Tham số | Giá trị mặc định | Sự miêu tả |
---|---|---|
heapMask | 0xFFFFFFFF | Tất cả các loại heap được cho phép. |
allocFlags | 0 | Không có cờ nào được đặt. |
minAlignment | 0 | Không có sự liên kết. |
Để ghi đè các tham số:
Đăng ký dịch vụ
android.hardware.media.c2
mặc định và cung cấp các thông số sử dụng ION tùy chỉnh.Để tạo một dịch vụ mới, hãy sao chép tệp frameworks/av/media/codec2/hidl/services/vendor.cpp vào kho lưu trữ của bạn, sau đó sửa đổi
StoreImpl::Interface::SetIonUsage()
nếu cần.Để sử dụng lại quy trình
media.codec
(OMX), hãy sao chép và đăng ký lớpStoreImpl
từ frameworks/av/media/codec2/hidl/services/vendor.cpp vào tệpmediacodec
hiện có ( frameworks/av/services/mediacodec/main_codecservice.cpp ).
Thêm mã sau vào tệp kê khai thiết
manifest.xml
.<hal format="hidl"> <name>android.hardware.media.c2</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>IComponentStore</name> <instance>default</instance> </interface> </hal>
Định dạng và sự phụ thuộc
Mô-đun Media ( com.android.media
) và mô-đun Media Codec ( com.android.media.swcodec
) có định dạng APEX . Các thành phần phương tiện đi kèm chỉ dựa vào API NDK.
Cập nhật
Trong quá trình cập nhật, các thành phần khung trên thiết bị sẽ tải gói APEX chứa Java và mã gốc.
Hình 1. Luồng cập nhật thành phần phương tiện
Sau khi khung cài đặt gói APEX, thiết bị sẽ khởi động lại và gắn các tiến trình hệ thống phương tiện và hình ảnh đĩa ( media.extractor
và media.codec
) tải các mô-đun đã cập nhật từ điểm gắn kết.