Módulos de mídia

O Android 10 ou superior inclui vários componentes de mídia atualizáveis ​​que permitem atualizar os componentes da estrutura por meio da infraestrutura da Google Play Store ou por meio de um mecanismo OTA (over-the-air) fornecido pelo parceiro. Os componentes de mídia são empacotados em módulos que permitem fornecer atualizações de segurança e atualizações de recursos sem exigir uma atualização completa da imagem do sistema.

Existem componentes de mídia atualizáveis ​​nos módulos a seguir.

Para obter detalhes sobre como adicionar extratores e decodificadores personalizados, consulte Personalizando componentes de mídia .

Extratores de mídia

No Android 9 e inferior, os extratores são compilados em um único arquivo libstagefright.so . No Android 10 ou superior, os extratores de mídia são componentes separados. Cada extrator tem seu próprio arquivo .so com um ponto de entrada que fornece uma função sniffer para determinar se o extrator pode manipular o arquivo de mídia fornecido e uma função de fábrica que cria uma instância do extrator para o arquivo de mídia fornecido. Cada extrator é nomeado (para ajudar na depuração) e versionado para indicar qual extrator é o mais recente.

A estrutura de mídia carrega automaticamente todos os arquivos extratores .so disponíveis, para que você possa criar seus próprios extratores adicionando um novo arquivo .so sem precisar modificar libstagefright ou outras bibliotecas de estrutura de mídia. Você também pode garantir que um extrator personalizado tenha preferência sobre o extrator fornecido pelo Google.

API MediaSession2

A API MediaSession2 permite que aplicativos de mídia exponham seus controles de transporte e informações de reprodução para outros processos, como a estrutura do Android e outros aplicativos. Este componente não pode ser personalizado.

API MediaParser

A API MediaParser permite que o ExoPlayer faça uso eficiente de analisadores de contêiner de mídia de estrutura para extrair amostras de mídia de contêineres de mídia. O MediaParser inclui as seguintes alterações nos limites do código-fonte:

  • frameworks/base/apex/media/framework/java/android/media/MediaParser.java . API e implementação de camada fina.

  • external/exoplayer/ . Fontes literais do Exoplayer nas quais o MediaParser é construído.

A API MediaParser não pode ser personalizada. Para testar o MediaParser, use os testes em cts/tests/tests/mediaparser/ .

Codecs de mídia

O módulo Media Codecs inclui componentes de software Codec2 atualizáveis. O suporte para personalização difere entre as versões:

  • No Android 11 ou superior (especificamente Google Play System Update v292100200 ), você pode personalizar os parâmetros para alocação de memória ION (veja abaixo para detalhes).

  • No Android 9 ou inferior, a API do codec OMX não é atualizável, mas você ainda pode usá-la na partição do fornecedor.

Alocação de memória ION

No Android 11 ou superior e na atualização do sistema do Google Play v292100200 ou superior, você pode personalizar os seguintes parâmetros para alocação de memória ION.

Parâmetro Valor padrão Descrição
heapMask 0xFFFFFFFF Todos os tipos de heap permitidos.
allocFlags 0 Nenhuma bandeira definida.
minAlignment 0 Sem alinhamento.

Para substituir os parâmetros:

  1. Registre um serviço android.hardware.media.c2 padrão e forneça parâmetros de uso do ION personalizados.

  2. Adicione o seguinte código ao manifest.xml do dispositivo.

    <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>
    

Formato e dependências

O módulo Media ( com.android.media ) e o módulo Media Codec ( com.android.media.swcodec ) estão no formato APEX . Os componentes de mídia incluídos dependem apenas das APIs do NDK.

Atualizações

Durante uma atualização, os componentes da estrutura no dispositivo carregam um pacote APEX que contém Java e código nativo.

Atualizações de mídia

Figura 1. O fluxo de atualização do componente de mídia

Após a estrutura instalar o pacote APEX, o dispositivo reinicializa e monta a imagem de disco e os processos do sistema de mídia ( media.extractor e media.codec ) carregam os módulos atualizados a partir do ponto de montagem.