در این صفحه نحوه استفاده از مدیر پیش بارگذاری برای مدیریت محتوای ویدیو توضیح داده شده است. با استفاده از مدیر پیش بارگذاری، می توانید تجربه بهتری را به کاربر ارائه دهید. هنگامی که کاربر از یک آیتم رسانه ای به آیتم دیگر تغییر می کند، پخش سریعتر شروع می شود زیرا مدیر قبلاً برخی از محتوا را بارگیری کرده است.
این صفحه موضوعات زیر را پوشش می دهد:
- موارد رسانه را به مدیر پیش بارگذاری اضافه کنید
- اولویت ها را در مدیر پیش بارگذاری باطل کنید
- واکشی و پخش رسانه
- موارد را از مدیر پیش بارگذاری حذف کنید
- پس از اتمام کار، مدیر پیش بارگذاری را آزاد کنید
موارد رسانه را به مدیر پیش بارگذاری اضافه کنید
شما باید به مدیر پیش بارگذاری در مورد هر مورد رسانه ای که ردیابی می شود بگویید. برای مثال، اگر برنامه شما چرخ فلکی از ویدیوها دارد، آن ویدیوها را به مدیر پیش بارگذاری اضافه کنید. بسته به مورد استفاده خود، ممکن است همه ویدیوها یا فقط همه ویدیوهای نزدیک به ویدیویی را که در حال پخش است اضافه کنید. همچنین میتوانید بعداً موارد جدیدی را به مدیر پیشبارگذاری اضافه کنید.
افزودن آیتم های رسانه به خودی خود باعث نمی شود که مدیر پیش بارگذاری محتوا را بارگیری کند. برای راهاندازی بارگیری پیشبار، باید اولویتها را در مدیر پیشبارگیری باطل کنید .
val initialMediaItems = pullMediaItemsFromService(/* count= */ 20);
for (index in 0 until initialMediaItems.size) {
preloadManager.add(initialMediaItems.get(index), /* rankingData= */ index)
}
// items aren't actually loaded yet! need to call invalidate() after this
نکات کلیدی در مورد کد
- این قطعه نشان می دهد که چگونه می توان ابتدا مدیر پیش بارگذاری را پس از ایجاد آن پر کرد. همچنین میتوانید برای افزودن آیتمها به یک مدیر پیشبارگذاری موجود،
add()
تماس بگیرید. - در این قطعه،
pullMediaItemsFromService()
منطق برنامه برای واکشی لیست محتوا برای پخش است. کد آن روش را برای واکشی فهرستی از حداکثر 20 مورد فراخوانی می کند. -
preloadManager
DefaultPreloadManager
است که در Create aDefaultPreloadManager
ایجاد شده است. کد متدadd()
مدیر را برای افزودن هر آیتم در چرخ فلک فراخوانی می کند. -
rankingData
مقداری است که مدیر پیش بارگذاری از آن برای تعیین اولویت هر آیتم رسانه استفاده می کند. برایDefaultPreloadManager
،rankingData
یک عدد صحیح است که موقعیت مورد را در چرخ فلک نشان می دهد. مدیر پیش بارگذاری اولویت را بر اساس فاصله هر آیتم از آیتمی که در حال حاضر پخش می شود تعیین می کند.
اولویت ها را در مدیر پیش بارگذاری باطل کنید
برای فعال کردن مدیر پیش بارگذاری برای شروع پیش بارگذاری محتوا، باید invalidate()
را فراخوانی کنید تا به مدیر پیش بارگذاری بگویید که اولویت های آیتم ها قدیمی هستند. شما باید این کار را در شرایط زیر انجام دهید:
- وقتی موارد رسانه جدیدی را به مدیر پیش بارگیری اضافه میکنید یا موارد رسانه را حذف میکنید. اگر چندین مورد را اضافه یا حذف می کنید، باید همه آنها را اضافه کنید، سپس
invalidate()
را فراخوانی کنید. - هنگامی که کاربر از یک آیتم رسانه ای به آیتم دیگر سوئیچ می کند. در این مورد، همانطور که در Fetch and play content توضیح داده شده است، باید قبل از فراخوانی
invalidate()
شاخص پخش فعلی را به روز کنید.
هنگامی که مدیر پیش بارگذاری را باطل می کنید، TargetPreloadStatusControl
را که ایجاد کرده اید فراخوانی می کند تا بفهمد چه مقدار محتوا باید از هر آیتم بارگیری شود. سپس محتوای هر مورد را به ترتیب اولویت آنها از زیاد به پایین بارگذاری می کند.
preloadManager.invalidate()
نکات کلیدی در مورد کد
- فراخوانی
invalidate()
باعث می شود مدیر پیش بارگذاری اولویت هر یک از آیتم های رسانه ای را که از آن می داند دوباره ارزیابی کند. به همین دلیل، اگر تغییرات زیادی در مدیریت پیش بارگذاری ایجاد میکنید، باید قبل از فراخوانیinvalidate()
تغییرات را تمام کنید.
واکشی و پخش رسانه
هنگامی که کاربر به یک آیتم رسانه جدید پیش می رود، باید آیتم رسانه را از مدیر پیش بارگذاری دریافت کنید. اگر مدیر پیش بارگیری هر یک از محتواها را بارگیری کرده باشد، محتوا سریعتر از زمانی که از مدیر پیش بارگذاری استفاده نمی کردید پخش می شود. اگر مدیر پیش بارگیری هنوز محتوای آن مورد را بارگیری نکرده باشد، محتوا به طور معمول پخش می شود.
// When a media item is about to display on the screen
val mediaSource = preloadManager.getMediaSource(mediaItem)
if (mediaSource != null) {
player.setMediaSource(mediaSource)
}
player.prepare()
// When the media item is displaying at the center of the screen
player.play()
preloadManager.setCurrentPlayingIndex(currentIndex)
// Need to call invalidate() to update the priorities
preloadManager.invalidate()
نکات کلیدی در مورد کد
-
player
Media3ExoPlayer
است که برنامه از آن برای پخش محتوا استفاده می کند. شما باید آن پلیر را با فراخوانیDefaultPreloadManager.Builder.buildExoPlayer()
در همان سازنده ای که برای ایجاد مدیریت پیش بار استفاده کردید، ایجاد کنید. - هنگامی که کاربر به یک آیتم رسانه جدید سوئیچ می کند، برنامه
getMediaSource()
را فرا می خواند تا منبع رسانه را از مدیر پیش بارگذاری دریافت کند. این باید یکmediaItem
باشد که قبلاً به مدیر پیش بارگذاری اضافه کرده اید. اگر مدیر پیش بارگذاری قبلاً بارگیری محتوا را شروع نکرده باشد، اشکالی ندارد. در آن صورت،MediaSource
را برمیگرداند که دادههای از پیش بارگذاری شده ندارد. به عنوان مثال، این ممکن است اتفاق بیفتد اگر کاربر به طور ناگهانی در چرخ فلک خیلی جلوتر بپرد. - پس از اینکه کاربر آیتم رسانه ای جدید را پخش کرد، با
setCurrentPlayingIndex
تماس بگیرید تا به مدیر پیش بارگذاری بگویید آیتم جدید در کجای چرخ فلک قرار دارد. مدیر پیش بارگذاری به آن اطلاعات نیاز دارد تا بارگذاری مورد بعدی را در اولویت قرار دهد. پس از به روز رسانی فهرست فعلی،invalidate()
را فراخوانی کنید تا مدیر پیش بارگذاری اولویت را برای هر آیتم مجدداً تعیین کند.
موارد را از مدیر پیش بارگذاری حذف کنید
برای کارآمد نگه داشتن مدیر پیش بارگذاری، باید مواردی را حذف کنید که مدیر پیش بارگذاری دیگر نیازی به ردیابی آنها ندارد. همچنین ممکن است مواردی را که هنوز در چرخ فلک هستند، اما از موقعیت فعلی کاربر فاصله زیادی دارند، حذف کنید. به عنوان مثال، ممکن است تصمیم بگیرید که اگر یک آیتم بیش از 15 مورد از چیزی که کاربر تماشا می کند فاصله داشته باشد، نیازی به بارگذاری از قبل ندارد. در آن صورت، زمانی که موارد تا این حد دور شدند، آنها را حذف میکنید. اگر کاربر به سمت آن موارد حذف شده برگردد، همیشه می توانید آنها را دوباره اضافه کنید .
preloadManager.remove(mediaItem)
نکات کلیدی در مورد کد
- اگر می خواهید همه موارد را از مدیر پیش بارگذاری حذف کنید، می توانید به جای
remove()
reset()
) را فراخوانی کنید. این رویکرد در صورتی مفید است که شما نیاز به تغییر همه موارد موجود در چرخ فلک خود دارید. در این صورت، پس از حذف موارد، باید موارد جدیدی را به مدیر پیشبارگیری اضافه کنید، سپس اولویتها را در مدیر پیشبارگذاری باطل کنید .
پس از اتمام کار، مدیر پیش بارگذاری را آزاد کنید
هنگامی که دیگر به مدیر پیش بارگیری نیاز ندارید، باید آن را آزاد کنید تا منابع آن آزاد شود. به ویژه، مطمئن شوید که وقتی فعالیت شما از بین رفت، آن را آزاد کنید.
preloadManager.release()
نکات کلیدی در مورد کد
- شما نباید هیچ یک از متدهای شی را پس از انتشار آن فراخوانی کنید.
- اگر نیاز به ایجاد مدیر پیش بارگذاری دیگری دارید، یک
DefaultPreloadManager.Builder
جدید ایجاد کنید و از آن برای ایجادDefaultPreloadManager
استفاده کنید. سعی نکنید از سازنده قدیمی استفاده مجدد کنید.