يخدم تطبيق ExoPlayer التجريبي الرئيسي غرضَين أساسيَين:
- لتقديم مثال بسيط نسبيًا ولكنه مزوّد بجميع الميزات لاستخدام ExoPlayer يمكن استخدام التطبيق التجريبي كنقطة بداية مناسبة لتطوير تطبيقك الخاص.
- لتسهيل تجربة ExoPlayer. يمكن استخدام التطبيق التجريبي لاختبار تشغيل المحتوى الخاص بك بالإضافة إلى العيّنات المضمّنة.
توضّح هذه الصفحة كيفية الحصول على التطبيق التجريبي وتجميعه وتشغيله، كما توضّح كيفية استخدامه لتشغيل الوسائط الخاصة بك.
الحصول على الرمز
يمكن العثور على رمز المصدر للتطبيق التجريبي الرئيسي في مجلد demos/main
ضمن
مشروعنا على GitHub. إذا لم يسبق لك ذلك، يمكنك استنساخ المشروع في directorylocal:
git clone https://github.com/androidx/media.git
بعد ذلك، افتح المشروع في Android Studio. من المفترض أن يظهر لك ما يلي في عرض مشروع Android (تم توسيع المجلدات ذات الصلة للتطبيق التجريبي):
التجميع والتنفيذ
لتجميع التطبيق التجريبي وتشغيله، اختَر إعداد demo
وشغِّله في IDE
Android Studio. سيتم تثبيت التطبيق التجريبي وتشغيله على جهاز Android متصل.
ننصحك باستخدام جهاز فعلي إن أمكن. وإذا أردت استخدام محاكي بدلاً من ذلك، يُرجى الاطّلاع على قسم أدوات المحاكاة الأجهزة المتوافقة والتأكّد من أنّ جهازك الافتراضي يستخدم صورة نظام بمستوى واجهة برمجة تطبيقات لا يقل عن 23.
يعرض تطبيق العرض التوضيحي قائمة بالعيّنات (SampleChooserActivity
). وسيؤدي اختيار
عيّنة إلى فتح نشاط ثانٍ (PlayerActivity
) للتشغيل. يضمّ الإصدار التجريبي
عناصر التحكّم في التشغيل ووظائف اختيار الأغاني. ويستخدم النظام أيضًا فئة الأداة EventLogger
في ExoPlayer لإخراج معلومات تصحيح أخطاء مفيدة إلى سجلّ النظام. يمكن الاطّلاع على هذا التسجيل (بالإضافة إلى تسجيل مستوى الخطأ لعلامات
أخرى) باستخدام الأمر:
adb logcat EventLogger:V *:E
تفعيل برامج الترميز المُضمَّنة
يحتوي ExoPlayer على عدد من الإضافات التي تتيح استخدام برامج الترميز المُدمجة، بما في ذلك AV1 وVP9 وOpus وFLAC وFFmpeg (الصوت فقط). يمكن إنشاء التطبيق التجريبي لتضمين هذه الإضافات واستخدامها على النحو التالي:
- أنشئ كل إضافة من الإضافات التي تريد تضمينها. يُرجى العِلم أنّ هذه عملية يدوية. يُرجى الرجوع إلى ملف
README.md
في كل إضافة للحصول على تعليمات. في عرض "صيغ الإصدارات" في "استوديو Android"، اضبط صيغة الإصدار للوحدة التجريبية على
withDecoderExtensionsDebug
أوwithDecoderExtensionsRelease
كما هو موضّح في الصورة التالية.اجمع إعدادات
demo
معًا وثبِّتها وشغِّلها كالمعتاد.
لن يتم استخدام وحدة ترميز الإضافة تلقائيًا إلا إذا لم يكن هناك وحدة ترميز مناسبة للمنصة. من الممكن تحديد أنّه يجب استخدام برامج ترميز الإضافات كخيار مفضّل، كما هو موضّح في الأقسام التالية.
تشغيل المحتوى الخاص بك
تتوفّر عدة طرق لتشغيل المحتوى الخاص بك في التطبيق التجريبي.
1. تعديل ملف assets/media.exolist.json
يتم تحميل العيّنات المدرَجة في التطبيق التجريبي من assets/media.exolist.json
.
من خلال تعديل ملف JSON هذا، يمكن إضافة عيّنات وإزالتها من التطبيق المعروض. المخطّط على النحو التالي، حيث يشير [O] إلى سمة اختيارية.
[
{
"name": "Name of heading",
"samples": [
{
"name": "Name of sample",
"uri": "The URI of the sample",
"extension": "[O] Sample type hint. Values: mpd, ism, m3u8",
"clip_start_position_ms": "[O] A start point to which the sample should be clipped, in milliseconds"
"clip_end_position_ms": "[O] An end point from which the sample should be clipped, in milliseconds"
"drm_scheme": "[O] Drm scheme if protected. Values: widevine, playready, clearkey",
"drm_license_uri": "[O] URI of the license server if protected",
"drm_force_default_license_uri": "[O] Whether to force use of "drm_license_uri" for key requests that include their own license URI",
"drm_key_request_properties": "[O] Key request headers if protected",
"drm_session_for_clear_content": "[O] Whether to attach a DRM session to clear video and audio tracks"
"drm_multi_session": "[O] Enables key rotation if protected",
"subtitle_uri": "[O] The URI of a subtitle sidecar file",
"subtitle_mime_type": "[O] The MIME type of subtitle_uri (required if subtitle_uri is set)",
"subtitle_language": "[O] The BCP47 language code of the subtitle file (ignored if subtitle_uri is not set)",
"ad_tag_uri": "[O] The URI of an ad tag to load via the IMA extension"
},
...etc
]
},
...etc
]
يمكن تحديد قوائم تشغيل للعينات باستخدام المخطّط:
[
{
"name": "Name of heading",
"samples": [
{
"name": "Name of playlist sample",
"playlist": [
{
"uri": "The URI of the first sample in the playlist",
"extension": "[O] Sample type hint. Values: mpd, ism, m3u8"
"clip_start_position_ms": "[O] A start point to which the sample should be clipped, in milliseconds"
"clip_end_position_ms": "[O] An end point from which the sample should be clipped, in milliseconds"
"drm_scheme": "[O] Drm scheme if protected. Values: widevine, playready, clearkey",
"drm_license_uri": "[O] URI of the license server if protected",
"drm_force_default_license_uri": "[O] Whether to force use of "drm_license_uri" for key requests that include their own license URI",
"drm_key_request_properties": "[O] Key request headers if protected",
"drm_session_for_clear_content": "[O] Whether to attach a DRM session to clear video and audio tracks",
"drm_multi_session": "[O] Enables key rotation if protected",
"subtitle_uri": "[O] The URI of a subtitle sidecar file",
"subtitle_mime_type": "[O] The MIME type of subtitle_uri (required if subtitle_uri is set)",
"subtitle_language": "[O] The BCP47 language code of the subtitle file (ignored if subtitle_uri is not set)"
},
{
"uri": "The URI of the second sample in the playlist",
...etc
},
...etc
]
},
...etc
]
},
...etc
]
إذا لزم الأمر، يتم تحديد رؤوس طلبات المفاتيح كعنصر يحتوي على سمة سلاسل ملفوظة لكل عنوان:
"drm_key_request_properties": {
"name1": "value1",
"name2": "value2",
...etc
}
في نشاط أداة اختيار العيّنات، تحتوي القائمة الكاملة على خيارات لتحديد ما إذا كان سيتم تفضيل برامج ترميز الإضافات.
معرّفات الموارد المنتظمة (URI) للملفات المحلية وقيود التخزين ذات النطاق الواسع
عند تحديد معرّفات الموارد المنتظمة (URI) للملفات المحلية، يطلب التطبيق التجريبي أذونات الوصول إلى مساحة التخزين
اللازمة لقراءة هذه الملفات. ومع ذلك، اعتبارًا من الإصدار 13 من Android، ليس
بإمكانك تحميل ملفات عشوائية لا تنتهي بامتداد ملف وسائط عادي (مثل .mp4
). إذا كنت بحاجة إلى تحميل ملف من هذا النوع، يمكنك وضعه في directoryملف التخزين المحدد للتطبيق التجريبي والذي ليس له قيود وصول. يمكن العثور على هذا الرمز عادةً في /sdcard/Android/data/androidx.media3.demo.main/files
.
2- تحميل ملف exolist.json خارجي
يمكن للتطبيق التجريبي تحميل ملفات JSON خارجية باستخدام المخطّط أعلاه وتسميتها
وفقًا لاصطلاح *.exolist.json
. على سبيل المثال، إذا كنت تستضيف ملفًا مماثلاً على العنوان https://yourdomain.com/samples.exolist.json
، يمكنك فتحه في
التطبيق التجريبي باستخدام:
adb shell am start -a android.intent.action.VIEW \ -d https://yourdomain.com/samples.exolist.json
عند النقر على رابط *.exolist.json
(على سبيل المثال، في المتصفّح أو أحد عملاء البريد الإلكتروني) على جهاز تم تثبيت التطبيق التجريبي عليه، سيتم فتحه أيضًا في التطبيق التجريبي. وبالتالي، يقدّم استضافة ملف *.exolist.json
JSON طريقة بسيطة لتوزيع المحتوى على الآخرين لتجربته في التطبيق التجريبي.
3- رمي الكرة
يمكن استخدام ملفات Intent لتجاوز قائمة العيّنات وإطلاقها مباشرةً في
التشغيل. لتشغيل عيّنة واحدة، اضبط إجراء النية على
androidx.media3.demo.main.action.VIEW
وعنوان URL للبيانات على عنوان ملف
العيّنة المطلوب تشغيلها. يمكن تنشيط هذا الغرض من الوحدة الطرفية باستخدام:
adb shell am start -a androidx.media3.demo.main.action.VIEW \ -d https://yourdomain.com/sample.mp4
في ما يلي الإضافات الاختيارية المتاحة لنموذج نية واحد:
- نموذج إضافات الضبط:
mime_type
[سلسلة] عيّنة تلميح لنوع MIME على سبيل المثال،application/dash+xml
لمحتوى DASHclip_start_position_ms
[طويلة] نقطة البداية التي يجب مقاطع العيّنة بها بالمللي ثانية.clip_end_position_ms
[طويل] نقطة نهاية يجب اقتطاع العيّنة منها، بالملي ثانية-
drm_scheme
[سلسلة] مخطّط إدارة الحقوق الرقمية في حال كان المحتوى محميًا القيم الصالحة هيwidevine
وplayready
وclearkey
. يتم أيضًا قبول معرّفات UUID الخاصة بمخطط إدارة الحقوق الرقمية. -
drm_license_uri
[سلسلة] عنوان URL لخادم الترخيص إذا كان محميًا drm_force_default_license_uri
[صحيح/خطأ] يحدد ما إذا كان سيتم فرض استخدامdrm_license_uri
لطلبات المفاتيح التي تتضمّن عنوان URI للترخيص الخاص بها.drm_key_request_properties
[مصفوفة سلسلة] عناوين طلبات المفاتيح التي يتم تجميعها على النحو التالي: name1 وvalue1 وname2 وvalue2 وغيرها إذا كانت محمية.drm_session_for_clear_content
[قيمة منطقية] ما إذا كان يجب إرفاق جلسة إدارة الحقوق الرقمية لمحو مسارات الفيديو والصوت-
drm_multi_session
[منطقي] تفعّل تغيير المفتاح إذا كان محميًا. subtitle_uri
[سلسلة] معرّف الموارد المنتظم (URI) الخاص بملف ترجمة جانبيةsubtitle_mime_type
[سلسلة] نوع MIME لسمة subtitle_uri (مطلوب في حال تم ضبط قيمة لسمة subtitle_uri)subtitle_language
[سلسلة] رمز اللغة BCP47 لملف الترجمة (يتم تجاهله في حال عدم ضبط سمة subtitle_uri).ad_tag_uri
[سلسلة] معرّف الموارد المنتظم لعلامة إعلان يتم تحميلها باستخدام [امتداد IMA][].-
prefer_extension_decoders
[منطقي] ما إذا كان من المفضّل استخدام برامج ترميز الإضافات بدلاً من برامج ترميز المنصة
عند استخدام adb shell am start
لتشغيل نية، يمكن استخدام --es
لتحديد سلسلة اختيارية إضافية (على سبيل المثال، --es extension mpd
). يمكن استخدام --ez
لتحديد قيمة منطقية اختيارية إضافية (مثل --ez prefer_extension_decoders TRUE
). يمكن ضبط قيمة اختيارية
طويلة إضافية باستخدام --el
(مثل --el clip_start_position_ms 5000
). يمكن ضبط صفيف سلاسل اختياري إضافي باستخدام --esa
(على سبيل المثال،
--esa drm_key_request_properties name1,value1
).
لتشغيل قائمة تشغيل تتضمّن عيّنات، اضبط إجراء النية على
androidx.media3.demo.main.action.VIEW_LIST
. تظلّ الإضافات في نموذج الضبط كما هي في androidx.media3.demo.main.action.VIEW
،
باستثناء اختلافَين:
- يجب أن تحتوي مفاتيح البيانات الإضافية على شرطة سفلية وفهرس مستند إلى القيمة 0 للنموذج
كلاحقة. على سبيل المثال، يشير الرمز
extension_0
إلى نوع العيّنة الأولى. سيضبطdrm_scheme_1
مخطّط إدارة الحقوق الرقمية للعينة الثانية. - يتم تمرير عنوان URL للعيّنة كقيمة إضافية باستخدام المفتاح
uri_<sample-index>
.
لا تتغير الميزات الإضافية الأخرى، التي لا تعتمد على العينة. على سبيل المثال، يمكنك تنفيذ الأمر التالي في الوحدة الطرفية لتشغيل قائمة تشغيل تتضمّن عنصرَين، مع إلغاء إضافة العنصر الثاني:
adb shell am start -a androidx.media3.demo.main.action.VIEW_LIST \ --es uri_0 https://a.com/sample1.mp4 \ --es uri_1 https://b.com/sample2.fake_mpd \ --es extension_1 mpd