החל מ-27 במרץ 2025, מומלץ להשתמש ב-android-latest-release
במקום ב-aosp-main
כדי ליצור תרומות ל-AOSP. מידע נוסף זמין במאמר שינויים ב-AOSP.
מדיה
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
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>
לקודקים של מדיה.
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-27 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-07-27 (שעון UTC)."],[],[],null,["# Media\n\nAndroid includes Stagefright, a media playback engine at the native level\nthat has built-in software-based codecs for popular media formats.\n\nStagefright audio and video playback features include integration with\nOpenMAX codecs, session management, time-synchronized rendering, transport\ncontrol, and DRM.\n\nStagefright also supports integration with custom hardware codecs provided by\nyou. To set a hardware path to encode and decode media, you must implement a\nhardware-based codec as an OpenMax IL (Integration Layer) component.\n\n**Note:** Stagefright updates can occur through the\nAndroid [monthly security\nupdate](/docs/security/bulletin) process and as part of an Android OS release.\n\nArchitecture\n------------\n\nMedia applications interact with the Android native multimedia framework\naccording to the following architecture.\n\n**Figure 1.** Media\narchitecture\n\nApplication Framework\n: At the application framework level is application code that utilizes\n [android.media](http://developer.android.com/reference/android/media/package-summary.html)\n APIs to interact with the multimedia hardware.\n\nBinder IPC\n: The Binder IPC proxies facilitate communication over process boundaries.\n They are located in the `frameworks/av/media/libmedia` directory and\n begin with the letter \"I\".\n\nNative Multimedia Framework\n: At the native level, Android provides a multimedia framework that utilizes\n the Stagefright engine for audio and video recording and playback. Stagefright\n comes with a default list of supported software codecs and you can implement\n your own hardware codec by using the OpenMax integration layer standard. For\n more implementation details, see the MediaPlayer and Stagefright components\n located in `frameworks/av/media`.\n\nOpenMAX Integration Layer (IL)\n: The OpenMAX IL provides a standardized way for Stagefright to recognize and\n use custom hardware-based multimedia codecs called components. You must provide\n an OpenMAX plugin in the form of a shared library named\n `libstagefrighthw.so`. This plugin links Stagefright with your custom\n codec components, which must be implemented according to the OpenMAX IL\n component standard.\n\nImplement custom codecs\n-----------------------\n\nStagefright comes with built-in software codecs for common media formats, but\nyou can also add your own custom hardware codecs as OpenMAX components. To do\nthis, you must create the OMX components and an OMX plugin that hooks together\nyour custom codecs with the Stagefright framework. For example components, see\nthe `hardware/ti/omap4xxx/domx/`; for an example plugin for the\nGalaxy Nexus, see `hardware/ti/omap4xx/libstagefrighthw`.\n\nTo add your own codecs:\n\n1. Create your components according to the OpenMAX IL component standard. The component interface is located in the `frameworks/native/include/media/OpenMAX/OMX_Component.h` file. To learn more about the OpenMAX IL specification, refer to the [OpenMAX website](http://www.khronos.org/openmax/).\n2. Create a OpenMAX plugin that links your components with the Stagefright service. For the interfaces to create the plugin, see `frameworks/native/include/media/hardware/OMXPluginBase.h` and `HardwareAPI.h` header files.\n3. Build your plugin as a shared library with the name `libstagefrighthw.so` in your product Makefile. For example: \n\n ```\n LOCAL_MODULE := libstagefrighthw\n ```\n\n In your device's Makefile, ensure you declare the module as a product\n package: \n\n ```\n PRODUCT_PACKAGES += \\\n libstagefrighthw \\\n ...\n ```\n\nExpose codecs to the framework\n------------------------------\n\nThe Stagefright service parses the `system/etc/media_codecs.xml`\nand `system/etc/media_profiles.xml` to expose the supported codecs\nand profiles on the device to app developers via the\n`android.media.MediaCodecList` and\n`android.media.CamcorderProfile` classes. You must create both files\nin the `device/\u003ccompany\u003e/\u003cdevice\u003e/` directory\nand copy this over to the system image's `system/etc` directory in\nyour device's Makefile. For example: \n\n```\nPRODUCT_COPY_FILES += \\\n device/samsung/tuna/media_profiles.xml:system/etc/media_profiles.xml \\\n device/samsung/tuna/media_codecs.xml:system/etc/media_codecs.xml \\\n```\n\nFor complete examples, see `device/samsung/tuna/media_codecs.xml`\nand `device/samsung/tuna/media_profiles.xml` .\n\n**Note:** As of Android 4.1, the\n`\u003cQuirk\u003e` element for media codecs is no longer supported."]]