Android 10 以上版本包含多個可更新的媒體元件,可透過 Google Play 商店基礎架構或合作夥伴提供的無線 (OTA) 機制更新架構元件。媒體元件會封裝在模組中,因此不必更新完整系統映像檔,也能提供安全性更新和功能更新。
下列模組包含可更新的媒體元件。
媒體。這個模組包含媒體擷取器、
MediaSession2
API 和MediaParser
API。媒體轉碼器。這個模組包含可更新的軟體 Codec2 元件。
MediaProvider. 這個模組會最佳化索引中繼資料 (SD 卡和 USB 裝置中的音訊、影片和圖片),並透過 MediaStore 公開 API 將資料提供給應用程式。
如要瞭解如何新增自訂擷取器和解碼器,請參閱「自訂媒體元件」。
媒體擷取器
在 Android 9 以下版本中,擷取器會編譯為單一 libstagefright.so
檔案。在 Android 10 以上版本中,媒體擷取器是獨立元件。每個擷取器都有自己的 .so
檔案,其中包含提供 sniffer 函式的進入點,可判斷擷取器是否能處理指定的媒體檔案,以及建立指定媒體檔案擷取器例項的 factory 函式。每個擷取器都會命名 (有助於偵錯),並標示版本,指出哪個擷取器是最新版本。
媒體架構會自動載入所有可用的擷取器 .so
檔案,因此您只要新增 .so
檔案,就能建立自己的擷取器,不必修改 libstagefright
或其他媒體架構程式庫。您也可以確保自訂擷取器優先於 Google 提供的擷取器。
MediaSession2 API
媒體應用程式可透過 MediaSession2 API,將傳輸控制項和播放資訊公開給其他程序,例如 Android 架構和其他應用程式。這個元件無法自訂。
MediaParser API
ExoPlayer 可透過 MediaParser API 善用架構媒體容器剖析器,從媒體容器擷取媒體樣本。MediaParser 包含下列原始碼界線變更:
frameworks/base/apex/media/framework/java/android/media/MediaParser.java
。 API 和精簡層實作。external/exoplayer/
。ExoPlayer 逐字來源,MediaParser 是以這些來源為基礎建構而成。
MediaParser API 無法自訂。如要測試 MediaParser,請使用 cts/tests/tests/mediaparser/
中的測試。
媒體轉碼器
媒體轉碼器模組包含可更新的軟體 Codec2 元件。不同版本支援的自訂項目有所不同:
在 Android 11 以上版本 (具體來說是 Google Play 系統更新 v292100200),您可以自訂 ION 記憶體配置的參數 (詳情請見下文)。
在 Android 9 以下版本中,OMX 編解碼器 API 無法更新,但您仍可在供應商分割區中使用。
ION 記憶體分配
在 Android 11 以上版本和 Google Play 系統更新 v292100200 以上版本中,您可以自訂 ION 記憶體分配的下列參數。
參數 | 預設值 | 說明 |
---|---|---|
heapMask |
0xFFFFFFFF |
允許所有堆積類型。 |
allocFlags |
0 |
未設定任何旗標。 |
minAlignment |
0 |
不一致。 |
如要覆寫參數,請按照下列步驟操作:
註冊預設
android.hardware.media.c2
服務,並提供自訂 ION 使用參數。如要建立新服務,請將frameworks/av/media/codec2/hidl/services/vendor.cpp 檔案複製到存放區,然後視需要修改
StoreImpl::Interface::SetIonUsage()
。如要重複使用 (OMX)
media.codec
程序,請從 frameworks/av/media/codec2/hidl/services/vendor.cpp 複製並註冊StoreImpl
類別,然後貼到現有的mediacodec
檔案 (frameworks/av/services/mediacodec/main_codecservice.cpp)。
在裝置
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>
格式和依附元件
媒體模組 (com.android.media
) 和媒體轉碼器模組 (com.android.media.swcodec
) 採用 APEX 格式。內含的媒體元件只會依賴 NDK API。
更新
更新期間,裝置上的架構元件會載入包含 Java 和原生程式碼的 APEX 封裝。
圖 1. 媒體元件更新流程
架構安裝 APEX 封裝後,裝置會重新啟動並掛接磁碟映像檔,而媒體系統程序 (media.extractor
和 media.codec
) 會從掛接點載入更新後的模組。