على نظام التشغيل Android 12 (المستوى 31 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يمكن للنظام تحويل البيانات تلقائيًا الفيديوهات المسجّلة بتنسيقات مثل HEVC (H.265) وAVC (H.264) يتم فتحها من خلال تطبيق غير متوافق مع HEVC. تسمح هذه الميزة بتشغيل الفيديوهات تسجيل التطبيقات للاستفادة من ترميز حديث وفعّال في مساحة التخزين للفيديوهات يتم تسجيلها على الجهاز بدون التضحية بالتوافق مع التطبيقات الأخرى.
يمكن تحويل ترميز التنسيقات التالية تلقائيًا للمحتوى الذي تم إنشاؤه على الجهاز فقط:
تنسيق الوسائط | سمة XML | نوع MIME في MediaFormat |
---|---|---|
HEVC (H.265) | HEVC | تنسيق MediaFormat.MIMETYPE_VIDEO_HEVC |
تقنية HDR10 | تقنية HDR10 | MediaFeature.HdrType.HDR10 |
+HDR10 | تقنية HDR10Plus | MediaFeature.HdrType.HDR10_PLUS |
يفترض Android أنّ التطبيقات يمكنها تشغيل جميع تنسيقات الوسائط، لذلك يكون تحويل ترميز الوسائط المتوافق غير مفعَّل تلقائيًا.
حالات استخدام تحويل الترميز
إنّ تحويل الترميز عملية مرهقة من الناحية الحسابية وتؤدي إلى تأخّر كبير عند فتح ملف فيديو. على سبيل المثال، يستغرق ملف فيديو HEVC مدته دقيقة واحدة حوالي 20 ثانية لإعادة ترميزه إلى AVC على هاتف Pixel 3. لهذا السبب، يجب تحويل ملف الفيديو إلى تنسيق آخر فقط عند إرساله خارج الجهاز. على سبيل المثال، عند مشاركة ملف فيديو مع مستخدمين آخرين من التطبيق نفسه أو مع خادم سحابي لا يتيح استخدام تنسيقات الفيديوهات الحديثة.
لا تحوِّل الترميز عند فتح ملفات الفيديو لتشغيلها على الجهاز فقط أو لإنشاء صور مصغّرة.
ضبط تحويل الترميز
يمكن للتطبيقات التحكّم في سلوك تحويل الترميز من خلال الإفصاح عن ميزات الوسائط التي توفّرها. هناك طريقتان لتعريف هذه الإمكانات: في الرمز البرمجي أو في أحد الموارد.
تحديد الإمكانات في الرمز البرمجي
يمكنك الإفصاح عن إمكانات الوسائط في الرمز البرمجي من خلال إنشاء مثيل لكائن
ApplicationMediaCapabilities
باستخدام أداة إنشاء:
val mediaCapabilities = ApplicationMediaCapabilities.Builder() .addSupportedVideoMimeType(MediaFormat.MIMETYPE_VIDEO_HEVC) .addUnsupportedHdrType(MediaFeature.HdrType.HDR10) .addUnsupportedHdrType(MediaFeature.HdrType.HDR10_PLUS) .build()
ApplicationMediaCapabilities mediaCapabilities = new ApplicationMediaCapabilities.Builder() .addSupportedVideoMimeType(MediaFormat.MIMETYPE_VIDEO_HEVC) .addUnsupportedHdrType(MediaFeature.HdrType.HDR10) .addUnsupportedHdrType(MediaFeature.HdrType.HDR10_PLUS) .build();
استخدِم هذا العنصر عند الوصول إلى محتوى الوسائط من خلال طُرق مثل
ContentResolver#openTypedAssetFileDescriptor()
:
val providerOptions = Bundle().apply { putParcelable(MediaStore.EXTRA_MEDIA_CAPABILITIES, mediaCapabilities) } contentResolver.openTypedAssetFileDescriptor(mediaUri, mediaMimeType, providerOptions) .use { fileDescriptor -> // Content will be transcoded based on values defined in the // ApplicationMediaCapabilities provided. }
Bundle providerOptions = new Bundle(); providerOptions.putParcelable(MediaStore.EXTRA_MEDIA_CAPABILITIES, mediaCapabilities); try (AssetFileDescriptor fileDescriptor = contentResolver.openTypedAssetFileDescriptor(mediaUri, mediaMimeType, providerOptions)) { // Content will be transcoded based on values defined in the // ApplicationMediaCapabilities provided. }
تتيح هذه الطريقة إمكانية التحكم الدقيق في مسارات رموز معينة، مثل كاستدعاء تحويل الترميز عند نقل ملف فيديو خارج الجهاز فقط. وتكون لها الأولوية على الطريقة الموضّحة أدناه.
توضيح الإمكانات في أحد الموارد
يسمح تعريف الإمكانات في المورد بالتحكم الشامل في تحويل الترميز. يجب عدم استخدام هذه الطريقة إلا في حالات محدَّدة جدًا. على سبيل المثال، إذا كان تطبيقك تلقّي ملفات الفيديو من التطبيقات الأخرى فقط (بدلاً من فتحها مباشرةً) ويحمّلها إلى خادم لا يدعم برامج ترميز الفيديو الحديثة (انظر مثال السيناريو 1 أدناه).
وقد يؤدي استخدام هذه الطريقة في الحالات غير الضرورية للغاية إلى حدوث تحويل ترميز في سيناريوهات غير مقصودة، مثل استخدام صور مصغّرة للفيديوهات، ما يؤدي إلى انخفاض تجربة المستخدم.
لاستخدام هذه الطريقة، أنشئ ملف موارد media_capabilities.xml
:
<?xml version="1.0" encoding="utf-8"?>
<media-capabilities xmlns:android="http://schemas.android.com/apk/res/android">
<format android:name="HEVC" supported="true"/>
<format android:name="HDR10" supported="false"/>
<format android:name="HDR10Plus" supported="false"/>
</media-capabilities>
في هذا المثال، يتم تحويل ترميز فيديوهات HDR المسجّلة على الجهاز بسلاسة إلى فيديو AVC SDR (النطاق الديناميكي العادي)، في حين لا يتم ذلك مع فيديوهات HEVC.
استخدِم علامة property
داخل العلامة application
لإضافة مرجع إلى الوسائط.
الإمكانيات. أضِف السمات التالية إلى ملف AndroidManifest.xml
:
<property
android:name="android.media.PROPERTY_MEDIA_CAPABILITIES"
android:resource="@xml/media_capabilities" />
استخدام إمكانات الوسائط في تطبيق آخر لفتح ملف فيديو
إذا كان تطبيقك يشارك ملف فيديو مع تطبيق آخر، قد يحتاج ملف الفيديو إلى تحويل ترميزه قبل أن يتمكّن التطبيق المستلِم من فتحه.
يمكنك التعامل مع هذه الحالة عن طريق فتح ملف فيديو باستخدام openTypedAssetFileDescriptor
.
وتحديد المعرّف الفريد للتطبيق المستلِم، والذي يمكن الحصول عليه باستخدام Binder.getCallingUid
.
بعد ذلك، تستخدِم المنصة إمكانات الوسائط في التطبيق المستلِم لتحديد
ما إذا كان يجب تحويل ترميز ملف الفيديو.
val providerOptions = Bundle().apply { putParcelable(MediaStore.EXTRA_MEDIA_CAPABILITIES_UID, Binder.getCallingUid()) } contentResolver.openTypedAssetFileDescriptor(mediaUri, mediaMimeType, providerOptions) .use { fileDescriptor -> // Content will be transcoded based on the media capabilities of the // calling app. }
Bundle providerOptions = new Bundle(); providerOptions.putParcelable(MediaStore.EXTRA_MEDIA_CAPABILITIES_UID, Binder.getCallingUid()); try (AssetFileDescriptor fileDescriptor = contentResolver.openTypedAssetFileDescriptor(mediaUri, mediaMimeType, providerOptions)) { // Content will be transcoded based on the media capabilities of the // calling app. }
أمثلة على السيناريوهات
توضِّح المخطّطات البيانية التالية حالتَي الاستخدام الشائعتَين. وفي كلتا الحالتين يتم تخزين الفيديو الأصلي بتنسيق HEVC ولا يتم تخزين تطبيق مشاركة الفيديو لتقنية HEVC.
المثال 1: يبدأ تطبيق تسجيل الفيديو عملية تحويل الترميز.
يُعلن تطبيق مشاركة الفيديو أنّه لا يتيح استخدام HEVC في ملف موارد ميزات
الوسائط. ثم يطلب الفيديو من تطبيق التقاط الفيديو. تصوير الفيديو
يعالج التطبيق الطلب ويفتح الملف باستخدام
openTypedAssetFileDescriptor
، لتحديد المعرّف الفريد لتطبيق المشاركة. يؤدي هذا إلى بدء عملية تحويل الترميز.
عند استلام الفيديو الذي تم تحويل ترميزه، يتم تقديمه إلى تطبيق المشاركة الذي يحمّله إلى خادم على السحابة الإلكترونية.
المثال 2: يبدأ تحويل الترميز من خلال تطبيق مشاركة الفيديو.
يشارك تطبيق التقاط الفيديو فيديو مع تطبيق مشاركة الفيديو باستخدام
معرّف الموارد المنتظم (URI) لـ
MediaStore
. يفتح تطبيق مشاركة الفيديو ملف الفيديو باستخدام openTypedAssetFileDescriptor
، ويُشير إلى أنّه لا يتوافق مع HEVC في إمكانات الوسائط. يؤدي ذلك إلى بدء عملية تحويل ترميز الملف، وبعد اكتمالها، يتم تحميل الملف إلى أحد ملفّات
الخادم في السحابة الإلكترونية.
التنسيقات غير المعلَن عنها
يتم تفعيل تحويل ترميز الوسائط المتوافقة لجميع التنسيقات التي تمّ تصنيفها كغير متوافقة، ويتم إيقافها لجميع التنسيقات التي تمّ تصنيفها كمتاحة. بالنسبة إلى التنسيقات الأخرى التي لم يتم الإعلان عنها، تقرر المنصة ما إذا كانت ستُجري عملية تحويل ترميز أم لا. في Android 12، يتم إيقاف تحويل الترميز لجميع التنسيقات غير المعلَن عنها. قد يتغيّر هذا السلوك في التنسيقات الجديدة في المستقبل.
خيارات المطوّرين
يمكنك استخدام خيارات المطوّرين التالية لتجاهل سلوك تحويل الترميز التلقائي في Android:
إلغاء الإعدادات التلقائية لتحويل الترميز: يحدّد هذا الإعداد ما إذا كانت المنصة تتحكّم في تحويل الترميز التلقائي أم لا. عند تفعيل الخيار override ، يتم تجاهل الإعدادات التلقائية للمنصة، ويتحكّم الخيار enable transcoding في تحويل الترميز التلقائي. تم إيقاف هذا الخيار من خلال الافتراضي.
تفعيل تحويل الترميز يحدّد هذا الإعداد ما إذا كان المحتوى غير معرَّف في البيان أم لا يتم تحويل ترميز التنسيقات تلقائيًا. يكون هذا الخيار مفعّلاً تلقائيًا، ولكن لن يسري أثره إلا في حال تفعيل تجاوز الإعدادات التلقائية لتحويل الترميز أيضًا.
افتراض أن التطبيقات متوافقة مع التنسيقات الحديثة يتحكّم هذا الإعداد في ما يحدث عندما يحاول التطبيق تشغيل تنسيق غير معلن. يحدث هذا عندما يفعل البيان عدم توضيح ما إذا كان التطبيق متوافقًا مع تنسيق معيّن أم لا أو أنّ Google لم يضف التطبيق إلى قائمة فرض تحويل الترميز من جانب الخادم. عند ضبط الإعداد مفعّلة، لا يحوّل التطبيق ترميزه، وعند إيقافه، لا يجري تحويل الترميز. يكون هذا الخيار مفعّلاً تلقائيًا.
عرض إشعارات تحويل الترميز عند تفعيل هذا الإعداد، يعرض التطبيق إشعار تقدم عملية تحويل الترميز عند بدء عملية تحويل الترميز من خلال قراءة ملف وسائط غير متوافق. ويتم تفعيل هذا الخيار تلقائيًا.
إيقاف ذاكرة التخزين المؤقت لتحويل الترميز إذا تم تفعيله، لن يتم إيقاف التطبيقات التي تتطلب تحويل الترميز. استخدام ذاكرة التخزين المؤقت لتحويل الترميز. يمكن أن يكون هذا مفيدًا أثناء التطوير تشغيل تحويل الترميز على ملف وسائط غير متوافق، ولكن قد يتسبب في حدوث مشاكل في الجهاز أدائه. يكون هذا الخيار غير مفعَّل بشكل تلقائي.