رسانه ها

نماد Android Media HAL

Android شامل Stagefright است، یک موتور پخش رسانه در سطح بومی که دارای کدک‌های مبتنی بر نرم‌افزار داخلی برای فرمت‌های رسانه محبوب است.

ویژگی های پخش صوتی و تصویری Stagefright شامل ادغام با کدک های OpenMAX، مدیریت جلسه، رندر همگام سازی شده، کنترل حمل و نقل و DRM است.

Stagefright همچنین از ادغام با کدک های سخت افزاری سفارشی ارائه شده توسط شما پشتیبانی می کند. برای تنظیم یک مسیر سخت افزاری برای رمزگذاری و رمزگشایی رسانه، باید یک کدک مبتنی بر سخت افزار را به عنوان یک جزء OpenMax IL (لایه ادغام) پیاده سازی کنید.

توجه: به‌روزرسانی‌های Stagefright می‌توانند از طریق فرآیند به‌روزرسانی امنیتی ماهانه اندروید و به‌عنوان بخشی از نسخه سیستم‌عامل Android رخ دهند.

معماری

برنامه های رسانه ای با چارچوب چند رسانه ای بومی اندروید مطابق معماری زیر تعامل دارند.

معماری رسانه اندروید

شکل 1. معماری رسانه

چارچوب برنامه
در سطح چارچوب برنامه، کد برنامه وجود دارد که از API های android.media برای تعامل با سخت افزار چند رسانه ای استفاده می کند.
بایندر IPC
پروکسی‌های Binder IPC ارتباط را بر روی مرزهای فرآیند تسهیل می‌کنند. آنها در دایرکتوری frameworks/av/media/libmedia و با حرف "I" شروع می شوند.
چارچوب چند رسانه ای بومی
در سطح بومی، اندروید یک چارچوب چندرسانه ای ارائه می کند که از موتور 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 .

توجه: از Android 4.1، عنصر <Quirk> برای کدک‌های رسانه دیگر پشتیبانی نمی‌شود.