2012-05-09 36 views
6

背景:

我正在开发一个基于网络的教学程序(使用Drupal 7,如果有的话),要求用户按顺序查看教育视频。我想确保他们在访问下一个视频之前全部查看每个视频。我对YouTube API非常不熟悉,但我梳理了PHP开发人员指南,并没有找到任何有关如何执行此操作的信息。如何确保用户观看整个视频?

我接受任何合理的方式来完成这一点。我在考虑检查一个或两个随机时间码是否被击中,以及电影是否完成了播放,这将使得在没有观看视频的情况下跳过它是相当困难的。

因此,要做到这一点,我需要弄清楚两件事情:

  1. 如何让服务器知道什么时候被观看的视频已达到选定的时间码,以及
  2. 如何让服务器知道什么时候视频已结束。

如果有人能指出我在正确的方向,我将不胜感激。

+7

这对你的用户来说是一件残酷的事情,但我想你可以在下面的视频中加入链接,将其视为每个视频结尾处可怕的可点击注释之一? – meagar

+0

我其实写了类似的音频文件。你应该看看写一个自定义的JavaScript HTML视频播放器或Flash视频播放器。 –

+0

@meagar - 我需要根据视频是否被观看来分配角色,所以我需要服务器本身能够被告知事件。 – beth

回答

1

使用YouTube API,您可以“ping服务器”

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

然后,您可以得到剪辑的持续时间。进一步使用api - 当用户启动和停止时应该允许你计算出用户观看剪辑的时间。 比较这个持续时间,如果它匹配(或足够接近)触发奖励。

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

3

您只需在视频播放器到达媒体文件末尾(或接近末尾)时ping服务器。

您可以编写自己的(javascript或flash)视频播放器或修改其中一个现有的视频播放器。该技术不适用于HTML5 <video>标签。

+0

如何?我想你可以用Youtube API做到这一点 –

+0

谢谢!你有关于如何触发ping的任何信息?这是我在API/Dev指南中错过的东西,还是有其他文档介绍它?此外,这是否只能在视频结束时完成,或者预先选择的时间码是否也会触发ping? – beth

+0

如果您在最后/最后ping命令以验证用户是否已观看完整视频,则任何人都会跳到最后。没有? –

0

在视频结尾处设置验证链接;使用链接作为验证他们收集令牌的方式。这不会解决检查点的问题,观众可以按下播放和走开,但这可能会发生在检查点。

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

+1

我可以看到,作为解决方案的一部分,但它仍然不会阻止跳到最后。我也不认为让网站从视频中发现该链接是否显示出来比使用API​​调用要容易得多或者更有效。 – beth

1

的Flash和JavaScript 球员 API引用包括功能,让Playback Status,特别是:

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

我一直在寻找通过错误的API的参考,但最终发现了它。好极了。

0

我一直工作在相当类似的事情,我已经决定使用iframe的API https://developers.google.com/youtube/iframe_api_reference与自定义播放器去删除默认的铬,这使他们向前跳过。

// 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是隐藏玩家镶边的魔法位。然后在onStateChange函数中,您可以发送ajax请求,或更改您的布局或视频结尾处需要做的任何操作。

1

如果您使用html5和JavaScript,您可以本机检查以查看是否播放了整个视频或某些部分。

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