Genel bakış
Web Alıcısı SDK'sı, QueueData
ve QueueManager
özelliklerini kullanarak SDK tarafından sağlanan varsayılan sırada veya güncellemeler için cast.framework.QueueBase
uygulayıp QueueManager
kullanarak özel sıra kullanarak sıraya almayı destekler.
Queueing API, uygulamaların aşağıdaki özellikleri sağlayarak Cast'le daha iyi entegre olmasına olanak tanır:
- Harici olarak depolanan ve oluşturulan sıranın Yayın cihazlarına doğrudan yüklenebilmesi için Google'ın ve iş ortağının bulut sırası uygulaması desteği.
- Her şeyi tek seferde yüklemek yerine sırada öğelerin ayrılmasına olanak tanıyan mekanizmalar.
- Sonraki öğeye gitme, önceki öğeye gitme, öğe penceresi getirme ve bir sıra öğe öğesiyle ilgili medya bilgileri alma gibi yeni mesajlaşma için destek.
- Sıraya ekleme, kaldırma ve sıra öğelerini güncelleme işlemlerini yönetmek için
QueueManager
.
Varsayılan sıra
Web Alıcısı SDK'sı, varsayılan bir sıra şeklinde verilen sıradan sınırlı destek sunar.
Varsayılan sırayı kullanmak için gönderen tarafındaki yüklemelerinizin LoadRequestData
tanesinde queueData
değerini sağlayın veya PlayerManager#load
özelliğini kullanarak yerel bir yükleme isteği gönderin.
Medya yükleme başlıklı makaleyi de inceleyin.
Alıcı tarafında, ilk medya yüklendikten sonra sıra QueueManager
kullanılarak değiştirilebilir.
Özel sıra
Varsayılan sıra, uygulamanız için gereken sıra oluşturma işlevini sağlamıyorsa daha fazla özellik ve esneklik sağlayan özel bir sıra oluşturabilirsiniz.
Uygulama geliştiriciler, cast.framework.QueueBase
yöntemini uygulayarak Web Alıcısı taraf sırası oluşturabilir.
initialize
çağrısının geçersiz kılındığı ve ardından sıra sıra açıklamaların yanı sıra Yayın cihazına yayın sırası listesi sağlanan basit bir sıra örneğini burada bulabilirsiniz.
Medya yükleme başlıklı makaleyi de inceleyin.
// 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ındaki öğelerin listesi sağlayıcının QueueBase
oluşturucu çağrısında sağlanmaktadır. Bununla birlikte, bir bulut sırası uygulaması için özel Web Alıcısı mantığı, öğeleri harici olarak getirebilir ve ardından ilk kullanıma hazırlama çağrısı kapsamında döndürebilir.
Sıraya API'nin daha kapsamlı bir kullanımını göstermek için QueueBase
sınıfının büyük bir kısmını uygulayan bir Demo sırası derledik.
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ğiyle ilgili bir mantık barındırır.
QueueBase
özelliğini uygulamak için CastReceiverContext
'te sıraya ekleme seçeneğini belirleyin:
const context = cast.framework.CastReceiverContext.getInstance();
context.start({queue: new DemoQueue()});
Sıra yönetme
QueueManager
, sıraya alınmış olan öğelerin listesine ve o anda oynayan öğeye erişme yöntemleri sağlayarak geliştiricilere sıra sıralarını geliştirme esnekliği sunar. Sıraya alınan öğeleri ekleme, kaldırma ve güncelleme gibi işlemler de sağlar. Aşağıdaki snippet'te QueueManager
örneğine nasıl erişileceği gösterilmektedir:
const context = cast.framework.CastReceiverContext.getInstance();
const queueManager = context.getPlayerManager().getQueueManager();
Varsayılan sıra yönetimi
İlk sıra yüklendiğinde, mevcut öğeyi alma, sıradaki tüm öğeleri alma ve sıradaki öğeleri insertItems
, removeItems
ve updateItems
kullanarak güncelleme gibi işlemler için QueueManager
kullanılabilir.
Özel sıra yönetimi
Bir etkinliğe dayalı ekleme ve kaldırma yöntemlerini kullanan bir özel sıra uygulaması örneğini burada bulabilirsiniz. Örnekte, geliştiricilerin mevcut sıradaki sıra öğelerini (ör. reklam aralarını kaldırma) değiştirebildikleri updateItems
kullanımı da gösterilmektedir.
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
Bilgi kaynağı olarak alıcı tarafı sıra getirmenin tam olarak desteklenmesi için aşağıdaki ek sıra iletileri, CAF Alıcı SDK'sı tarafından kullanıma sunulur ve işlenir:
Gelen Mesaj | Parametreler | Giden Yanıt Mesajı | İade |
İLERİ | Herhangi bir parametre gerekmez. | MEDYA_DURUMU | Alıcı (gerekirse sonrakiItems() öğesini getirir) ve sonraki öğeyi oynatmaya başlar. |
ÖNCEKİ | Herhangi bir parametre gerekmez. | MEDYA_DURUMU | Web Alıcısı (gerekirse prevItems() işlevi üzerinden getirilir) ve önceki öğeyi oynatmaya başlar. |
FETCH_ITEMS | FetchItemsRequestVerileri | QUEUE_CHANGE | cast.framework.messages.QueueChange. Örneğin, ekleme durumu için JSON'daki items alanı, getirilen yeni öğelerin listesini içerir. |
GET_ITEMS_INFO | itemIds içeren GetItemsInfoRequestData: Dizi<number> | ITEMS_INFO | Sıra öğe bilgilerine sahip 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östergesinde daha fazla öğe yoksa daha fazla öğe almak için QueueBase.nextItems()
veya QueueBase.prevItems()
otomatik olarak çağrılır.
FETCH_ITEM
için QueueBase
uygulamasındaki ilgili fetchItems
işlevi, depolanmak üzere Web Alıcısına döndürülecek alakalı verileri alan bulut sıraları için çağrılır.
Daha fazla öğe getirildiğinde yeni bir mesaj türü (QUEUE_CHANGE
) tetiklenir ve gönderene geri gönderilir. Çeşitli sıra değişikliği türlerine bakın.
GET_ITEMS_INFO
için QueueBase
'nin uygulanması tetiklenmez ve Web Alıcısı, kimlikler listesiyle bilinen medya bilgilerini döndürür.
Sıra karıştırma
Sıranızdaki öğeleri karıştırılacak şekilde ayarlamak için
öğelerinizi sıraya yüklerken
QueueData
shuffle
işaretini true
olarak ayarlayın.
QueueBase
yöntemini kullanıyorsanız öğelerin karıştırılmış listesini geri döndürmek için shuffle
yöntemini kullanın.
Mevcut bir sırayı karıştırmak için QUEUE_SHUFFLE
komutu yerine QUEUE_UPDATE
MessageType
shuffle
işaretini kullanın. Daha fazla bilgi için QueueUpdateRequestData
konusuna bakın.
Tekrar modu
Sıranızdaki öğeleri tekrarlanacak şekilde ayarlamak için öğelerinizi sıraya koyarken QueueData
özelliğinin repeatMode
özelliğini istediğiniz RepeatMode
değerine ayarlayın.
Mevcut bir sıranın RepeatMode
değerini değiştirmek için QUEUE_UPDATE
MessageType
özelliğini kullanan QueueUpdateRequestData
repeatMode
özelliğini kullanın.