Información general de seguimiento

Esta documentación abarca el seguimiento en la versión 2.x del SDK.

IMPORTANTE

Si va a implementar una versión 1.x del SDK, puede descargar las guías del desarrollador de 1.x aquí: Descargar SDK.

Eventos del reproductor

El seguimiento de la reproducción principal incluye el seguimiento de la carga, el inicio, la pausa y la finalización de los contenidos. Aunque no es obligatorio, el seguimiento del almacenamiento en búfer y la búsqueda también son componentes principales utilizados para rastrear la reproducción del contenido. En la API del reproductor de contenidos, identifique los eventos del reproductor correspondientes a las llamadas de seguimiento del Media SDK, y codifique los controladores de eventos para invocar las API de seguimiento y rellenar las variables necesarias y opcionales.

Carga del contenido

  • Crear el objeto de contenido.
  • Rellenar metadatos
  • Invocar trackSessionStart; Por ejemplo: trackSessionStart(mediaObject, contextData)

Inicio del contenido

  • La llamada trackPlay

Pausa/Reanudación

  • La llamada trackPause
  • Invocar trackPlay   cuando se reanude la reproducción

Finalización del contenido

  • La llamada trackComplete

Cancelación del contenido

  • La llamada trackSessionEnd

Inicio de arrastre de cabezal de reproducción

  • La llamada trackEvent(SeekStart)

Fin de arrastre de cabezal de reproducción

  • La llamada trackEvent(SeekComplete)

Inicio del almacenamiento en búfer

  • La llamada trackEvent(BufferStart);

Finalización del almacenamiento en búfer

  • La llamada trackEvent(BufferComplete);
SUGERENCIA

La posición de cabezal de reproducción se establece como parte del código de creación y configuración. Para obtener más información sobre getCurrentPlayheadTime, consulte Información general: Directrices generales de implementación.

Implementación

  1. Configuración inicial del seguimiento: identifique cuándo el usuario activa la reproducción (cuando hace clic en reproducción o reproducción automática) y cree una instancia de MediaObject con la información del contenido: nombre, ID y duración del contenido, así como el tipo de emisión.

    MediaObjectReferencia de:

    Nombre de variable Descripción Requerido
    name Nombre de contenido
    mediaid Identificador único de contenido
    length Longitud de contenido
    streamType Tipo de emisión
    mediaType Tipo de contenido (contenido de audio o vídeo)

    StreamTypeConstantes de:

    Nombre de la constante Descripción
    VOD Tipo de emisión de vídeo bajo demanda.
    LIVE Tipo de emisión de contenido en directo.
    LINEAR Tipo de emisión de contenido lineal.
    AOD Tipo de emisión de audio a la carta.
    AUDIOBOOK Tipo de emisión de audiolibro.
    PODCAST Tipo de emisión de podcast.

    MediaTypeConstantes de:

    Nombre de la constante Descripción
    Audio Tipo de contenido para emisiones de audio.
    Video Tipo de contenido para emisiones de vídeo.

    El formato general para crear MediaObject es MediaHeartbeat.createMediaObject(<MEDIA_NAME>, <MEDIA_ID>, <MEDIA_LENGTH>, <STREAM_TYPE>, <MEDIA_TYPE>);

  2. Adjuntar metadatos: Opcionalmente, se pueden adjuntar objetos de metadatos estándar o personalizados a la sesión de seguimiento mediante el uso de variables de datos de contexto.

    • Metadatos estándar -

      NOTA

      No es obligatorio adjuntar el objeto de metadatos estándar al objeto de contenidos.

      Cree una instancia de un objeto de metadatos estándar, rellene las variables deseadas y establezca el objeto de metadatos en el objeto de Media Heartbeat.

      Consulte la lista completa de metadatos aquí: Parámetros de audio y vídeo.

    • Metadatos personalizados: cree un objeto de variable para las variables personalizadas y rellénelo con los datos de este contenido.

  3. Seguimiento de la intención de inicio de reproducción: para comenzar el seguimiento de una sesión, invoque trackSessionStart en la instancia de Media Heartbeat.

    IMPORTANTE

    trackSessionStart rastrea la intención de reproducción, no el comienzo de la reproducción. Esta API se utiliza para cargar los datos y los metadatos, y para calcular la métrica de QoS (tiempo entre trackSessionStart y trackPlay).

    NOTA

    Si no utiliza metadatos personalizados, envíe un objeto vacío para el argumento data en trackSessionStart.

  4. Seguimiento del inicio real de la reproducción: identifique el evento del reproductor de contenidos para el comienzo de la reproducción (cuando el primer fotograma del contenido aparece en pantalla) e invoque trackPlay.

  5. Seguimiento de la finalización de la reproducción: identifique el evento del reproductor de contenidos para la finalización de la reproducción (cuando el usuario ha visto el contenido hasta el final) e invoque trackComplete.

  6. Seguimiento del final de la sesión: identifique el evento del reproductor de contenidos para la descarga/cierre de la reproducción (el usuario cierra el contenido, o este finalizó y se descargó) e invoque trackSessionEnd.

    IMPORTANTE

    trackSessionEnd marca el final de una sesión de seguimiento. Si la sesión se ha visto por completo correctamente, es decir, el usuario ha visto el contenido hasta el final, asegúrese de invocar trackComplete antes que trackSessionEnd. Las demás llamadas de la API track* se pasan por alto después de trackSessionEnd (salvo trackSessionStart en una nueva sesión de seguimiento).

  7. Seguimiento de todas las situaciones de pausa posibles: identifique el evento del reproductor de contenidos para la pausa e invoque trackPause.

    Situaciones de pausa: identifique todas las situaciones en las que puede pausarse el reproductor y compruebe que se ha invocado trackPause correctamente. Las siguientes situaciones requieren que la aplicación invoque trackPause():

    • El usuario hace una pausa explícita en la aplicación.
    • El reproductor se pone en estado de pausa.
    • (Aplicaciones móviles): El usuario pone la aplicación en segundo plano, pero desea que la aplicación mantenga abierta la sesión.
    • (Aplicaciones móviles): Se produce cualquier tipo de interrupción del sistema que provoca que una aplicación se ponga en segundo plano. Por ejemplo, si el usuario recibe una llamada o aparece una ventana emergente de otra aplicación, pero desea que la aplicación mantenga la sesión activa para que el usuario pueda reanudar el contenido desde donde se produjo la interrupción.
  8. Identifique el evento del reproductor para la reproducción o reanudación después de la pausa e invoque trackPlay.

    SUGERENCIA

    Puede ser el mismo origen de evento empleado en el paso 4. Asegúrese de que cada llamada de API trackPause() esté emparejada con una llamada posterior a la API trackPlay() cuando se reanude la reproducción.

  9. Escuche los eventos de llamada a otro punto de la reproducción del reproductor de contenidos. En la notificación del evento de inicio de la llamada a otro punto del contenido, utilice el evento SeekStart para realizar el seguimiento.

  10. En la notificación de finalización de llamada a otro punto del contenido del reproductor, realice un seguimiento del final de la llamada a otro punto del contenido utilizando el evento SeekComplete.

  11. Escuche los eventos de almacenamiento en búfer de reproducción procedentes del reproductor de contenidos y, cuando reciba la notificación del evento Inicio de almacenamiento en búfer, rastree el almacenamiento en búfer mediante el evento BufferStart.

  12. En la notificación de Finalización de almacenamiento en búfer procedente del reproductor de contenidos, rastree el final del almacenamiento en búfer con el evento BufferComplete.

