Cast framework מספק מחלקות של תורים שתומכות ביצירת רשימות של מופעים מסוג MediaQueueItem, שאפשר ליצור ממופעים מסוג MediaInfo כמו סרטונים או סטרימינג של אודיו, כדי להפעיל אותם ברצף במקלט. אפשר לערוך, לסדר מחדש, לעדכן וכו' את התור הזה של פריטי תוכן.
ה-SDK של המקלט מתחזק את התור ומגיב לפעולות בתור כל עוד יש בתור לפחות פריט אחד פעיל (בהפעלה או בהשהיה). השולחים יכולים להצטרף לסשן ולהוסיף פריטים לתור. המכשיר המקבל מנהל סשן לפריטים בתור עד שההפעלה של הפריט האחרון מסתיימת או עד שהמכשיר השולח מפסיק את ההפעלה ומסיים את הסשן, או עד שמכשיר שולח טוען תור חדש במכשיר המקבל. כברירת מחדל, המקבל לא שומר מידע על תורים שהסתיימו. אחרי שהפריט האחרון בתור מסתיים, סשן המדיה מסתיים והתור נעלם.
יצירה וטעינה של פריטים בתור להפעלת מדיה
פריט בתור להפעלת מדיה מיוצג ב-Cast Framework כמופע של MediaQueueItem.
כשיוצרים פריט בתור להפעלת מדיה, אם משתמשים בספריית נגני המדיה עם תוכן דינמי, אפשר להגדיר את זמן הטעינה מראש כדי שהנגן יוכל להתחיל לשמור בזיכרון המטמון את הפריט בתור להפעלת מדיה לפני שהפריט שלפניו בתור יסיים את ההפעלה. הגדרת המאפיין autoplay של הפריט כ-true מאפשרת למקלט להפעיל אותו באופן אוטומטי. לדוגמה, אפשר להשתמש בתבנית builder כדי ליצור את הפריט בתור המדיה באופן הבא:
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 - Returns the item ID of the item that is currently loading (but isn't active in the queue) on the receiver. -
getCurrentItemId()method – מחזירה את מזהה הפריט של הפריט שהיה פעיל בתור (יכול להיות שהוא לא מושמע) בזמן שחל שינוי בסטטוס המדיה. - השיטה
getQueueItems()(הוצאה משימוש, במקומה יש להשתמש ב-MediaQueue) – מחזירה את רשימת המופעים שלMediaQueueItemכרשימה שלא ניתן לשנות.
האפליקציה יכולה גם לקבל את רשימת הפריטים באמצעות המחלקה MediaQueue. המחלקות הן מודל נתונים דליל של תור המדיה. הוא שומר את רשימת מזהי הפריטים בתור, והיא מסונכרנת אוטומטית עם המקלט.
MediaQueue לא שומר את כל MediaQueueItem כי זה יתפוס יותר מדי זיכרון כשהתור יהיה ארוך מאוד. במקום זאת, הוא מאחזר את הפריטים לפי דרישה ושומר LruCache של פריטים שהייתה אליהם גישה לאחרונה. אפשר להשתמש בשיטות האלה כדי לגשת לתור המדיה:
-
getItemIds()method – מחזירה את רשימת כל מזהי הפריטים בסדר מסוים. -
getItemAtIndex()השיטה – מחזירה את הפריט שנשמר במטמון באינדקס נתון. אם הפריט לא נמצא במטמון, MediaQueueיחזירnullויתזמן שליפה של הפריט. כשמאחזרים את הפריט, הפונקציהMediaQueue.Callback#itemsUpdatedAtIndexes()מופעלת, ואם מפעילים שוב את הפונקציהgetItemAtIndex()עם אותו מזהה, הפריט יוחזר. - השיטה
fetchMoteItemsRelativeToIndex()משמשת כשהמשתמש גולל את ממשק המשתמש של התור לראש או לתחתית, והאפליקציה רוצה לאחזר עוד פריטים מהענן.
אפשר להשתמש בשיטות האלה יחד עם שיטות אחרות לקבלת סטטוס המדיה, כדי שהאפליקציה תקבל מידע על הסטטוס של התור ושל הפריטים בתור. בנוסף לעדכונים על סטטוס המדיה מהמקלט, האפליקציה יכולה לעקוב אחרי שינויים בתור על ידי הטמעה של RemoteMediaClient.Callback ושל MediaQueue.Callback.
בנוסף, Cast SDK מספק שני מחלקות כלי עזר ליצירת ממשק משתמש להוספה לתור.
-
MediaQueueRecyclerViewAdapter, לגיבוי הנתונים של RecyclerView MediaQueueListAdapter, לגיבוי הנתונים של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 האלגוריתם שבוחר את הפריט הבא), להסיר פריטים מהתור ולשנות את הסדר של הפריטים בתור.