O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Personalização de componentes de mídia

Você pode estender o extrator de mídia e os componentes do codec de mídia usando extensões do fornecedor. O MediaSession2 e MediaParser APIs não pode ser personalizado (mas você pode a montante mudanças para o legado MediaPlayer e MediaSession APIs).

Para suportar tipos de mídia adicionais no quadro de mídia Android, você precisa criar um costume extractor e decodificador . Por exemplo, para adicionar suporte para vídeo Windows Media em arquivos AVI, você precisa criar um AVI Extractor e um vídeo Windows Media Decoder .

Sobre extensões

Se os extratores de mídia padrão não atender às suas necessidades, você pode colocar plugins extrator personalizados em /system/lib[64]/extractors/ . O processo de extracção carrega automaticamente extractor encaixes do pacote APEX-Google fornecida e de /system/lib[64]/extractors/ .

Da mesma forma, você pode configurar mídia personalizada serviços de codec que utilizam a interface Codec 2.0 definido na frameworks/av/media/codec2/core/ . Para uma implementação básica, referem-se a frameworks/av/media/codec2/hidl/services/ . O ponto de entrada da biblioteca é o C2ComponentStore interface. Para um exemplo, consulte o software padrão implementação loja codec de frameworks/av/media/codec2/vndk/C2Store.cpp .

Ao usar o seu próprio APEX, estruturar o serviço de codec e carregar o arquivo APEX usando os mesmos processos como o mediaswcodec serviço. Para fazer isso, defina uma biblioteca compartilhada de nível superior responsável por registrar todos os componentes C2 e, em seguida, crie um pacote APEX (com dependências transitivas) que resida na partição do fornecedor. Quando o processo de serviço do codec do fornecedor é iniciado, ele pode carregar esse ponto de entrada de nível superior.

Criação de um extrator

Ao adicionar um extrator para um novo formato, certifique-se de que o extrator dependa apenas de APIs NDK estáveis ​​e não dependa de nenhuma API privada. Extractores deve implementar a API definida por frameworks/av/include/media/MediaExtractorPluginApi.h e pode utilizar os invólucros de conveniência C ++ em frameworks/av/include/media/MediaExtractorPluginHelper.h . Como o Android 10 ou superior oferece suporte apenas à versão mais alta da API do extrator, certifique-se de modelar seu extrator de acordo com o extrator com o maior número de versão da API.

Extratores lugar personalizadas em /system/lib/64/extractors ou um fornecedor APEX, que é aberta juntamente com o Google APEX contendo os extratores do Google. Para verificar se a estrutura carregou seu extrator, execute o seguinte comando.

adb shell dumpsys media.extractor

Você deve obter uma lista de extratores disponíveis semelhante à seguinte.

Available extractors:
AAC Extractor: plugin\_version(2), uuid(4fd80eae03d24d729eb948fa6bb54613), version(1), path(/system/lib64/extractors/libaacextractor.so)
AMR Extractor: plugin\_version(2), uuid(c86639c92f3140aca715fa01b4493aaf), version(1), path(/system/lib64/extractors/libamrextractor.so)
FLAC Extractor: plugin\_version(2), uuid(1364b048cc454fda9934327d0ebf9829), version(1), path(/system/lib64/extractors/libflacextractor.so)
MIDI Extractor: plugin\_version(2), uuid(ef6cca0af8a243e6ba5fdfcd7c9a7ef2), version(1), path(/system/lib64/extractors/libmidiextractor.so)
MP3 Extractor: plugin\_version(2), uuid(812a3f6cc8cf46deb5293774b14103d4), version(1), path(/system/lib64/extractors/libmp3extractor.so)
MP4 Extractor: plugin\_version(2), uuid(27575c6744174c548d3d8e626985a164), version(2), path(/system/lib64/extractors/libmp4extractor.so)
MPEG2-PS/TS Extractor: plugin\_version(1), uuid(3d1dcfebe40a436da574c2438a555e5f), version(1), path(/system/lib64/extractors/libmpeg2extractor.so)
Matroska Extractor: plugin\_version(2), uuid(abbedd9238c44904a4c1b3f45f899980), version(1), path(/system/lib64/extractors/libmkvextractor.so)
Ogg Extractor: plugin\_version(2), uuid(8cc5cd06f772495e8a62cba9649374e9), version(1), path(/system/lib64/extractors/liboggextractor.so)
WAV Extractor: plugin\_version(3), uuid(7d61385858374a3884c5332d1cddee27), version(1), path(/system/lib64/extractors/libwavextractor.so)

Se o seu exaustor costume suporta um formato que já é suportado por um extractor fornecido pelo Google, você pode forçar a estrutura para usar seu exaustor usando o Sniff() função para retornar um nível de confiança mais elevado do que aquele fornecido pelo Google.

Quando as cargas de enquadramento da mídia seu extractor (de /system/lib/64/extractors ou de um fornecedor APEX), reconhece o arquivo e obtém informações sobre o seu conteúdo. A próxima etapa é adicionar um decodificador para o formato para que a estrutura possa entender como analisar o conteúdo do arquivo.

Criação de um decodificador personalizado

Você precisa de um decodificador personalizado para qualquer formato que ainda não seja compatível com um decodificador fornecido pelo Google. Por exemplo:

  • Para adicionar suporte de estrutura de mídia para arquivos AVI contendo MP3, você precisa de um extrator de AVI, mas não precisa de um decodificador de MP3 porque já existe um.

  • Para adicionar suporte de estrutura de mídia para arquivos AVI contendo Windows Media, você precisa de um extrator AVI e um decodificador do Windows Media.

Adicionar um novo decodificador é semelhante a adicionar seus próprios decodificadores de hardware para AVC ou HEVC.

Enquanto o extrator publica o tipo MIME das faixas de mídia que ele contém, os codecs que suportam esses tipos MIME precisam estar presentes para que o arquivo seja totalmente suportado. O tipo string MIME real usado é estritamente um acordo entre o exaustor e o codec (a cadeia não precisa ser adicionado ao MediaDefs.h arquivo).

Integrando com scanner de mídia

O scanner de mídia procura novos tipos de arquivo e os adiciona ao banco de dados de mídia. Para que o scanner de mídia controle seu tipo de arquivo personalizado, o scanner precisa saber sobre isso. No Android 10 ou superior, MimeUtils (em libcore ) mantém o mapeamento MIME-a-extensão. Anteriormente, esse mapeamento foi tratado na MediaFile.java arquivo, que continua a conter um mapeamento de tipo MIME a constantes formato MTP.

Um extrator pode exportar uma lista de extensões de nome de arquivo suportadas (como MP3 ou MP4). No entanto, apenas LegacyMediaScanner usos que; ele não tem efeito sobre ModernMediaScanner , que usado por padrão.