Consulte ejemplos de cada paso en los siguientes temas específicos de la plataforma y observe los reproductores de muestra incluidos en los SDK.

Para ver un ejemplo sencillo de seguimiento de reproducción, consulte este uso del SDK de JavaScript 2.x en un reproductor HTML5:

/* Call on media start */
if (e.type == "play") {

    // Check for start of media
    if (!sessionStarted) {
        /* Set media info */     
        /* MediaHeartbeat.createMediaObject(<MEDIA_NAME>,  
                                            <MEDIA_ID>,  
                                            <MEDIA_LENGTH>,
                                            <MEDIA_STREAMTYPE>,
                                            <MEDIA_MEDIATYPE>);*/
        var mediaInfo = MediaHeartbeat.createMediaObject(
          document.getElementsByTagName('video')[0].getAttribute("name"),  
          document.getElementsByTagName('video')[0].getAttribute("id"),  
          video.duration,
          MediaHeartbeat.StreamType.VOD);

        /* Set custom context data */
        var customVideoMetadata = {
            isUserLoggedIn: "false",
            tvStation: "Sample TV station",
            programmer: "Sample programmer"
        };

        /* Set standard video metadata */     
        var standardVideoMetadata = {};
        standardVideoMetadata[MediaHeartbeat.VideoMetadataKeys.EPISODE] = "Sample Episode";
        standardVideoMetadata[MediaHeartbeat.VideoMetadataKeys.SHOW] = "Sample Show";
        mediaInfo.setValue(MediaHeartbeat.MediaObjectKey.StandardVideoMetadata,  
                           standardVideoMetadata);     

        // Start Session
        this.mediaHeartbeat.trackSessionStart(mediaInfo, customVideoMetadata);    

        // Track play
        this.mediaHeartbeat.trackPlay();  
        sessionStarted = true;     

    } else {
        // Track play for resuming playack    
        this.mediaHeartbeat.trackPlay();  
    }
};

/* Call on video complete */
if (e.type == "ended") {
    console.log("video ended");
    this.mediaHeartbeat.trackComplete();
    this.mediaHeartbeat.trackSessionEnd();
    sessionStarted = false;     
};

/* Call on pause */
if (e.type == "pause") {
    this.mediaHeartbeat.trackPause();
};

/* Call on scrub start */
if (e.type == "seeking") {
    this.mediaHeartbeat.trackEvent(MediaHeartbeat.Event.SeekStart);
};

/* Call on scrub stop */
if (e.type == "seeked") {
    this.mediaHeartbeat.trackEvent(MediaHeartbeat.Event.SeekComplete);
};

/* Call on buffer start */
if (e.type == “buffering”) {
    this.mediaHeartbeat.trackEvent(MediaHeartbeat.Event.BufferStart);
};

/* Call on buffer complete */
if (e.type == “buffered”) {
    this.mediaHeartbeat.trackEvent(MediaHeartbeat.Event.BufferComplete);
};

Validación

Para obtener información sobre la validación de la implementación, consulte Validación.

En esta página