إنّ ميزة تحويل ترميز الوسائط المتوافقة، التي تم طرحها في الإصدار 12 من نظام التشغيل Android، هي ميزة تتيح للأجهزة استخدام تنسيقات وسائط أكثر حداثة وفعالية في ما يخص مساحة التخزين لتسجيل الفيديوهات، مثل HEVC، مع الحفاظ على التوافق مع التطبيقات. باستخدام هذه الميزة، يمكن لصنّاع الأجهزة استخدام HEVC بدلاً من AVC بشكلٍ تلقائي لتحسين جودة الفيديو مع تقليل متطلبات مساحة التخزين وسعة النطاق. بالنسبة إلى الأجهزة التي تم تفعيل ميزة تحويل ترميز الوسائط المتوافقة عليها، يمكن لنظام التشغيل Android تحويل الفيديوهات تلقائيًا (التي تصل مدتها إلى دقيقة واحدة) المسجّلة بتنسيقات مثل HEVC أو HDR عند فتح الفيديوهات باستخدام تطبيق لا يتيح استخدام هذا التنسيق. يتيح ذلك للتطبيقات العمل حتى عند تسجيل الفيديوهات بتنسيقات أحدث على الجهاز.
تكون ميزة تحويل الوسائط إلى تنسيق متوافق غير مفعَّلة تلقائيًا. لطلب تحويل ترميز الوسائط، يجب أن توضّح التطبيقات إمكانات الوسائط لديها. لمزيد من المعلومات حول تحديد إمكانات الوسائط، يُرجى الاطّلاع على مقالة تحويل ترميز الوسائط المتوافق على موقع "مطوّرو تطبيقات Android" الإلكتروني.
آلية العمل
تتألف ميزة تحويل الوسائط إلى تنسيق متوافق من جزءَين رئيسيَين:
- خدمات تحويل الترميز في إطار عمل الوسائط: تُحوّل هذه الخدمات الملفات من تنسيق إلى آخر باستخدام أجهزة لخفض وقت الاستجابة وتحويل الترميز بجودة عالية. ويشمل ذلك واجهة برمجة التطبيقات لتحويل الترميز، و خدمة تحويل الترميز، وبرنامجًا إضافيًا من المصنّع الأصلي للجهاز للفلاتر المخصّصة، والأجهزة. للحصول على مزيد من التفاصيل، يُرجى الاطّلاع على نظرة عامة على البنية.
- ميزة تحويل ترميز الوسائط المتوافقة في موفّري الوسائط: يرصد هذا المكوّن في موفّري الوسائط التطبيقات التي تصل إلى ملفات الوسائط ويعرض إما الملف الأصلي أو ملفًا تم تحويل ترميزه استنادًا إلى ميزات التطبيق المعلَن عنها. إذا كان التطبيق متوافقًا مع تنسيق ملف الوسائط، لن يكون هناك حاجة إلى التعامل معه بطريقة خاصة. إذا كان التطبيق لا يتوافق مع التنسيق، يحوّل الإطار المرجعي الملف إلى تنسيق قديم، مثل AVC، عندما يصل التطبيق إلى الملف.
يعرض الشكل 1 نظرة عامة على عملية تحويل ترميز الوسائط.
الشكل 1: نظرة عامة على تحويل الوسائط إلى تنسيق متوافق
التنسيقات المعتمدة
تتيح ميزة تحويل الوسائط إلى تنسيق متوافق الإحالات الناجحة التالية:
- HEVC (بترميز 8 بت) إلى AVC: يتم إجراء عمليات تحويل ترميز الفيديو من خلال ربط وحدة فك ترميز ترميز الوسائط ووحدة ترميز ترميز الوسائط.
- HDR10+ (10 بت) إلى AVC (النطاق العادي الديناميكية): يتم إجراء عمليات تحويل من HDR إلى SDR باستخدام مثيلات ترميز الوسائط وإضافة مكوّن إضافي من المورّد إلى مثيلات وحدة الترميز. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة ترميز HDR إلى SDR.
مصادر المحتوى المتوافقة
تتيح ميزة تحويل ترميز الوسائط المتوافقة إمكانية استخدام الوسائط على الجهاز التي تم إنشاؤها
من خلال تطبيق الكاميرا الأصلي من الشركة المصنّعة للجهاز والتي يتم تخزينها في مجلد DCIM/Camera/
في
وحدة التخزين الخارجية الأساسية. لا تتيح الميزة استخدام الوسائط على مساحة التخزين الثانوية.
لا يمكن نقل المحتوى إلى الأجهزة من خلال البريد الإلكتروني أو بطاقات SD.
وتصل التطبيقات إلى الملفات استنادًا إلى مسارات ملفات مختلفة. في ما يلي وصف لمسارات الملفات التي يكون فيها تحويل الترميز مفعّلاً أو تم تجاوزه:
عند تفعيل تحويل الترميز:
- وصول التطبيقات من خلال واجهات برمجة تطبيقات MediaStore
- الوصول إلى التطبيق من خلال واجهات برمجة تطبيقات مسارات الملفات المباشرة، بما في ذلك Java والرمز البرمجي الأصلي
- الوصول إلى التطبيقات من خلال إطار عمل الوصول إلى مساحة التخزين (SAF)
- الوصول إلى التطبيق من خلال نوايا "صفحة المشاركة" في نظام التشغيل (عنوان URI الخاص بـ MediaStore فقط)
- نقل الملفات عبر بروتوكول MTP/PTP من الهاتف إلى الكمبيوتر
الحالات التي يتم فيها تخطّي عملية تحويل الترميز:
- نقل ملف من جهاز عن طريق إخراج بطاقة SD
- نقل الملفات من جهاز إلى آخر باستخدام خيارات مثل "المشاركة عن قرب" أو نقل الملفات عبر البلوتوث
إضافة مسارات ملفات مخصّصة لتحويل الترميز
يمكن لمصنعي الأجهزة إضافة مسارات ملفات اختيارية لترميز الوسائط ضمن directory
DCIM/
. ويتم رفض أي مسارات خارج الدليل DCIM/
.
قد تكون إضافة مسارات الملفات هذه مطلوبة لاستيفاء متطلبات مشغّل شبكة الجوّال أو اللوائح المحلية.
لإضافة مسار ملف، استخدِم مسار تحويل الترميز
تداخل موارد وقت التشغيل (RRO)،
config_supported_transcoding_relative_paths
. في ما يلي مثال
على كيفية إضافة مسار ملف:
<string-array name="config_supported_transcoding_relative_paths" translatable="false">
<item>DCIM/JCF/</item>
</string-array>
للتحقّق من مسارات الملفات التي تم ضبطها، استخدِم:
adb shell dumpsys activity provider com.google.android.providers.media.module/com.android.providers.media.MediaProvider | head -n 20
نظرة عامة على البنية
يصف هذا القسم بنية ميزة تحويل ترميز الوسائط.
الشكل 2: بنية تحويل ترميز الوسائط
تتألف بنية تحويل ترميز الوسائط من المكوّنات التالية:
- واجهة برمجة تطبيقات نظام MediaTranscodingManager: واجهة تسمح للعميل بالتواصل مع خدمة MediaTranscoding تستخدِم وحدة MediaProvider واجهة برمجة التطبيقات هذه.
- MediaTranscodingService: خدمة أساسية تدير اتصالات العميل
وتجدول طلبات تحويل الترميز وتدير مسك الدفاتر ل
TranscodingSessions
. - MediaTranscoder: مكتبة أصلية تُجري عملية تحويل الترميز تم إنشاء هذه المكتبة على إطار عمل الوسائط NDK لتكون متوافقة مع الوحدات.
تسجِّل ميزة تحويل الوسائط إلى تنسيق متوافق مقاييس تحويل الترميز في كلٍّ من الخدمة وبرنامج تحويل ترميز الوسائط. يتم تضمين الرمز البرمجي من جهة العميل وخدمة الوسائط في وحدة MediaProvider للسماح بإجراء إصلاحات الأخطاء والتحديثات في الوقت المناسب.
الوصول إلى الملفات
يتم إنشاء عملية تحويل ترميز الوسائط المتوافقة على نظام الملفات في مساحة المستخدم (FUSE)، والذي يتم استخدامه لمساحة التخزين ذات النطاق المحدّد. تتيح حزمة FUSE لوحدة MediaProvider examining عمليات الملفات في مساحة المستخدم وفرض قيود على الوصول إلى الملفات استنادًا إلى سياسة السماح بالوصول أو رفضه أو إخفائه.
عندما يحاول أحد التطبيقات الوصول إلى ملف، يعترض الخادم الدائم لبروتوكول FUSE عملية قراءة FILE من التطبيق. وإذا كان التطبيق متوافقًا مع تنسيق أحدث (مثل HEVC)، يتم عرض FILE الأصلي. إذا كان التطبيق لا يتوافق مع التنسيق، تتم إعادة تحويل ترميز الملف إلى تنسيق قديم (مثل AVC) أو يتم استرجاعه من ذاكرة التخزين المؤقت إذا كان هناك إصدار تمت إعادة تحويل ترميزه.
طلب الملفات التي تم تحويل ترميزها
تكون ميزة تحويل ترميز الوسائط المتوافقة غير مفعّلة تلقائيًا، ما يعني أنّه إذا كان الجهاز متوافقًا مع HEVC، لن يحوّل Android ترميز الملفات ما لم يحدّد أحد التطبيقات ذلك فيملف بيان أو في ملف قائمة تحويل الترميز الإجباري.
يمكن للتطبيقات طلب مواد عرض تم تحويل ترميزها باستخدام الخيارات التالية:
- يجب الإفصاح عن التنسيقات غير المتوافقة في ملف البيان. لمعرفة التفاصيل، يُرجى الاطّلاع على تحديد الإمكانات في مورد وتحديد الإمكانات في الرمز البرمجي.
- أضِف التطبيقات إلى ملف برمجي قائمة تحويل الترميز الإجباري المضمّن في وحدة MediaProvider. يتيح ذلك تحويل ترميز التطبيقات التي لم تعدِّل ملف البيان الخاص بها. بعد أن يعدّل التطبيق ملف البيان الخاص به باستخدام تنسيقات غير متوافقة، يجب إزالته من قائمة تحويل الترميز القسري. يمكن لصنّاع الأجهزة اقتراح تطبيقاتهم لإضافتها أو إزالتها من قائمة تحويل الترميز العميق الإلزامي من خلال إرسال تصحيح أو الإبلاغ عن خطأ. يراجع فريق Android القائمة بشكل دوري وقد يزيل التطبيقات منها.
- أوقِف التنسيقات المتوافقة باستخدام إطار عمل توافق التطبيقات في وقت التشغيل (يمكن للمستخدمين أيضًا إيقاف هذا الخيار لكل تطبيق في "الإعدادات").
- افتح ملفًا باستخدام
MediaStore
مع تحديد التنسيقات غير المتوافقة بوضوح باستخدام واجهة برمجة التطبيقاتopenTypedAssetFileDescriptor
.
بالنسبة إلى عمليات النقل عبر USB (من الجهاز إلى الكمبيوتر الشخصي)، يكون تحويل الترميز غير مفعَّل تلقائيًا، ولكن يمكن للمستخدمين اختيار تفعيل تحويل الترميز باستخدام مفتاح التبديل تحويل الفيديوهات إلى AVC في شاشة إعدادات الإعدادات المفضّلة لـ USB كما هو موضّح في الشكل 3.
الشكل 3: فعِّل تحويل ترميز الوسائط في شاشة "الإعدادات المفضّلة لاستخدام USB".
القيود المفروضة على طلب الملفات التي تم تحويل ترميزها
لمنع طلبات تحويل الترميز من حجز موارد النظام لفترات مديدة، تقتصر التطبيقات التي تطلب جلسات تحويل الترميز على:
- 10 جلسات متتالية
- إجمالي مدة تشغيل تبلغ ثلاث دقائق
إذا تجاوز أحد التطبيقات كل هذه القيود، يعرض الإطار وصف الملف الأصلي.
متطلبات الأجهزة
لكي تكون الأجهزة متوافقة مع ميزة تحويل ترميز الوسائط، يجب أن تستوفي المتطلبات التالية:
- تم تفعيل ترميز HEVC تلقائيًا على تطبيق الكاميرا الأصلي على الجهاز
- (الأجهزة التي تتيح تحويل الفيديوهات من النطاق العالي الديناميكية إلى النطاق العادي الديناميكية) الجهاز متوافق مع التقاط فيديوهات بتقنية النطاق العالي الديناميكية
لضمان أداء الجهاز في تحويل ترميز الوسائط، يجب تحسين أداء الوصول إلى مكونات الفيديو ومساحة التخزين
للقراءة/الكتابة. عند ضبط برامج ترميز الوسائط
بأولوية تساوي 1
، يجب أن تعمل برامج الترميز بأعلى
معدل نقل بيانات ممكن. ننصحك بتحقيق معدل تحويل محتوى يبلغ
200 لقطة في الثانية بحد أدنى. لاختبار أداء الأجهزة، يمكنك إجراء اختبار قياس أداء transcoder
الوسائط على frameworks/av/media/libmediatranscoding/transcoder/benchmark
.
التحقُّق
للتحقّق من صحة ميزة تحويل ترميز الوسائط المتوافقة، عليك إجراء اختبارات CTS التالية:
android.media.mediatranscoding.cts
android.mediaprovidertranscode.cts
تفعيل تحويل ترميز الوسائط على مستوى العالم
لاختبار إطار عمل تحويل الوسائط إلى تنسيق متوافق أو سلوك التطبيق مع تحويل الوسائط إلى تنسيق متوافق، يمكنك تفعيل ميزة تحويل الوسائط إلى تنسيق متوافق أو إيقافها بشكل عام. في صفحة خيارات المطوّرين الإعدادات > النظام > المطوّر > تحويل ترميز الوسائط، فعِّل خيار تجاوز الإعدادات التلقائية لتحويل الترميز ، ثم فعِّل خيار تفعيل تحويل الترميز أو إيقافه. في حال تفعيل هذا الإعداد، قد يتم تحويل ترميز الوسائط في الخلفية للتطبيقات غير التطبيق الذي تُطوّره.
التحقّق من حالة تحويل الترميز
أثناء الاختبار، يمكنك استخدام الأمر التالي في ADB shell للتحقّق من حالة transcoding ، بما في ذلك جلسات تحويل الترميز الحالية والسابقة:
adb shell dumpsys media.transcoding
زيادة الحد الأقصى لمدة الفيديو
لأغراض الاختبار، يمكنك تمديد الحد الأقصى لمدة الفيديو البالغة دقيقة واحدة لترميز الفيديو باستخدام الأمر التالي. قد تحتاج إلى إعادة تشغيل الجهاز بعد تنفيذ هذا الأمر.
adb shell device_config put storage_native_boot transcode_max_duration_ms <LARGE_NUMBER_IN_MS>
مصدر AOSP والمراجع
في ما يلي رمز المصدر في AOSP المرتبط بتحويل الوسائط إلى تنسيق متوافق.
واجهة برمجة التطبيقات Transcoding System API (تستخدمها فئة MediaProvider فقط)
ApplicationMediaCapabilities API
frameworks/base/apex/media/framework/java/android/media/ApplicationMediaCapabilities.java
خدمة تحويل ترميز الوسائط
frameworks/av/services/mediatranscoding/
frameworks/av/media/libmediatranscoding/
Native MediaTranscoder
frameworks/av/media/libmediatranscoding/transcoder
نموذج المكوّن الإضافي لميزة HDR في MediaTranscoder
رمز اعتراض الملفات وتحويل ترميزها في MediaProvider
مقياس أداء MediaTranscoder
frameworks/av/media/libmediatranscoding/transcoder/benchmark
اختبارات CTS
cts/tests/tests/mediatranscoding/
ترميز نطاق عالي الديناميكية (HDR) إلى نطاق عادي الديناميكية (SDR)
لتفعيل ترميز HDR إلى SDR، يمكن لشركات تصنيع الأجهزة استخدام نموذج AOSP
مكوّن فلاتر الترميز 2.0 الإضافي المتوفّر في
/platform/frameworks/av/media/codec2/hidl/plugin/
.
يوضّح هذا القسم طريقة عمل المكوّن الإضافي للفلترة وكيفية تنفيذه
وكيفية اختباره.
إذا لم يتضمّن الجهاز مكوّنًا إضافيًا يتيح ترميز تقنية النطاق العالي الديناميكية (HDR) إلى تقنية النطاق الديناميكية العادية (SDR)، يحصل التطبيق الذي يصل إلى فيديو بتقنية HDR على وصف الملف الأصلي بغض النظر عن إمكانات الوسائط في التطبيق الموضّحة في البيان.
آلية العمل
يصف هذا القسم السلوك العام للمكوّن الإضافي لفلترة الترميز 2.0.
خلفية
يقدّم Android تنفيذًا لطبقة التكيف بين واجهة
Codec 2.0
وواجهة android.hardware.media.c2
HAL في
android::hardware::media::c2
. بالنسبة إلى المكوّنات الإضافية للفلاتر، يشتمل AOSP على آلية برنامج تضمين تربط برامج فك الترميز مع المكوّنات الإضافية للفلاتر.
يتعرّف MediaCodec
على هذه المكوّنات المُغلفة على أنّها برامج ترميز تتضمّن ميزات فلترة.
نظرة عامة
تأخذ فئة FilterWrapper
برامج ترميز المصنّعين وتُعيد
برامج الترميز المُغلفة إلى طبقة التكيف media.c2
. تحمِّل فئة FilterWrapper
libc2filterplugin.so
من خلال واجهة برمجة التطبيقات FilterWrapper::Plugin
و
تسجِّل الفلاتر المتاحة من المكوّن الإضافي. عند الإنشاء، FilterWrapper
تنشئ جميع الفلاتر المتاحة. لا يتم سوى
بدء الفلاتر التي تغيّر المخزن المؤقت.
الشكل 4: بنية المكوّن الإضافي للفلترة
واجهة المكوّن الإضافي للفلترة
تحدِّد واجهة
FilterPlugin.h
واجهات برمجة التطبيقات التالية لعرض الفلاتر:
std::shared_ptr<C2ComponentStore>getComponentStore()
تعرِض هذه الدالة عنصر
C2ComponentStore
يحتوي على فلاتر. وهذا منفصل عن ما يعرضه تطبيق Codec 2.0 الخاص بالمورّد. لا يحتوي المخزن عادةً إلا على الفلاتر المستخدَمة من قِبل فئةFilterWrapper
.bool describe(C2String name, Descriptor *desc)
يصف الفلاتر بالإضافة إلى ما هو متاح من
C2ComponentStore
. يتم تحديد الأوصاف التالية:controlParam
: المَعلمات التي تتحكّم في سلوك الفلاتر على سبيل المثال، بالنسبة إلى أداة تحويل الدرجات اللونية من تنسيق HDR إلى SDR، تكون مَعلمة التحكّم هي دالة النقل المستهدَفة.affectedParams
: المَعلمات المتأثرة بعمليات الترشيح على سبيل المثال، في أداة تحويل النغمة من الفيديوهات بنطاق عالي الديناميكية (HDR) إلى الفيديوهات بنطاق ديناميكية عادي (SDR)، تكون المَعلمات المتأثّرة هي جوانب اللون.
bool isFilteringEnabled(const std::shared_ptr<C2ComponentInterface> &intf)
تعرِض القيمة
true
إذا كان مكوّن الفلتر يغيّر المخزن المؤقت. على سبيل المثال، يعرض فلتر تحويل الألوانtrue
إذا كانت وظيفة النقل المستهدَفة هي SDR وكانت وظيفة النقل المُدخلة هي HDR (HLG أو PQ).
تفاصيل FilterWrapper
يصف القسم تفاصيل فئة FilterWrapper
.
الإنشاء
ينشئ المكوّن المُغلف وحدة ترميز أساسية وجميع فلاتر المحدّدة عند الإنشاء.
طلب البحث والضبط
يفصل المكوّن المُغلف المَعلمات الواردة عن طلبات البحث أو طلبات الضبط وفقًا لوصف الفلتر. على سبيل المثال، يتم توجيه إعداد مَعلمة التحكّم في الفلتر إلى الفلتر المعني، وتكون المَعلمات المتأثرة من الفلاتر متوفّرة في طلبات البحث (بدلاً من القراءة من وحدة الترميز التي تحتوي على مَعلمات غير متأثرة).
الشكل 5: طلب البحث والضبط
بدء
عند البدء، يشغِّل المكوّن المُغلف وحدة الترميز وجميع الفلاتر التي تُغيّر ذاكرات التخزين المؤقت. في حال عدم تفعيل أي فلتر، يشغِّل المكوِّن المُغلف أداة فك التشفير ووحدات التخزين المؤقت للمرور المباشر ويرسل أوامر إلى أداة فك التشفير نفسها.
معالجة المخزن المؤقت
الشكل 6: معالجة المخزن المؤقت
يتم توجيه المخازن المؤقتة التي تم وضعها في "قائمة الانتظار" إلى "أداة فك التشفير" المُغلفة إلى "أداة فك التشفير" الأساسية. يحصل المكوّن المُغلف
على وحدة تخزين مؤقت للإخراج من وحدة فك التشفير من خلال دالة onWorkDone_nb()
المُعاد الاتصال بها، ثم يضيفها إلى قائمة الانتظار في الفلاتر. يتم إرسال ذاكرة التخزين المؤقت النهائية للإخراج من
الفلتر الأخير إلى العميل.
لكي تعمل معالجة المخزن المؤقت هذه، يجب أن يضبط المكوّن المُغلف
C2PortBlockPoolsTuning
على الفلتر الأخير لكي يتم تخزين بيانات إطار العمل في المخزن المؤقت
من مجموعة الكتل المتوقّعة.
إيقاف الجهاز وإعادة ضبطه وتحريره
عند الإيقاف، يوقف المكوّن المُغلف وحدة الترميز وجميع الفلاتر المفعّلة التي تم تشغيلها. عند إعادة الضبط والإفراج، تتم إعادة ضبط جميع المكوّنات أو إزالتها بغض النظر عمّا إذا كانت مفعّلة أم لا.
تنفيذ المكوّن الإضافي لفلتر العيّنات
ولتفعيل المكوّن الإضافي، اتّبِع الخطوات التالية:
- نفِّذ واجهة
FilterPlugin
في مكتبة وأفلِتها في/vendor/lib[64]/libc2filterplugin.so.
. - أضِف أذونات إضافية إلى
mediacodec.te
إذا لزم الأمر. - عليك تحديث طبقة التكيف إلى Android 12 و
إعادة إنشاء خدمة
media.c2
.
اختبار المكوّن الإضافي
لاختبار الإضافة النموذجية، اتّبِع الخطوات التالية:
- إعادة إنشاء الجهاز وفلاشه
يمكنك إنشاء نموذج المكوّن الإضافي باستخدام الأمر التالي:
m sample-codec2-filter-plugin
أعِد تثبيت الجهاز وأعِد تسمية المكوّن الإضافي الخاص بالمطوّر لكي تتمكّن خدمة الترميز من التعرّف عليه.
adb root adb remount adb reboot adb wait-for-device adb root adb remount adb push /out/target/<...>/lib64/sample-codec2-filter-plugin.so \ /vendor/lib64/libc2filterplugin.so adb push /out/target/<...>/lib/sample-codec2-filter-plugin.so \ /vendor/lib/libc2filterplugin.so adb reboot