Show Menu
TOPICS×

Enfileirar eventos quando a resposta das sessões for lenta

A API Media Collection é RESTful: ou seja, você faz uma solicitação HTTP e espera pela resposta. Isso é importante somente quando você faz uma Solicitação de sessões para obter uma ID de sessão no início da reprodução do vídeo. Isso é importante porque a ID da sessão é necessária para todas as chamadas de rastreamento subsequentes.
O reprodutor pode disparar eventos
antes da resposta das sessões ser retornada
(com o parâmetro da ID de sessão) do back-end. Se isso ocorrer, o aplicativo deve colocar em fila todos os eventos de rastreamento que chegam entre a Solicitação de sessões e a resposta. Quando a resposta das sessões for recebida, primeiro você deve processar todos os eventos na fila, e depois começar a processar os eventos
em tempo real
com as chamadas de eventos.
A Solicitação de eventos não retorna dados ao cliente além de um código de resposta HTTP.
Verifique o Reprodutor de referência na sua distribuição para obter uma maneira de processar eventos antes de receber uma ID de sessão. Por exemplo:
var eventData = {}; // JSON payload eventData.playerTime = getPlayerTime(); // Required eventData.eventType = "play"; // Required eventData.params = {}; // Optional for events VideoPlayer.prototype._collectEvent = function(eventData) { // If we don't have a Session ID yet, // queue the event and return... if (!sessionStarted) { console.log("[Player] Queueing event "); _pendingEvents.push(eventData); return; } // If we DO have a Session ID, process the // tracking event... apiClient.request({ "baseUrl": "{endpoint}", "path": "api/v1/{sid}/events", // events request "method": "POST", "data": eventData }).then((response) => { […] } } VideoPlayer.prototype.collectEvent = function (eventType, eventParams) { if (typeof eventParams === 'undefined') { eventParams = {}; } this._collectEvent({ eventType: eventType, // Required playerTime: getPlayerTime(), // Required params: eventParams // Optional }); }; VideoPlayer.prototype.getPlayerTime = function() { return { playhead: this.getPlayhead(), // playhead value in seconds ts: this.getCurrentTimestamp() // timestamp value in milliseconds }; };
Processar eventos enfileirados -
O reprodutor de referência processa eventos enfileirados da seguinte forma:
[…] this._processPendingEvents(); // Once you have a Session ID, […] // process any queued events VideoPlayer.prototype._processPendingEvents = function() { this._pendingEvents.forEach((eventData) => { this._collectEvent(eventData); }); this._pendingEvents = []; }
Continue a processar os eventos de rastreamento conforme ocorrerem.