Módulos de mídia

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

Os componentes de mídia atualizáveis existem nos seguintes módulos.

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

Extratores de mídia

No Android 9 e versões anteriores, os extratores são compilados em um único arquivo libstagefright.so. No Android 10 ou mais recente, 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 de sniffer para determinar se o extrator pode processar o arquivo de mídia especificado e uma função de fábrica que cria uma instância do extrator para o arquivo de mídia especificado. Cada extrator é nomeado (para ajudar na depuração) e versionado para indicar qual é o mais recente.

O framework de mídia carrega automaticamente todos os arquivos .so de extrator disponíveis. Assim, você pode criar seus próprios extratores adicionando um novo arquivo .so sem precisar modificar libstagefright ou outras bibliotecas do framework de mídia. Também é possível garantir que um extrator personalizado seja preferido ao fornecido pelo Google.

API MediaSession2

A API MediaSession2 permite que apps de mídia exponham os controles de transporte e as informações de reprodução a outros processos, como o framework do Android e outros apps. Esse componente não pode ser personalizado.

API MediaParser

A API MediaParser permite que o ExoPlayer use com eficiência os analisadores de contêiner de mídia do framework para extrair amostras de mídia de contêineres de mídia. O MediaParser inclui as seguintes mudanças nos limites do código-fonte:

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

  • external/exoplayer/. Fontes literais do Exoplayer em que o MediaParser é criado.

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 de codecs de mídia inclui componentes de software Codec2 atualizáveis. O suporte à personalização varia entre as versões:

  • No Android 11 ou mais recente (especificamente atualização do sistema do Google Play v292100200), é possível personalizar os parâmetros de alocação de memória ION (confira os detalhes abaixo).

  • No Android 9 ou versões anteriores, a API de codec OMX não pode ser atualizada, mas ainda é possível usá-la na partição do fornecedor.

Alocação de memória ION

No Android 11 ou mais recente e na atualização do sistema do Google Play v292100200 ou mais recente, é possível 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 flag definida.
minAlignment 0 Nenhum alinhamento.

Para substituir os parâmetros:

  1. Registre um serviço android.hardware.media.c2 padrão e forneça parâmetros de uso de 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 de mídia (com.android.media) e o módulo de codec de mídia (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 do framework no dispositivo carregam um pacote APEX que contém código Java e nativo.

Atualizações de mídia

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

Depois que o framework instala o pacote APEX, o dispositivo é reinicializado e monta a imagem do disco. Os processos do sistema de mídia (media.extractor e media.codec) carregam os módulos atualizados do ponto de montagem.