Javascript 计算使用API观看的youtube视频的百分比

Javascript 计算使用API观看的youtube视频的百分比,javascript,youtube,youtube-api,Javascript,Youtube,Youtube Api,我正在制作一个视频和在线练习的在线课程,希望人们能够登录并跟踪他们的进度 有没有办法让我衡量一下有人观看过的youtube嵌入的百分比,如果他们观看过,比如说超过80%,我会将其标记为完整的 到目前为止,我最好的办法是在玩家的状态变为播放时使用getCurrentTime(),然后每隔五秒钟左右再使用一次,将差值加到某种总数中。然而,如果有人在第一分钟看了五遍,他们最终会看到一段被勾掉的视频,即使他们没有看完整的视频 是否有一种更优雅的解决方案来计算观看视频的百分比,而不是上述计算观看视频所花费

我正在制作一个视频和在线练习的在线课程,希望人们能够登录并跟踪他们的进度

有没有办法让我衡量一下有人观看过的youtube嵌入的百分比,如果他们观看过,比如说超过80%,我会将其标记为完整的

到目前为止,我最好的办法是在玩家的状态变为播放时使用getCurrentTime(),然后每隔五秒钟左右再使用一次,将差值加到某种总数中。然而,如果有人在第一分钟看了五遍,他们最终会看到一段被勾掉的视频,即使他们没有看完整的视频


是否有一种更优雅的解决方案来计算观看视频的百分比,而不是上述计算观看视频所花费时间的方法

像这样的东西怎么样:

        var i; //Global variable so that you can reset interval easily

        function onYouTubePlayerReady(playerid) 
        {
            ytp = document.getElementById("ytvideo"); //get player on page
            ytp.d = ytp.getDuration(); //get video duration
            i = setInterval(checkPlayer, 5000); //check status

        }

        function onplayerReset() 
        {
            clearInterval(i);
        }

        function checkPlayer()
        {
            var p = ytp.getCurrentTime(); //get video position
            var d = ytp.d; //get video duration
            var c = p/d*100; //calculate % complete
            c = Math.round(c); //round to a whole number
            var t = document.getElementById('videotitle').innerHTML;

            if(ytp.isReset) { c = 0; }
            ytp.c=c;

            if(!ytp.completed) 
            {   
               if(c>=80) { _gaq.push(['_trackEvent', 'Video Status', t,'Complete']); ytp.completed=true; } // or do something else
            }

         }

我正在使用AngularJS的AngularYouTube嵌入模块(在这里找到)。但对于纯Javascript/YouTube API调用,此解决方案也同样适用。我只是不想重新写我的解决方案

基本概念是将整个视频长度切成任意大小的片段。在这个示例解决方案中,我将视频分割为一系列10秒的片段。计时器每5秒检查一次播放机中与其片相对应的当前时间。重要的是,测试的频率要高于每个切片所代表的长度

getPctCompleted()方法将为您提供视频总长度的完成比率,而不管用户是否跳到视频的末尾

但是,高级用户将始终能够欺骗这一点。所以这真的不是“证明”有人看了什么。它是不可信的输入,就像来自用户的任何其他输入一样

       $scope.analyzer = {};
       $scope.timeElapsed = 0;
       $scope.videoLength = 0;

       $scope.$on('youtube.player.playing', function($event, player) {
           $scope.videoLength = player.getDuration();
           $scope.player = player;
           //start polling
           setInterval(function() {
                $scope.timeElapsed = $scope.player.getCurrentTime();
                $scope.analyzer[parseInt($scope.timeElapsed / 10)] = true;
                $scope.$apply();
           }, 5000);
       });

       $scope.getPctCompleted = function() {
           return Object.keys($scope.analyzer).length / (parseInt($scope.videoLength / 10));
       };

我一定要试试这个。但是,如果我直接跳到90%的分数,这不会标志着视频完整吗?是的。如果这也是一项要求,您可以设置控制参数,如中所示。我认为,有人打开视频离开房间的可能性更大,而不是第一分钟看五次。这是一个非常有趣的问题-我正在尝试为我自己的在线课程做同样的事情-你得到下面描述的答案了吗?嗨,山姆,所以下面的解决方案是有效的。某种程度上。主功能仅计算当前播放视频的百分比。因此,如果你跳到视频中90%的点,它将被标记为完成。我想一定有更好的办法。