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

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

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

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

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

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

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

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

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

preloadManager.removeMediaItems(mediaItemsToRemove)

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

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

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

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

preloadManager.release()

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

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