媒體模組

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) 會從掛載點載入更新的模組。