Puoi estendere i componenti estrattore di contenuti multimediali e codec multimediale utilizzando il fornitore
estensioni. Le API MediaSession2 e MediaParser non possono essere personalizzate, ma puoi eseguire modifiche a monte per le API MediaPlayer
e MediaSession
precedenti.
Per supportare tipi di contenuti multimediali aggiuntivi nel framework multimediale Android, devi: creano un estrattore e un decoder personalizzati. Ad esempio: per aggiungere il supporto per i video Windows Media nei file AVI, devi creare un'immagine Extractor e un Decoder video Windows Media.
Informazioni sulle estensioni
Se gli estrattori di contenuti multimediali predefiniti non soddisfano i tuoi requisiti, puoi inserire
plug-in estrattori personalizzati in /system/lib[64]/extractors/
. Il processo di estrazione
carica automaticamente gli estrattori di plug-in dal pacchetto APEX fornito da Google e
da /system/lib[64]/extractors/
.
Analogamente, puoi configurare servizi codec multimediali personalizzati che utilizzano il codec 2.0
interfaccia definita in frameworks/av/media/codec2/core/
. Per una configurazione base
per l'implementazione, fai riferimento a frameworks/av/media/codec2/hidl/services/
. La
il punto di ingresso della libreria è l'interfaccia C2ComponentStore
. Per un esempio, consulta
all'implementazione predefinita degli archivi di codec software
frameworks/av/media/codec2/vndk/C2Store.cpp
.
Quando utilizzi il tuo APEX, struttura il servizio codec e carica il file APEX
utilizzando le stesse procedure del servizio mediaswcodec
. A questo scopo, definisci
libreria condivisa di primo livello responsabile della registrazione di tutti i componenti C2,
crea un pacchetto APEX (con dipendenze transitive) che risiede nel fornitore
della partizione di testo. Quando viene avviato il processo del servizio codec del fornitore, può caricare questo punto di contatto di primo livello.
Creare un estrattore
Quando aggiungi un estrattore per un nuovo formato, assicurati che dipenda solo
e non dipendono da API private. Gli estrattori devono
a implementare l'API definita
frameworks/av/include/media/MediaExtractorPluginApi.h
e può usare il linguaggio C++
wrapper di convenienza
frameworks/av/include/media/MediaExtractorPluginHelper.h
. Poiché Android
La versione 10 o successiva supporta solo la versione più recente
l'API Extractor, accertati di modellare l'estrattore in base a quello con
il numero di versione API più elevato.
Inserisci gli estrattori personalizzati in /system/lib/64/extractors
o in un APEX del fornitore,
che viene aperto insieme all'APEX di Google contenente gli estrattori di Google. A
verifica che il framework abbia caricato l'estrattore, esegui questo comando.
adb shell dumpsys media.extractor
Dovresti visualizzare un elenco di estrattori disponibili simile al seguente.
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 l'estrattore personalizzato supporta un formato già supportato da un
Estrattore fornito da Google, puoi forzare il framework a utilizzarlo
utilizzando la funzione Sniff()
per restituire un livello di confidenza più elevato rispetto
Fornita da Google.
Quando il framework multimediale carica l'estrattore (da /system/lib/64/extractors
o da un APEX del fornitore), riconosce il file e ottiene informazioni sui suoi contenuti. Il passaggio successivo consiste nell'aggiungere un decodificatore per il formato in modo che il framework possa comprendere come analizzare i contenuti del file.
crea un decoder personalizzato
È necessario un decodificatore personalizzato per qualsiasi formato non già supportato da un decodificatore fornito da Google. Ad esempio:
Per aggiungere il supporto del framework multimediale per i file AVI contenenti MP3, hai bisogno di un ma non hanno bisogno di un decoder MP3 perché ne esiste già uno.
Per aggiungere il supporto del framework multimediale per i file AVI contenenti Windows Media, sia necessario un estrattore AVI e un decoder Windows Media.
L'aggiunta di un nuovo decoder è simile ad aggiungere i tuoi decoder hardware per AVC o AVC HEVC.
Mentre l'estrattore pubblica il tipo MIME delle tracce multimediali che
i codec che supportano questi tipi MIME devono essere presenti per
completamente supportato. La stringa del tipo MIME effettivamente utilizzata è strettamente un accordo tra l'estrattore e il codec (la stringa non deve essere aggiunta al file MediaDefs.h
).
Integrazione con lo scanner multimediale
Lo scanner multimediale cerca nuovi tipi di file e li aggiunge al database multimediale.
Affinché lo scanner multimediale gestisca il tuo tipo di file personalizzato, deve
conoscerlo. In Android 10 o versioni successive, MimeUtils
(in
libcore
) mantiene il mapping da MIME all'estensione. In precedenza, questa mappatura veniva gestita nel file MediaFile.java
, che continua a contenere una mappatura dal tipo MIME alle costanti di formato MTP.
Un'estrazione può esportare un elenco di estensioni dei nomi di file supportate (ad esempio MP3 o MP4). Tuttavia, solo LegacyMediaScanner
la utilizza; non ha alcun effetto
ModernMediaScanner
, utilizzata per impostazione predefinita.