我们在基于Cordova的混合应用程序中使用了YouTube嵌入式播放器。该应用程序在全球范围内流量很大。
当某些用户在不明确的情况下尝试播放任何视频时,播放器会向他们显示消息“ 请单击此处在YouTube上观看此视频”。
我们看不到清晰的图案,它似乎并不取决于用户所在的国家或视频的限制。
我们在播放器代码(https://www.youtube.com/yts/jsbin/player_ias-vflrnurMS/en_US/base.js中看到,消息已分配给名为“ TOO_MANY_REQUESTS_WITH_LINK ”的常量,但每个用户的请求量不大,配额也无法与其他Google API中一样进行配置。
我们遵循iFrame API参考: https://developers.google.com/youtube/iframe_api_reference?hl=en
<iframe id="player" src="https://www.youtube.com/embed/M7lc1UVf-VE?autoplay=1&cc_load_policy=0&controls=0&disablekb=1&enablejsapi=1&fs=0&iv_load_policy=3&loop=0&modestbranding=1&playsinline=1&rel=0&showinfo=0&wmode=transparent&origin=XXX" frameborder="0"></iframe>
<script type="text/javascript">
var player,
scriptTag = document.createElement('script'),
firstScriptTag = document.getElementsByTagName('script')[0];
scriptTag.src = "https://www.youtube.com/iframe_api";
firstScriptTag.parentNode.insertBefore(scriptTag, firstScriptTag);
function onYouTubeIframeAPIReady() {
var options = JSON.parse('{"autoplay":1,"cc_load_policy":0,"controls":0,"disablekb":1,"enablejsapi":1,"fs":0,"iv_load_policy":3,"loop":0,"modestbranding":1,"playsinline":1,"rel":0,"showinfo":0,"wmode":"transparent","origin":"XXX"}');
if (!options.origin) {
options.origin = location.origin ||
location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : '');
}
player = new YTRemoteVPlayer('player', '<%-videoId%>', options);
}
</script>
有人知道怎么回事以及如何解决吗?
答案 0 :(得分:10)
我和我的队友设法在本地重现该行为。
要重现该行为,您需要做的只是在同一IP地址下,以便多次加载YouTube JS并加载不同的视频。尽管我无法阐明必须完成的确切时间(我们将某些设备留在了旁边),但是这种行为确实发生了。
为解决该问题,我们尝试访问https://web.archive.org/web网站并获取了旧的YouTube JS脚本(https://www.youtube.com/iframe_api)。我们尝试使用该旧脚本,但没有成功。该消息继续出现= /。
我真的不知道我们(开发人员)是否可以做很多事情,但是要等到YouTube声明和/或最终更改的最新修订。
更新
Google的问题跟踪器网站上存在一个问题:
更新
YouTube似乎已经解决了该问题。我们将继续监视:)
更新(2019年11月5日)
问题再次发生。
更新(2019年11月7日)
我在issuetracker上打开了一个新期刊: -https://issuetracker.google.com/issues/144057800
答案 1 :(得分:3)
我没有解决方案,但是我可以添加有关该问题的更多信息,这样也许有人可以帮助我们解决该问题。
某些用户遇到同样的错误,就像您说的那样,没有明确的模式。我的设备运行正常,但是在得到此错误的我的应用程序用户的帮助下,我进行了一些测试。结果如下:
我的测试中使用的演示:https://developers.google.com/youtube/youtube_player_demo
测试1-在设备的浏览器上打开iframe播放器api演示-已完成
测试2-在我的应用程序上将iframe Player api演示打开到Web视图中-失败
测试3-使用VPN连接将iframe Player api演示打开到我的应用程序的网络视图中-起作用
因此,它似乎是APP + IP的组合被阻止。我不知道原因,如果有人重复这些测试,将会非常有帮助。我正在尝试与其他用户确认,但是要找到愿意帮助的人有点困难。
更新:第二个用户尝试使用VPN,并且对他也起作用。
更新2:有此问题的用户告诉我,视频现在又可以正常工作了。它似乎是YouTube在服务器端的一个临时阻止。