
O Android inclui Stagefright, um mecanismo de reprodução de mídia no nível nativo que possui codecs baseados em software integrados para formatos de mídia populares.
Os recursos de reprodução de áudio e vídeo do Stagefright incluem integração com codecs OpenMAX, gerenciamento de sessão, renderização com sincronização de tempo, controle de transporte e DRM.
Stagefright também suporta integração com codecs de hardware personalizados fornecidos por 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 por meio do processo de atualização de segurança mensal do Android e como parte de uma versão do sistema operacional Android.
Arquitetura
Os aplicativos de mídia interagem com a estrutura de multimídia nativa do Android de acordo com a seguinte arquitetura.

Figura 1. Arquitetura de mídia
- Framework de aplicação
- No nível da estrutura do aplicativo, está o código do aplicativo que utiliza APIs android.media para interagir com o hardware de multimídia.
- Binder IPC
- Os proxies Binder IPC facilitam a comunicação sobre os limites do processo. Eles estão localizados no diretório
frameworks/av/media/libmedia
e começam com a letra "I". - Estrutura de multimídia nativa
- No nível nativo, o Android fornece uma estrutura 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 obter mais detalhes de implementação, consulte os componentes MediaPlayer e Stagefright localizados em
frameworks/av/media
. - Camada de integração OpenMAX (IL)
- O OpenMAX IL fornece uma maneira padronizada para Stagefright de reconhecer e usar codecs de multimídia baseados em hardware personalizados chamados componentes. Você deve fornecer um plugin OpenMAX na forma de uma biblioteca compartilhada chamada
libstagefrighthw.so
. Este plug-in vincula o Stagefright aos seus componentes de codec personalizados, que devem ser implementados de acordo com o padrão de componente OpenMAX IL.
Implementar codecs personalizados
Stagefright vem com codecs de software integrados para formatos de mídia comuns, mas você também pode adicionar seus próprios codecs de hardware personalizados como componentes OpenMAX. Para fazer isso, você deve criar os componentes OMX e um plug-in OMX que conecta seus codecs personalizados com a estrutura Stagefright. Por exemplo de componentes, consulte o hardware/ti/omap4xxx/domx/
; para obter um exemplo de plug-in para o Galaxy Nexus, consulte hardware/ti/omap4xx/libstagefrighthw
.
Para adicionar seus próprios codecs:
- Crie seus componentes de acordo com o padrão de componentes OpenMAX IL. A interface do componente está localizada no arquivo
frameworks/native/include/media/OpenMAX/OMX_Component.h
. Para saber mais sobre a especificação OpenMAX IL, consulte o site da OpenMAX . - Crie um plug-in OpenMAX que vincula seus componentes ao serviço Stagefright. Para as interfaces para criar o plug-in, consulte
frameworks/native/include/media/hardware/OMXPluginBase.h
arquivos de cabeçalhoHardwareAPI.h
. - Construa seu plugin como uma biblioteca compartilhada com o nome
libstagefrighthw.so
no Makefile do seu produto. Por exemplo:
LOCAL_MODULE := libstagefrighthw
No Makefile do seu dispositivo, certifique-se de declarar o módulo como um pacote de produto:
PRODUCT_PACKAGES += \ libstagefrighthw \ ...
Exposição de codecs à estrutura
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 aplicativos através dos android.media.MediaCodecList
e android.media.CamcorderProfile
classes. Você deve criar ambos os arquivos no diretório device/<company>/<device>/
e copiá-lo para o diretório system/etc
da imagem do system/etc
no Makefile do seu dispositivo. Por 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 exemplos completos, consulte device/samsung/tuna/media_codecs.xml
e device/samsung/tuna/media_profiles.xml
.
Observação: a partir do Android 4.1, o elemento <Quirk>
para codecs de mídia não é mais compatível.