2012-05-09 18 views
6

Antecedentes:

Estoy desarrollando un programa de enseñanza basado en la web (usando Drupal 7, si eso importa) que requiere que los usuarios vean videos educativos secuencialmente. Quiero asegurarme de que vean cada video en su totalidad antes de acceder al siguiente. No estoy familiarizado con la API de YouTube, pero revisé la guía del desarrollador de PHP y no encontré ninguna información sobre cómo hacerlo.¿Cómo puedo garantizar que los usuarios vean videos completos?

Estoy abierto a cualquier forma razonable de lograr esto. Estaba pensando que comprobar si uno o dos códigos de tiempo aleatorios fueron afectados, así como si la película terminó de reproducirse, haría que sea razonablemente difícil saltear sin mirar el video.

Así que para lograr esto que necesito averiguar dos cosas:

  1. Cómo dejar que el servidor saber cuando el video que se está viendo ha afectado a los códigos de tiempo seleccionados, y
  2. cómo hacer que el servidor sabe cuándo se ha llegado al final del video

Si alguien pudiera señalarme en la dirección correcta, le agradecería enormemente.

+7

Esto es brutalmente horrible de hacer a sus usuarios, pero supongo que podría incluir el enlace al siguiente video como una de esas horribles anotaciones clicables al final de cada video? – meagar

+0

De hecho, escribí algo similar para archivos de audio. Debería buscar escribir un reproductor de video html javascript personalizado o un reproductor de video flash. –

+0

@meagar - Necesito asignar roles en función de si se ha visto el video, por lo que necesito que el servidor en sí mismo pueda ser informado sobre el evento. – beth

Respuesta

1

Con la API de YouTube se puede 'ping al servidor'

function onPlayerStateChange(evt) {  
     if (evt.data == 0){ 
     alert (player.getDuration()) 
    } 
} 

A continuación, puede obtener la duración del clip. El uso adicional de la API: el momento en que el usuario comienza y se detiene debe permitirle calcular el tiempo que dicho usuario pasó viendo el clip. Compara esto con la duración y si coincide (o está lo suficientemente cerca) desencadena la recompensa.

https://developers.google.com/youtube/js_api_reference

3

Todo lo que necesita hacer es hacer ping en su servidor cuando el reproductor de video haya llegado al final (o cerca del final) del archivo multimedia.

Puede escribir su propio reproductor de video (javascript o flash) o modificar uno de los existentes. Esta técnica no funcionará con la etiqueta HTML5 <video>.

+0

¿Cómo? Creo que puedes hacer esto con la API de Youtube –

+0

¡Gracias! ¿Tiene alguna información sobre cómo activar el ping? ¿Es eso algo que eché de menos en la guía API/Dev, o hay otra documentación sobre esto en alguna parte? Además, ¿esto es algo que solo se puede hacer al final del video, o los códigos de tiempo preseleccionados también pueden desencadenar un ping? – beth

+0

Si hace ping cerca/al final para verificar que el usuario haya visto el video completo, cualquiera saltará al final. ¿No? –

0

Ponga un enlace de autenticación al final del video; usa el enlace como una forma de verificar que hayan recolectado un token. Esto no resolverá el problema de los puntos de control, y el espectador podría presionar play y alejarse, pero eso podría pasar con los puntos de control.

Los videos de Youtube pueden tener enlaces insertados durante el curso utilizando la función de anotación en la interfaz del cargador. Combine un enlace codificado en una anotación durante los últimos quince segundos más o menos con la autenticación de usuario de su sitio para crear una credencial del lado del servidor.

+1

Veo que ser parte de una solución pero aún así no evita saltar hasta el final. Tampoco creo que tener el sitio web entendido por el video si ese enlace se ha mostrado sería significativamente más fácil o más efectivo que usar llamadas API. – beth

1

El Flash y JavaScript jugador referencias API incluyen funciones para conseguir Playback Status, en particular:

player.getCurrentTime():Number 
Returns the elapsed time in seconds since the video started playing. 

que estaba buscando a través de las referencias de la API equivocadas, pero finalmente lo encontramos. Hurra.

0

he estado trabajando en algo bastante similar, y he decidido ir con un reproductor personalizado utilizando la API de marco flotante https://developers.google.com/youtube/iframe_api_reference y retire el cromo defecto, lo que les impide saltar hacia adelante.

// api has been loaded 
function onYouTubeIframeAPIReady(){ 
    var player = new YT.Player(el, { 
     videoId: video_id, 
     width: 700, 
     playerVars: { 
      controls: 0, 
      modestbranding: 1, 
      rel: 0    
     }, 
     events: { 
      onStateChange: function(d){ 
       switch(d.data){ 
        case YT.PlayerState.ENDED: 
         // send notification of video ended 
       } 
      } 
     } 
    }); 
} 

    // async load of api 
var tag = document.createElement('script'); 
tag.src = "//www.youtube.com/iframe_api"; 
var firstScriptTag = document.getElementsByTagName('script')[0]; 
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 

La función se invoca cuando la API de youtube está completamente cargada y está configurando el reproductor de iframe. el es el objeto dom que desea reemplazar con el video, y video_id es la identificación del video que desea cargar. controls: 0 es la parte mágica que oculta el jugador Chrome. Luego, en la función onStateChange, puede enviar una solicitud ajax o cambiar su diseño o lo que sea que necesite hacer al final del video.

1

Si usa html5 y JavaScript, puede verificar de forma nativa para ver si se ha reproducido todo el video o ciertas partes.

La API de video de Html5 realiza un seguimiento de todos los intervalos de tiempo que se han reproducido. Eche un vistazo a los documentos para el atributo <video>.played y la clase TimeRanges.

Cuestiones relacionadas