Ich unterrichte einen Online-Kurs und muss sicherstellen, dass meine Schüler tatsächlich ein bestimmtes Video sehen. Jetzt verstehe ich, dass alles besiegt werden kann, aber was ich suche, ist die 80/20-Regel, nach der ich ein paar Änderungen vornehmen kann, um den Weg der Verantwortlichkeit für meine Schüler zu beginnen.

Frage 1: Gibt es eine Möglichkeit über JavaScript, ein Ereignis auszulösen, wenn das aktuelle Fenster den Fokus verliert?

F2: Gibt es eine Möglichkeit, ein Ereignis auszulösen, wenn das Video abgespielt ist?

F3: Gibt es eine Möglichkeit, um sicherzustellen, dass das Video vollständig abgespielt wurde, anstatt dass der Schüler auf das Ende der Zeitleiste klickt?

Ich fühle mich gezwungen (erneut) zu sagen, bitte beantworte diese Fragen nicht mit etwas wie "Du verschwendest deine Zeit, die Schüler werden alles besiegen, was du tust".

11
Phillip Senn 5 Okt. 2012 im 23:54

6 Antworten

Beste Antwort

Was ist der Player, den Sie verwenden. Wenn Sie Open Source-Videoplayer wie JWPlayer oder Flow Player verwenden. Sie können Ereignisse verfolgen. Ich persönlich bevorzuge Flow Player und Sie können Google Analytics verwenden, um die Dauer und jede andere Aufgabe zu verfolgen, die Sie auf der Seite haben möchten.

Da Sie einen Authentifizierungsmechanismus auf der Seite haben, können Sie den Benutzernamen des Schülers (oder eine Kennung) abrufen. Wenn Sie Ereignisse als Label an Google Analytic senden, können Sie alles verfolgen, was der Schüler tut, einschließlich der Links, auf die er geklickt hat, der Dauer des Spiels, des Spiels ...

Beispiel Setup

        <script type="text/javascript">

      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', '#########']);
      _gaq.push(['_trackPageview']);
      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);

      })();

    </script>

Verfolgen

_gaq.push(['_trackEvent', 'Videos', 'Play', 'Gone With the Wind']);

Dies ist Teil des Live-Codes, den ich von http://vsp.ideawide.com/ übernommen habe, in dem ich einige dieser Ereignisse verfolge.

var events = {
    clip : {
        onStart: function(clip) {
            _gaq.push(['_trackEvent',"Videos", "Play", defaults.source]);
        },


        onPause: function(clip) {
            _gaq.push(['_trackEvent',"Videos", "Pause", defaults.source, parseInt(this.getTime())]);
        },

        onResume: function(clip) {
            _gaq.push(['_trackEvent',"Videos", "Resume", defaults.source, parseInt(this.getTime())]);
        },

        onSeek: function(clip) {
            _gaq.push(['_trackEvent',"Videos", "Seek", defaults.source ]);
        },

        onStop: function(clip) {
            _gaq.push(['_trackEvent',"Videos", "Stop", defaults.source, parseInt(this.getTime())]);
        },
         onFinish: function(clip) {
            _gaq.push(['_trackEvent',"Videos", "Finish", defaults.source]);
        }
    },
    onFullscreen: function() {
        _gaq.push(['_trackEvent',"Videos", "Full Screen", defaults.source]);
    },
    onError: function(errorCode , errorMessage) {
        _gaq.push(['_trackEvent',"Videos", "Error", defaults.source, errorCode ]);
    }
}

Als letzte Anmerkung zur ordnungsgemäßen Einrichtung der Analyse mit einem geeigneten Player können Sie Ihre 80/20 auf 99/1 verbessern.

9
udnisap 22 Feb. 2013 im 05:42

Probleme mit dem anfänglichen Ansatz

Ich unterrichte einen Online-Kurs und muss sicherstellen, dass meine Schüler tatsächlich ein bestimmtes Video sehen.

Hier ist das Problem. Ihre Anforderung ist, dass die Schüler tatsächlich ein Video ansehen , aber das Beste, was wir programmgesteuert tun können, ist sicherzustellen, dass ein Video von einem Server gesendet und von einem Client empfangen wurde. Abgesehen von extremen Maßnahmen wie Gesichtserkennung und Audio-Loopback können Sie nicht sicher sein, ob jemand es sieht oder ob der beabsichtigte Betrachter es sieht oder ob jemand zuhört. Der Schüler kann einfach das Video starten und weggehen.

Das mag nach einer technischen Frage klingen, ist aber wirklich eine wichtige Unterscheidung. Was Sie haben, ist das Äquivalent eines Systems, das sicherstellen soll, dass jemand ein Buch liest. Das System kann jedoch nur prüfen, ob das Buch zu einem bestimmten Zeitpunkt geöffnet oder geschlossen ist.

