我正在使用Youtube Javascript API来加载和播放网站嵌入视频。
当用户点击播放,暂停等时,会有表示这些状态的整数。例如:
YT.PlayerState.ENDED
YT.PlayerState.PLAYING
YT.PlayerState.PAUSED
YT.PlayerState.BUFFERING
YT.PlayerState.CUED
为快进发送了什么状态消息?
请注意,当我说快进时,我的意思是拖动视频定时器,使视频前进或返回到视频中的某个点。
你知道我什么时候可以检测到有人快进吗?
*的 编辑: *
经过一些检查后,我确定当你拖动时间条时,会发送消息YT.PlayerState.PAUSED。这是一个主要问题,因为当用户暂停视频时,我会将视频缩小回原始大小。 但是因为快进会发送相同的消息作为暂停,视频会在有人快进的时候收缩,这是不应该发生的。
我有什么想法可以区分暂停和快进吗?
答案 0 :(得分:5)
当用户“快进”或“曲目”时,似乎没有发送任何事件。所以我想出了自己的快速检测方法。
- 如果连续调度多于1个PAUSE事件:则用户为“跟踪”(快进)
- 如果调度1并且仅调度1个PAUSE事件:则用户已暂停。
<script>
var PAUSE_EVT_STACK = 0;
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PAUSED)
PAUSE_EVT_STACK++;
if (event.data == YT.PlayerState.PLAYING)
PAUSE_EVT_STACK = 0;
if (event.data == YT.PlayerState.PAUSED && PAUSE_EVT_STACK <= 1)
console.log("Pause pressed");
else if (event.data == YT.PlayerState.PAUSED && PAUSE_EVT_STACK > 1) {
console.log("Tracking occuring");
console.log("Hey! Dont fast forward during my ad you douche");
}
}
function loadYouTubeVideo(uid) {
setTimeout( function() {
var instPlayer = new YT.Player(uid, {
height: 480,
width: 853,
enablejsapi: 1,
suggestedQuality: 'highres',
videoId: uid,
events: {
'onStateChange': onPlayerStateChange
}
});
}, 500);
}
</script>
答案 1 :(得分:1)
我发现尝试使用Jake M的方法并不适合我。我不知道它是否因为API已经改变,但是遵循逻辑,并且使用我的控制台,逻辑总是会在达到快进触发之前暂停。
奇怪的是,过了一段时间,当我快进时,它只会暂停一次,而不是多次。
由于这是一种异步情况(等待玩家事件),我发现最好通过外部观察器方法接近它,需要花费时间考虑,并进行2次检查:第一次看看我们是否& #39;之前已经检查过,第二次查看玩家当前是否在玩。
如果你在第一次检查后0.8秒进行检查,它会给予玩家足够的时间来判断它是否应该暂停或播放,此时检查会再次运行以查看是否应该
var check = false;
var playing = false;
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PLAYING) {
slider.startStop(false);
playing = true;
} else if (event.data == YT.PlayerState.PAUSED) {
playing = false;
pauseCheck();
} else if (event.data == YT.PlayerState.ENDED) {
slider.goForward();
slider.startStop(true);
}
}
function pauseCheck() {
// First time check is a "wait".
if(!check) {
check = true;
setTimeout(pauseCheck, 800);
// Second time check to determine true status.
} else {
// This means we fast-forwarded or rewound.
if(playing) {
// DO FF / RW THINGS.
// This means we really did want to pause.
} else {
// DO PAUSE THINGS
}
check = 0;
}
}
答案 2 :(得分:0)
答案 3 :(得分:0)
我发现跟踪不再接收PAUSE事件,而是触发BUFFERING事件,然后触发PLAY事件。
播放YouTube视频直到结束时触发的事件顺序(无暂停或跟踪):
BUFFERING - &gt;播放 - &gt;截至
如果用户要至少跟踪一次,则触发的事件将类似于:
BUFFERING - &gt;播放[他们跟踪] - &gt;缓冲 - &gt;播放 - &gt;截至
这里显而易见的警告是,当视频由于连接或处理问题而实际缓冲时,这是误报。我已经通过一些节流测试了这一点,但实际上我的环境中没有任何误报。