YouTube iFrame API:设置来源中断视频事件+ VEVO无效 - 2015年12月

时间:2015-12-17 22:04:02

标签: javascript cordova youtube-api youtube-iframe-api

TL; DR

设置原点会阻止触发所有视频事件。

VEVO视频无法与YouTube API配合使用。错误150。

我正在使用PhoneGap开发应用程序,我们在几周前(2015年12月初)遇到了一个问题。

当我们第一次开发应用程序时,我们注意到VEVO视频没有使用我们的API集成,并且在线发现了我们应该设置原点的文档。我们将原点设置为我们的网站(2015年11月〜),它似乎为我们解决了问题。在那个时间点,VEVO视频工作,视频中的事件发挥作用(onReady,onStateChange等)。

但是,截至几周前(2015年12月初),API onReady和onStateChange事件已不再触发,且该应用无法使用YouTube视频。那时,我发现如果我从新YT.Player的playerVars部分删除了origin:sample.com代码,onReady和onStateChange事件再次起作用,但VEVO视频没有。

我也尝试过人们提供的所有其他解决方案无济于事。目前,无论我们尝试什么,我们都无法使用YouTube API播放VEVO视频。当API尝试播放VEVO视频时,它会发出错误代码" 150"。此外,如果我们设置了原点,它会完全打破YouTube API事件,因此我们的应用程序无法正常运行。

这必须在YouTube结束时进行某种更改,因为我们发现此问题会在不更改应用中的任何代码的情况下弹出。

请帮助,因为我们已经使用我们的应用程序打了一堵砖墙。

VEVO再次罢工......

以下是我们用于创建YT播放器的一些代码。

//load YT api asynchronously
var yt_tag = document.createElement('script');
yt_tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(yt_tag, firstScriptTag);    

yt_player = new YT.Player(playlist[playlist_index].yt_id, {
                height : '220',
                width : (jQuery('#playlist').width() * .98),
                videoId : playlist[playlist_index].yt_id,
                playerVars : {
                    //controls: 0,
                    //'enablejsapi' : 1,
                    'wmode' : 'transparent',
                    //'origin' : 'http://example.com',
                    //'rel' : 0
                },
                //autoPlay: true,
                events : {
                    'onError' : function(event) {
                        if (dev_mode) alert(event.data);
                    },
                    'onReady' : function(yt_event) {
                        //this doesnt work
                    },
                    'onStateChange' : function(event) {
                        //this doesnt work
                    }
                }
            });

2 个答案:

答案 0 :(得分:1)

我尝试使用youtube iframe api reference中的示例html重新创建它(通过将视频ID更改为vevo视频)。我得到了几乎相同的错误。

错误代码= 150安培;原因=此+视频+包含+含量+从+ VEVO +它是+限制+从+回放+上+某些+站点%3Cbr%2F%3E%3CU%3E%3CA。 + HREF%3D%27http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DdqbDc_pPz5E%26feature%3Dplayer_embedded%27 +靶%3D%27_blank%27%3EWatch + +上的YouTube%3C%2FA%3E%3C %2FU%3E和C = WEB&安培; COS = X11&安培;状态=失败&安培; ATC =α%3D3%26B%3DEZgb9KYK4gp-FS7CEwnU5BC3L2U%26C%3D1450423660%26D%3D1%26E%3DdqbDc_pPz5E%26c3a%3D26%26c1a%3D1%26c6a %3D1%26hh%3DUiaK9QLmjOspFp50bvF_ht_oeqU&安培; CBR = Chrome浏览器和事件ID = bLVzVpr2KInQ4QKx3qOoCQ&安培; errordetail = 0&安培; csi_page_type =嵌入&安培; cbrver = 47.0.2526.80&安培; enablecsi = 1

如文档中所述,错误150与错误101相同,如here所述。错误101表示

  

101 - 所请求视频的所有者不允许在嵌入式播放器中播放。

由于您不拥有视频,因此无法控制。即使你找到一些修复,也不能保证它能够持续。

所以我建议您只使用错误代码并转到下一个可播放的项目。

答案 1 :(得分:-1)

显然, wmode 在API之外的步骤 - 相反,它与闪存本身相关 - 因此不需要任何引号。

根据this answerwmode : "opaque"为某人做了伎俩。那是四年前的事情,所以...这似乎很奇怪,直到现在它并没有给你带来任何麻烦。似乎谷歌真正酷的一切也很容易表现得非常奇怪。我现在正在深入研究iFrame API,就是这样,所以对我正在开发的项目很有希望,但它的笨拙让我害怕将它作为一个可靠的解决方案......但我知道无论如何我会最终使用它,并且当我的延长时间在四个月内破裂时会变得疯狂。