Tedarikçi firma uzantılarını kullanarak medya ayıklayıcı ve medya codec'i bileşenlerini genişletebilirsiniz. MediaSession2 ve MediaParser API'leri özelleştirilemez (ancak eski MediaPlayer
ve MediaSession
API'leri için değişiklikleri yukarı akış gerçekleştirebilirsiniz).
Android medya çerçevesinde ek medya türlerini desteklemek için özel bir ayıklayıcı ve kod çözücü oluşturmanız gerekir. Örneğin, AVI dosyalarında Windows Media videosu desteği eklemek için bir AVI Ayıklayıcı ve bir Windows Media video Kod Çözücü dosyası oluşturmanız gerekir.
Uzantılar hakkında
Varsayılan medya ayıklayıcılar gereksinimlerinizi karşılamıyorsa /system/lib[64]/extractors/
bölümüne özel ayıklayıcı eklentileri yerleştirebilirsiniz. Ayıklayıcı işlemi, ayıklayıcı eklentilerini Google tarafından sağlanan APEX paketinden ve /system/lib[64]/extractors/
ürününden otomatik olarak yükler.
Benzer şekilde, frameworks/av/media/codec2/core/
bölümünde tanımlanan Codec 2.0 arayüzünü kullanan özel medya codec hizmetleri oluşturabilirsiniz. Temel uygulama için frameworks/av/media/codec2/hidl/services/
bölümüne bakın. Kitaplık giriş noktası C2ComponentStore
arayüzüdür. Örneğin, frameworks/av/media/codec2/vndk/C2Store.cpp
adresindeki varsayılan yazılım codec mağazası uygulamasına bakın.
Kendi APEX'inizi kullanırken codec hizmetini yapılandırın ve APEX dosyasını mediaswcodec
hizmetiyle aynı işlemleri kullanarak yükleyin. Bunu yapmak için tüm C2 bileşenlerini kaydetmekten sorumlu üst düzey bir paylaşılan kitaplık tanımlayın, ardından tedarikçi bölümünde yer alan bir APEX paketi (geçişli bağımlılıklarla) oluşturun. Tedarikçi firma codec hizmet işlemi başladığında bu üst düzey giriş noktasını yükleyebilir.
Ayıklayıcı oluşturma
Yeni bir biçim için ayıklayıcı eklerken ayıklayıcının yalnızca kararlı NDK API'lerine bağlı olduğundan ve herhangi bir gizli API'ye bağlı olmadığından emin olun. Ayıklayıcılar, frameworks/av/include/media/MediaExtractorPluginApi.h
tarafından tanımlanan API'yi uygulamalı ve frameworks/av/include/media/MediaExtractorPluginHelper.h
içindeki C++ kolaylık sarmalayıcılarını kullanabilir. Android 10 veya sonraki sürümler ayıklayıcı API'nin yalnızca en yüksek sürümünü desteklediğinden ayıklayıcınızı en yüksek API sürüm numarasına sahip ayıklayıcıya göre modellediğinizden emin olun.
Özel ayıklayıcıları /system/lib/64/extractors
konumuna veya Google ayıklayıcılarını içeren Google APEX ile birlikte açılan bir tedarikçi firma APEX'e yerleştirin. Ayıklayıcınızı yükleyen çerçeveyi doğrulamak için aşağıdaki komutu çalıştırın.
adb shell dumpsys media.extractor
Aşağıdakine benzer kullanılabilir ayıklayıcıların bir listesini alırsınız.
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)
Özel ayıklayıcınız Google tarafından sağlanan bir ayıklayıcı tarafından zaten desteklenen bir biçimi destekliyorsa Sniff()
işlevini kullanarak Google'ın sağladığından daha yüksek bir güven düzeyi döndürerek çerçeveyi ayıklayıcınızı kullanmaya zorlayabilirsiniz.
Medya çerçevesi ayıklayıcınızı yüklediğinde (/system/lib/64/extractors
üzerinden veya bir tedarikçi APEX'ten), dosyayı tanır ve içeriği hakkında bilgi alır. Bir sonraki adım, çerçevenin dosya içeriğini nasıl ayrıştıracağını anlayabilmesi için biçim için bir kod çözücü eklemektir.
Özel kod çözücü oluşturma
Google tarafından sağlanan bir kod çözücü tarafından desteklenmeyen tüm biçimler için özel bir kod çözücüye ihtiyacınız vardır. Örnek:
MP3 içeren AVI dosyalarına medya çerçevesi desteği eklemek için AVI oluşturucuya ihtiyacınız vardır ancak halihazırda mevcut olduğundan MP3 kod çözücüye ihtiyacınız yoktur.
Windows Media içeren AVI dosyalarına medya çerçevesi desteği eklemek için hem AVI ayıklayıcısına hem de Windows Media kod çözücüye ihtiyacınız vardır.
Yeni bir kod çözücü eklemek, AVC veya HEVC için kendi donanım kod çözücülerinizi eklemeye benzer.
Ayıklayıcı, içerdiği medya kanallarının MIME türünü yayınlarken dosyanın tam olarak desteklenmesi için bu MIME türlerini destekleyen codec'lerin mevcut olması gerekir. Kullanılan gerçek MIME türü dizesi, ayıklayıcı ile codec arasında kesin olarak bir anlaşmadır (dizenin MediaDefs.h
dosyasına eklenmesi gerekmez).
Medya tarayıcısıyla entegre edin
Medya tarayıcısı yeni dosya türleri arar ve bunları medya veritabanına ekler.
Medya tarayıcısının özel dosya türünüzü işlemesi için tarayıcının bunu bilmesi gerekir. Android 10 veya sonraki sürümlerde MimeUtils
(libcore
sürümünde), MIME-uzantı eşlemesini korur. Daha önce bu eşleme, MIME türünden MTP biçim sabitlerine bir eşleme içermeye devam eden MediaFile.java
dosyasında işleniyordu.
Bir ayıklayıcı, destekledikleri dosya adı uzantılarının (MP3 veya MP4 gibi) bir listesini dışa aktarabilir. Ancak bunu yalnızca LegacyMediaScanner
kullanır. Varsayılan olarak kullanılan ModernMediaScanner
üzerinde herhangi bir etkisi yoktur.