Android 10 veya sonraki sürümler, çerçeve bileşenlerinin Google Play Store altyapısı veya iş ortağı tarafından sağlanan kablosuz (OTA) mekanizması üzerinden güncellenmesini sağlayan çeşitli güncellenebilir medya bileşenleri içerir. Medya bileşenleri, tam sistem görüntüsünün güncellenmesini gerektirmeden güvenlik güncellemeleri ve özellik güncellemeleri sunmayı sağlayan modüllere birlikte paketlenir.
Güncellenebilir medya bileşenleri aşağıdaki modüllerde bulunur.
Medya. Bu modül, medya ayıklayıcıları,
MediaSession2
API'leri veMediaParser
API'lerini içerir.Medya codec'leri Bu modül, güncellenebilir yazılım Codec2 bileşenlerini içerir.
MediaProvider. Bu modül, dizine eklenen meta verileri (SD kartlardan ve USB cihazlardan alınan ses, video ve resimler) optimize eder ve bu verileri MediaStore herkese açık API'leri aracılığıyla uygulamalara sunar.
Özel ayıklayıcılar ve kod çözücüler ekleme hakkında ayrıntılı bilgi için Medya Bileşenlerini Özelleştirme başlıklı makaleyi inceleyin.
Medya ayıklama araçları
Android 9 ve önceki sürümlerde, ayıklayıcılar tek bir libstagefright.so
dosyasında derlenir. Android 10 veya sonraki sürümlerde medya ayıklayıcılar ayrı bileşenlerdir. Her çıkarıcı, çıkarıcıya verilen medya dosyasını işleyip işleyemeyeceğini belirlemek için bir sniffer işlevi sağlayan bir giriş noktası ve verilen medya dosyası için çıkarıcı örneği oluşturan bir factory işlevi içeren kendi .so
dosyasına sahiptir. Her ayıklayıcı, adlandırılır (hata ayıklama işlemine yardımcı olmak için) ve hangi ayıklayıcının en yeni olduğunu belirtmek için sürüm numarası atanır.
Medya çerçevesi, mevcut tüm ayıklayıcı .so
dosyalarını otomatik olarak yükler. Böylece, libstagefright
veya diğer medya çerçevesi kitaplıklarını değiştirmenize gerek kalmadan yeni bir .so
dosyası ekleyerek kendi ayıklayıcılarınızı oluşturabilirsiniz. Ayrıca, Google tarafından sağlanan ayıklayıcı yerine özel bir ayıklayıcının tercih edilmesini sağlayabilirsiniz.
MediaSession2 API
MediaSession2 API, medya uygulamalarının aktarım kontrollerini ve oynatma bilgilerini Android çerçevesi ve diğer uygulamalar gibi diğer işlemlere göstermesine olanak tanır. Bu bileşen özelleştirilemez.
MediaParser API
MediaParser API, ExoPlayer'ın medya kapsayıcılarından medya örnekleri ayıklamak için çerçeve medya kapsayıcı ayrıştırıcılarını verimli bir şekilde kullanmasına olanak tanır. MediaParser, kaynak kodunda aşağıdaki değişiklikleri içerir:
frameworks/base/apex/media/framework/java/android/media/MediaParser.java
. API ve ince katman uygulaması.external/exoplayer/
. MediaParser'ın oluşturulduğu Exoplayer verbatim kaynakları.
MediaParser API özelleştirilemez. MediaParser'ı test etmek için cts/tests/tests/mediaparser/
bölümündeki testleri kullanın.
Medya codec'leri
Medya codec'leri modülü, güncellenebilir yazılım Codec2 bileşenlerini içerir. Özelleştirme desteği sürümler arasında farklılık gösterir:
Android 11 veya sonraki sürümlerde (özellikle Google Play Sistem Güncellemesi v292100200) ION bellek ayırma parametrelerini özelleştirebilirsiniz (ayrıntılar için aşağıya bakın).
Android 9 veya önceki sürümlerde OMX codec API güncellenemez ancak tedarikçi bölümünde kullanmaya devam edebilirsiniz.
ION bellek ayırma
Android 11 veya sonraki sürümlerde ve Google Play Sistem Güncellemesi v292100200 veya sonraki sürümlerde ION bellek ayırma için aşağıdaki parametreleri özelleştirebilirsiniz.
Parametre | Varsayılan değer | Açıklama |
---|---|---|
heapMask |
0xFFFFFFFF |
Tüm yığın türlerine izin verilir. |
allocFlags |
0 |
İşaret ayarlanmadı. |
minAlignment |
0 |
Hizalama yok. |
Parametreleri geçersiz kılmak için:
Varsayılan bir
android.hardware.media.c2
hizmeti kaydedin ve özel ION kullanım parametreleri sağlayın.Yeni bir hizmet oluşturmak için frameworks/av/media/codec2/hidl/services/vendor.cpp dosyasını deponuza kopyalayın ve ardından
StoreImpl::Interface::SetIonUsage()
dosyasını gerektiği gibi değiştirin.(OMX)
media.codec
işlemini yeniden kullanmak için frameworks/av/media/codec2/hidl/services/vendor.cpp dosyasındanStoreImpl
sınıfını kopyalayıp mevcutmediacodec
dosyasına (frameworks/av/services/mediacodec/main_codecservice.cpp) kaydedin.
Aşağıdaki kodu
manifest.xml
cihazına ekleyin.<hal format="hidl"> <name>android.hardware.media.c2</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>IComponentStore</name> <instance>default</instance> </interface> </hal>
Biçim ve bağımlılıklar
Medya modülü (com.android.media
) ve Medya Kodek modülü (com.android.media.swcodec
), APEX biçimindedir. Dahil edilen medya bileşenleri yalnızca NDK API'lerini kullanır.
Güncellemeler
Güncelleme sırasında cihazdaki çerçeve bileşenleri, Java ve yerel kod içeren bir APEX paketi yükler.
Şekil 1. Medya bileşeni güncelleme akışı
Çerçeve APEX paketini yükledikten sonra cihaz yeniden başlatılır ve disk görüntüsünü monte eder. Medya sistemi işlemleri (media.extractor
ve media.codec
) ise güncellenmiş modülleri montaj noktasından yükler.