媒體模塊

Android 10 或更高版本包含多個可更新媒體元件,這些媒體元件支援透過 Google Play 商店基礎架構或合作夥伴提供的無線 (OTA) 機制更新框架元件。媒體組件打包在模組中,允許提供安全性更新和功能更新,而無需完整的系統映像更新。

可更新的媒體元件存在於以下模組中。

有關新增自訂擷取器和解碼器的詳細信息,請參閱自訂媒體元件

媒體擷取器

在 Android 9 及更低版本中,提取器被編譯到單一libstagefright.so檔案中。在 Android 10 或更高版本中,媒體提取器是單獨的元件。每個提取器都有自己的.so文件,其中的入口點提供嗅探器函數來確定提取器是否可以處理給定的媒體文件,以及為給定媒體文件創建提取器實例的工廠函數。每個提取器都被命名(以幫助調試)和版本以指示哪個提取器是最新的。

媒體框架會自動載入所有可用的提取器.so文件,因此您可以透過新增新的.so檔案來建立自己的提取器,而無需修改libstagefright或其他媒體框架庫。您還可以確保自訂提取器優於 Google 提供的提取器。

媒體會話2 API

MediaSession2 API 允許媒體應用程式將其傳輸控制和播放資訊公開給其他進程,例如 Android 框架和其他應用程式。該組件無法自訂。

媒體解析器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/中的測試。

媒體編解碼器

Media Codecs 模組包括可更新的軟體 Codec2 元件。不同版本對客製化的支援有所不同:

  • 在 Android 11 或更高版本(特別是Google Play 系統更新 v292100200 )中,您可以自訂 ION 記憶體分配的參數(詳細資訊請參閱下文)。

  • 在 Android 9 或更低版本中,OMX 編解碼器 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 )從安裝點載入更新的模組。