يمكنك الاطّلاع على صفحة التنسيقات المتوافقة مع ExoPlayer للحصول على مقدّمة عن تنسيقات الوسائط بشكل عام. تنطبق القيود نفسها على تحميل البث واستخراجه وفك ترميزه باستخدام Transformer، على الرغم من أنّ Transformer لا يتيح وحدات فك الترميز البرمجية المجمّعة في ExoPlayer.
يعتمد Transformer أيضًا على MediaCodec للترميز، ما يحدّ من تنسيقات الإخراج المتوافقة. يمكنك الاطّلاع على برامج ترميز الفيديو في MediaCodec
لمزيد من المعلومات عن قيود الترميز.
تُخرج Transformer تلقائيًا ملفات MP4 عادية باستخدام
InAppMp4Muxer. إذا كان تطبيقك يتطلّب ملفات MP4 مجزّأة، يمكنك تمرير
InAppFragmentedMp4Muxer.Factory عند
تهيئة مثيل Transformer. تتيح Media3 أيضًا تنسيقات أخرى
مثل WebM وAAC وOgg وWAV، باستخدام أدوات دمج مخصّصة، مثل
WebmMuxer وAacMuxer وOggMuxer و
WavMuxer. يجب تضمين هذه التنسيقات في
Muxer.Factory مخصّص ليتم إدخالها، ولكن ستتضمّن الإصدارات المستقبلية
عمليات تنفيذ جاهزة للاستخدام في المصنع لتبسيط هذه العملية.
إتاحة استخدام الصور
يستخدم Transformer السمة BitmapFactory لتحميل جميع مواد عرض الصور وفك ترميزها، لذا يتيح Transformer جميع التنسيقات التي تتيحها السمة BitmapFactory. يمكنك الاطّلاع على
إتاحة استخدام الصور
لمعرفة أنواع الصور المتوافقة. بالنسبة إلى التنسيقات المتعدّدة الصور (مثل صور GIF)، يتم عرض إطار صورة واحد من الحاوية إذا تم استخدام DefaultAssetLoaderFactory.
تنسيقات خاصة
يتيح Transformer معالجة الإدخال بتنسيقات الوسائط الأحدث التي توفّر ميزات خاصة مقارنةً بالتنسيقات التقليدية.
معالجة فيديوهات HDR
تتيح المزيد من الأجهزة تسجيل فيديوهات HDR، ما يمنح ألوانًا أكثر حيوية ودقة ونطاق سطوع أكبر.
يتيح Transformer تعديل فيديوهات HDR بدءًا من Android 13 (مستوى واجهة برمجة التطبيقات 33) على الأجهزة التي تتضمّن دعم الترميز المطلوب. عند تعديل فيديوهات HDR، يجب أن تتعامل أي مؤثرات فيديو GL مع مكوّنات الألوان النقطية العائمة ذات 16 بت ومساحة ألوان BT.2020. HDR_MODE_KEEP_HDR هو الوضع التلقائي عند إنشاء Composition. إذا لم يكن تعديل HDR متاحًا، يعود Transformer إلى استخدام HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL.
يتيح تحويل HDR إلى SDR، المعروف أيضًا باسم ربط درجات الألوان، بدءًا من Android
10 (مستوى واجهة برمجة التطبيقات 29) على الأجهزة التي تتضمّن دعم فك الترميز وOpenGL
المطلوبَين. يكون ذلك مفيدًا عند مشاركة وسائط HDR مع تطبيقات أو خدمات أخرى لا تتيح إدخال محتوى HDR. لتفعيل تحديد درجة اللون باستخدام OpenGL، استدعِ setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) عند إنشاء Composition. بدءًا من Android 12 (مستوى واجهة برمجة التطبيقات 31)، يتيح MediaCodec أيضًا ربط درجات الألوان على بعض الأجهزة، بما في ذلك جميع الأجهزة التي تعمل بالإصدار Android 13 أو إصدار أحدث والتي يمكنها تسجيل فيديوهات النطاق عالي الديناميكية. لتفعيل تحديد درجة اللون باستخدام MediaCodec، استدعِ setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC).
يتيح Transformer أيضًا سيناريوهات متقدّمة لترميز الفيديو، مثل ما يلي:
- فيديو دقة HDR فائقة إلى نطاق عالي الديناميكية: يمكنك تحويل مدخلات صور دقة HDR فائقة إلى فيديو نطاق عالي الديناميكية، مع الحفاظ على النطاق الديناميكي للصورة ونطاق الألوان الواسع، ما يضمن تطابق الصور الثابتة مع ذروة السطوع وحيوية فيديو نطاق عالي الديناميكية في المخططات الزمنية المختلطة.
- ترميز الفيديو وتغيير تنسيقه في Dolby Vision: يتيح Transformer تغيير تنسيق الطبقة الأساسية المتوافقة مع الإصدارات السابقة (مثل HEVC) من وسائط Dolby Vision (الملف الشخصي 8) بدون إعادة ترميزها، أو ترميزها باستخدام تحديد درجة اللون إلى تنسيقات SDR عادية.
معالجة وسائط التصوير البطيء
تتضمّن فيديوهات التصوير البطيء بيانات وصفية تشير إلى السرعة التي يجب تشغيل كل قسم من أقسام البث بها. التسوية هي عملية إنشاء بث فيديو جديد استنادًا إلى فيديو التصوير البطيء، ولكن يتم تسريع الأقسام أو إبطاؤها استنادًا إلى البيانات الوصفية، بحيث يتم تشغيلها بشكل صحيح حتى على المشغّلات التي لا تطبّق البيانات الوصفية للتصوير البطيء.
لتسوية بث التصوير البطيء، استخدِم طريقة الإنشاء setFlattenForSlowMotion في EditedMediaItem.
Kotlin
val editedMediaItem = EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build() val transformer = Transformer.Builder(context).addListener(transformerListener).build() transformer.start(editedMediaItem, outputPath)
Java
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build(); Transformer transformer = new Transformer.Builder(context).addListener(transformerListener).build(); transformer.start(editedMediaItem, outputPath);
يتيح لك ذلك إتاحة فيديوهات التصوير البطيء بدون الحاجة إلى معالجة هذه التنسيقات الخاصة. ما عليك سوى تخزين وتشغيل النسخة المسوّاة من الفيديو بدلاً من النسخة الأصلية.