توضّح هذه الصفحة كيفية إنشاء DefaultPreloadManager
، الذي يحمّل مسبقًا محتوى الوسائط لتطبيقك استنادًا إلى الاستراتيجية التي تختارها.
تتيح لك أدوات إدارة التحميل المُسبَق المستندة إلى فئة BasePreloadManager
المجردة ترتيب المحتوى حسب المعايير التي تختارها. يوضّح هذا المستند كيفية استخدام الفئة المشتقة DefaultPreloadManager
، حيث يتم ترتيب كل عنصر وسائط باستخدام عدد صحيح يمثّل موقعه في قائمة (على سبيل المثال، موقعه في لوحة عرض دوّارة للفيديوهات). يحدّد مدير التحميل المُسبَق أولويات تحميل العناصر استنادًا إلى مدى قربها من العنصر الذي يشغّله المستخدم حاليًا. بهذه الطريقة، إذا انتقل المستخدم إلى عنصر آخر، يمكن أن يبدأ تشغيل العنصر الجديد على الفور.
هناك ثلاث خطوات لإنشاء مثيل من DefaultPreloadManager
:
- حدِّد
TargetPreloadStatusControl
يمكن لخدمة "إدارة التحميل المُسبَق" الاستعلام عنه لمعرفة ما إذا كان عنصر الوسائط جاهزًا للتحميل ومقدار التحميل. - أنشئ أداة الإنشاء التي ستستخدمها لإنشاء أداة إدارة التحميل المُسبَق،
ولإنشاء عناصر
ExoPlayer
في تطبيقك. - استخدِم أداة الإنشاء لإنشاء أداة إدارة التحميل المُسبَق من خلال استدعاء الطريقة
build()
الخاصة بأداة الإنشاء.
إنشاء عنصر تحكّم في حالة التحميل المُسبَق المستهدَفة
عند إنشاء DefaultPreloadManager.Builder
، ستمرِّر إليه عنصر التحكّم في حالة التحميل المُسبَق المستهدَفة الذي تحدّده. ينفّذ هذا العنصر واجهة TargetPreloadStatusControl
. عندما يكون مدير التحميل المسبق بصدد التحميل المسبق للوسائط، يستدعي طريقة getTargetPreloadStatus()
في عنصر التحكّم في الحالة لمعرفة مقدار المحتوى المطلوب تحميله. يمكن أن يردّ عنصر التحكّم في الحالة بأحد رموز الحالة التالية:
-
STAGE_SPECIFIED_RANGE_LOADED
: يجب أن يحمّل مدير التحميل المُسبَق المحتوى من موضع البدء المحدّد ولمدة محددة (بالملي ثانية). STAGE_TRACKS_SELECTED
: على أداة إدارة التحميل المُسبَق تحميل معلومات مسار المحتوى ومعالجتها، ثم اختيار المسارات. يجب ألا يبدأ مدير التحميل المسبق في تحميل المحتوى بعد.-
STAGE_SOURCE_PREPARED
: على أداة إدارة التحميل المُسبَق إعداد مصدر المحتوى. على سبيل المثال، إذا كانت البيانات الوصفية للمحتوى في ملف بيان منفصل، قد يجلب مدير التحميل المسبق ملف البيان هذا ويحلّله. -
null
: يجب ألا يحمّل مدير التحميل المُسبَق أي محتوى أو بيانات وصفية لعنصر الوسائط هذا.
يجب أن تكون لديك استراتيجية لتحديد مقدار المحتوى الذي سيتم تحميله لكل عنصر وسائط. في هذا المثال، يتم تحميل المزيد من المحتوى للعناصر الأقرب إلى العنصر قيد التشغيل حاليًا. إذا كان المستخدم يشغّل محتوًى بالفهرس n، ستعرض وحدة التحكّم الرموز التالية:
- الفهرس n+1 (عنصر الوسائط التالي): تحميل 3000 ملي ثانية (3 ثوانٍ) من موضع البدء التلقائي
- الفهرس n-1 (عنصر الوسائط السابق): تحميل 1000 ملي ثانية (ثانية واحدة) من موضع البدء التلقائي
- ملفات الوسائط الأخرى في النطاق n-2 إلى n+2: Return
PreloadStatus.TRACKS_SELECTED
- ملفات الوسائط الأخرى في النطاق من n-4 إلى n+4: إرجاع
PreloadStatus.SOURCE_PREPARED
- بالنسبة إلى جميع ملفات الوسائط الأخرى، يجب عرض القيمة
null
class MyTargetPreloadStatusControl(
currentPlayingIndex: Int = C.INDEX_UNSET
): TargetPreloadStatusControl<Int, DefaultPreloadManager.PreloadStatus> {
override fun getTargetPreloadStatus(index: Int):
DefaultPreloadManager.PreloadStatus? {
if (index - currentPlayingIndex == 1) { // next track
// return a PreloadStatus that is labelled by STAGE_SPECIFIED_RANGE_LOADED
// and suggest loading 3000ms from the default start position
return DefaultPreloadManager.PreloadStatus.specifiedRangeLoaded(3000L)
} else if (index - currentPlayingIndex == -1) { // previous track
// return a PreloadStatus that is labelled by STAGE_SPECIFIED_RANGE_LOADED
// and suggest loading 3000ms from the default start position
return DefaultPreloadManager.PreloadStatus.specifiedRangeLoaded(3000L)
} else if (abs(index - currentPlayingIndex) == 2) {
// return a PreloadStatus that is labelled by STAGE_TRACKS_SELECTED
return DefaultPreloadManager.PreloadStatus.TRACKS_SELECTED
} else if (abs(index - currentPlayingIndex) <= 4) {
// return a PreloadStatus that is labelled by STAGE_SOURCE_PREPARED
return DefaultPreloadManager.PreloadStatus.SOURCE_PREPARED
}
return null
}
}
النقاط الرئيسية حول الرمز
- ستمرِّر مثيلاً من
MyTargetPreloadStatusControl
إلى أداة إنشاء مدير التحميل المُسبَق عند إنشائه. - تحتوي السمة
currentPlayingIndex
على فهرس عنصر الوسائط الذي يتم تشغيله حاليًا. ويقع على عاتق التطبيق مسؤولية إبقاء هذه القيمة محدَّثة. - عندما يصبح مدير التحميل المُسبَق جاهزًا لتحميل المحتوى، يستدعي الدالة
getTargetPreloadStatus
ويمرّر معلومات الترتيب التي حدّدتها لعنصر الوسائط ذي الصلة. في حالةDefaultPreloadManager
، تكون معلومات الترتيب عددًا صحيحًا يحدّد موضع العنصر في لوحة عرض دوّارة. تختار الطريقة الرمز الذي سيتم عرضه من خلال مقارنة هذا الفهرس بفهرس العنصر المحدّد حاليًا.
إنشاء أداة إدارة التحميل المُسبَق
لإنشاء أداة إدارة التحميل المُسبَق، يجب أن يكون لديك DefaultPreloadManager.Builder
.
تم ضبط أداة الإنشاء هذه باستخدام السياق الحالي وعنصر التحكّم في حالة التحميل المُسبَق المستهدَف للتطبيق. توفّر أداة الإنشاء أيضًا طرقًا لضبط القيم يمكنك استخدامها لضبط المكوّنات المخصّصة لمدير التحميل المُسبَق.
بالإضافة إلى استخدام أداة الإنشاء لإنشاء أداة إدارة التحميل المُسبَق، ستستخدمها أيضًا لإنشاء عناصر ExoPlayer
التي يستخدمها تطبيقك لتشغيل المحتوى.
val targetPreloadStatusControl = MyTargetPreloadStatusControl()
val preloadManagerBuilder = DefaultPreloadManager.Builder(context, targetPreloadStatusControl)
val preloadManager = preloadManagerBuilder.build()
النقاط الرئيسية حول الرمز
MyTargetPreloadStatusControl
هو الفئة التي حدّدتها في إنشاء عنصر تحكّم في حالة التحميل المسبق المستهدف.- ستستخدم
DefaultPreloadManager.Builder
نفسه لإنشاء عناصرExoPlayer
التي ستشغّل المحتوى الذي تديره أداة إدارة التحميل المُسبَق.