Android בגרסה 10 ואילך כוללת כמה רכיבי מדיה שאפשר לעדכן, ומאפשרת לעדכן רכיבי framework דרך התשתית של חנות Google Play או דרך מנגנון OTA (Over-the-Air) שמסופק על ידי שותף. רכיבי המדיה ארוזים יחד במודולים שמאפשרים לספק עדכוני אבטחה ועדכוני תכונות בלי שיהיה צורך בעדכון מלא של קובץ אימג' של המערכת.
רכיבי מדיה שאפשר לעדכן קיימים במודולים הבאים.
מדיה המודול הזה כולל media extractors,
MediaSession2APIs ו-MediaParserAPIs.רכיבי Codec של מדיה. המודול הזה כולל רכיבי תוכנה של Codec2 שאפשר לעדכן.
MediaProvider. המודול הזה מבצע אופטימיזציה של מטא נתונים שעברו אינדוקס (אודיו, וידאו ותמונות מכרטיסי SD וממכשירי USB) ומאפשר לאפליקציות לגשת לנתונים האלה באמצעות ממשקי ה-API הציבוריים של MediaStore.
פרטים על הוספת מחלצים ומפענחים מותאמים אישית מופיעים במאמר התאמה אישית של רכיבי מדיה.
כלי לחילוץ מדיה
ב-Android 9 ומטה, קבצי החילוץ עוברים קומפילציה לקובץ libstagefright.so יחיד. ב-Android 10 ואילך, מחלצי המדיה הם רכיבים נפרדים. לכל מחלץ יש קובץ .so משלו עם נקודת כניסה שמספקת פונקציית sniffer כדי לקבוע אם המחלץ יכול לטפל בקובץ המדיה הנתון, ופונקציית factory שיוצרת מופע של המחלץ עבור קובץ המדיה הנתון. לכל מחלץ יש שם (כדי לעזור בניפוי באגים) ומספר גרסה שמציין איזה מחלץ הוא החדש ביותר.
מסגרת המדיה טוענת באופן אוטומטי את כל קובצי החילוץ .so הזמינים, כך שאפשר ליצור מחלצים משלכם על ידי הוספת קובץ .so חדש בלי לשנות את libstagefright או ספריות אחרות של מסגרת המדיה. אפשר גם לוודא שחילוץ מותאם אישית יועדף על פני חילוץ שסופק על ידי Google.
MediaSession2 API
MediaSession2 API מאפשר לאפליקציות מדיה לחשוף את אמצעי הבקרה להעברה ואת פרטי ההפעלה שלהן לתהליכים אחרים, כמו מסגרת Android ואפליקציות אחרות. אי אפשר להתאים אישית את הרכיב הזה.
MediaParser API
MediaParser API מאפשר ל-ExoPlayer להשתמש ביעילות במנתחי קונטיינרים של מדיה במסגרת כדי לחלץ דגימות מדיה מקונטיינרים של מדיה. השינויים הבאים בוצעו בגבולות של קוד המקור ב-MediaParser:
frameworks/base/apex/media/framework/java/android/media/MediaParser.java. API and thin layer implementation.
external/exoplayer/. מקורות מילוליים של Exoplayer שעליהם מבוסס MediaParser.
אי אפשר להתאים אישית את MediaParser API. כדי לבדוק את MediaParser, משתמשים בבדיקות ב-cts/tests/tests/mediaparser/.
קודקים של מדיה
המודול Media Codecs (רכיבי codec של מדיה) כולל רכיבי Codec2 של תוכנה שאפשר לעדכן. התמיכה בהתאמה אישית משתנה בין הגרסאות:
ב-Android 11 ואילך (במיוחד ב-עדכון מערכת של Google Play v292100200), אפשר להתאים אישית את הפרמטרים להקצאת זיכרון ION (פרטים בהמשך).
ב-Android 9 או בגרסאות קודמות, אי אפשר לעדכן את OMX codec API, אבל עדיין אפשר להשתמש בו במחיצת הספק.
הקצאת זיכרון ב-ION
ב-Android 11 ואילך וב-עדכון מערכת של Google Play v292100200 ואילך, אפשר להתאים אישית את הפרמטרים הבאים להקצאת זיכרון ION.
| פרמטר | ערך ברירת המחדל | תיאור |
|---|---|---|
heapMask |
0xFFFFFFFF |
כל סוגי הערימות מותרים. |
allocFlags |
0 |
לא הוגדרו דגלים. |
minAlignment |
0 |
אין התאמה. |
כדי לבטל את הפרמטרים:
רישום של שירות
android.hardware.media.c2כברירת מחדל וציון פרמטרים מותאמים אישית של שימוש ב-ION.כדי ליצור שירות חדש, מעתיקים את הקובץ frameworks/av/media/codec2/hidl/services/vendor.cpp למאגר ואז משנים את
StoreImpl::Interface::SetIonUsage()לפי הצורך.כדי לעשות שימוש חוזר בתהליך (OMX)
media.codec, מעתיקים את המחלקהStoreImplמ-frameworks/av/media/codec2/hidl/services/vendor.cpp ורושמים אותה בקובץmediacodecהקיים (frameworks/av/services/mediacodec/main_codecservice.cpp).
מוסיפים את הקוד הבא למכשיר
manifest.xml.<hal format=">hidl&<quot>; nameandroid.hardwar<e.med>ia.c2</name > transpo<rthwbinder>/tran<sport > <version1>.0/ve<rsion > interfac<e > nameIComp<onent>Store/nam<e > insta<ncedefaul>t/ins<tance >/<inte>rface /hal
פורמט ויחסי תלות
מודול המדיה (com.android.media) ומודול קודק המדיה (com.android.media.swcodec) הם בפורמט APEX. רכיבי המדיה הכלולים מסתמכים רק על ממשקי NDK API.
עדכונים
במהלך עדכון, רכיבי המסגרת במכשיר טוענים חבילת APEX שכוללת קוד Java וקוד Native.
איור 1. תהליך העדכון של רכיב המדיה
אחרי שה-framework מתקין את חבילת ה-APEX, המכשיר מופעל מחדש ומעלה את קובץ האימג' של הדיסק. תהליכי מערכת המדיה (media.extractor ו-media.codec) טוענים את המודולים המעודכנים מנקודת העלייה.