Medya ayıklayıcıyı ve medya codec'i bileşenlerini tedarikçi firma ile genişletebilirsiniz.
uzantılar. MediaSession2 ve MediaParser API'leri özelleştirilemez (ancak
eski MediaPlayer
ve MediaSession
API'leri için değişiklikleri yukarı akış şeklinde gösterebilir.
Android medya çerçevesinde ek medya türlerini desteklemek için şunları yapmanız gerekir: özel bir ayıklayıcı ve kod çözücü oluşturun. Örneğin, AVI dosyalarında Windows Media video desteği eklemek için bir AVI oluşturmanız gerekir Ayıklayıcı ve bir Windows Media video Kod Çözücü dosyası.
Uzantılar hakkında
Varsayılan ortam ayıklayıcıları gereksinimlerinizi karşılamıyorsa
/system/lib[64]/extractors/
içindeki özel ayıklayıcı eklentileri. Ayıklayıcı işlemi
Google'ın sağladığı APEX paketinden ayıklayıcı eklentilerini otomatik olarak yükler ve
başlangıç fiyatı: /system/lib[64]/extractors/
.
Benzer şekilde, frameworks/av/media/codec2/core/
içinde tanımlanan Codec 2.0 arayüzünü kullanan özel medya codec hizmetleri de ayarlayabilirsiniz. Temel uygulama için frameworks/av/media/codec2/hidl/services/
başlıklı makaleyi inceleyin. Kitaplık giriş noktası C2ComponentStore
arayüzüdür. Örnek olarak, frameworks/av/media/codec2/vndk/C2Store.cpp
adresindeki varsayılan yazılım codec'i mağazası uygulamasına bakın.
Kendi APEX'inizi kullanırken codec hizmetini yapılandırın ve APEX dosyasını yükleyin.
mediaswcodec
hizmetiyle aynı işlemleri kullanır. Bunu yapmak için tüm C2 bileşenlerini kaydettirmekten sorumlu üst düzey bir paylaşılan kitaplık tanımlayın, ardından tedarikçi bölümüne yerleştirilmiş bir APEX paketi (geçiş bağımlılıklarıyla) oluşturun. Tedarikçi firma codec hizmet işlemi başladığında bunu yükleyebilir.
üst düzey giriş noktasıdır.
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'leri içerir ve gizli API'lere bağlı değildir. Ayıklayıcılar
API'yi uygulamak için
frameworks/av/include/media/MediaExtractorPluginApi.h
ve C++ kullanabilir
elinizin altındaki
frameworks/av/include/media/MediaExtractorPluginHelper.h
. Android 10 veya sonraki sürümler yalnızca ayıklayıcı API'nin en yüksek sürümünü desteklediğinden, ayıklayıcınızı en yüksek API sürüm numaralı ayıklayıcıya göre modellediğinizden emin olun.
/system/lib/64/extractors
veya bir tedarikçi APEX'e özel ayıklayıcılar yerleştirin,
Google ayıklayıcılarını içeren Google APEX ile birlikte açılır. Çerçevenin ayrıştırıcınızı yüklediğini 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 çıkarıcınız, Google tarafından sağlanan bir çıkarıcı tarafından zaten desteklenen bir biçimi destekliyorsa Google tarafından sağlanan çıkarıcıdan daha yüksek bir güven düzeyi döndürmek için Sniff()
işlevini kullanarak çerçeveyi çıkarıcınızı kullanmaya zorlayabilirsiniz.
Medya çerçevesi ayıklayıcınızı yüklediğinde (/system/lib/64/extractors
kaynağından
bir APEX üzerinden çalışıyorsa dosyayı tanır ve dosyayla ilgili bilgi alır.
içerik. Sıradaki adım, biçim için bir kod çözücü eklemektir. Böylece çerçeve
nasıl ayrıştıracağınızı öğreneceksiniz.
Ö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ı için medya çerçevesi desteği eklemek istiyorsanız bir AVI çıkarıcıya ihtiyacınız vardır ancak MP3 kod çözücüye ihtiyacınız yoktur çünkü zaten mevcuttur.
Windows Media içeren AVI dosyaları için medya çerçevesi desteği eklemek istiyorsanız hem bir AVI çıkarıcıya hem de Windows Media kod çözücüsüne 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ı, aktardığı medya kanallarının MIME türünü yayınlarken
içeriyorsa, bu MIME türlerini destekleyen codec'lerin
dosyasının tam olarak desteklenmesi gerekir. Kullanılan gerçek MIME türü dizesi, kesinlikle çıkarıcı ile codec arasında bir anlaşmadır (diyenin 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 şunları yapması gerekir:
gerçekleşebilir. Android 10 veya sonraki sürümlerde, MimeUtils
(
libcore
), MIME-uzantı eşlemesini korur. Daha önce bu eşleme
MediaFile.java
dosyasında işlenir. Bu dosya,
MIME türünden MTP biçimi sabitlerine.
Ayıklayıcılar, destekledikleri dosya adı uzantılarının listesini (ör. MP3 veya MP4) dışa aktarabilir. Ancak bu veri yalnızca LegacyMediaScanner
tarafından kullanılır. Herhangi bir etkisi
Varsayılan olarak kullanılan ModernMediaScanner
.