【问题标题】:Detect if Vimeo video will autoplay检测 Vimeo 视频是否会自动播放
【发布时间】:2016-12-03 03:42:20
【问题描述】:
我正在使用 Vimeo 及其自动播放功能。问题是自动播放在移动设备上不起作用,我有一些计时器假设视频确实自动播放。我知道视频播放时会触发一个事件,但我似乎可以找到任何关于如何判断自动播放是否正常工作的信息。有没有办法判断自动播放是否以编程方式工作。我想做的是这样的..
自动播放是否可以在此设备上运行或自动播放是否启动?
如果没有忘记计时器并立即显示所有内容。
【问题讨论】:
标签:
vimeo
vimeo-api
vimeo-player
【解决方案1】:
正如您所说,Vimeo Player 的自动播放功能在移动设备上不起作用(这在this article 中得到了通知),而且这些设备上的 JavaScript API 似乎也被破坏了。您仍然可以使用Vimeo's Player JavaScript API 在非移动设备上操作视频并推断移动设备是否支持 JavaScript API。
确定自动播放是否适用于非移动设备:
要检查这些设备上是否已开始自动播放,vimeo 播放器是否正常工作,您可以在页面就绪时将play 事件与player.getPaused() 结合使用。
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://player.vimeo.com/api/player.js"></script>
</head>
<body>
<iframe id="player" src="https://player.vimeo.com/video/78716964?autoplay=1&title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
<script>
var player = new Vimeo.Player($('#player'));
var state = { autoplaying : false };
player.on('play', () => {
state.autoplaying = true;
player.off('play');
});
player.getPaused().then((paused) => {
var playing = !paused;
state.autoplaying = state.autoplaying || playing;
});
</script>
</body>
</html>
确定自动播放是否适用于移动设备:
由于 JavaScript API 已损坏,目前还没有明确的方法可以在移动设备上确定这一点。您可以尝试通过调用任何 API 方法来检测 JavaScript API 是否启用并等待承诺结果。如果短时间内没有结果,那么您可以说 API 不工作。所以,假设自动播放不起作用。
var player = new Vimeo.Player($('#player'));
var state = {
autoplaying : false,
apiEnabled : null
};
player.on('play', () => {
state.autoplaying = true;
player.off('play');
});
setTimeout(() => {
if (state.apiEnabled === null) {
state.apiEnabled = false;
// Do something
}
}, 100);
player.getPaused().then((paused) => {
state.apiEnabled = true;
// Do something
});
您还可以使用detecting user agent 之类的技术来确定您是否在移动设备中,因此假设没有执行自动播放。
我建议您不要侵入 Vimeo 的 iframe 来确定自动播放状态。为了确保您的脚本在未来能够正常工作,应该采用公共 API。