Tuỳ chỉnh thành phần nội dung nghe nhìn

Bạn có thể mở rộng các thành phần của trình trích xuất nội dung nghe nhìn và bộ mã hoá và giải mã nội dung đa phương tiện thông qua nhà cung cấp tiện ích. Bạn không thể tuỳ chỉnh các API MediaSession2 và MediaParser (nhưng bạn có thể tải lên các thay đổi đối với API MediaPlayerMediaSession cũ).

Để hỗ trợ các loại nội dung nghe nhìn khác trong khung nội dung đa phương tiện của Android, bạn cần tạo một bộ trích xuấtbộ giải mã tuỳ chỉnh. Ví dụ: Để thêm hỗ trợ cho video Windows Media trong tệp AVI, bạn cần tạo một tệp AVI Trình trích xuấtBộ giải mã video Windows Media.

Giới thiệu về phần mở rộng

Nếu trình trích xuất nội dung đa phương tiện mặc định không đáp ứng yêu cầu của bạn, bạn có thể đặt trình bổ trợ trích xuất tuỳ chỉnh trong /system/lib[64]/extractors/. Quy trình trích xuất tự động tải các trình bổ trợ trích xuất từ gói APEX do Google cung cấp và từ /system/lib[64]/extractors/.

Tương tự, bạn có thể thiết lập các dịch vụ bộ mã hoá và giải mã đa phương tiện tuỳ chỉnh sử dụng Codec 2.0 giao diện được xác định trong frameworks/av/media/codec2/core/. Để chơi cơ bản Vui lòng tham khảo frameworks/av/media/codec2/hidl/services/. Chiến lược phát hành đĩa đơn điểm truy cập của thư viện là giao diện C2ComponentStore. Ví dụ: hãy tham khảo đến triển khai lưu trữ bộ mã hoá và giải mã phần mềm mặc định tại frameworks/av/media/codec2/vndk/C2Store.cpp.

Khi sử dụng APEX của riêng bạn, hãy định cấu trúc dịch vụ bộ mã hoá và giải mã rồi tải tệp APEX bằng cách sử dụng quy trình tương tự như dịch vụ mediaswcodec. Để làm được điều đó, hãy xác định thư viện dùng chung cấp cao nhất chịu trách nhiệm đăng ký tất cả thành phần C2, sau đó tạo một gói APEX (với các phần phụ thuộc bắc cầu) nằm trong nhà cung cấp phân vùng. Khi quy trình dịch vụ bộ mã hoá và giải mã của nhà cung cấp bắt đầu, quy trình này có thể tải đoạn mã này điểm truy cập cấp cao nhất.

Tạo một công cụ trích xuất

Khi thêm trình trích xuất cho một định dạng mới, hãy đảm bảo rằng trình trích xuất chỉ phụ thuộc vào các API NDK ổn định và không phụ thuộc vào bất kỳ API riêng tư nào. Công cụ trích xuất sẽ triển khai API được xác định bởi frameworks/av/include/media/MediaExtractorPluginApi.h và có thể sử dụng C++ trình bao bọc tiện lợi trong frameworks/av/include/media/MediaExtractorPluginHelper.h. Vì Android 10 trở lên chỉ hỗ trợ phiên bản cao nhất của hãy nhớ tạo mô hình trình trích xuất dữ liệu sau trình trích xuất bằng số phiên bản API cao nhất.

Đặt công cụ trích xuất tuỳ chỉnh vào /system/lib/64/extractors hoặc một APEX của nhà cung cấp, được mở cùng với APEX của Google chứa các công cụ trích xuất của Google. Người nhận xác minh khung đã tải trình trích xuất của bạn, chạy lệnh sau.

adb shell dumpsys media.extractor

Bạn sẽ nhận được danh sách các công cụ trích xuất hiện có, tương tự như sau.

