توضّح هذه الصفحة كيفية استخدام أداة إدارة التحميل المُسبَق لإدارة محتوى الفيديو. باستخدام أداة إدارة التحميل المُسبَق، يمكنك تقديم تجربة أفضل للمستخدم، فعندما ينتقل المستخدم من عنصر وسائط إلى آخر، يبدأ التشغيل بشكل أسرع لأنّ الأداة حمّلت بعض المحتوى مسبقًا.
تتناول هذه الصفحة المواضيع التالية:
- إضافة عناصر وسائط إلى "مدير التحميل المُسبَق"
- استرجاع الوسائط وتشغيلها
- إزالة عناصر من "أداة إدارة التحميل المُسبَق"
- إيقاف مدير التحميل المُسبَق عند الانتهاء من استخدامه
إضافة ملفات وسائط إلى أداة إدارة التحميل المُسبَق
عليك إخبار أداة إدارة التحميل المُسبَق بكل عنصر وسائط ستتتبّعه. على سبيل المثال، إذا كان تطبيقك يتضمّن لوحة دوّارة تعرض فيديوهات، عليك إضافتها إلى أداة إدارة التحميل المُسبَق. استنادًا إلى حالة الاستخدام، يمكنك إضافة كل الفيديوهات أو فقط الفيديوهات القريبة من الفيديو الذي يتم تشغيله حاليًا. يمكنك أيضًا إضافة عناصر جديدة إلى "مدير التحميل المُسبَق" لاحقًا.
لإجراء ذلك، استخدِم طريقة إضافة مجمّعة، مثل addMediaItems. يمكنك بدلاً من ذلك الاتصال بالرقم add (أو addMediaSource) لإضافة عناصر الوسائط بشكل فردي. ومع ذلك، لا تؤدي إضافة عناصر وسائط بشكل فردي إلى بدء التحميل المسبق تلقائيًا. عند استخدام طرق فردية، عليك استدعاء invalidate بشكل صريح بعد الانتهاء من إضافة العناصر لإخبار مدير التحميل المُسبَق بتعديل الأولويات وبدء التحميل المُسبَق.
val initialMediaItems = pullMediaItemsFromService(count = 20) val rankingDataList = initialMediaItems.indices.toList() preloadManager.addMediaItems(initialMediaItems, rankingDataList)
نقاط أساسية حول الرمز
- تعرض هذه المقتطفة كيفية ملء أداة إدارة التحميل المُسبَق في الوضع المجمّع بعد إنشائها. يمكنك طلب
addMediaItemsلإضافة عناصر إلى مدير التحميل المُسبَق الحالي الذي تم ملؤه. - في هذا المقتطف،
pullMediaItemsFromService()هو منطق التطبيق لجلب قائمة المحتوى المطلوب تشغيله. يستدعي الرمز البرمجي هذه الطريقة لجلب قائمة تضم ما يصل إلى 20 عنصرًا. preloadManagerهوDefaultPreloadManagerالذي تم إنشاؤه في إنشاءDefaultPreloadManager.-
rankingDataهي قيمة يستخدمها مدير التحميل المُسبَق لتحديد أولوية كل عنصر وسائط. بالنسبة إلىDefaultPreloadManager، يمثّلrankingDataعددًا صحيحًا يشير إلى موضع العنصر في لوحة العرض الدوّارة. يحدّد مدير التحميل المسبق الأولوية حسب مدى بُعد كل عنصر عن العنصر الذي يتم تشغيله حاليًا.
جلب الوسائط وتشغيلها
عندما ينتقل المستخدم إلى عنصر وسائط جديد، عليك الحصول على عنصر الوسائط من أداة إدارة التحميل المُسبَق. إذا حمّل مدير التحميل المُسبَق أيًا من المحتوى، سيتم تشغيل المحتوى بشكل أسرع مما كان سيحدث إذا لم تستخدم مدير التحميل المُسبَق. إذا لم يحمّل مدير التحميل المُسبَق المحتوى من هذا العنصر بعد، سيتم تشغيل المحتوى بشكل طبيعي.
عليك أيضًا تعديل فهرس التشغيل الحالي في أداة إدارة التحميل المُسبَق من خلال استدعاء setCurrentPlayingIndex، ما يتيح لأداة إدارة التحميل المُسبَق تحديد أولويات عمليات التحميل المُسبَق المستقبلية.
// When a media item is about to be displayed on the screen val mediaSource = preloadManager.getMediaSource(mediaItem) if (mediaSource != null) { player.setMediaSource(mediaSource) } else { // If the mediaSource is null, its mediaItem hasn't been added to the preload // manager yet. Send it directly to the player when it's about to play. player.setMediaItem(mediaItem) } player.prepare() // When the media item is being displayed at the center of the screen ("in focus") player.play() // Update the current playing index to let the preload manager know where the user // is in the carousel/pagination/list. preloadManager.setCurrentPlayingIndex(currentIndex)
نقاط أساسية حول الرمز
-
playerهوExoPlayerMedia3 الذي يستخدمه التطبيق لتشغيل المحتوى. يجب إنشاء هذا المشغّل من خلال استدعاءDefaultPreloadManager.Builder.buildExoPlayer()على أداة الإنشاء نفسها التي استخدمتها لإنشاء أداة إدارة التحميل المُسبَق. - عندما ينتقل المستخدم إلى عنصر وسائط جديد، يستدعي التطبيق
getMediaSource()للحصول على مصدر الوسائط من مدير التحميل المُسبَق. يجب أن يكون هذاmediaItemقد أضفته إلى "مدير التحميل المُسبَق". لا بأس إذا لم يبدأ مدير التحميل المُسبَق بتحميل المحتوى بعد، وفي هذه الحالة، سيعرضMediaSourceلا يتضمّن بيانات محملة مُسبقًا. على سبيل المثال، قد يحدث ذلك إذا انتقل المستخدم فجأة إلى جزء بعيد من لوحة العرض الدوّارة. - بعد أن يشغّل المستخدم عنصر الوسائط الجديد، استدعِ الدالة
setCurrentPlayingIndexلإخبار أداة إدارة التحميل المُسبَق بمكان العنصر الجديد في لوحة العرض الدوّارة. تحتاج أداة إدارة التحميل المُسبَق إلى هذه المعلومات لتحديد أولوية تحميل العنصر التالي.
إزالة عناصر من أداة إدارة التحميل المُسبَق
للحفاظ على كفاءة أداة إدارة التحميل المُسبَق، عليك إزالة العناصر التي لم تعُد بحاجة إلى تتبُّعها. يمكنك أيضًا إزالة العناصر التي لا تزال في لوحة العرض الدوّارة، ولكنها بعيدة عن الموقع الجغرافي الحالي للمستخدم. على سبيل المثال، يمكنك تحديد أنّه إذا كان العنصر يبعد أكثر من 15 عنصرًا عن المحتوى الذي يشاهده المستخدم، لن يكون من الضروري تحميله مسبقًا. في هذه الحالة، عليك إزالة العناصر عندما تبتعد بهذا القدر. إذا عاد المستخدم إلى العناصر التي تمت إزالتها، يمكنك في أي وقت إضافتها مجددًا.
إذا كانت لديك قائمة بعناصر الوسائط التي تريد إزالتها، يمكنك استخدام
removeMediaItems. يمكنك بدلاً من ذلك النقر على رمز remove (أو removeMediaSource) لإزالة عناصر الوسائط بشكل فردي.
preloadManager.removeMediaItems(mediaItemsToRemove)
نقاط أساسية حول الرمز
- إذا أردت إزالة جميع العناصر من "مدير التحميل المُسبَق"، يمكنك استدعاء
reset()بدلاً منremove(). ويكون هذا الأسلوب مفيدًا إذا كنت بحاجة إلى تغيير كل العناصر في لوحة العرض الدوّارة. في هذه الحالة، بعد إزالة العناصر، عليك إضافة عناصر جديدة إلى "أداة إدارة التحميل المُسبَق".
إيقاف مدير التحميل المُسبَق عند الانتهاء من استخدامه
عندما لا تعود بحاجة إلى أداة إدارة التحميل المُسبَق، عليك إيقافها لإتاحة مواردها. على وجه الخصوص، يجب التأكّد من إيقافها عند إيقاف نشاطك.
preloadManager.release()
نقاط أساسية حول الرمز
- يجب عدم استدعاء أي من طرق الكائن بعد إصداره.
- إذا كنت بحاجة إلى إنشاء أداة إدارة أخرى للتحميل المُسبَق، أنشِئ
DefaultPreloadManager.Builderجديدة واستخدِمها لإنشاءDefaultPreloadManager. لا تحاول إعادة استخدام أداة الإنشاء القديمة.