我正在使用 AngularJS 的 Angular YouTube 嵌入模块(可在此处找到https://github.com/brandly/angular-youtube-embed)。但是这个解决方案对于纯 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));
};