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

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

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

افزودن فایل‌های رسانه‌ای به مدیر پیش‌بارگیری

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

برای انجام این کار، از روش افزودن دسته‌ای مانند addMediaItems (یا addMediaSources) استفاده کنید. همچنین می‌توانید add (یا addMediaSource) را فراخوانی کنید تا موارد رسانه‌ای را به‌صورت تکی اضافه کنید. بااین‌حال، افزودن فایل‌های رسانه‌ای به‌صورت تکی به‌طور خودکار پیش‌بارگیری را راه‌اندازی نمی‌کند. هنگام استفاده از روش‌های فردی، باید پس‌از اتمام افزودن موارد، صریحاً invalidate را فراخوانی کنید تا به مدیر پیش‌بارگیری بگویید اولویت‌ها را به‌روز کند و پیش‌بارگیری را شروع کند.

val initialMediaItems = pullMediaItemsFromService(count = 20)
val rankingDataList = initialMediaItems.indices.toList()
preloadManager.addMediaItems(initialMediaItems, rankingDataList)

نکات کلیدی درباره کد

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

برداشتن موارد از مدیر پیش‌بارگیری

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

اگر فهرستی از فایل‌های رسانه‌ای برای برداشتن دارید، می‌توانید از removeMediaItems (یا removeMediaSources) استفاده کنید. علاوه‌براین، می‌توانید remove (یا removeMediaSource) را فراخوانی کنید تا فایل‌های رسانه‌ای را به‌صورت تکی بردارید.

preloadManager.removeMediaItems(mediaItemsToRemove)

نکات کلیدی درباره کد

  • اگر می‌خواهید همه موارد را از مدیر پیش‌بارگیری بردارید، می‌توانید به‌جای remove()، reset() را فراخوانی کنید. این رویکرد زمانی مفید است که بخواهید همه موارد را در گردونه‌تان تغییر دهید. در این صورت، پس‌از برداشتن موارد، باید موارد جدیدی به مدیر پیش‌بارگیری اضافه کنید.

وقتی کارتان با مدیر پیش‌بارگیری تمام شد، آن را رها کنید

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

preloadManager.release()

نکات کلیدی درباره کد

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