מדיה

סמל HAL של Android Media

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

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

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

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

ארכיטקטורה

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

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

איור 1. תמונות וסרטונים אדריכלות

מסגרת האפליקציה
ברמת מסגרת האפליקציה הוא קוד אפליקציה שמשתמש android.media ממשקי API לאינטראקציה עם חומרת המולטימדיה.
Binder IPC
שרתי ה-proxy של Binder IPC מסייעים בתקשורת מעל גבולות תהליכים. הם נמצאים בספרייה frameworks/av/media/libmedia ו להתחיל באות "I".
מסגרת מולטימדיה מקורית
ברמה המותאמת, Android מספק מסגרת מולטימדיה שמשתמשת את המנוע 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 \
      ...
    

חשיפת רכיבי קודק ל-framework

שירות 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 .

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