Cast Framework מספק מחלקות של תורים שתומכות ביצירת רשימות של מופעים של MediaQueueItem
, שאפשר ליצור ממופעים של MediaInfo
כמו סטרימינג של סרטונים או אודיו, כדי להפעיל אותם ברצף במכשיר המקבל. אפשר לערוך, לסדר מחדש, לעדכן וכו' את התור הזה של פריטי תוכן.
ה-SDK של מכשיר התצוגה שומר על התור ומגיב לפעולות בתור כל עוד יש בתור פריט אחד לפחות שפעיל כרגע (מופעל או מושהה). השולחים יכולים להצטרף לסשן ולהוסיף פריטים לרשימת הסרטונים. המכשיר המקבל שומר על סשן של פריטים בתור עד שההפעלה של הפריט האחרון מסתיימת, או עד שהמכשיר השולח מפסיק את ההפעלה ומסיים את הסשן, או עד שהמכשיר השולח טוען תור חדש במכשיר המקבל. כברירת מחדל, המקבל לא שומר מידע על תורים שהסתיימו. אחרי שהפריט האחרון בתור מסתיים, סשן המדיה מסתיים והתור נעלם.
יצירה וטעינה של פריטים בתור להפעלת מדיה
פריט בתור להפעלת מדיה מיוצג ב-Cast Framework כמופע של MediaQueueItem
.
כשיוצרים פריט בתור להפעלת מדיה, אם משתמשים בספריית נגן המדיה עם תוכן דינמי, אפשר להגדיר את זמן הטעינה מראש כדי שהנגן יוכל להתחיל לשמור בזיכרון את הפריט בתור להפעלת מדיה לפני שהפריט שלפניו בתור יסיים את ההפעלה. הגדרת מאפיין ההפעלה האוטומטית של הפריט כ-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
) method – מחזירה את רשימת המופעים של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
האלגוריתם שבוחר את הפריט הבא), להסיר פריטים מהתור ולשנות את הסדר של הפריטים בתור.