我正在开发一个基于网络的教学计划(使用Drupal 7,如果这很重要),要求用户按顺序查看教育视频。我想确保他们在访问下一个视频之前完整地查看每个视频。我对YouTube API很不熟悉,但我仔细阅读了PHP开发人员指南,但没有找到任何有关如何执行此操作的信息。
我愿意采取任何合理的方式来实现这一目标。我在考虑检查一个或两个随机时间码是否被击中,以及电影是否完成播放,将使得在不观看视频的情况下跳过前进相当困难。
如果有人能指出我正确的方向,我会非常感激。
答案 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 - 当用户启动和停止时,应该允许您计算用户查看剪辑所花费的时间。 将此与持续时间进行比较,如果匹配(或足够接近),则触发奖励。
答案 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视频可以在课程中使用上传器界面中的注释功能插入链接。在过去十五秒左右的时间内,将注释中的编码链接与您站点的用户身份验证相结合,以创建服务器端凭据。