キュー

概要

Web Receiver SDK は、 デフォルト キューによって提供される SDK を使用 QueueData および QueueManager またはカスタムキューを使用するか、 実装 cast.framework.QueueBase 使用し、 QueueManager をご覧ください。

Queueing API を使用すると、Chromecast をシームレスに統合できます。 次の機能があります。

  • Google とパートナー様の外部向けクラウドキュー実装をサポート 保存および作成されたキューをキャスト デバイスに直接読み込むことができます。
  • 読み込みではなくキュー内のアイテムのページ分割を可能にするメカニズム 一括で作成できます。
  • 次の項目、前の項目、 アイテムのウィンドウをフェッチしたり、関連するメディア情報を 必要があります。
  • QueueManager を使用して、キューアイテムの挿入、削除、更新を管理します。

デフォルト キュー

Web Receiver SDK では、すぐに利用できる形式の制限されたキューが 構成されます。

デフォルトのキューを使用するには、 queueData 送信側の読み込みの LoadRequestData で指定するか、ローカルの読み込みリクエストを送信します PlayerManager#loadメディアの読み込みもご覧ください。

受信側では、次を使用してキューを変更できます。 QueueManager 初期化します。

カスタムキュー

デフォルト キューのキューイング機能を備えていない場合、 カスタムキューを作成できるため、 柔軟性です

アプリケーション デベロッパーは、Web Receiver 側のキューを作成するには、 cast.framework.QueueBase

次の簡単なキューの基本的な例は、 initialize 呼び出しがオーバーライドされ、キューアイテムのリストとキューの説明が返されます。 キャスト デバイスに提供されます。

メディアの読み込みもご覧ください。

// 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 呼び出すことができます。ただし、クラウドキューの実装では、カスタムの Web レシーバー ロジックはアイテムを外部で取得して、 あります。

Queueing 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 が Cloud Queue サーバーであり、ロジックが含まれています。 特定のメディア アイテムを取得する方法を説明しました。

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

カスタムキューの管理

カスタムキューの実装例を次に示します。 削除メソッドを使用できます。この例では、Cloud Functions を使用して 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 によって処理されます。 Receiver SDK:

着信メッセージ パラメータ 送信レスポンス メッセージ 返却
次へ パラメータは必要ありません。 MEDIA_STATUS レシーバーが(必要に応じて nextItems() を介してフェッチし)、再生を開始します。 選択します。
前へ パラメータは必要ありません。 MEDIA_STATUS Web Receiver が(必要に応じて prevItems() を介してフェッチ)、 直前のアイテムを再生します。
FETCH_ITEMS FetchItemsRequestData QUEUE_CHANGE cast.framework.messages.QueueChangeたとえば 挿入ケースの場合 JSON の items フィールドには、新しく取得されたアイテムのリストが含まれます。
GET_ITEMS_INFO itemIds を含む GetItemsInfoRequestData: 配列<数値> ITEMS_INFO cast.framework.messages.ItemsInfo とキューアイテム情報。
GET_QUEUE_IDS パラメータは必要ありません。 QUEUE_IDS cast.framework.messages.QueueIds.

NEXT/PREVIOUS の場合、Web Receiver の既存のキュー表現が よりアイテムがない場合、 QueueBase.nextItems() または QueueBase.prevItems() 自動的に呼び出され、追加のアイテムを受け取ります。

FETCH_ITEM の場合、対応する関数 fetchItems QueueBase の実装では、クラウド キューに対して 関連するデータを Web Receiver に返して保存します。

さらにアイテムが取得されると、新しいメッセージ タイプ QUEUE_CHANGE がトリガーされます 送信者に返送されます各種のデータソースと 変更をキューに入れることができます。

GET_ITEMS_INFO の場合、 QueueBase の 実装はトリガーされず、Web Receiver がメディア情報を返す 識別子のリストです。

キューのシャッフル

キュー内のアイテムをシャッフルするように設定するには、 shuffleQueueData アイテムをキューに読み込むときに、true に追加します。

次の実装を使用している場合は、 QueueBase、次を使用: shuffle メソッドを使用して、アイテムのシャッフル リストを返します。

既存のキューをシャッフルするには、 shuffleQUEUE_UPDATE」の国旗 MessageType, QUEUE_SHUFFLE コマンドではなく、詳しくは、QueueUpdateRequestData をご覧ください。

リピートモード

キュー内のアイテムを繰り返すように設定するには、 repeatMode プロパティ QueueData 移動します。 RepeatMode キューに追加することをおすすめします

既存のキューの RepeatMode を変更するには、次のコマンドを使用します。 repeatMode プロパティの QueueUpdateRequestData, これは QUEUE_UPDATE を使用します MessageType を選択します。