מדיה

הסמל של Android Media HAL

Android כולל את Stagefright, מנוע להפעלת מדיה ברמה המקורית עם קודקים מובנים מבוססי תוכנה לפורמטים פופולריים של מדיה.

תכונות ההפעלה של אודיו וווידאו ב-Stagefright כוללות שילוב עם קודקים של OpenMAX, ניהול סשנים, עיבוד נתונים מסונכרן עם הזמן, בקרת תעבורה ו-DRM.

Stagefright תומך גם בשילוב עם קודיקים מותאמים אישית לחומרה שסופקו על ידכם. כדי להגדיר נתיב חומרה לקידוד ולפענוח מדיה, צריך להטמיע קודיקוד מבוסס-חומרה כרכיב OpenMax IL (שכבת שילוב).

הערה: עדכוני Stagefright יכולים להתרחש דרך התהליך של עדכון האבטחה החודשי ל-Android, וכחלק מהשקה של מערכת הפעלה Android.

ארכיטקטורה

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

ארכיטקטורת המדיה של Android

איור 1. ארכיטקטורת מדיה

מסגרת לאפליקציות
ברמת מסגרת האפליקציה נמצא קוד האפליקציה שמשתמש בממשקי ה-API של android.media כדי ליצור אינטראקציה עם חומרת המולטימדיה.
Binder IPC
שרתי ה-IPC של Binder מאפשרים תקשורת מעבר לגבולות התהליכים. הם נמצאים בספרייה frameworks/av/media/libmedia ומתחילים באות 'I'.
Native Multimedia Framework
ברמה המקורית, Android מספק מסגרת מולטימדיה שמשתמשת במנוע Stagefright להקלטה ולהפעלה של אודיו ווידאו. Stagefright מגיע עם רשימת ברירת מחדל של קודיקים נתמכים לתוכנה, ואפשר להטמיע קודיקים משלכם לחומרה באמצעות תקן השכבה המשולבת של OpenMax. פרטים נוספים על ההטמעה זמינים ברכיבי MediaPlayer ו-Stagefright שנמצאים ב-frameworks/av/media.
שכבת השילוב של OpenMAX‏ (IL)
OpenMAX IL מספק דרך סטנדרטית ל-Stagefright לזהות קודיקים מותאמים אישית של מולטימדיה מבוססי חומרה, שנקראים רכיבים, ולהשתמש בהם. צריך לספק פלאגין של OpenMAX בצורת ספרייה משותפת בשם libstagefrighthw.so. הפלאגין הזה מקשר את Stagefright לרכיבי הקודק בהתאמה אישית, שצריך להטמיע בהתאם לתקן הרכיבים של OpenMAX IL.

הטמעת קודיק בהתאמה אישית

Stagefright כולל קודקים מובנים לתוכנה לפורמטים נפוצים של מדיה, אבל אפשר גם להוסיף קודקים מותאמים אישית של חומרה כרכיבי OpenMAX. כדי לעשות זאת, צריך ליצור את רכיבי ה-OMX ואת פלאגין ה-OMX שמקשר את הקודקים המותאמים אישית שלכם למסגרת Stagefright. רכיבים לדוגמה מופיעים ב-hardware/ti/omap4xxx/domx/, ואפשר למצוא פלאגין לדוגמה ל-Galaxy Nexus ב-hardware/ti/omap4xx/libstagefrighthw.

כדי להוסיף קודיקים משלכם:

  1. יוצרים את הרכיבים בהתאם לתקן הרכיבים של OpenMAX IL. ממשק הרכיב נמצא בקובץ frameworks/native/include/media/OpenMAX/OMX_Component.h. למידע נוסף על מפרט OpenMAX IL, אפשר לעיין באתר של OpenMAX.
  2. יוצרים פלאגין OpenMAX שמקשר את הרכיבים לשירות Stagefright. במאמרים על קובצי הכותרת frameworks/native/include/media/hardware/OMXPluginBase.h ו-HardwareAPI.h מוסבר על הממשקים ליצירת הפלאגין.
  3. יוצרים את הפלאגין כספרייה משותפת בשם libstagefrighthw.so ב-Makefile של המוצר. לדוגמה:
    LOCAL_MODULE := libstagefrighthw
    

    בקובץ Makefile של המכשיר, מוודאים שהמודול מוגדר כחבילת מוצר:

    PRODUCT_PACKAGES += \
      libstagefrighthw \
      ...
    

חשיפת קודקים למסגרת

שירות Stagefright מנתח את system/etc/media_codecs.xml ו-system/etc/media_profiles.xml כדי לחשוף למפתחי האפליקציות את הקודקים והפרופילים הנתמכים במכשיר באמצעות הכיתות android.media.MediaCodecList ו-android.media.CamcorderProfile. צריך ליצור את שני הקבצים בתיקייה device/<company>/<device>/ ולהעתיק אותם לתיקייה system/etc של קובץ האימג' של המערכת ב-Makefile של המכשיר. לדוגמה:

PRODUCT_COPY_FILES += \
  device/samsung/tuna/media_profiles.xml:system/etc/media_profiles.xml \
  device/samsung/tuna/media_codecs.xml:system/etc/media_codecs.xml \

דוגמאות מלאות זמינות במאמרים device/samsung/tuna/media_codecs.xml ו-device/samsung/tuna/media_profiles.xml .

הערה: החל מגרסה 4.1 של Android, אין יותר תמיכה ברכיב <Quirk> לקודקים של מדיה.