Problème de tracking pour des vidéos hébergées sur Vimeo (composant Shika)

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Problème de tracking pour des vidéos hébergées sur Vimeo (composant Shika)

    Bonjour,

    Sur un site Joomla, j’utilise un composant d’elearning Shika pour présenter des vidéos hébergées sur Vimeo.
    Le composant permet d’indiquer quand on a fini de visionner une vidéo avec l’étiquette verte « Terminé » (voir fichier joint).
    J’ai regardé dans les même conditions 2 vidéos hébergées sur mon compte Vimeo. Toutes les 2 ne donnent pas le même résultat.
    À la fin de la première, je n’’obtiens pas l’étiquette Terminé (l’étiquette orange « Incomplet » s’affiche) alors que sur la deuxième, tout se passe bien : l’étiquette Terminé apparaît.
    (Quand une vidéo n’a jamais été vue, il y a l’étiquette grise « Non visualisé »).

    J’ai vérifié : les paramétrages sur le site sont les mêmes.
    J’ai vérifié sur mon compte Vimeo : les paramétrages me semblent les mêmes aussi.
    La vidéo 1.2 est la seule qui a le comportement attendu.
    Les 2 vidéos sont en mp4.
    Qu’est-ce qui peut expliquer cette différence d’après vous ?
    Une autre information : une vidéo hébergée sur Youtube ne pose pas de problème.

    Voici un extrait d’un fichier Controller pour les leçons (vidéo ou autre format) :

    public function htmlupdateData()
    {
    header('Content-type: application/json');
    $input = JFactory::getApplication()->input;

    $post = $input->post;

    $lesson_id = $post->get('lesson_id', '', 'INT');

    $trackObj = new stdClass;
    $trackObj->attempt = $post->get('attempt', '', 'INT');
    $trackObj->lesson_status = 'incomplete';
    $trackObj->score = 0;

    $trackObj->current_position = $post->get('current_position', '', 'INT');
    $trackObj->total_content = $post->get('total_content', '', 'INT');
    $trackObj->time_spent = $post->get('total_time', '', 'FLOAT');

    if ($trackObj->current_position == $trackObj->total_content)
    {
    $trackObj->lesson_status = 'completed';
    }

    $trackingid = $this->comtjlmstrackingHelper->update_lesson_track($lesson_id, $user_id, $trackObj);

    /*$trackingid = $comtjlmstrackingHelper->update_lesson_track(
    * $lesson_id,$attempt,$score,$lesson_status,$user_id ,$total_content,$current_position,$time_spent);*/

    $trackingid = json_encode($trackingid);

    echo $trackingid;
    jexit();
    }

    Voyez-vous quelque chose qui pourrait expliquer ce dysfonctionnement ?
    Merci à l'avance pour votre aide.
    Fichiers joints

  • #2
    Bonjour,

    Shika étant un composant payant tu as normalement droit à une assistance de la part de l'auteur , c'est plutot vers lui qu'il faudrait te tourner.
    Lorsque l'on se cogne la tête contre un pot et que cela sonne creux, ça n'est pas forcément le pot qui est vide.
    Confucius

    Commentaire


    • #3
      un bug au téléchargement de la vidéo sur dailymotion et ta vidéo est corrompue ?
      Elle peut etre lue jusquau moment du bug et plus ensuite, d'ou le incomplet.
      Vu qu il n arrives pas à la fin.

      Si une fonctionne, alors toutes doivent fonctionner.

      Commentaire


      • #4
        Bonjour,

        Merci pour vos réponses.

        @ lesoutier : Oui, bien sûr, ça paraît logique :-).
        Mais en réalité l’équipe de Shika est bonne en pré-vente, et puis ensuite, ce n’est plus la même chose.
        C’est vrai que j’ai payé pour ce composant, je m’attendais à un support digne de ce nom, mais il n’est pas au rendez-vous. Aussi, je suis obligée de me dépatouiller par moi-même, ou bien d’attendre des réponses qui mettent 3 semaines à tomber et qui ne sont pas forcément satisfaisantes…
        Voilà la raison de mon post.

        lefabdu51 : les vidéos sont hébergées par Vimeo, je ne pense pas qu’elles soient corrompues. L’équipe de Vimeo me dit que ça vient du site.

        Sur le site, le temps du visionnage de la vidéo est bien comptabilisé et est correct (voir copie jointe).
        Ce qui n’est pas pris en compte, c’est le fait qu’on a fini la vidéo OU BIEN cette fin de la vidéo n’entraîne pas la transformation de l’étiquette INCOMPLET en TERMINÉ.

        Je vois dans le fichier .js qui gère le tracking d’une leçon ceci (c'est un extrait du fichier) :

        function sendTrackingData(data) {
        player.getCurrentTime().then(function(current_posi tion) {
        if (lessonStartTime)
        {
        var lessonStoptime = new Date();
        var timeinseconds = Math.round((lessonStoptime - lessonStartTime) / 1000);
        current_position = Math.round(current_position);
        plugdataObject.current_position = current_position;
        plugdataObject.total_content = videoLength;
        plugdataObject.lesson_status = (current_position >= videoLength) ? "completed" : "incomplete";
        plugdataObject.time_spent = timeinseconds > 10 ? 10 : timeinseconds;
        lessonStartTime = resetTime ? 0 : new Date();
        //~ console.log(plugdataObject, timeinseconds, lessonStoptime, lessonStartTime, 'endedlessonStartTime')
        updateData(plugdataObject);
        }
        });
        }

        Dans la partie du plugin qui gère youtube, le code est écrit différemment, et ça me semble plus complet (le fichier fait appel à l’API Youtube) :

        var player;
        var tjyoutube_Finish = false;
        var tjyoutube_Pause = false;
        var tjyoutube_tracked = false;
        var seekDone = false;
        window.onYouTubeIframeAPIReady = function(){
        hideImage();
        jQuery('.video-tracking').each(function() {
        var iframe = jQuery(this);
        // get the player(s)
        player = new YT.Player(iframe[0], {
        events: {
        'onReady': function(e){
        hideImage();
        plugdataObject.current_position = player.getCurrentTime();
        plugdataObject.total_content = player.getDuration();
        plugdataObject.lesson_status = "incomplete";

        lessonStartTime = new Date();
        updateData(plugdataObject);

        console.log('YouTube player \'' +iframe.attr('id') +'\': ready');
        e.target._donecheck=true;
        },
        'onStateChange': function(e){
        onStateChange(iframe.attr('id'), e);
        }
        }
        });
        });

        tjInterval = setInterval(function () {
        if(!tjyoutube_Pause && !tjyoutube_Finish && !tjyoutube_tracked)
        {
        plugdataObject.current_position = player.getCurrentTime();
        plugdataObject.total_content = player.getDuration();
        plugdataObject.lesson_status = "incomplete";
        plugdataObject.time_spent = 1;
        lessonStartTime = new Date();
        updateData(plugdataObject);
        }
        }, 1000);

        tjvimeo_myInterval = setInterval(function () {

        lessonStoptime = new Date();
        var timespentonLesson = lessonStoptime - lessonStartTime;
        var timeinseconds = Math.round(timespentonLesson / 1000);
        lessonStartTime = new Date();

        if(!tjyoutube_Pause && !tjyoutube_Finish)
        {
        tjyoutube_tracked = true;
        plugdataObject.current_position = player.getCurrentTime();
        plugdataObject.total_content = player.getDuration();
        plugdataObject.lesson_status = "incomplete";
        plugdataObject.time_spent = 10;
        lessonStartTime = new Date();
        updateData(plugdataObject);
        }
        }, 10000);

        };

        /*execute the API calls for play, pause, and finish*/
        window.onStateChange = function(playerid, state) {
        if(state.data === 0) {
        onFinish(playerid);
        } else if(state.data === 1) {
        onPlay(playerid);
        } else if(state.data === 2) {
        onPause(playerid);
        }
        };

        /*for each of the above three states, make a custom event API call to Optimizely*/
        window.onPause = function(id) {
        console.log('YouTube player \'' +id +'\': pause');
        tjyoutube_Pause = true;
        lessonStoptime = new Date();
        var timespentonLesson = lessonStoptime - lessonStartTime;
        var timeinseconds = Math.round(timespentonLesson / 1000);

        plugdataObject.current_position = player.getCurrentTime();
        plugdataObject.total_content = player.getDuration();
        plugdataObject.lesson_status = "incomplete";
        plugdataObject.time_spent = timeinseconds;
        updateData(plugdataObject);
        };

        window.onFinish = function(id) {
        console.log('YouTube player \'' +id +'\': finish');
        tjyoutube_Finish = true;
        lessonStoptime = new Date();
        var timespentonLesson = lessonStoptime - lessonStartTime;

        var timeinseconds = Math.round(timespentonLesson / 1000);
        plugdataObject.current_position = player.getCurrentTime();
        plugdataObject.total_content = player.getDuration();
        plugdataObject.lesson_status = 'completed';
        plugdataObject.time_spent = timeinseconds;
        lessonStartTime = null;
        delete lessonStartTime;
        updateData(plugdataObject);
        };

        window.onPlay = function(id) {
        tjyoutube_Pause = false;
        tjyoutube_Finish = false;

        console.log('YouTube player \'' +id +'\': play');
        if(!seekDone)
        {
        player.seekTo(parseFloat(plugdataObject.seekTo));
        seekDone = true;
        }

        window['optimizely'] = window['optimizely'] || [];
        window.optimizely.push(["trackEvent", id +"Play"]);
        };
        Si ça aide, je peux donner accès au site en MP (je peux donner des codes d’accès au frontend qui est en accès privé).
        Fichiers joints
        Dernière édition par marie13600 à 21/04/2019, 18h47

        Commentaire

        Annonce

        Réduire
        Aucune annonce pour le moment.

        Partenaire de l'association

        Réduire

        Hébergeur Web PlanetHoster
        Travaille ...
        X