
O Android inclui o Stagefright, um mecanismo de reprodução de mídia no nível nativo que tem codecs integrados baseados em software para formatos de mídia conhecidos.
Os recursos de reprodução de áudio e vídeo do Stagefright incluem integração com codecs OpenMAX, gerenciamento de sessões, renderização sincronizada com o tempo, controle de transporte e DRM.
O Stagefright também oferece suporte à integração com codecs de hardware personalizados fornecidos por você. Para definir um caminho de hardware para codificar e decodificar mídia, é necessário implementar um codec baseado em hardware como um componente OpenMax IL (camada de integração).
Observação:as atualizações do Stagefright podem ocorrer pelo processo de atualização de segurança mensal do Android e como parte de uma versão do SO Android.
Arquitetura
Os aplicativos de mídia interagem com o framework multimídia nativo do Android de acordo com a arquitetura a seguir.

Figura 1. Arquitetura de mídia
- Framework do aplicativo
- No nível do framework do aplicativo, há um código que usa APIs android.media para interagir com o hardware multimídia.
- IPC de vinculação
- Os proxies de IPC do Binder facilitam a comunicação entre limites de processo.
Eles estão localizados no diretório
frameworks/av/media/libmedia
e começam com a letra "I". - Framework multimídia nativo
- 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. O Stagefright
vem com uma lista padrão de codecs de software compatíveis, 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
localizados em
frameworks/av/media
. - Camada de integração do OpenMAX (IL)
- O OpenMAX IL oferece uma maneira padronizada para o Stagefright reconhecer e
usar codecs multimídia personalizados baseados em hardware, chamados de componentes. Você precisa fornecer
um plug-in do OpenMAX na forma de uma biblioteca compartilhada chamada
libstagefrighthw.so
. Esse plug-in vincula o Stagefright aos componentes de codec personalizados, que precisam ser implementados de acordo com o padrão de componente do OpenMAX IL.
Implementar codecs personalizados
O 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 do OpenMAX. Para fazer
isso, crie os componentes OMX e um plug-in OMX que conecte
os codecs personalizados ao framework Stagefright. Para conferir exemplos de componentes, consulte
hardware/ti/omap4xxx/domx/
. Para conferir 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 do 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 do OpenMAX IL, consulte o site do OpenMAX. - Crie um plug-in do OpenMAX que vincule seus componentes ao serviço
Stagefright. Para as interfaces criarem o plug-in, consulte os arquivos de cabeçalho
frameworks/native/include/media/hardware/OMXPluginBase.h
eHardwareAPI.h
. - Crie 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 pacote de produto:
PRODUCT_PACKAGES += \ libstagefrighthw \ ...
Expor codecs para o framework
O serviço Stagefright analisa o system/etc/media_codecs.xml
e o system/etc/media_profiles.xml
para expor os codecs e perfis compatíveis
no dispositivo aos desenvolvedores de apps usando as classes
android.media.MediaCodecList
e
android.media.CamcorderProfile
. É necessário criar os dois arquivos
no diretório device/<company>/<device>/
e copiar para o diretório system/etc
da imagem do sistema no
Makefile do 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, o
elemento <Quirk>
para codecs de mídia não é mais compatível.