Available extractors:
AAC Extractor: plugin\_version(2), uuid(4fd80eae03d24d729eb948fa6bb54613), version(1), path(/system/lib64/extractors/libaacextractor.so)
AMR Extractor: plugin\_version(2), uuid(c86639c92f3140aca715fa01b4493aaf), version(1), path(/system/lib64/extractors/libamrextractor.so)
FLAC Extractor: plugin\_version(2), uuid(1364b048cc454fda9934327d0ebf9829), version(1), path(/system/lib64/extractors/libflacextractor.so)
MIDI Extractor: plugin\_version(2), uuid(ef6cca0af8a243e6ba5fdfcd7c9a7ef2), version(1), path(/system/lib64/extractors/libmidiextractor.so)
MP3 Extractor: plugin\_version(2), uuid(812a3f6cc8cf46deb5293774b14103d4), version(1), path(/system/lib64/extractors/libmp3extractor.so)
MP4 Extractor: plugin\_version(2), uuid(27575c6744174c548d3d8e626985a164), version(2), path(/system/lib64/extractors/libmp4extractor.so)
MPEG2-PS/TS Extractor: plugin\_version(1), uuid(3d1dcfebe40a436da574c2438a555e5f), version(1), path(/system/lib64/extractors/libmpeg2extractor.so)
Matroska Extractor: plugin\_version(2), uuid(abbedd9238c44904a4c1b3f45f899980), version(1), path(/system/lib64/extractors/libmkvextractor.so)
Ogg Extractor: plugin\_version(2), uuid(8cc5cd06f772495e8a62cba9649374e9), version(1), path(/system/lib64/extractors/liboggextractor.so)
WAV Extractor: plugin\_version(3), uuid(7d61385858374a3884c5332d1cddee27), version(1), path(/system/lib64/extractors/libwavextractor.so)

Nếu trình trích xuất tuỳ chỉnh của bạn hỗ trợ định dạng đã được Trình trích xuất do Google cung cấp, bạn có thể buộc khung sử dụng trình trích xuất của bạn bằng cách bằng cách sử dụng hàm Sniff() để trả về mức độ tin cậy cao hơn so với Giá trị nhận dạng do Google cung cấp.

Khi khung nội dung đa phương tiện tải trình trích xuất của bạn (từ /system/lib/64/extractors hoặc từ APEX của nhà cung cấp), thiết bị sẽ nhận dạng tệp và nhận thông tin về tệp nội dung. Bước tiếp theo là thêm bộ giải mã cho định dạng này để khung có thể hiểu cách phân tích cú pháp nội dung tệp.

Tạo bộ giải mã tuỳ chỉnh

Bạn cần một bộ giải mã tuỳ chỉnh cho mọi định dạng chưa được Bộ giải mã do Google cung cấp. Ví dụ:

  • Để thêm hỗ trợ khung phương tiện cho các tệp AVI chứa MP3, bạn cần một tệp AVI trình trích xuất nhưng không cần bộ giải mã MP3 vì đã có bộ giải mã này.

  • Để thêm hỗ trợ khung phương tiện cho các tệp AVI chứa Windows Media, bạn cần cả trình trích xuất AVI và bộ giải mã Windows Media.

Việc thêm bộ giải mã mới tương tự như thêm bộ giải mã phần cứng của riêng bạn cho AVC hoặc HEVC.

Mặc dù trình trích xuất xuất bản loại MIME của các bản nhạc nội dung đa phương tiện mà chứa, những bộ mã hoá và giải mã hỗ trợ loại MIME này cần phải có mặt được hỗ trợ đầy đủ. Chuỗi loại MIME thực tế được sử dụng hoàn toàn là một thoả thuận giữa trình trích xuất và bộ mã hoá và giải mã (chuỗi không cần phải thêm vào tệp MediaDefs.h).

Tích hợp với trình quét nội dung nghe nhìn

Trình quét nội dung nghe nhìn sẽ tìm các loại tệp mới và thêm các loại tệp đó vào cơ sở dữ liệu nội dung nghe nhìn. Để trình quét nội dung đa phương tiện xử lý loại tệp tuỳ chỉnh của bạn, trình quét cần biết về sản phẩm đó. Trong Android 10 trở lên, MimeUtils (inch libcore) duy trì mục ánh xạ MIME đến tiện ích. Trước đó, việc liên kết này được xử lý trong tệp MediaFile.java, vẫn chứa dữ liệu ánh xạ từ Loại MIME sang hằng số định dạng MTP.

Công cụ trích xuất có thể xuất danh sách đuôi tệp mà họ hỗ trợ (chẳng hạn như MP3 hoặc MP4). Tuy nhiên, chỉ LegacyMediaScanner mới sử dụng định dạng đó; không ảnh hưởng đến ModernMediaScanner được sử dụng theo mặc định.