Android 10 trở lên có một số thành phần đa 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 Cửa hàng Google Play hoặc thông qua cơ chế cập nhật qua mạng (OTA) do đối tác cung cấp. Các thành phần Đa 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à bản cập nhật tính năng mà không yêu cầu cập nhật toàn bộ hình ảnh hệ thống.
Các thành phần nội dung nghe nhìn có thể cập nhật có trong các mô-đun sau.
Media. Mô-đun này bao gồm trình trích xuất nội dung nghe nhìn, API
MediaSession2
và APIMediaParser
.Codec nội dung nghe nhìn. Mô-đun này bao gồm các thành phần Codec2 có thể cập nhật của phần mềm.
MediaProvider. Mô-đun này tối ưu hoá 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 thông tin chi tiết về cách thêm trình trích xuất và bộ giải mã tuỳ chỉnh, hãy xem phần Tuỳ chỉnh các thành phần đa phương tiện.
Trình trích xuất nội dung nghe nhìn
Trong Android 9 trở xuống, các trình trích xuất được biên dịch thành một tệp libstagefright.so
duy nhất. Trong Android 10 trở lên, các trình trích xuất nội dung nghe nhìn là các thành phần riêng biệt. Mỗi trình trích xuất đều có tệp .so
riêng với một điểm truy cập cung cấp hàm sniffer để 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 factory tạo một 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 đều được đặt tên (để hỗ trợ gỡ lỗi) và được gắn phiên bản để cho biết trình trích xuất nào là mới nhất.
Khung nội dung nghe nhìn sẽ tự động tải tất cả các tệp .so
trình trích xuất hiện có, vì vậy, bạn có thể tạo trình trích xuất của riêng mình bằng cách thêm một tệp .so
mới mà không cần sửa đổi libstagefright
hoặc các thư viện khung nội dung nghe nhìn khác. Bạn cũng có thể đảm bảo rằng trình trích xuất tuỳ chỉnh được ưu tiên hơn trình trích xuất do Google cung cấp.
MediaSession2 API
API MediaSession2 cho phép các ứng dụng đa phương tiện hiển thị các nút điều khiển truyền tải và thông tin phát cho các quy trình khác, chẳng hạn như khung Android và các ứng dụng khác. Bạn không thể tuỳ chỉnh thành phần này.
MediaParser API
MediaParser API cho phép ExoPlayer sử dụng hiệu quả các trình phân tích cú pháp vùng chứa nội dung nghe nhìn của khung để trích xuất các mẫu nội dung nghe nhìn từ vùng chứa nội dung nghe nhì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
. API và việc triển khai 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 đó.
Bạn không thể tuỳ chỉnh MediaParser API. Để kiểm thử MediaParser, hãy sử dụng các kiểm thử trong cts/tests/tests/mediaparser/
.
Bộ mã hoá và giải mã nội dung nghe nhìn
Mô-đun Bộ mã hoá và giải mã nội dung nghe nhìn bao gồm các thành phần Codec2 có thể cập nhật. Khả năng hỗ trợ tuỳ chỉnh sẽ khác nhau giữa các bản phát hành:
Trong Android 11 trở lên (cụ thể là Bản cập nhật hệ thống Google Play v292100200), bạn có thể tuỳ chỉnh các tham số để phân bổ bộ nhớ ION (xem bên dưới để biết thông tin chi tiết).
Trong Android 9 trở xuống, bạn không thể cập nhật API codec OMX, nhưng vẫn có thể sử dụng API này trong phân vùng của 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 phiên bản 292100200 trở lên, bạn có thể tuỳ chỉnh các tham số sau để phân bổ bộ nhớ ION.
Tham số | Giá trị mặc định | Mô tả |
---|---|---|
heapMask |
0xFFFFFFFF |
Cho phép tất cả các loại heap. |
allocFlags |
0 |
Chưa đặt cờ. |
minAlignment |
0 |
Không có sự liên kết. |
Cách ghi đè các thông 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 tuỳ 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
manifest.xml
của thiết bị.<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à phần phụ thuộc
Mô-đun Media (com.android.media
) và mô-đun Media Codec (com.android.media.swcodec
) ở định dạng APEX. Các thành phần đa phương tiện đi kèm chỉ dựa vào API NDK.
Thông tin 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 một gói APEX chứa mã Java và mã gốc.
Hình 1. Quy trình cập nhật thành phần đa 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 hình ảnh đĩa, đồng thời các quy trình hệ thống đa phương tiện (media.extractor
và media.codec
) sẽ tải các mô-đun đã cập nhật từ điểm gắn kết.