7

背景:

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

我愿意接受任何合理的方式来实现这一点。我在想,检查是否命中了一个或两个随机时间码,以及电影是否播放完毕,如果不看视频就很难跳过。

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

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

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

4

6 回答 6

3

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

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

于 2012-05-09T15:50:52.700 回答
1

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

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

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

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

于 2012-05-22T11:15:44.393 回答
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是隐藏播放器镀铬的神奇位。然后在该onStateChange函数中,您可以发送一个 ajax 请求,或更改您的布局或在视频结束时您需要做的任何事情。

于 2012-09-13T19:01:49.967 回答
1

Flash 和 JavaScript Player API 参考包括用于获取Playback Status的函数,特别是:

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

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

于 2012-05-10T20:27:24.930 回答
1

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

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

于 2013-09-06T06:03:31.780 回答
0

在视频末尾放一个认证链接;使用该链接来验证他们是否收集了令牌。这不会解决检查点的问题,观众可以按下播放键走开,但检查点可能会发生这种情况。

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

于 2012-05-09T17:46:59.187 回答