رسانه ها

نماد 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> برای کدک‌های رسانه دیگر پشتیبانی نمی‌شود.