Medya bileşenlerini özelleştir

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, Codec 2.0 kullanan özel medya codec hizmetleri oluşturabilirsiniz arayüz, frameworks/av/media/codec2/core/ adresinde tanımlanmıştır. Temel için frameworks/av/media/codec2/hidl/services/ bakın. İlgili içeriği oluşturmak için kullanılan kitaplık giriş noktası C2ComponentStore arayüzüdür. Örneğin, web sitesindeki varsayılan yazılım codec mağazası frameworks/av/media/codec2/vndk/C2Store.cpp

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 kaydetmekten sorumlu üst düzey paylaşılan kitaplık, tedarikçi firmada yer alan bir APEX paketi (geçişli bağımlılara sahip) oluşturmanız gerekir. bölüm. 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. Çünkü Android 10 veya sonraki sürümler yalnızca ayıklayıcı API'sını kullanıyorsanız ayıklayıcınızı en yüksek API sürüm numarası.

/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. Alıcı: ayıklayıcınızı yüklediğini doğrulayın ve 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, ayıklayıcıyı Google tarafından sağlanan ayıklayıcıya almak için aşağıdaki adımları uygulayarak çerçeveyi ayıklayıcınızı kullanmaya zorlayabilirsiniz: Sniff() işlevini kullanarak Google tarafından sağlanan ekran.

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

Şu anda bir API tarafından desteklenmeyen biçimler için özel bir kod çözücüye Google tarafından sağlanan kod çözücü. Örnek:

  • MP3 içeren AVI dosyalarına medya çerçevesi desteği eklemek için AVI'ye ihtiyacınız vardır ancak halihazırda mevcut olduğundan MP3 kod çözücüye gerek yoktur.

  • Windows Media içeren AVI dosyalarına medya çerçevesi desteği eklemek için hem AVI ayıklayıcı hem de Windows Media kod çözücü gerekir.

Yeni bir kod çözücü eklemek, AVC veya HEVC.

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 arasındaki sözleşmenin açık olup olmadığını kontrol edin (dizenin MediaDefs.h dosyasına eklenir).

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.

Bir ayıklayıcı, destekledikleri dosya adı uzantılarının (MP3 gibi) listesini dışa aktarabilir veya MP4). Ancak bu veri yalnızca LegacyMediaScanner tarafından kullanılır. Herhangi bir etkisi Varsayılan olarak kullanılan ModernMediaScanner.