媒體模組

Android 10 以上版本包含多個可更新的媒體元件,可透過 Google Play 商店基礎架構或合作夥伴提供的無線 (OTA) 機制更新架構元件。媒體元件會在模組中一併封裝,讓您能夠提供安全性更新和功能更新,而無須進行完整的系統映像檔更新。

可更新的媒體元件位於下列模組中。

如要進一步瞭解如何新增自訂擷取器和解碼器,請參閱「自訂媒體元件」。

媒體擷取器

在 Android 9 以下版本中,擷取工具會編譯成單一 libstagefright.so 檔案。在 Android 10 以上版本中,媒體擷取器是獨立的元件。每個擷取器都有自己的 .so 檔案,其中的進入點會提供 sniffer 函式,用於判斷擷取器是否可處理指定的媒體檔案,以及 factory 函式,用於為指定的媒體檔案建立擷取器例項。每個擷取器都會命名 (以協助偵錯) 及版本編號,以指出哪個擷取程式是最新的。

媒體架構會自動載入所有可用的擷取器 .so 檔案,因此您可以新增 .so 檔案,以新增自己的擷取工具,無需修改 libstagefright 或其他媒體架構程式庫。您也可以確保系統優先使用自訂擷取器,而非 Google 提供的擷取器。

MediaSession2 API

MediaSession2 API 可讓媒體應用程式將其傳輸控制項和播放資訊公開給其他程序,例如 Android 架構和其他應用程式。您無法自訂這個元件。

MediaParser API

MediaParser API 可讓 ExoPlayer 有效率地使用架構媒體容器剖析器,從媒體容器中擷取媒體範例。MediaParser 包含對原始碼邊界做出的以下變更:

  • frameworks/base/apex/media/framework/java/android/media/MediaParser.java:API 和精簡層實作。

  • external/exoplayer/. 建構 MediaParser 的 Exoplayer 逐字來源。

您無法自訂 MediaParser API。如要測試 MediaParser,請使用 cts/tests/tests/mediaparser/ 中的測試。

媒體轉碼器

媒體轉碼器模組包含可更新的軟體 Codec2 元件。不同版本的自訂支援情形不同:

  • 在 Android 11 以上版本 (特別是 Google Play 系統更新 v292100200) 中,您可以自訂 ION 記憶體配置的參數 (詳情請參閱下方說明)。

  • 在 Android 9 以下版本中,OMX 編解碼器 API 無法更新,但您仍可在供應商分區中使用該 API。

ION 記憶體配置

在 Android 11 以上版本和 Google Play 系統更新 v292100200 以上版本中,您可以自訂下列 ION 記憶體配置參數。

參數 預設值 說明
heapMask 0xFFFFFFFF 允許所有堆積類型。
allocFlags 0 未設定任何旗標。
minAlignment 0 未對齊。

如何覆寫參數:

  1. 註冊預設 android.hardware.media.c2 服務,並提供自訂 ION 用量參數。

  2. 將以下程式碼新增至裝置 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.extractormedia.codec) 從掛接點載入更新後的模組。