módulos de mídia

O Android 10 ou superior inclui vários componentes de mídia atualizáveis ​​que permitem a atualização de componentes da estrutura por meio da infraestrutura da Google Play Store ou por meio de um mecanismo over-the-air (OTA) fornecido por parceiros. Os componentes de mídia são agrupados em módulos que permitem fornecer atualizações de segurança e 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 Personalização de 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 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 novo.

A estrutura de mídia carrega automaticamente todos os arquivos .so de extração 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 seja preferido ao 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 a outros processos, como a estrutura 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êineres de mídia para extrair amostras de mídia de contêineres de mídia. MediaParser inclui as seguintes alterações 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 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 detalhes abaixo).

  • 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 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 são permitidos.
allocFlags 0 Nenhum sinalizador definido.
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 de ION personalizados.

  2. Adicione o seguinte código ao dispositivo 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>
    

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 de APIs 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. Fluxo de atualização do componente de mídia

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