Medya bileşenlerini özelleştirme

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.