מסגרת Cast מספקת מחלקות של תורים שתומכות ביצירת רשימות של מופעי MediaQueueItem, שאפשר ליצור ממופעי MediaInfo כמו שידורי וידאו או אודיו, כדי להפעיל אותם ברצף במקלט. אפשר לערוך את התור הזה, לשנות את הסדר של הפריטים, לעדכן אותם וכו'.
ה-Receiver SDK מנהל את התור ומגיב לפעולות בתור כל עוד יש בתור לפחות פריט אחד שפעיל כרגע (מופעל או מושהה). השולחים יכולים להצטרף לסשן ולהוסיף פריטים לתור. המקלט שומר על סשן לפריטים בתור עד שהפריט האחרון מסיים את ההפעלה, או עד שהשולח מפסיק את ההפעלה ומסיים את הסשן, או עד שהשולח טוען תור חדש במקלט. כברירת מחדל, המקבל לא שומר מידע על תורים שהסתיימו. אחרי שהפריט האחרון בתור מסתיים, סשן המדיה מסתיים והתור נעלם.
יצירה וטעינה של פריטים בתור המדיה
פריט בתור המדיה מיוצג ב-Cast framework כמופע של MediaQueueItem.
כשיוצרים פריט בתור המדיה, אם משתמשים בספריית נגן המדיה עם תוכן מותאם, אפשר להגדיר את זמן הטעינה מראש כדי שהנגן יוכל להתחיל לשמור במטמון את הפריט בתור המדיה לפני שהפריט שלפניו בתור יסיים לפעול. אם מגדירים את המאפיין autoplay של הפריט כ-true, המקלט יכול להפעיל אותו באופן אוטומטי. לדוגמה, אתם יכולים להשתמש בתבנית של הכלי ליצירת פריטים כדי ליצור את הפריט בתור המדיה באופן הבא:
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20.0) .build()
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. המחלקה היא מודל נתונים חסכוני (sparse) של תור המדיה. הוא שומר את רשימת מזהי הפריטים בתור, שמסתנכרנת אוטומטית עם המקלט.
MediaQueue לא שומר את כל ה-MediaQueueItem כי זה יתפוס יותר מדי זיכרון כשהתור ארוך מאוד. במקום זאת, הוא מאחזר את הפריטים לפי דרישה ושומר LruCache של פריטים שהייתה אליהם גישה לאחרונה. אפשר להשתמש בשיטות הבאות כדי לגשת לתור המדיה:
- ה-method
getItemIds()– מחזירה את הרשימה של כל מזהי הפריטים לפי הסדר. - השיטה
getItemAtIndex()– מחזירה את הפריט שנשמר במטמון באינדקס נתון. אם הפריט לא נשמר במטמון, הפונקציהMediaQueueתחזיר את הערךnullותתזמן את שליפת הפריט. כשהפריט יאוחזר, תתבצע קריאה ל-MediaQueue.Callback#itemsUpdatedAtIndexes(), וקריאה חוזרת ל-getItemAtIndex()עם אותו מזהה תחזיר את הפריט. - הפונקציה
fetchMoteItemsRelativeToIndex()משמשת כשהמשתמש גולל את ממשק המשתמש של התור למעלה או למטה, והאפליקציה רוצה לאחזר פריטים נוספים מהענן.
כדאי להשתמש בשיטות האלה יחד עם השיטות האחרות של סטטוס המדיה כדי לעדכן את האפליקציה לגבי הסטטוס של התור והפריטים בתור. בנוסף לעדכונים על סטטוס המדיה מהמקלט, האפליקציה יכולה להאזין לשינויים בתור על ידי הטמעה של RemoteMediaClient.Callback ו-MediaQueue.Callback.
בנוסף, Cast SDK מספק שתי מחלקות של כלי שירות ליצירת ממשק משתמש להוספה לתור.
MediaQueueRecyclerViewAdapter, לגיבוי הנתונים שלRecyclerViewMediaQueueListAdapter, לגיבוי הנתונים שלListAdapter.
לדוגמה, כדי ליצור 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 }
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 שבוחר את הפריט הבא), להסיר פריטים מהתור ולשנות את הסדר של הפריטים בתור.