המתנה בתור

סקירה כללית

ה-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.