מודולים של מדיה

‫Android 10 ואילך כולל כמה רכיבי מדיה שאפשר לעדכן, ומאפשר לעדכן רכיבי framework באמצעות התשתית של חנות Google Play או באמצעות מנגנון OTA (עדכון אוטומטי) שסופק על ידי שותף. רכיבי המדיה ארוזים יחד במודולים שמאפשרים לספק עדכוני אבטחה ועדכוני תכונות בלי לדרוש עדכון מלא של תמונת המערכת.

רכיבי מדיה שאפשר לעדכן קיימים במודולים הבאים.

פרטים על הוספת מחלצים ומפענחים מותאמים אישית זמינים במאמר התאמה אישית של רכיבי מדיה.

כלי לחילוץ מדיה

ב-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 ושכבה דקה.

  • external/exoplayer/. מקורות מילוליים של Exoplayer שעליהם מבוסס MediaParser.

אי אפשר להתאים אישית את MediaParser API. כדי לבדוק את MediaParser, משתמשים בבדיקות ב-cts/tests/tests/mediaparser/.

קודקים של מדיה

מודול Media Codecs כולל רכיבי Codec2 של תוכנה שאפשר לעדכן. התמיכה בהתאמה אישית משתנה בין הגרסאות:

  • ב-Android 11 ואילך (במיוחד Google Play System Update v292100200), אפשר להתאים אישית את הפרמטרים להקצאת זיכרון ION (פרטים בהמשך).

  • ב-Android 9 ומטה, אי אפשר לעדכן את OMX codec API, אבל עדיין אפשר להשתמש בו במחיצת הספק.

הקצאת זיכרון ב-ION

ב-Android 11 ואילך וב-Google Play System Update v292100200 ואילך, אפשר להתאים אישית את הפרמטרים הבאים להקצאת זיכרון ION.

פרמטר ערך ברירת מחדל תיאור
heapMask 0xFFFFFFFF כל סוגי ה-heap מותרים.
allocFlags 0 לא הוגדרו דגלים.
minAlignment 0 אין התאמה.

כדי לבטל את הפרמטרים:

  1. רישום של שירות android.hardware.media.c2 כברירת מחדל וציון פרמטרים מותאמים אישית לשימוש ב-ION.

  2. מוסיפים את הקוד הבא למכשיר manifest.xml.

    <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>
    

פורמט ותלות

מודול המדיה (com.android.media) ומודול קודק המדיה (com.android.media.swcodec) הם בפורמט APEX. רכיבי המדיה הכלולים מסתמכים רק על ממשקי NDK API.

עדכונים

במהלך עדכון, רכיבי המסגרת במכשיר טוענים חבילת APEX שמכילה קוד Java וקוד מקורי.

עדכוני מדיה

איור 1. תהליך העדכון של רכיב המדיה

אחרי שהמסגרת מתקינה את חבילת ה-APEX, המכשיר מופעל מחדש ומעלה את קובץ האימג' של הדיסק ואת תהליכי מערכת המדיה (media.extractor ו-media.codec). המודולים המעודכנים נטענים מנקודת ההרכבה.