Ringkasan
Web Receiver SDK mendukung antrean dengan
antrean default yang disediakan oleh
SDK menggunakan
QueueData
dan
QueueManager
atau menggunakan antrean kustom dengan
menerapkan
cast.framework.QueueBase
dan menggunakan
QueueManager
untuk mendapatkan info terbaru.
Queueing API memungkinkan aplikasi berintegrasi lebih baik dengan Cast dengan menyediakan fitur berikut:
- Dukungan implementasi antrean cloud Google dan partner secara eksternal antrean yang disimpan dan dibuat dapat langsung dimuat ke perangkat Cast.
- Mekanisme yang memungkinkan penomoran halaman item dalam antrean, bukan memuat semuanya sekaligus.
- Dukungan untuk pesan baru seperti membuka item berikutnya, item sebelumnya, mengambil jendela item, serta mendapatkan informasi media yang terkait dengan satu set item antrean.
- Tujuan
QueueManager
untuk mengelola penyisipan, penghapusan, dan pembaruan item antrean.
Antrean default
Web Receiver SDK menyediakan dukungan antrean terbatas yang siap pakai dalam bentuk dari antrean default.
Untuk menggunakan antrean default, berikan
queueData
di LoadRequestData
pemuatan sisi pengirim atau mengirim permintaan pemuatan lokal
menggunakan
PlayerManager#load
.
Lihat juga Memuat media.
Pada sisi penerima, antrean dapat dimodifikasi menggunakan
QueueManager
setelah media awal dimuat.
Antrean khusus
Jika antrean default tidak menyediakan fungsi pengantrean yang diperlukan untuk aplikasi Anda, kemampuan untuk membuat antrean khusus tersedia, memungkinkan lebih banyak kemampuan dan fleksibilitas.
Developer aplikasi dapat membuat antrean sisi Penerima Web dengan menerapkan
cast.framework.QueueBase
Berikut adalah contoh dasar dari
antrean sederhana di mana
initialize
panggilan diganti, kemudian daftar item antrean beserta deskripsi antrean
yang disediakan ke perangkat Cast.
Lihat juga Memuat media.
// 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;
}
};
Dalam contoh ini, daftar item dalam
initialize
disediakan dalam
QueueBase
panggilan konstruktor. Namun, untuk implementasi antrean cloud,
Logika penerima dapat mengambil item secara eksternal lalu mengembalikannya sebagai bagian dari
panggilan inisialisasi.
Untuk menunjukkan penggunaan API antrean yang lebih komprehensif, berikut adalah Demo
antrean yang mengimplementasikan sebagian besar
Class 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);
}
};
Pada contoh di atas, YourServer
adalah server antrean cloud Anda dan memiliki logika
cara mengambil item media tertentu.
Untuk menggunakan QueueBase
pengantrean yang diimplementasikan, kita akan
mengatur opsi antrean di
CastReceiverContext
:
const context = cast.framework.CastReceiverContext.getInstance();
context.start({queue: new DemoQueue()});
Mengelola antrean
Tujuan
QueueManager
memberi developer fleksibilitas dalam mengembangkan solusi antrean mereka dengan menyediakan
untuk mengakses daftar item antrean yang saat ini disimpan serta
item yang sedang diputar. Layanan ini juga menyediakan operasi
seperti penyisipan, penghapusan,
dan pembaruan item dalam antrean. Cuplikan berikut ini menunjukkan cara mengakses
contoh dari
QueueManager
:
const context = cast.framework.CastReceiverContext.getInstance();
const queueManager = context.getPlayerManager().getQueueManager();
Pengelolaan antrean default
Setelah antrean awal dimuat,
QueueManager
dapat digunakan untuk melakukan tindakan seperti mengambil item saat ini, mengambil
semua item dalam antrean, dan memperbarui item dalam antrean menggunakan
insertItems
,
removeItems
,
dan
updateItems
.
Pengelolaan antrean kustom
Berikut adalah contoh implementasi antrean khusus yang menggunakan penyisipan dan
metode penghapusan berdasarkan peristiwa tertentu. Contoh tersebut juga menunjukkan penggunaan
updateItems
tempat developer dapat memodifikasi item antrean dalam antrean yang ada, seperti
menghapus jeda iklan.
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;
}));
}
};
Pesan masuk dan keluar
Untuk mendukung sepenuhnya pengambilan antrean sisi penerima sebagai sumber kebenaran, metode pesan antrean tambahan berikut diperkenalkan dan ditangani oleh CAF SDK Penerima:
Pesan Masuk | Parameter | Pesan Respons Keluar | Kembali |
BERIKUTNYA | Tidak ada parameter yang diperlukan. | MEDIA_STATUS | Penerima akan (mengambil item melalui nextItems() jika perlu) dan mulai memutar item berikutnya. |
SEBELUMNYA | Tidak ada parameter yang diperlukan. | MEDIA_STATUS | Penerima Web akan (mengambil melalui prevItems() jika diperlukan) dan memulai memutar item sebelumnya. |
FETCH_ITEMS | FetchItemsRequestData | QUEUE_CHANGE | Cast.framework.messages.QueueChange. Sebagai contoh, untuk {i>insert case<i}, isian item di JSON akan berisi daftar item baru yang diambil. |
GET_ITEMS_INFO | GetItemsInfoRequestData yang berisi itemIds: Array<number> | ITEMS_INFO | cast.framework.messages.ItemsInfo dengan informasi item antrean. |
GET_QUEUE_IDS | Tidak ada parameter yang diperlukan. | QUEUE_IDS | cast.framework.messages.QueueIds. |
Untuk NEXT
/PREVIOUS
, jika representasi antrean yang ada di Penerima Web
tidak memiliki item lagi,
QueueBase.nextItems()
atau
QueueBase.prevItems()
akan dipanggil secara otomatis untuk menerima lebih banyak item.
Untuk FETCH_ITEM
, fungsi yang sesuai
fetchItems
dalam implementasi QueueBase
dipanggil untuk antrean cloud, yang mengambil
data yang relevan untuk dikembalikan ke {i>
Web Receiver <i}untuk disimpan.
Setiap kali lebih banyak item yang diambil, jenis pesan baru QUEUE_CHANGE
akan dipicu
dan dikirim kembali ke pengirim. Lihat berbagai jenis
perubahan antrean.
Untuk GET_ITEMS_INFO
,
QueueBase
implementasi tidak dipicu dan Penerima Web menampilkan informasi media
yang sudah diketahui oleh daftar ID.
Mengacak antrean
Untuk mengatur agar item dalam antrean diacak, setel
shuffle
bendera
QueueData
ke true
saat memuat item Anda ke dalam antrean.
Jika Anda menggunakan implementasi
QueueBase
, gunakan
tindakan
shuffle
untuk mengembalikan daftar item yang diacak.
Untuk mengacak antrean yang ada, gunakan
shuffle
tanda QUEUE_UPDATE
MessageType
,
bukan perintah QUEUE_SHUFFLE
. Lihat
QueueUpdateRequestData
untuk mengetahui informasi selengkapnya.
Mode pengulangan
Untuk menyetel agar item dalam antrean Anda diulang, setel atribut
repeatMode
properti
QueueData
ke jaringan yang diinginkan
RepeatMode
saat memuat item Anda ke antrean.
Untuk mengubah RepeatMode
antrean yang ada, gunakan
repeatMode
properti dari
QueueUpdateRequestData
,
yang menggunakan QUEUE_UPDATE
MessageType
.