Mídia

Ícone da HAL de mídia do Android

O Android inclui o Stagefright, um mecanismo de reprodução de mídia no nível nativo que tem codecs integrados com base em software para os formatos de mídia mais usados.

Os recursos de reprodução de áudio e vídeo do Stagefright incluem integração com Codecs OpenMAX, gerenciamento de sessão, renderização sincronizada por tempo, transporte e DRM.

O Stagefright também suporta a integração com codecs de hardware personalizados fornecidos pelo para você. Para definir um caminho de hardware para codificar e decodificar mídia, você deve implementar um codec baseado em hardware como um componente OpenMax IL (Camada de integração).

Observação: as atualizações do Stagefright podem ocorrer pela Segurança mensal do Android de atualização e como parte de uma versão do SO Android.

Arquitetura

Aplicativos de mídia interagem com o framework multimídia nativo do Android de acordo com a arquitetura a seguir.

Arquitetura de mídia do Android

Figura 1. Mídia arquitetura

Framework do aplicativo
No nível do framework do aplicativo, está o código do aplicativo que usa android.media (link em inglês) APIs para interagir com o hardware multimídia.
IPC de vinculação
Os proxies IPC Binder facilitam a comunicação além dos limites do processo. Eles estão localizados no diretório frameworks/av/media/libmedia e comece com a letra "I".
Framework nativo de multimídia
No nível nativo, o Android oferece um framework multimídia que utiliza o mecanismo Stagefright para gravação e reprodução de áudio e vídeo. Stagefright vem com uma lista padrão de codecs de software suportados e você pode implementar seu próprio codec de hardware usando o padrão de camada de integração OpenMax. Para mais detalhes de implementação, consulte os componentes MediaPlayer e Stagefright localizado em frameworks/av/media.
Camada de integração do OpenMAX (IL)
O OpenMAX IL oferece uma maneira padronizada para o Stagefright reconhecer e usam codecs multimídia personalizados baseados em hardware chamados componentes. Você deve fornecer um plug-in OpenMAX na forma de uma biblioteca compartilhada chamada libstagefrighthw.so: Este plug-in vincula o Stagefright à sua solicitação de componentes de codec, que devem ser implementados de acordo com a norma OpenMAX IL padrão do componente.

Implementar codecs personalizados

O Stagefright vem com codecs de software integrados para formatos de mídia comuns, mas você também pode adicionar codecs de hardware personalizados como componentes OpenMAX. Afazeres você precisa criar os componentes OMX e um plug-in OMX que se juntam os codecs personalizados com a estrutura Stagefright. Para conferir os componentes, consulte o hardware/ti/omap4xxx/domx/; um exemplo de plug-in para o Galaxy Nexus, consulte hardware/ti/omap4xx/libstagefrighthw.

Para adicionar seus próprios codecs:

  1. Crie os componentes de acordo com o padrão de componentes OpenMAX IL. A do componente fica na sub-rede frameworks/native/include/media/OpenMAX/OMX_Component.h. Para para saber mais sobre a especificação OpenMAX IL, consulte Site da OpenMAX.
  2. Crie um plug-in OpenMAX que vincule seus componentes ao Stagefright serviço. Para acessar as interfaces para criar o plug-in, consulte frameworks/native/include/media/hardware/OMXPluginBase.h e HardwareAPI.h.
  3. Criar o plug-in como uma biblioteca compartilhada com o nome libstagefrighthw.so no Makefile do produto. Por exemplo:
    LOCAL_MODULE := libstagefrighthw
    

    No Makefile do dispositivo, declare o módulo como um produto. pacote:

    PRODUCT_PACKAGES += \
      libstagefrighthw \
      ...
    

Expor codecs ao framework

O serviço Stagefright analisa o system/etc/media_codecs.xml e system/etc/media_profiles.xml para expor os codecs suportados e perfis no dispositivo para desenvolvedores de apps android.media.MediaCodecList e android.media.CamcorderProfile. É necessário criar os dois arquivos no diretório device/<company>/<device>/ e copie isso para o diretório system/etc da imagem do sistema em o Makefile do seu dispositivo. Exemplo:

PRODUCT_COPY_FILES += \
  device/samsung/tuna/media_profiles.xml:system/etc/media_profiles.xml \
  device/samsung/tuna/media_codecs.xml:system/etc/media_codecs.xml \

Para conferir exemplos completos, consulte device/samsung/tuna/media_codecs.xml e device/samsung/tuna/media_profiles.xml .

Observação: a partir do Android 4.1, a O elemento <Quirk> para codecs de mídia não é mais compatível.