סקירה כללית
ה-SDK של ה-Web Acceptr תומך בהוספת תורים לתור
תור ברירת המחדל שמסופק על ידי
SDK באמצעות
QueueData
וגם
QueueManager
או שימוש בתור מותאם אישית על ידי
בתהליך הטמעה
cast.framework.QueueBase
ושימוש
QueueManager
לקבלת עדכונים.
Queueing API מאפשר לאפליקציות להשתלב טוב יותר עם Cast באמצעות את התכונות הבאות:
- תמיכה בהטמעת תור בענן של Google ושל השותפים באופן חיצוני את תורים מאוחסנים ונוצרים אפשר לטעון ישירות למכשירי Cast.
- מנגנונים שמאפשרים עימוד של פריטים בתור במקום טעינה הכול בבת אחת.
- תמיכה במסרים חדשים, כמו מעבר לפריט הבא, לפריט הקודם אחזור חלון של פריטים, וגם קבלת פרטי מדיה שקשורים סדרה של פריטים בתור.
-
QueueManager
כדי לנהל הוספה, הסרה ועדכון של פריטים בתור.
תור ברירת המחדל
ה-SDK של ה-WebReceiver נותן תמיכה מוגבלת בתור, מחוץ לאריזה בתור ברירת מחדל.
כדי להשתמש בתור ברירת המחדל, צריך לציין את
queueData
ב-LoadRequestData
של הטעינות בצד השולח או שליחה של בקשת טעינה מקומית
באמצעות
PlayerManager#load
.
ראה גם טעינת מדיה.
בצד המקבל, אפשר לשנות את התור באמצעות
QueueManager
אחרי שהמדיה הראשונית נטענה.
תור מותאם אישית
אם תור ברירת המחדל לא מספק את הפונקציונליות של 'הבאים בתור' שנדרשת לאפליקציה שלך, ניתן ליצור תור מותאם אישית, וכך לאפשר יכולות וגמישות.
מפתחי אפליקציות יכולים ליצור תור צדדי של מקלט אינטרנטי על ידי הטמעה
cast.framework.QueueBase
לפניכם דוגמה בסיסית לתור פשוט שבו
initialize
השיחה בוטלה ולאחר מכן רשימה של פריטים בתור יחד עם תיאורי תור
סופקו למכשיר Cast.
ראה גם טעינת מדיה.
// Creates a simple queue with a combination of contents.
const DemoQueue = class extends cast.framework.QueueBase {
constructor() {
super();
/**
* List of media urls.
* @private @const {!Array<string>}
*/
this.myMediaUrls_ = [...];
}
/**
* Provide a list of items.
* @param {!cast.framework.messages.LoadRequestData} loadRequestData
* @return {!cast.framework.messages.QueueData}
*/
initialize(loadRequestData) {
const items = [];
for (const mediaUrl of this.myMediaUrls_) {
const item = new cast.framework.messages.QueueItem();
item.media = new cast.framework.messages.MediaInformation();
item.media.contentId = mediaUrl;
items.push(item);
}
let queueData = loadRequestData.queueData;
// Create a new queue with media from the load request if one doesn't exist.
if (!queueData) {
queueData = new cast.framework.messages.QueueData();
queueData.name = 'Your Queue Name';
queueData.description = 'Your Queue Description';
queueData.items = items;
// Start with the first item in the playlist.
queueData.startIndex = 0;
// Start from 10 seconds into the first item.
queueData.currentTime = 10;
}
return queueData;
}
};
בדוגמה הזאת, הרשימה של הפריטים
initialize
השיחה היא
QueueBase
קריאה ל-constructor. עם זאת, להטמעה של תור בענן, רכיב ה-Web בהתאמה אישית
לוגיקת המקבל יכולה לאחזר את הפריטים לגורם חיצוני ואז להחזיר אותם כחלק
אתחול הקריאה.
כדי להמחיש שימוש מקיף יותר ב-API של הוספה לתור, הנה הדגמה
שמיישם את רוב
QueueBase
.
const DemoQueue = class extends cast.framework.QueueBase {
constructor() {
/** @private {} */
super();
YourServer.onSomeEvent = this.updateEntireQueue_;
}
/**
* Initializes the queue.
* @param {!cast.framework.messages.LoadRequestData} loadRequestData
* @return {!cast.framework.messages.QueueData}
*/
initialize(loadRequestData) {
let queueData = loadRequestData.queueData;
// Create a new queue with media from the load request if one doesn't exist.
if (!queueData) {
queueData = new cast.framework.messages.QueueData();
queueData.name = 'Your Queue Name';
queueData.description = 'Your Queue Description';
// Put the first set of items into the queue
const items = this.nextItems();
queueData.items = items;
// Start with the first item in the playlist.
queueData.startIndex = 0;
// Start from 10 seconds into the first item.
queueData.currentTime = 10;
}
return queueData;
}
/**
* Picks a set of items from remote server after the reference item id and
* return as the next items to be inserted into the queue. When
* referenceItemId is omitted, items are simply appended to the end of the
* queue.
* @param {number} referenceItemId
* @return {!Array<cast.framework.QueueItem>}
*/
nextItems(referenceItemId) {
// Assume your media has a itemId and the media url
return this.constructQueueList_(YourServer.getNextMedias(referenceItemId));
}
/**
* Picks a set of items from remote server before the reference item id and
* return as the items to be inserted into the queue. When
* referenceItemId is omitted, items are simply appended to beginning of the
* queue.
* @param {number} referenceItemId
* @return {!Array<cast.framework.QueueItem>}
*/
prevItems(referenceItemId) {
return this.constructQueueList_(YourServer.getPrevMedias(referenceItemId));
}
/**
* Constructs a list of QueueItems based on the media information containing
* the item id and the media url.
* @param {number} referenceItemId
* @return {!Array<cast.framework.QueueItem>}
*/
constructQueueList_(medias) {
const items = [];
for (media of medias) {
const item = new cast.framework.messages.QueueItem(media.itemId);
item.media = new cast.framework.messages.MediaInformation();
item.media.contentId = media.url;
items.push(item);
}
return items;
}
/**
* Logs the currently playing item.
* @param {number} itemId The unique id for the item.
* @export
*/
onCurrentItemIdChanged(itemId) {
console.log('We are now playing video ' + itemId);
YourServer.trackUsage(itemId);
}
};
בדוגמה שלמעלה, YourServer
הוא שרת התור בענן ויש לו לוגיקה
שמסבירה איך לאחזר פריטי מדיה מסוימים.
כדי להשתמש ב-QueueBase
שמוטמעת בתור,
CastReceiverContext
:
const context = cast.framework.CastReceiverContext.getInstance();
context.start({queue: new DemoQueue()});
ניהול תור
QueueManager
נותנים למפתחים גמישות לפתח את הפתרונות של הוספת סרטונים לרשימת 'הבאים בתור'.
כדי לגשת לרשימת הפריטים המאוחסנת כעת בתור, וגם
הפריט המושמע הנוכחי. השירות מספק גם פעולות כמו הזנה, הסרה,
ועדכון של פריטים בתור. קטע הקוד הבא מראה איך לגשת
מופע של
QueueManager
:
const context = cast.framework.CastReceiverContext.getInstance();
const queueManager = context.getPlayerManager().getQueueManager();
ניהול תור כברירת מחדל
אחרי שהתור הראשוני נטען,
QueueManager
יכול לשמש לביצוע פעולות כמו אחזור הפריט הנוכחי,
כל הפריטים בתור, ועדכון הפריטים בתור באמצעות
insertItems
,
removeItems
,
וגם
updateItems
.
ניהול תור בהתאמה אישית
הנה דוגמה להטמעה של תור מותאם אישית שמשתמשת בהוספה
שיטות להסרה על סמך אירוע מסוים. הדוגמה גם ממחישה שימוש
updateItems
שבו המפתחים יכולים לשנות את הפריטים בתור הקיים, כמו
הסרת הפסקות למודעות.
const DemoQueue = class extends cast.framework.QueueBase {
constructor() {
super();
/** @private @const {!cast.framework.QueueManager} */
this.queueManager_ = context.getPlayerManager().getQueueManager();
}
/**
* Provide a list of items.
* @param {!cast.framework.messages.LoadRequestData} loadRequestData
* @return {!cast.framework.messages.QueueData}
*/
initialize(loadRequestData) {
// Your normal initialization; see examples above.
return queueData;
}
/** Inserts items to the queue. */
onSomeEventTriggeringInsertionToQueue() {
const twoMoreUrls = ['http://url1', 'http://url2'];
const items = [];
for (const mediaUrl of twoMoreUrls) {
const item = new cast.framework.QueueItem();
item.media = new cast.framework.messages.MediaInformation();
item.media.contentId = mediaUrl;
items.push(item);
}
// Insert two more items after the current playing item.
const allItems = this.queueManager_.getItems();
const currentItemIndex = this.queueManager_.getCurrentItemIndex();
const nextItemIndex = currentItemIndex + 1;
let insertBefore = undefined;
if (currentItemIndex >= 0 &&
currentItemIndex < allItems.length - 1) {
insertBefore = allItems[nextItemIndex].itemId;
}
this.queueManager_.insertItems(items, insertBefore);
}
/** Removes a particular item from the queue. */
onSomeEventTriggeringRemovalFromQueue() {
this.queueManager_.removeItems([2]);
}
/** Removes all the ads from all the items across the entire queue. */
onUserBoughtAdFreeVersion() {
const items = this.queueManager_.getItems();
this.queueManager_.updateItems(items.map(item => {
item.media.breaks = undefined;
return item;
}));
}
};
הודעות נכנסות ויוצאות
כדי לתמוך באופן מלא באחזור תור בצד המקבל כמקור האמת, ההודעות הנוספות הבאות בתור מוסיפות ומטופלות על ידי ה-CAF SDK של המקלט:
הודעה נכנסת | פרמטרים | הודעת תגובה יוצאת | החזרה לתלמיד/ה |
הבא | אין צורך בפרמטר. | MEDIA_STATUS | המקלט (יאחזר דרך nextItems() אם יש צורך) ויתחיל לשחק ,בפריט הבא. |
הקודם | אין צורך בפרמטר. | MEDIA_STATUS | מקלט האינטרנט יבצע (אחזור באמצעות prevItems() במקרה הצורך) ויתחיל השמעת הפריט הקודם. |
FETCH_ITEMS | FetchItemsRequestData | QUEUE_CHANGE | העברה ב-cast.framework.messages.QueueChange. לדוגמה, באירוע הוספה, שדה הפריטים ב-JSON יכיל את רשימת הפריטים החדשים שאוחזרו. |
GET_ITEMS_INFO | GetItemsInfoRequestData שמכיל itemIds: מערך<number> | ITEMS_INFO | cast.framework.messages.ItemsInfo עם מידע על הפריטים בתור. |
GET_QUEUE_IDS | אין צורך בפרמטר. | QUEUE_IDS | cast.framework.messages.QueueIds. |
עבור NEXT
/PREVIOUS
, אם הייצוג הקיים בתור במקלט האינטרנט
אין יותר פריטים,
QueueBase.nextItems()
או
QueueBase.prevItems()
מופעלת באופן אוטומטי כדי לקבל פריטים נוספים.
בשביל FETCH_ITEM
, הפונקציה המתאימה
fetchItems
בהטמעה של QueueBase
נקראת 'תורים בענן', שמאחזרים
את הנתונים הרלוונטיים שצריך להחזיר למקלט האינטרנט לצורך אחסון.
בכל אחזור של פריטים נוספים, מופעל סוג הודעה חדש: QUEUE_CHANGE
ונשלחו בחזרה לשולח. אפשר לראות את הסוגים השונים של
שינויים בתור.
של GET_ITEMS_INFO
,
QueueBase
לא מופעלת, ומכשיר האינטרנט מחזיר פרטי מדיה
כבר ידוע ברשימת המזהים.
השמעה אקראית של 'הבאים בתור' מתבצעת
כדי להגדיר את הפריטים בתור למצב אקראי, מגדירים את
shuffle
דגל מתוך
QueueData
עד true
כשטוענים את הפריטים בתור.
אם אתם משתמשים בהטמעה של
QueueBase
, שימוש
ה
shuffle
כדי להחזיר רשימה אקראית של פריטים.
כדי להציג תור קיים באופן אקראי, משתמשים בפקודה:
shuffle
הדגל של QUEUE_UPDATE
MessageType
,
ולא בפקודה QUEUE_SHUFFLE
. צפייה
QueueUpdateRequestData
אפשר לקבל מידע נוסף.
מצב חזרה
כדי להגדיר חזרה על הפריטים בתור, צריך להגדיר את
repeatMode
נכס של
QueueData
עד
RepeatMode
כשטוענים את הפריטים בתור.
כדי לשנות את RepeatMode
של תור קיים, משתמשים ברכיב הבא:
repeatMode
של התכונה
QueueUpdateRequestData
,
שמשתמש ב-QUEUE_UPDATE
MessageType
.