如何确保用户观看完整视频?

时间:2012-05-09 15:44:55

标签: php youtube youtube-api

背景:

我正在开发一个基于网络的教学计划(使用Drupal 7,如果这很重要),要求用户按顺序查看教育视频。我想确保他们在访问下一个视频之前完整地查看每个视频。我对YouTube API很不熟悉,但我仔细阅读了PHP开发人员指南,但没有找到任何有关如何执行此操作的信息。

我愿意采取任何合理的方式来实现这一目标。我在考虑检查一个或两个随机时间码是否被击中,以及电影是否完成播放,将使得在不观看视频的情况下跳过前进相当困难。

所以要做到这一点,我需要弄清楚两件事:

  1. 如何让服务器知道正在观看的视频何时达到所选时间码,
  2. 如何让服务器知道何时到达视频结尾。
  3. 如果有人能指出我正确的方向,我会非常感激。

6 个答案:

答案 0 :(得分:3)

当视频播放器到达媒体文件的末尾(或接近结尾)时,您需要做的就是ping服务器。

您可以编写自己的(javascript或flash)视频播放器,也可以修改现有的视频播放器。此技术不适用于HTML5 <video>标记。

答案 1 :(得分:1)

Flash和JavaScript 播放器 API参考包含获取Playback Status的功能,特别是:

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

我正在查看错误的API引用,但最终找到了它。耶。

答案 2 :(得分:1)

使用youtube api,您可以“ping服务器”

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

然后您可以获得剪辑的持续时间。进一步使用api - 当用户启动和停止时,应该允许您计算用户查看剪辑所花费的时间。 将此与持续时间进行比较,如果匹配(或足够接近),则触发奖励。

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

答案 3 :(得分:1)

我一直在做一些非常相似的事情,我决定使用iframe api https://developers.google.com/youtube/iframe_api_reference使用自定义播放器并删除默认的chrome,这样可以防止它们向前跳过。

// 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);

当youtube api完全加载并正在设置iframe播放器时,会调用该函数。 el是您要用视频替换的dom对象,而video_id是您要加载的视频的ID。 controls: 0是隐藏玩家chrome的神奇之处。然后在onStateChange函数中,您可以发送ajax请求,或更改您的布局或视频结尾处您需要做的任何事情。

答案 4 :(得分:1)

如果您使用html5和JavaScript,您可以原生检查整个视频或某些部分是否已播放。

Html5的视频API会跟踪已播放的所有时间范围。请查看<video>.played属性和TimeRanges类的文档。

答案 5 :(得分:0)

在视频的末尾张贴身份验证链接;使用链接作为验证他们是否收集了令牌的方法。这不会解决检查点问题,观众可以按下游戏并离开,但这可能发生在检查点上。

Youtube视频可以在课程中使用上传器界面中的注释功能插入链接。在过去十五秒左右的时间内,将注释中的编码链接与您站点的用户身份验证相结合,以创建服务器端凭据。