Descripción general
El SDK de receptor web admite colas con el
cola predeterminada que proporciona el
SDK que usa
QueueData
y
QueueManager
o usar una cola personalizada
implementando
cast.framework.QueueBase
y usar
QueueManager
para ver las actualizaciones.
La API de Queueing permite que las aplicaciones se integren mejor con Cast proporcionando las siguientes funciones:
- Asistencia para la implementación de colas de la nube de Google y del socio de manera externa de la fila almacenada y creada se podrán cargar directamente en los dispositivos de transmisión.
- Mecanismos que permiten paginar los elementos en la cola en lugar de cargarlos todo al mismo tiempo.
- Compatibilidad con mensajes nuevos, como ir al elemento siguiente, al elemento anterior recuperar una ventana de elementos y obtener información de los medios de comunicación un conjunto de elementos de la fila.
- El
QueueManager
para administrar la inserción, la eliminación y la actualización de elementos de la cola.
Cola predeterminada
El SDK del receptor web proporciona compatibilidad limitada con las colas lista para usar en el formulario. de una cola predeterminada.
Para usar la cola predeterminada, proporciona la
queueData
en los LoadRequestData
de tus cargas de envío o envía una solicitud de carga local
mediante
PlayerManager#load
También consulta Cómo cargar contenido multimedia.
Del lado del receptor, la cola se puede modificar
QueueManager
una vez que se hayan cargado los medios iniciales.
Fila personalizada
Si la cola predeterminada no proporciona la funcionalidad de cola necesaria para tu app, estará disponible la capacidad de crear una fila personalizada, lo que permite capacidades y flexibilidad.
Los desarrolladores de aplicaciones pueden crear una cola lateral de receptor web implementando
cast.framework.QueueBase
Este es un ejemplo básico de una cola simple en la que
initialize
se anula la llamada y, luego, se muestra una lista de elementos de la cola junto con sus descripciones
al dispositivo de transmisión.
También consulta Cómo cargar contenido multimedia.
// 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;
}
};
En este ejemplo, la lista de elementos del
initialize
se proporciona en la configuración del proveedor
QueueBase
llamada de constructor. Sin embargo, para una implementación de cola en la nube, la Web
La lógica del receptor puede recuperar los elementos externamente y luego mostrarlos como parte de
la llamada de inicialización.
Para demostrar un uso más integral de la API de colas, esta es una demostración
que implementa la mayoría de los
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);
}
};
En el ejemplo anterior, YourServer
es tu servidor de colas de la nube y tiene lógica
sobre cómo recuperar determinados elementos multimedia.
Para usar QueueBase
de cola implementada, se configuraba la opción de cola en la
CastReceiverContext
:
const context = cast.framework.CastReceiverContext.getInstance();
context.start({queue: new DemoQueue()});
Administra una cola
El
QueueManager
ofrece a los desarrolladores flexibilidad para desarrollar sus soluciones de filas, ya que les proporciona
para acceder a la lista almacenada actualmente de elementos en cola, así como a
el elemento que se está reproduciendo. También proporciona operaciones como inserción, eliminación,
y la actualización de los elementos en cola. En el siguiente fragmento, se muestra cómo acceder a un
instancia de
QueueManager
:
const context = cast.framework.CastReceiverContext.getInstance();
const queueManager = context.getPlayerManager().getQueueManager();
Administración predeterminada de colas
Una vez cargada la cola inicial,
QueueManager
se puede usar para realizar acciones como recuperar el elemento actual, recuperar
todos los elementos en la cola y los actualizamos con
insertItems
,
removeItems
,
y
updateItems
.
Administración de colas personalizada
Este es un ejemplo de una implementación de cola personalizada que usa las funciones de inserción y
métodos de eliminación basados en algún evento. El ejemplo también demuestra un uso de
updateItems
en la que los desarrolladores pueden modificar los elementos de la cola existente, como
quitar pausas publicitarias.
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;
}));
}
};
Mensajes entrantes y salientes
Para admitir completamente la recuperación de la cola del receptor como fuente de información, el CAF introduce y controla los siguientes mensajes adicionales en cola SDK del receptor:
Mensaje entrante | Parámetros | Mensaje de respuesta saliente | Volver |
SIGUIENTE | No se necesita ningún parámetro. | MEDIA_STATUS | El receptor (si es necesario, recuperará el archivo a través de nextItems()) y comenzará a jugar. el siguiente elemento. |
ANTERIOR | No se necesita ningún parámetro. | MEDIA_STATUS | El receptor web lo recuperará (a través de prevItems() si es necesario) e iniciará reproduciendo el elemento anterior. |
FETCH_ITEMS | FetchItemsRequestData | QUEUE_CHANGE | Un cast.framework.messages.QueueChange. Por ejemplo, para un caso de inserción, El campo “items” del JSON contendrá la lista de los artículos nuevos recuperados. |
GET_ITEMS_INFO | GetItemsInfoRequestData que contiene itemIds: Arreglo<número> | ITEMS_INFO | cast.framework.messages.ItemsInfo con información del elemento de la cola |
GET_QUEUE_IDS | No se necesita ningún parámetro. | QUEUE_IDS | cast.framework.messages.QueueIds. |
Para NEXT
/PREVIOUS
, si la representación de cola existente en el receptor web
no tiene más elementos,
QueueBase.nextItems()
o
QueueBase.prevItems()
se invoca automáticamente para recibir más elementos.
Para FETCH_ITEM
, la función correspondiente
fetchItems
en la implementación de QueueBase
se llama para las colas en la nube, que recupera
los datos relevantes que se devolverá al receptor web para su almacenamiento.
Cada vez que se recuperan más elementos, se activa un nuevo tipo de mensaje QUEUE_CHANGE
.
y se envían de vuelta al remitente. Conoce los diversos tipos de
cambios en la cola.
Para GET_ITEMS_INFO
,
De QueueBase
la implementación no se activa y el receptor web devuelve información de medios
conocidos en la lista de IDs.
Reproduciendo aleatoriamente una cola
Para que los elementos de la cola se mezclen, configura la
shuffle
bandera de
QueueData
a true
cuando cargues elementos en la cola.
Si usas una implementación de
QueueBase
, usar
el
shuffle
para mostrar una lista aleatoria de elementos.
Para redistribuir una cola existente, usa
shuffle
bandera de QUEUE_UPDATE
MessageType
,
en lugar de usar el comando QUEUE_SHUFFLE
. Consulta QueueUpdateRequestData
para obtener más información.
Modo Repetir
Para establecer que los elementos de la cola se repitan, establece
repeatMode
propiedad de
QueueData
al nivel deseado
RepeatMode
cuando cargues elementos en la cola.
Para cambiar el RepeatMode
de una cola existente, usa el
repeatMode
propiedad del
QueueUpdateRequestData
,
que utiliza la columna QUEUE_UPDATE
MessageType
.