قالب‌های پشتیبانی‌شده

برای آشنایی با قالب‌های رسانه به‌طور کلی، به صفحه قالب‌های پشتیبانی‌شده ExoPlayer مراجعه کنید. همان محدودیت‌های مربوط به بار کردن، استخراج کردن، و رمزگشایی جاری‌سازی‌ها در Transformer نیز اعمال می‌شود، هرچند Transformer از واحد رمزگشای نرم‌افزاری دسته‌بندی‌شده ExoPlayer پشتیبانی نمی‌کند.

«ترانسفورمر» برای کدبندی به MediaCodec نیز متکی است که این امر قالب‌های خروجی پشتیبانی‌شده را محدود می‌کند. برای اطلاعات بیشتر درباره محدودیت‌های کدبندی، کدک‌های ویدیویی MediaCodec را ببینید.

به‌طور پیش‌فرض، Transformer فایل‌های MP4 استاندارد را بااستفاده از InAppMp4Muxer برون‌برد می‌کند. اگر برنامه شما به MP4 تکه‌تکه نیاز دارد، می‌توانید هنگام مقداردهی اولیه نمونه Transformer، یک InAppFragmentedMp4Muxer.Factory ارسال کنید. ‫Media3 همچنین از قالب‌های دیگر مانند WebM،‏ AAC،‏ Ogg، و WAV بااستفاده از ترکیب‌کننده‌های اختصاصی مانند WebmMuxer،‏ AacMuxer،‏ OggMuxer، و WavMuxer پشتیبانی می‌کند. این موارد باید در یک Muxer.Factory سفارشی پیچیده شوند تا تزریق شوند، اما نسخه‌های پخش آینده شامل پیاده‌سازی‌های کارخانه‌ای آماده استفاده برای ساده‌سازی این فرایند خواهند بود.

پشتیبانی از تصویر

‫Transformer از BitmapFactory برای بار کردن و رمزگشایی کردن همه دارایی‌های تصویر استفاده می‌کند، بنابراین ‫Transformer از همه قالب‌هایی که BitmapFactory پشتیبانی می‌کند پشتیبانی می‌کند. برای اطلاع از انواع تصویر پشتیبانی‌شده، پشتیبانی از تصویر را ببینید. برای قالب‌های چندتصویری (مثلاً گیف)، اگر از DefaultAssetLoaderFactory استفاده شود، یک قاب تصویر از محتوی نمایش داده می‌شود.

قالب‌های ویژه

«ترانسفورمر» از مدیریت ورودی در قالب‌های رسانه‌ای جدیدتر که در مقایسه با قالب‌های معمولی ویژگی‌های خاصی ارائه می‌دهند پشتیبانی می‌کند.

کار با ویدیوهای HDR

دستگاه‌های بیشتری از ضبط ویدیو HDR پشتیبانی می‌کنند و رنگ‌های زنده‌تر و دقیق‌تر و محدوده روشنایی بیشتری ارائه می‌دهند.

‫Transformer از ویرایش ویدیوهای HDR از Android 13 (میانای برنامه‌سازی کاربردی سطح ۳۳) به بعد در دستگاه‌هایی که از کدبندی موردنیاز پشتیبانی می‌کنند پشتیبانی می‌کند. هنگام ویرایش ویدیوهای HDR، هرگونه جلوه ویدیویی GL باید از مؤلفه‌های رنگ شناور ۱۶ بیتی و فضای رنگ BT.2020 پشتیبانی کند. HDR_MODE_KEEP_HDR حالت پیش‌فرض هنگام ساختن Composition است. اگر ویرایش HDR پشتیبانی نشود، «ترانسفورماتور» به استفاده از HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL برمی‌گردد.

تبدیل HDR به SDR، که به‌عنوان نگاشت تن نیز شناخته می‌شود، از Android 10 (سطح API 29) به بعد در دستگاه‌هایی که از رمزگشایی و OpenGL پشتیبانی می‌کنند پشتیبانی می‌شود. این ویژگی هنگام هم‌رسانی رسانه HDR با برنامه‌ها یا سرویس‌های دیگری که از دریافت محتوای HDR پشتیبانی نمی‌کنند مفید است. برای فعال کردن نگاشت تن بااستفاده از فراخوان OpenGL setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) هنگام ایجاد Composition. از Android 12 (سطح میانای برنامه‌سازی کاربردی ۳۱) به بعد، MediaCodec همچنین از نگاشت تن در برخی‌از دستگاه‌ها، ازجمله همه دستگاه‌های دارای Android 13 یا بالاتر که می‌توانند ویدیو HDR ضبط کنند، پشتیبانی می‌کند. برای فعال کردن نگاشت تن بااستفاده از MediaCodec، با setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC) تماس بگیرید.

‫Transformer همچنین از سناریوهای تراتبدیل پیشرفته مانند موارد زیر پشتیبانی می‌کند:

  • «وضوح فوق‌العاده بالا» به ویدیو HDR: می‌توانید ورودی‌های تصویر «وضوح فوق‌العاده بالا» را به ویدیو HDR تبدیل کنید و دامنه پویای تصویر و گستره رنگ وسیع را حفظ کنید تا عکس‌های ثابت با اوج روشنایی و سرزندگی ویدیو HDR در جدول‌های زمانی ترکیبی مطابقت داشته باشند.
  • تراتبدیل و تراتبدیل Dolby Vision: Transformer از تراتبدیل لایه پایه سازگار با عقب (مانند HEVC) از رسانه Dolby Vision (نمایه ۸) بدون کدبندی مجدد، یا تراتبدیل آن با نگاشت تن به قالب‌های استاندارد SDR پشتیبانی می‌کند.

درحال مدیریت رسانه حرکت آهسته

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

برای مسطح کردن جاری‌سازی‌های آهسته، از روش سازنده setFlattenForSlowMotion در EditedMediaItem استفاده کنید.

کاتلین

val editedMediaItem =
  EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build()
val transformer = Transformer.Builder(context).addListener(transformerListener).build()
transformer.start(editedMediaItem, outputPath)

جاوا

EditedMediaItem editedMediaItem =
    new EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build();
Transformer transformer =
    new Transformer.Builder(context).addListener(transformerListener).build();
transformer.start(editedMediaItem, outputPath);

این کار به شما امکان می‌دهد از ویدیوهای آهسته پشتیبانی کنید بدون اینکه نگران مدیریت این قالب‌های ویژه باشید. تنها کاری که باید انجام دهید این است که نسخه مسطح‌شده ویدیو را به‌جای نسخه اصلی ذخیره و پخش کنید.