המתנה בתור

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

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

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

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

Kotlin
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo)
    .setAutoplay(true)
    .setPreloadTime(20.0)
    .build()
Java
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo)
  .setAutoplay(true)
  .setPreloadTime(20)
  .build();

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

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

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

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

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

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

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

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

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

Kotlin
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);
}

עריכת התור

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