Sicherheit

Jetzt verstehe ich, dass alles besiegt werden kann, aber was ich suche, ist die 80/20-Regel, nach der ich ein paar Änderungen vornehmen kann, um den Weg der Verantwortlichkeit für meine Schüler zu beginnen.

Alles kann mit genügend Aufwand besiegt werden, aber die vorgeschlagene Lösung kann fast mühelos besiegt werden. Wenn es für einen durchschnittlichen Benutzer einfacher ist, das System zu betrügen, als es legitim zu verwenden, lohnt es sich wahrscheinlich nicht, es zu implementieren.

Ein alternativer Ansatz

Anstatt sich darauf zu konzentrieren, ob der Browser das Video ausführt, sollten Sie den Fokus wieder auf den Benutzer verlagern. Wenn Sie während der Anzeige des Videos eine spezifische Benutzerinteraktion benötigen, können Sie ein viel höheres Maß an Vertrauen in das System haben.

Der einfachste Weg, dies zu tun, besteht darin, das Video in mehrere kleine Teile aufzuteilen und nach jeder Wiedergabe einen Link zum nächsten Video anzuzeigen.

Sie können dann ein kleines Skript schreiben, um die Zeit zwischen den Anforderungen für diese Reihe von Videos (pro Benutzer) anzuzeigen und alle Anforderungen zu kennzeichnen, die angesichts der Länge der Segmente zu weit voneinander entfernt oder zu nahe beieinander liegen (oder mit dem Durchschnitt verglichen werden, wenn dies der Fall ist) Daten sind aus irgendeinem Grund nicht verfügbar). Sie können diese Daten direkt aus den Serverprotokollen abrufen, wenn Sie Zugriff darauf haben, oder Sie können sie selbst aufzeichnen.

Verständnis

Wenn Sie den zusätzlichen Schritt gehen und das Verständnis (oder die Beibehaltung) testen möchten, ist dieser alternative Ansatz einfach zu erweitern. Anstatt einen Link zum nächsten Video zu haben, haben Sie mehrere Links in Form von Antworten auf eine Frage. Wenn Sie sich Sorgen machen, dass Schüler die Antworten teilen, sagen Sie ihnen nicht, ob sie es richtig verstanden haben, sondern senden Sie sie einfach zum nächsten Video. Sie können sich diese Daten später ansehen und entscheiden, ob Sie sie verwenden möchten und wie Sie sie krümmen möchten.

3
Dagg Nabbit 5 Okt. 2012 im 22:27
  1. Behandeln Sie window.onblur wie erwähnt
  2. Wenn das Video fertig ist, wird das Ereignis "beendet" ausgelöst
  3. Sie können mediaElement.played.end () aufrufen, um die Anzahl der im Browser abgespielten Sekunden abzurufen.

Siehe hier und here

1
enhzflep 5 Okt. 2012 im 20:14

Führen Sie möglicherweise ein setTimeout für die Länge des Videos durch und lösen Sie ein Ereignis aus, sobald die Länge des Videos abgelaufen ist.

Versuchen Sie dies, um festzustellen, wann das Fenster den Fokus verliert:

window.onblur = function() {
   //do something here...
};

Wenn Sie sich wirklich Sorgen über die Genauigkeit von setTimeout machen, versuchen Sie Folgendes:

var start = (new Date).getTime();

function CheckTime() {

   var diff = (new Date).getTime() - start;
   if (diff >= videoLength) {
       FireVideoDoneEvent();
   }
   else {
       setTimeout(function() {
           CheckTime();
       }, 1000);
   }

}
1
Mikey G 5 Okt. 2012 im 20:05

Dies setzt voraus, dass HTML5-Video das Video-Tag verwendet.

player = document.getElementById("player");

//Get current percent complete. You may want to check for 95%+ rather than 100%.
setInterval(function(){
    percentComplete = player.currentTime/player.duration;
}, 300); 

window.onblur = function() {
//this will be called when the window loses focus
};

Sie können das Video-Tag ohne das Steuerelementattribut aufrufen, um die Suchleiste zu deaktivieren. Sie können dann die Wiedergabe per Klick wie folgt auslösen:

player.play();
3
Dcullen 5 Okt. 2012 im 20:04

Q1: Suchen Sie nach Ereignis-Unschärfe

F2: Das würde von Ihrem Spieler abhängen. Es gibt Flash-Videoplayer, die Sie mit ExternalInterface.call ("myFunctionName ()") als Javascript-Funktion aufrufen können. von AS3

F3: Ich würde versuchen, einen Flash-Player zu finden, der all diese Optionen bietet, aber meine Lösung ist eher as3 für Javascript.

Ich hoffe das kann dir helfen!

1
PbxMan 5 Okt. 2012 im 20:02