Sıra oluşturuluyor

Genel Bakış

Web Receiver SDK, tarafından sağlanan varsayılan sıra Şunu kullanan SDK: QueueData ve QueueManager veya özel bir sıra kullanarak uygulamak cast.framework.QueueBase ve QueueManager başlıklı makaleye göz atın.

Queueing API, uygulamaların Cast ile daha iyi entegre olmasını sağlar. Bunun için şu özellikleri sunar:

  • Google'ın ve iş ortaklarının bulut sırası uygulama desteği. doğrudan yayın cihazlarına yüklenebilir.
  • Sıradaki öğelerin yüklemek yerine sayfalara ayrılmasına olanak tanıyan mekanizmalar her şeyi aynı anda yapabilirsiniz.
  • Sonraki öğeye, önceki öğeye gitme gibi yeni mesajlaşma desteği öğeler içeren bir pencerenin yanı sıra bir dizi öğe vardır.
  • İlgili içeriği oluşturmak için kullanılan QueueManager sıra öğelerinin eklenmesini, kaldırılmasını ve güncellenmesini yönetmek için kullanılır.

Varsayılan sıra

Web Receiver SDK, bir sıraya koyun.

Varsayılan sırayı kullanmak için queueData gönderen tarafı yüklemelerinizin LoadRequestData içinde veya bir yerel yükleme isteği gönderin kullanarak PlayerManager#load. Ayrıca, Medya yükleme konusuna da bakın.

Alıcı tarafında sıra QueueManager ilk medya yüklendikten sonra.

Özel sıra

Varsayılan sıra, bir işlem için gereken özel sıra oluşturma olanağından yararlandığınızda, ve esneklik sağlar.

Uygulama geliştiriciler, cast.framework.QueueBase.

Burada, rastgele değer verilen initialize çağrı geçersiz kılınır ve ardından sıra açıklamalarıyla birlikte sıra öğelerinin listesi yayın cihazına aktarılır.

Ayrıca, Medya yükleme konusuna da bakın.

// 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;
 }
};

Bu örnekte, initialize çağrısı, sağlayıcının QueueBase oluşturucu çağrısı. Ancak bulut sırası uygulaması için özel web Alıcı mantığı, öğeleri harici olarak getirebilir ve daha sonra, ilk kullanıma hazırlama çağrısı.

Sıraya alma API'sinin daha kapsamlı bir kullanımını göstermek için aşağıdaki demoyu inceleyebilirsiniz en çok uygulanan QueueBase sınıfı.

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);
 }
};

Yukarıdaki örnekte YourServer, bulut sırası sunucunuzdur ve Belirli medya öğelerinin nasıl getirileceği hakkında.

QueueBase uygulamasını kullanmak için kuyruğa alma uygulanan durumlardan biri, CastReceiverContext:

const context = cast.framework.CastReceiverContext.getInstance();
context.start({queue: new DemoQueue()});

Sırayı yönetme

İlgili içeriği oluşturmak için kullanılan QueueManager geliştiricilere sıraya alma çözümlerini geliştirmeleri için esneklik sağlar. şu anda depolanmış olan sıra öğeleri listesine ve çalan öğe. Aynı zamanda ekleme, kaldırma, hem de sıraya alınan öğelerin güncellenmesini sağlar. Aşağıdaki snippet, bir şunun örneği: QueueManager:

const context = cast.framework.CastReceiverContext.getInstance();
const queueManager = context.getPlayerManager().getQueueManager();

Varsayılan sıra yönetimi

İlk sıra yüklendikten sonra QueueManager geçerli öğeyi alma, öğe verilerini alma, otomatik olarak oluşturmak ve sıradaki öğeleri kullanarak insertItems, removeItems, ve updateItems

Özel sıra yönetimi

Burada, yöntemlerini tespit etmenizi sağlar. Bu örnekte, aynı zamanda updateItems Geliştiricilerin mevcut sıradaki sıra öğelerini değiştirebilecekleri, Reklam aralarını kaldırma.

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;
    }));
  }
};

Gelen ve giden iletiler

Doğru kaynak olarak alıcı tarafı sıra getirme işlemini tam olarak desteklemek için CAF tarafından sunulacak ve işlenecek aşağıdaki ek iletiler Alıcı SDK:

Gelen Mesaj Parametreler Giden Yanıt Mesajı Geri ver
İLERİ Herhangi bir parametre gerekmez. MEDIA_STATUS Alıcı, (gerekirse nextItems() aracılığıyla getirir) ve oynamaya başlar. bir sonraki öğedir.
ÖNCEKİ Herhangi bir parametre gerekmez. MEDIA_STATUS Web Alıcısı (gerekirse prevItems() aracılığıyla getirir) ve önceki öğe oynatılıyor.
FETCH_ITEMS FetchItemsRequestData QUEUE_CHANGE cast.framework.messages.QueueChange. Örneğin, "insert case" için JSON'daki items alanı, getirilen yeni öğelerin listesini içerir.
GET_ITEMS_INFO itemIds içeren GetItemsInfoRequestData: Dizi<sayı> ITEMS_INFO Sıra öğesi bilgilerini içeren cast.framework.messages.ItemsInfo.
GET_QUEUE_IDS Herhangi bir parametre gerekmez. QUEUE_IDS cast.framework.messages.QueueIds.

NEXT/PREVIOUS için, Web Alıcısı'ndaki mevcut sıra gösterimi daha fazla öğesi yoksa QueueBase.nextItems() veya QueueBase.prevItems() daha fazla öğe almak için otomatik olarak çağrılır.

FETCH_ITEM için karşılık gelen fonksiyon fetchItems içindeki QueueBase uygulaması, bulut sıraları için çağrılır. saklayacak Web Alıcısı'na döndürülecek ilgili verileri içerir.

Daha fazla öğe getirildiğinde QUEUE_CHANGE adlı yeni bir mesaj türü tetiklenir gönderene gönderilir. Farklı proje yönetimi metodolojilerini sıradaki değişiklikler.

GET_ITEMS_INFO için, QueueBase uygulama tetiklenmez ve Web Alıcı medya bilgilerini döndürür kimlikler listesinde zaten bulabilirsiniz.

Sıra karıştırılıyor

Sıranızdaki öğelerin karıştırılmasını sağlamak için shuffle bayrağı QueueData öğeleriniz sıraya yüklenirken true olarak ayarlanır.

Etiket Yöneticisi'ni kullanıyorsanız QueueBase, şunu kullanın: "the" shuffle yöntemini kullanın.

Mevcut bir sırayı karıştırmak için: shuffle QUEUE_UPDATE bayrağı MessageType, (QUEUE_SHUFFLE komutu yerine) içerir. Görüntüleyin QueueUpdateRequestData konulu videomuzu izleyin.

Tekrar modu

Sıranızdaki öğeleri tekrarlanacak şekilde ayarlamak için repeatMode özelliği QueueData istenen değere RepeatMode göz önünde bulundurmanız gerekir.

Mevcut bir sıranın RepeatMode ayarını değiştirmek için repeatMode öğesinin özelliği QueueUpdateRequestData, Burada QUEUE_UPDATE MessageType.