সারিবদ্ধ

ওভারভিউ

ওয়েব রিসিভার SDK QueueData এবং QueueManager ব্যবহার করে বা cast.framework.QueueBase প্রয়োগ করে এবং আপডেটের জন্য QueueManager ব্যবহার করে একটি কাস্টম সারি ব্যবহার করে SDK দ্বারা প্রদত্ত ডিফল্ট সারির সাথে সারিবদ্ধ হওয়া সমর্থন করে৷

সারিবদ্ধ API নিম্নলিখিত বৈশিষ্ট্যগুলি প্রদান করে অ্যাপ্লিকেশনগুলিকে কাস্টের সাথে আরও ভালভাবে সংহত করার অনুমতি দেয়:

  • Google এবং অংশীদারের ক্লাউড সারি বাস্তবায়নের সমর্থন যাতে বাহ্যিকভাবে সঞ্চিত এবং তৈরি করা সারি সরাসরি কাস্ট ডিভাইসগুলিতে লোড করা যায়৷
  • মেকানিজম যা একবারে সবকিছু লোড করার পরিবর্তে সারিতে থাকা আইটেমগুলির পৃষ্ঠায় স্থানান্তর করতে দেয়৷
  • নতুন বার্তা পাঠানোর জন্য সমর্থন যেমন পরবর্তী আইটেম, পূর্ববর্তী আইটেমে যাওয়া, আইটেমগুলির একটি উইন্ডো আনা, সেইসাথে সারি আইটেমগুলির একটি সেট সম্পর্কিত মিডিয়া তথ্য পাওয়া।
  • সারি আইটেম সন্নিবেশ, অপসারণ, এবং আপডেট পরিচালনা করতে QueueManager

ডিফল্ট সারি

ওয়েব রিসিভার SDK ডিফল্ট সারির আকারে বক্সের বাইরে সীমিত সারি সমর্থন প্রদান করে।

ডিফল্ট সারি ব্যবহার করতে, আপনার প্রেরকের-সাইড লোডের LoadRequestDataqueueData প্রদান করুন অথবা PlayerManager#load ব্যবহার করে একটি স্থানীয় লোড অনুরোধ পাঠান। এছাড়াও লোডিং মিডিয়া দেখুন।

প্রারম্ভিক মিডিয়া লোড হয়ে গেলে রিসিভার-সাইডে, QueueManager ব্যবহার করে সারিটি পরিবর্তন করা যেতে পারে।

কাস্টম সারি

যদি ডিফল্ট সারি আপনার অ্যাপের জন্য প্রয়োজনীয় সারিবদ্ধ কার্যকারিতা প্রদান না করে, তবে একটি কাস্টম সারি তৈরি করার ক্ষমতা উপলব্ধ, আরও ক্ষমতা এবং নমনীয়তার জন্য অনুমতি দেয়।

অ্যাপ্লিকেশন বিকাশকারীরা 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 কনস্ট্রাক্টর কলে প্রদান করা হয়। যাইহোক, একটি ক্লাউড সারি বাস্তবায়নের জন্য, কাস্টম ওয়েব রিসিভার লজিক আইটেমগুলিকে বাহ্যিকভাবে আনতে পারে এবং তারপর শুরু কলের অংশ হিসাবে সেগুলি ফেরত দিতে পারে।

সারিবদ্ধ 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 আনয়ন আইটেম অনুরোধ ডেটা QUEUE_CHANGE একটি cast.framework.messages.QueueChange. একটি উদাহরণ হিসাবে, একটি সন্নিবেশের ক্ষেত্রে, JSON-এর আইটেম ক্ষেত্রটিতে আনা নতুন আইটেমগুলির তালিকা থাকবে৷
GET_ITEMS_INFO GetItemsInfoRequestData যাতে itemIds থাকে : Array<number> ITEMS_INFO cast.framework.messages.ItemsInfo সারি আইটেমের তথ্য সহ।
GET_QUEUE_IDS কোন পরামিতি প্রয়োজন. QUEUE_IDS cast.framework.messages.QueueIds.

NEXT / PREVIOUS এর জন্য, যদি ওয়েব রিসিভারে বিদ্যমান সারির প্রতিনিধিত্বে আরও আইটেম না থাকে, QueueBase.nextItems() বা QueueBase.prevItems() স্বয়ংক্রিয়ভাবে আরও আইটেম পাওয়ার জন্য আহ্বান করা হয়।

FETCH_ITEM এর জন্য, QueueBase বাস্তবায়নে সংশ্লিষ্ট ফাংশন fetchItems ক্লাউড সারিগুলির জন্য বলা হয়, যা সংরক্ষণ করার জন্য ওয়েব রিসিভারে ফেরত দেওয়া প্রাসঙ্গিক ডেটা পুনরুদ্ধার করে৷

যখনই আরও আইটেম আনা হয়, একটি নতুন বার্তা টাইপ QUEUE_CHANGE ট্রিগার হয় এবং প্রেরকের কাছে ফেরত পাঠানো হয়৷ বিভিন্ন ধরনের সারি পরিবর্তন দেখুন।

GET_ITEMS_INFO এর জন্য, QueueBase এর বাস্তবায়ন ট্রিগার করা হয় না এবং ওয়েব রিসিভার আইডির তালিকায় ইতিমধ্যে পরিচিত মিডিয়া তথ্য প্রদান করে।

একটি সারি এলোমেলো করা

আপনার সারিতে থাকা আইটেমগুলিকে শাফেল করার জন্য সেট করতে, সারিতে আপনার আইটেমগুলি লোড করার সময় QueueData এর shuffle পতাকাটিকে true হিসাবে সেট করুন৷

আপনি যদি QueueBase এর বাস্তবায়ন ব্যবহার করেন, তাহলে আইটেমগুলির একটি এলোমেলো তালিকা ফেরত দিতে shuffle পদ্ধতি ব্যবহার করুন।

একটি বিদ্যমান সারি শাফেল করতে, QUEUE_SHUFFLE কমান্ডের পরিবর্তে QUEUE_UPDATE MessageType এর shuffle পতাকা ব্যবহার করুন৷ আরও তথ্যের জন্য QueueUpdateRequestData দেখুন।

পুনরাবৃত্তি মোড

আপনার সারিতে থাকা আইটেমগুলিকে পুনরাবৃত্তি করার জন্য সেট করতে, সারিতে আপনার আইটেমগুলি লোড করার সময় QueueData এর repeatMode বৈশিষ্ট্যটি পছন্দসই RepeatMode এ সেট করুন৷

একটি বিদ্যমান সারির RepeatMode পরিবর্তন করতে, QueueUpdateRequestData এর repeatMode বৈশিষ্ট্যটি ব্যবহার করুন, যা QUEUE_UPDATE MessageType ব্যবহার করে।