ภาพรวม
Web Receiver SDK รองรับการจัดคิวด้วย
คิวเริ่มต้นที่ระบุโดย
SDK ที่ใช้
QueueData
และ
QueueManager
หรือใช้คิวที่กำหนดเองโดย
การใช้
cast.framework.QueueBase
และการใช้
QueueManager
Queueing API ช่วยให้แอปพลิเคชันผสานรวมกับ Cast ได้ดียิ่งขึ้นด้วยการให้ ฟีเจอร์ต่อไปนี้
- การสนับสนุนการใช้งานคิวในระบบคลาวด์ของ Google และพาร์ทเนอร์ไปยังภายนอก โหลดคิวที่จัดเก็บไว้และที่สร้างลงในอุปกรณ์แคสต์ได้โดยตรง
- กลไกที่อนุญาตให้ใส่เลขหน้าของรายการในคิวแทนการโหลด ทำทุกอย่างได้พร้อมกัน
- รองรับการรับส่งข้อความแบบใหม่ เช่น ไปที่รายการถัดไป รายการก่อนหน้า ดึงข้อมูลหน้าต่างของรายการ ตลอดจนการรับข้อมูลสื่อที่เกี่ยวข้องกับ ชุดของรายการคิว
-
QueueManager
เพื่อจัดการการแทรก การนำออก และการอัปเดตรายการในคิว
คิวเริ่มต้น
Web Receiver SDK ให้การสนับสนุนคิวแบบจำกัดที่พร้อมใช้งานในแบบฟอร์ม ของคิวเริ่มต้น
หากต้องการใช้คิวเริ่มต้น ให้ระบุ
queueData
ใน LoadRequestData
ของการโหลดจากฝั่งผู้ส่ง หรือส่งคำขอโหลดในเครื่อง
โดยใช้
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 | FetchItemsRequestData | QUEUE_CHANGE | Cast.framework.messages.QueueChange ตัวอย่างเช่น สำหรับเคสแบบแทรก ฟิลด์รายการใน JSON จะมีรายการของรายการที่ดึงข้อมูลใหม่ |
GET_ITEMS_INFO | GetItemsInfoRequestData ที่มี itemIds: อาร์เรย์<จำนวน> | 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
จะถูกเรียกคิวของระบบคลาวด์ ซึ่งเรียกข้อมูล
ข้อมูลที่เกี่ยวข้องที่จะส่งกลับไปยัง Web Receiver เพื่อจัดเก็บ
เมื่อใดก็ตามที่มีการดึงข้อมูลรายการมากขึ้น ระบบจะทริกเกอร์ข้อความประเภท 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