youtube-api - 嵌入式播放器在不清楚的情况下向部分用户显示“请点击此处在 YouTube 上观看此视频”
问题描述
我们在基于 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>
有谁知道可能发生了什么以及如何解决它?
解决方案
我和我的队友设法在当地重现了这种行为。
要重现该行为,您需要做的就是在相同的 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
推荐阅读
- javascript - TypeError:fs.createReadStream 不是函数
- android - Android Google Map 自定义标记从 URL 加载图像
- node.js - 使用 fluent-ffmpeg 处理视频输出文件时长减半
- matlab - Matlab:如果a = 40 * 1和b = 32 * 1如何构建c = 40 * 32?
- angular - 在角度页面中显示全局错误消息
- flutter - 如何停止在颤振中覆盖同一文件?
- r - 如何使用我创建的包函数找到我的对象?
- waf - 如何将 libdl 添加到 waf 构建中?
- laravel - 带有 vuex 的 boostrapVue 中的模态事件
- python - 来自python中json属性的Matplotlib