Android 10 veya sonraki sürümlerde, çerçeve bileşenlerinin Google Play Store altyapısı veya bir iş ortağı tarafından sağlanan kablosuz (OTA) mekanizması aracılığıyla güncellenmesini sağlayan, güncellenebilir çeşitli medya bileşenleri bulunur. Medya bileşenleri, tam sistem görüntüsü güncellemesi gerektirmeden güvenlik güncellemeleri ve özellik güncellemeleri sağlamaya olanak tanıyan modüller halinde 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ülde güncellenebilir yazılım Codec2 bileşenleri bulunur.
MediaProvider. Bu modül, dizine eklenen meta verileri (SD kartlardaki ve USB cihazlarındaki ses, video ve resimler) optimize eder ve bu verileri MediaStore herkese açık API'leri aracılığıyla uygulamaların kullanımına 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 çıkarma araçları
Android 9 ve önceki sürümlerde ayıklayıcılar tek bir libstagefright.so
dosyası halinde derlenir. Android 10 veya sonraki sürümlerde medya ayıklayıcılar ayrı bileşenlerdir. Her çıkarıcının, giriş noktası olan kendi .so
dosyası vardır. Bu giriş noktası, çıkarıcının verilen medya dosyasını işleyip işleyemeyeceğini belirlemek için bir sniffer işlevi ve verilen medya dosyası için çıkarıcının bir örneğini oluşturan bir factory işlevi sağlar. Her çıkarıcı, hata ayıklamaya yardımcı olmak için adlandırılır ve en yeni çıkarıcının hangisi olduğunu belirtmek için sürüm bilgisi eklenir.
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 de 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 örneklerini medya kapsayıcılarından çıkarmak için çerçeve medya kapsayıcı ayrıştırıcılarını verimli bir şekilde kullanmasına olanak tanır. MediaParser, kaynak kodu sınırlarında 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 temelini oluşturan Exoplayer'ın bire bir 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 Codec2 yazılım 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'si güncellenemez ancak satıcı bölümünde kullanılabilir.
ION bellek ayırma
Android 11 veya sonraki sürümlerde ve Google Play sistem güncellemesi v292100200 ya da 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()
gerekli şekilde değiştirin.(OMX)
media.codec
sürecini yeniden kullanmak içinStoreImpl
sınıfını frameworks/av/media/codec2/hidl/services/vendor.cpp adresinden mevcutmediacodec
dosyasına (frameworks/av/services/mediacodec/main_codecservice.cpp) kopyalayıp kaydedin.
Aşağıdaki kodu cihaza
manifest.xml
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 Codec 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.
1. şekil. 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ü bağlanır. Medya sistemi işlemleri (media.extractor
ve media.codec
) güncellenen modülleri bağlama noktasından yükler.