مدیریت و پخش محتوا

در این صفحه نحوه استفاده از مدیر پیش بارگذاری برای مدیریت محتوای ویدیو توضیح داده شده است. با استفاده از مدیر پیش بارگذاری، می توانید تجربه بهتری را به کاربر ارائه دهید. هنگامی که کاربر از یک آیتم رسانه ای به آیتم دیگر تغییر می کند، پخش سریعتر شروع می شود زیرا مدیر قبلاً برخی از محتوا را بارگیری کرده است.

این صفحه موضوعات زیر را پوشش می دهد:

موارد رسانه را به مدیر پیش بارگذاری اضافه کنید

شما باید به مدیر پیش بارگذاری در مورد هر مورد رسانه ای که ردیابی می شود بگویید. برای مثال، اگر برنامه شما چرخ فلکی از ویدیوها دارد، آن ویدیوها را به مدیر پیش بارگذاری اضافه کنید. بسته به مورد استفاده خود، ممکن است همه ویدیوها یا فقط همه ویدیوهای نزدیک به ویدیویی را که در حال پخش است اضافه کنید. همچنین می‌توانید بعداً موارد جدیدی را به مدیر پیش‌بارگذاری اضافه کنید.

افزودن آیتم های رسانه به خودی خود باعث نمی شود که مدیر پیش بارگذاری محتوا را بارگیری کند. برای راه‌اندازی بارگیری پیش‌بار، باید اولویت‌ها را در مدیر پیش‌بارگیری باطل کنید .

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 a DefaultPreloadManager ایجاد شده است. کد متد 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 Media3 ExoPlayer است که برنامه از آن برای پخش محتوا استفاده می کند. شما باید آن پلیر را با فراخوانی DefaultPreloadManager.Builder.buildExoPlayer() در همان سازنده ای که برای ایجاد مدیریت پیش بار استفاده کردید، ایجاد کنید.
  • هنگامی که کاربر به یک آیتم رسانه جدید سوئیچ می کند، برنامه getMediaSource() را فرا می خواند تا منبع رسانه را از مدیر پیش بارگذاری دریافت کند. این باید یک mediaItem باشد که قبلاً به مدیر پیش بارگذاری اضافه کرده اید. اگر مدیر پیش بارگذاری قبلاً بارگیری محتوا را شروع نکرده باشد، اشکالی ندارد. در آن صورت، MediaSource را برمی‌گرداند که داده‌های از پیش بارگذاری شده ندارد. به عنوان مثال، این ممکن است اتفاق بیفتد اگر کاربر به طور ناگهانی در چرخ فلک خیلی جلوتر بپرد.
  • پس از اینکه کاربر آیتم رسانه ای جدید را پخش کرد، با setCurrentPlayingIndex تماس بگیرید تا به مدیر پیش بارگذاری بگویید آیتم جدید در کجای چرخ فلک قرار دارد. مدیر پیش بارگذاری به آن اطلاعات نیاز دارد تا بارگذاری مورد بعدی را در اولویت قرار دهد. پس از به روز رسانی فهرست فعلی، invalidate() را فراخوانی کنید تا مدیر پیش بارگذاری اولویت را برای هر آیتم مجدداً تعیین کند.

موارد را از مدیر پیش بارگذاری حذف کنید

برای کارآمد نگه داشتن مدیر پیش بارگذاری، باید مواردی را حذف کنید که مدیر پیش بارگذاری دیگر نیازی به ردیابی آنها ندارد. همچنین ممکن است مواردی را که هنوز در چرخ فلک هستند، اما از موقعیت فعلی کاربر فاصله زیادی دارند، حذف کنید. به عنوان مثال، ممکن است تصمیم بگیرید که اگر یک آیتم بیش از 15 مورد از چیزی که کاربر تماشا می کند فاصله داشته باشد، نیازی به بارگذاری از قبل ندارد. در آن صورت، زمانی که موارد تا این حد دور شدند، آن‌ها را حذف می‌کنید. اگر کاربر به سمت آن موارد حذف شده برگردد، همیشه می توانید آنها را دوباره اضافه کنید .

preloadManager.remove(mediaItem)

نکات کلیدی در مورد کد

پس از اتمام کار، مدیر پیش بارگذاری را آزاد کنید

هنگامی که دیگر به مدیر پیش بارگیری نیاز ندارید، باید آن را آزاد کنید تا منابع آن آزاد شود. به ویژه، مطمئن شوید که وقتی فعالیت شما از بین رفت، آن را آزاد کنید.

preloadManager.release()

نکات کلیدی در مورد کد

  • شما نباید هیچ یک از متدهای شی را پس از انتشار آن فراخوانی کنید.
  • اگر نیاز به ایجاد مدیر پیش بارگذاری دیگری دارید، یک DefaultPreloadManager.Builder جدید ایجاد کنید و از آن برای ایجاد DefaultPreloadManager استفاده کنید. سعی نکنید از سازنده قدیمی استفاده مجدد کنید.