המתנה בתור

ה-framework של Cast מספק סיווגים של 'הבאים בתור' שתומכים ביצירת רשימות של מכונות MediaQueueItem. אפשר ליצור אותן ממכונות של MediaInfo, כמו וידאו בסטרימינג, כדי להפעיל אותן ברצף במקלט. ניתן לערוך, לשנות את הסדר של הפריטים בתור, לעדכן אותם וכו'.

ה-SDK של המקבל שומר על התור ומגיב לפעולות שבתור, כל עוד יש בתור לפחות פריט אחד פעיל (מופעל או מושהה). השולחים יוכלו להצטרף לסשן ולהוסיף פריטים לתור. המקלט שומר על סשן של פריטים בתור עד שהפריט האחרון מסיים את ההפעלה, או שהשולח מפסיק את ההפעלה ומסיים את הסשן, או עד שהשולח טוען תור חדש במקבל. כברירת מחדל, המקבל לא שומר מידע על תורים שהסתיימו. כשהפריט האחרון בתור מסתיים, סשן המדיה מסתיים והתור נעלם.

יצירה וטעינה של פריטים בתור המדיה

פריט בתור מדיה מיוצג ב-Cast framework כמכונה MediaQueueItem. כשיוצרים פריט 'הבאים בתור למדיה', אם משתמשים בספריית המדיה של נגן המדיה עם תוכן מותאם, ניתן להגדיר את זמן הטעינה מראש כך שהנגן יוכל להתחיל בתהליך אגירת הנתונים של הפריט בתור המדיה לפני שהפריט שלפניו בתור יסתיים. אם מאפיין ההפעלה האוטומטית של הפריט מוגדר כ-True, המקבל יוכל להפעיל אותו באופן אוטומטי. לדוגמה, תוכלו להשתמש בתבנית builder כדי ליצור את הפריט בתור המדיה באופן הבא:

קוטלין
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo)
    .setAutoplay(true)
    .setPreloadTime(20.0)
    .build()
Java
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo)
  .setAutoplay(true)
  .setPreloadTime(20)
  .build();

טוענים מערך של פריטים בתור המדיה בתור באמצעות ה-method המתאים queueLoad RemoteMediaClient.

קבלת עדכונים לגבי הסטטוס של תור המדיה

כשהמקלט טוען פריט בתור מדיה, הוא מקצה מזהה ייחודי לפריט למשך כל הסשן (וכל משך החיים של התור). האפליקציה יכולה ללמוד את הסטטוס של התור מבחינת הפריט שנטען כרגע (יכול להיות שהוא לא פועל), נטען או נטען מראש. המחלקה MediaStatus מספקת את פרטי הסטטוס הבאים:

  • getPreloadedItemId() method – אם הפריט הבא נטען מראש, מחזירה את מזהה הפריט שנטען מראש.
  • getLoadingItemId() method - מחזירה את מזהה הפריט של הפריט שנטען כרגע (אבל אינו פעיל בתור) במקלט.
  • getCurrentItemId() method – מחזירה את מזהה הפריט של הפריט שהיה פעיל בתור (יכול להיות שהוא לא הופעל) בזמן שבו התרחש השינוי בסטטוס המדיה.
  • getQueueItems() (הוצאה משימוש, צריך להשתמש במקום זאת ב-MediaQueue) – הפונקציה מחזירה את רשימת המופעים של MediaQueueItem כרשימה שלא ניתן לשנות.

האפליקציה שלכם יכולה גם לקבל את רשימת הפריטים באמצעות המחלקה MediaQueue. המחלקה היא מודל נתונים דל של תור המדיה. היא שומרת את רשימת מזהי הפריטים בתור, שמסתנכרנת באופן אוטומטי עם המקבל. MediaQueue לא שומר את כל הנתונים של MediaQueueItem כי נדרש יותר מדי זיכרון כשהתור ארוך מאוד. במקום זאת, הוא מאחזר את הפריטים לפי דרישה ושומר על LruCache פריטים שניגשו אליהם לאחרונה. ניתן להשתמש בשיטות הבאות כדי לגשת לתור המדיה:

  • getItemIds() method – מחזירה את הרשימה של כל מזהי הפריטים לפי הסדר.
  • getItemAtIndex() method – מחזירה את הפריט שנשמר במטמון באינדקס נתון. אם הפריט לא נשמר במטמון, MediaQueue יחזיר את הערך null ותתזמן לאחזור הפריט. כשמאחזרים את הפריט, תתבצע קריאה לפונקציה MediaQueue.Callback#itemsUpdatedAtIndexes() והפעלה חוזרת של getItemAtIndex() עם אותו מזהה תחזיר את הפריט.
  • הפקודה fetchMoteItemsRelativeToIndex() משמשת כשהמשתמש גולל בחלק העליון או התחתון של ממשק המשתמש בתור, והאפליקציה רוצה לאחזר פריטים נוספים מהענן.

תוכלו להשתמש ב-methods אלה יחד עם שיטות אחרות של סטטוס מדיה כדי לעדכן את האפליקציה לגבי הסטטוס של התור והפריטים בתור. בנוסף לעדכונים על סטטוס המדיה מהמקבל, האפליקציה יכולה לזהות שינויים לתור על ידי הטמעה של RemoteMediaClient.Callback ו-MediaQueue.Callback.

כמו כן, ב-Cast SDK יש שני מחלקות של כלים ליצירת ממשק משתמש בתור.

לדוגמה, כדי ליצור RecyclerView באמצעות MediaQueueRecyclerViewAdapter:

קוטלין
class MyRecyclerViewAdapter(mediaQueue: MediaQueue?) :
    MediaQueueRecyclerViewAdapter<MyViewHolder?>(mediaQueue) {
    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        val item = getItem(position)

        // Update the view using `item`.
        ...
    }
}

class MyViewHolder : RecyclerView.ViewHolder {
    // Implement your own ViewHolder.
    ...
}

fun someMethod() {
    val adapter = MyRecyclerViewAdapter(
        mCastSession.remoteMediaClient.getMediaQueue())
    val recyclerView =
        activity.findViewById(R.id.my_recycler_view_id) as RecyclerView
    recyclerView.adapter = adapter
}
Java
public class MyRecyclerViewAdapter extends MediaQueueRecyclerViewAdapter<MyViewHolder> {
    public MyRecyclerViewAdapter(MediaQueue mediaQueue) {
        super(mediaQueue);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
      MediaQueueItem item = getItem(position);

      // Update the view using `item`.
      ...
    }
}

public class MyViewHolder implements RecyclerView.ViewHolder {
  // Implement your own ViewHolder.
  ...
}

public void someMethod() {
    RecyclerView.Adapter adapter = new MyRecyclerViewAdapter(
        mCastSession.getRemoteMediaClient().getMediaQueue());
    RecyclerView recyclerView =
        (RecyclerView) getActivity().findViewById(R.id.my_recycler_view_id);
    recyclerView.setAdapter(adapter);
}

עריכת התור

כדי לבצע פעולות על הפריטים בתור, משתמשים ב-methods של התור במחלקה RemoteMediaClient. הן מאפשרות לטעון מערך של פריטים לתור חדש, להוסיף פריטים לתור קיים, לעדכן את המאפיינים של הפריטים בתור, להעביר פריט קדימה או אחורה בתור, להגדיר את המאפיינים של התור עצמו (למשל, לשנות את האלגוריתם repeatMode שבוחר את הפריט הבא), להסיר פריטים מהתור ולסדר מחדש את הפריטים בתור.