המתנה בתור

מסגרת ההעברה (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() method - מחזירה את מזהה הפריט של הפריט שנטען כרגע (אבל לא פעיל בתור) במקבל.
  • getCurrentItemId() method - מחזירה את מזהה הפריט של הפריט שהיה פעיל בתור ( לא פועל) כאשר שינוי סטטוס המדיה התרחש.
  • 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 שבוחר את הפריט הבא), להסיר פריטים מהתור ולשנות את הסדר של הפריטים בתור.