개요

Web Receiver SDK는 기본 큐 SDK를 사용하는 QueueDataQueueManager 또는 다음과 같이 커스텀 대기열 사용 구현 cast.framework.QueueBase 사용하여 QueueManager 확인하세요.

Queueing API는 애플리케이션이 Cast와 더 잘 통합되도록 하는 데 도움이 되는 다음 기능을 사용할 수 있습니다.

  • Google 및 파트너의 클라우드 대기열 구현에 대한 외부 지원 저장 및 생성된 대기열을 Cast 기기에 직접 로드할 수 있습니다.
  • 대기열에서 항목을 로드하는 대신 페이지로 나누기를 허용하는 메커니즘 할 수 있습니다.
  • 다음 항목으로 이동, 이전 항목으로 이동, 항목 창 가져오기, 관련 미디어 정보 가져오기 등 할 수 있습니다.
  • QueueManager 드림 큐 항목의 삽입, 삭제, 업데이트를 관리합니다.

기본 큐

Web Receiver SDK는 다음과 같은 형식으로 제한된 큐 지원을 즉시 제공합니다. 기본 큐의 역할을 지정합니다.

기본 대기열을 사용하려면 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 생성자 호출을 사용하세요. 하지만 클라우드 대기열 구현의 경우 커스텀 웹은 수신기 로직은 항목을 외부에서 가져온 다음 초기화합니다.

Queueing API를 보다 포괄적으로 사용하는 방법을 보여주는 데모입니다. 대부분의 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:

수신 메시지 매개변수 발신 응답 메시지 Return 키
다음 매개변수가 필요하지 않습니다. MEDIA_STATUS 수신기가 (필요한 경우 nextItems()를 통해 가져오기) 재생을 시작합니다. 이동하겠습니다.
이전 매개변수가 필요하지 않습니다. MEDIA_STATUS 웹 수신기는 필요한 경우 prevItems()를 통해 가져와서 이전 항목이 재생됩니다.
FETCH_ITEMS FetchItemsRequestData QUEUE_CHANGE Cast.framework.messages.QueueChange입니다. 예를 들어 삽입 케이스의 경우 JSON의 항목 필드에는 가져온 새 항목의 목록이 포함됩니다.
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 구현에서는 웹 수신기로 반환할 관련 데이터를 저장합니다.

항목을 더 가져올 때마다 새 메시지 유형 QUEUE_CHANGE이 트리거됩니다. 보낸 사람에게 다시 보냅니다. 다양한 유형의 대기열 변경을 수행합니다.

GET_ITEMS_INFO의 경우 QueueBase님의 구현이 트리거되지 않고 웹 수신기가 미디어 정보를 반환함 이미 ID 목록에 알려져 있습니다.

큐 셔플

대기열의 항목을 셔플하도록 설정하려면 shuffle 드림 국기 QueueData 대기열에 항목을 로드할 때 true로 설정합니다.

Google Cloud 콘솔의 QueueBase의 경우 shuffle 메서드를 사용하여 셔플된 항목 목록을 반환합니다.

기존 큐를 셔플하려면 shuffle 드림 QUEUE_UPDATE 국기 MessageType, QUEUE_SHUFFLE 명령이 아니라 자세한 내용은 QueueUpdateRequestData를 참고하세요.

반복 모드

대기열의 항목이 반복되도록 설정하려면 repeatMode 드림 속성 QueueData 원하는 RepeatMode 를 참조하세요.

기존 큐의 RepeatMode를 변경하려면 다음을 사용합니다. repeatMode 속성 QueueUpdateRequestData, 이는 QUEUE_UPDATE를 사용하는 MessageType를 탭합니다.