מסגרת ההעברה (cast) כוללת מחלקות בתור התומכות ביצירת רשימות
מתוך MediaQueueItem
מכונות, שיכול להיות מבוססות על MediaInfo
מופעים כמו וידאו או אודיו
משודרת ברצף, כדי שתופעל ברצף במקלט. אפשר לערוך את התור הזה של פריטי התוכן, לשנות את הסדר שלו, לעדכן אותו וכו'.
ה-SDK של המקבל שומר על התור ומגיב לפעולות כל עוד התור כולל לפחות פריט אחד פעיל (מופעל או מושהה). השולחים יוכלו להצטרף לסשן ולהוסיף פריטים לתור. המקבל שומר הפעלה של פריטים בתור עד שהפריט האחרון מסיים את ההפעלה, או השולח עוצר את ההפעלה ומסיים את הסשן, או עד שהשולח טוען תור חדש במקלט. המקבל לא שומר על תורים שנסגרו כברירת מחדל. אחרי שהפריט האחרון בתור מסתיים, סשן המדיה מסתיים והתור נעלם.
יצירה וטעינה של פריטים בתור המדיה
פריט בתור המדיה מיוצג במסגרת Cast בתור מכונה של MediaQueueItem
.
כשיוצרים פריט בתור מדיה, אם משתמשים ב-Media Player
לספרייה עם תוכן מותאם, אפשר להגדיר
זמן הטעינה מראש כדי שהנגן יוכל להתחיל בתהליך אגירת הנתונים של הפריט בתור המדיה לפני
הפריט שלפניו בתור מסיים להשמיע. הגדרת ההפעלה האוטומטית של הפריט
המאפיין כ-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();
טוענים מערך של פריטים בתור המדיה בתור באמצעות
queueLoad
ל-RemoteMediaClient
.
קבלת עדכונים לגבי הסטטוס של תור המדיה
כשהמקלט טוען פריט ברשימת ההמתנה של המדיה, הוא מקצה לו מזהה ייחודי שנשמר למשך כל הסשן (ולמשך כל חיי התור). שלך
האפליקציה יכולה לקבל מידע על הסטטוס של התור מבחינת הפריט שנטען כרגע
(ייתכן שהוא לא פועל), בטעינה או בטעינה מראש. הכיתה MediaStatus
מספקת את פרטי הסטטוס הבאים:
getPreloadedItemId()
method - אם הפריט הבא נטען מראש, מחזירה את מזהה הפריט שנטען מראש.- השיטה
getLoadingItemId()
מחזירה את מזהה הפריט שעומד כרגע בעומס (אבל לא פעיל בתור) אצל המקבל. - השיטה
getCurrentItemId()
מחזירה את מזהה הפריט שהיה פעיל בתור (יכול להיות שהוא לא הופעל) בזמן שינוי סטטוס המדיה. - השיטה
getQueueItems()
(השיטה הוצאה משימוש, יש להשתמש ב-MediaQueue
במקום זאת) – מחזירה את רשימת המופעים שלMediaQueueItem
כרשימה שלא ניתן לשנות אותה.
האפליקציה יכולה גם לקבל את רשימת הפריטים באמצעות
MediaQueue
בכיתה. המחלקה היא מודל נתונים דל של תור המדיה. היא שומרת את הרשימה של
מזהי פריטים בתור, שמסתנכרנים באופן אוטומטי עם המקבל.
MediaQueue
לא שומר את כל
MediaQueueItem
כי יידרש יותר מדי זיכרון כשהתור ארוך מאוד. במקום זאת,
מאחזר את הפריטים לפי דרישה ושומר על LruCache
פריטים שנכנסתם אליהם לאחרונה. ניתן להשתמש בשיטות הבאות כדי לגשת לתור המדיה:
getItemIds()
method - מחזירה את הרשימה של כל מזהי הפריטים לפי הסדר.getItemAtIndex()
method - מחזירה את הפריט שנשמר במטמון באינדקס נתון. אם הפריט לא נשמר במטמון, הפונקציה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
שבוחר את הפריט הבא),
להסיר פריטים מהתור ולשנות את הסדר של הפריטים בתור.