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.
- 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:
- 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. - 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
eHardwareAPI.h
. - 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.