ה-Cast framework מספק מחלקות של הבאים לתור שתומכות ביצירת רשימות של מכונות MediaQueueItem
, שאפשר ליצור ממכונות של MediaInfo
כמו סטרימינג של וידאו או אודיו, כדי להפעיל אותן ברצף במקלט. ניתן לערוך, לסדר מחדש, לעדכן וכן הלאה את התור של פריטי התוכן.
ה-SDK של המקבל שומר את התור ומגיב לפעולות בתור, כל עוד יש בתור לפחות פריט אחד שפעיל כרגע (מופעל או מושהה). השולחים יכולים להצטרף לפעילות ולהוסיף פריטים לתור. המקבל שומר על סשן של הפריטים בתור עד שהפריט האחרון יסיים את ההפעלה, או עד שהשולח יסיים את ההפעלה ויסיים את הסשן, או עד שהשולח יטען תור חדש אצל המקבל. כברירת מחדל, המקבל לא שומר מידע על תורים שהסתיימו. כשהפריט האחרון בתור יסתיים, סשן המדיה יסתיים והתור ייעלם.
יצירה וטעינה של פריטים בתור המדיה
פריט בתור של מדיה מיוצג ב-Cast framework כמכונה MediaQueueItem
.
כשיוצרים פריט בתור מדיה, אם משתמשים בספרייה של Media Player עם תוכן מותאם, ניתן להגדיר את זמן הטעינה מראש כך שהנגן יוכל להתחיל לאחסן את הפריט בתור המדיה לפני שהפריט שלפניו בתור יסתיים לפעול. אם מאפיין ההפעלה האוטומטית של הפריט מוגדר כ-True, לנמען יש אפשרות להפעיל אותו באופן אוטומטי. לדוגמה, ניתן להשתמש ב-builder ב-builder כדי ליצור את הפריט בתור של המדיה באופן הבא:
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20.0) .build()
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20) .build();
טוענים מערך של פריטים בתור של מדיה בתור באמצעות השיטה queueLoad
המתאימה של RemoteMediaClient
.
קבלת עדכוני סטטוס של תור המדיה
כשהמקבל טוען פריט בתור של מדיה, הוא מקצה לפריט מזהה ייחודי שנשאר במהלך ההפעלה (וכל משך החיים של התור). האפליקציה שלכם יכולה לקבל מידע על הסטטוס של התור: איזה פריט נטען כרגע (יכול להיות שהוא לא מופעל), נטען או נטען מראש. המחלקה MediaStatus
מספקת את פרטי הסטטוס הבאים:
getPreloadedItemId()
– אם הפריט הבא כבר נטען מראש, הפונקציה מחזירה את מזהה הפריט שנטען מראש.getLoadingItemId()
– מחזירה את מזהה הפריט של הפריט שנטען כרגע (אבל לא פעיל בתור) במקבל.- method
getCurrentItemId()
– מחזירה את מזהה הפריט של הפריט שהיה פעיל בתור (יכול להיות שהוא לא מופעל) בזמן השינוי של סטטוס המדיה. getQueueItems()
(השיטה הוצאה משימוש, יש להשתמש במקום זאת ב-MediaQueue
) – מחזירה את הרשימה שלMediaQueueItem
מכונות כרשימה שלא ניתנת לשינוי.
האפליקציה יכולה גם לקבל את רשימת הפריטים באמצעות המחלקה MediaQueue
. המחלקה היא מודל נתונים דליל של תור המדיה. רשימת מזהי הפריטים נשארת בתור, שמסונכרנת באופן אוטומטי עם המקבל.
MediaQueue
לא שומר את כל המידע MediaQueueItem
כי יהיה צורך יותר מדי זיכרון כשהתור ארוך מאוד. במקום זאת, היא מאחזרת את הפריטים לפי דרישה ומשאירה LruCache
של פריטים שניגשתם אליהם לאחרונה. אפשר להשתמש בשיטות הבאות כדי לגשת לתור המדיה:
getItemIds()
– מחזירה את הרשימה של כל מזהי הפריטים לפי הסדר.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
שבוחר את הפריט הבא), להסיר פריטים מהתור ולשנות את הסדר של הפריטים בתור.