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

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

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

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

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

ב-Android 9 ומטה, התוכנות לחילוץ מקובצים מקובצות לקובץ libstagefright.so אחד. ב-Android 10 ואילך, כלי החילוץ של מדיה הם רכיבים נפרדים. לכל חילוץ יש קובץ .so משלו עם נקודת כניסה שמספקת פונקציית ניפוי כדי לקבוע אם החילוץ יכול לטפל בקובץ המדיה הנתון, ופונקציית מפעל שיוצרת מופע של החילוץ לקובץ המדיה הנתון. לכל חילוץ יש שם (כדי לעזור בניפוי באגים) וגרסה כדי לציין איזה חילוץ הוא העדכני ביותר.

מסגרת המדיה טוענת באופן אוטומטי את כל קובצי .so הזמינים של הכלי לחילוץ, כך שתוכלו ליצור כלים משלכם לחילוץ על ידי הוספת קובץ .so חדש, בלי לשנות את libstagefright או ספריות אחרות של מסגרת המדיה. אפשר גם להגדיר שהחילוץ המותאם אישית יהיה מועדף על החילוץ ש-Google מספקת.

MediaSession2 API

MediaSession2 API מאפשר לאפליקציות מדיה לחשוף את פקדי התעבורה ואת פרטי ההפעלה שלהן לתהליכים אחרים, כמו מסגרת Android ואפליקציות אחרות. אי אפשר להתאים אישית את הרכיב הזה.

MediaParser API

MediaParser API מאפשר ל-ExoPlayer להשתמש ביעילות בניתחי קונטיינרים של מדיה ב-framework כדי לחלץ טעימות מדיה מקונטיינרים של מדיה. 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 v292100200), אפשר להתאים אישית את הפרמטרים להקצאת זיכרון ION (פרטים בהמשך).

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

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

ב-Android מגרסה 11 ואילך ובעדכון מערכת של Google Play מגרסה 292100200 ואילך, אפשר להתאים אישית את הפרמטרים הבאים להקצאת זיכרון ION.

פרמטר ערך ברירת מחדל תיאור
heapMask 0xFFFFFFFF כל סוגי האשכולות מותרים.
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) ומודול Media Codec‏ (com.android.media.swcodec) הם בפורמט APEX. רכיבי המדיה הכלולים מסתמכים רק על ממשקי ה-API של NDK.

עדכונים

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

עדכוני מדיה

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

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