
Android כולל את Stagefright, מנוע להפעלת מדיה ברמה המקורית עם קודקים מובנים מבוססי תוכנה לפורמטים פופולריים של מדיה.
תכונות ההפעלה של אודיו וווידאו ב-Stagefright כוללות שילוב עם קודקים של OpenMAX, ניהול סשנים, עיבוד נתונים מסונכרן עם הזמן, בקרת תעבורה ו-DRM.
Stagefright תומך גם בשילוב עם קודיקים מותאמים אישית לחומרה שסופקו על ידכם. כדי להגדיר נתיב חומרה לקידוד ולפענוח מדיה, צריך להטמיע קודיקוד מבוסס-חומרה כרכיב OpenMax IL (שכבת שילוב).
הערה: עדכוני Stagefright יכולים להתרחש דרך התהליך של עדכון האבטחה החודשי ל-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
.
כדי להוסיף קודיקים משלכם:
- יוצרים את הרכיבים בהתאם לתקן הרכיבים של OpenMAX IL. ממשק הרכיב נמצא בקובץ
frameworks/native/include/media/OpenMAX/OMX_Component.h
. למידע נוסף על מפרט OpenMAX IL, אפשר לעיין באתר של OpenMAX. - יוצרים פלאגין OpenMAX שמקשר את הרכיבים לשירות Stagefright. במאמרים על קובצי הכותרת
frameworks/native/include/media/hardware/OMXPluginBase.h
ו-HardwareAPI.h
מוסבר על הממשקים ליצירת הפלאגין. - יוצרים את הפלאגין כספרייה משותפת בשם
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>
לקודקים של מדיה.