YouTube iFrame API:设置原点会中断视频事件 + VEVO 不起作用 - 2015 年 12 月



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
                    }
                }
            });

我试图使用youtube iframe api引用中的示例html重新创建它(通过将视频id更改为vevo视频)。我也犯了同样的错误。

错误代码=150&reason=This+video+contains+content+from+VEVO+It+is+restricted+from+playback+on+certificate+sites.%3Cbr%2F%3E%3Cu%3E%3Ca+href%3D%27http%3A%2F%2Fwww.youtube.com%2Fwatch%3V%3DqbDc_pPz5E%26feature%3Player_embedded%27+target%3D%27%_blank%27%3EWatch+on+youtube%3C%2Fa%3E%3C%2Fu%3E&c=WEB&cos=X11&status=失败&atc=a%3D3%26b%3DEZgb9KYK4gp-FS7CEwnU5BC3L2U%26c%3D11450423660%26dqbDc_pPz5E%26c3a%3D26c1a%3D1%26c6a%3D1%26hh%3UiaK9QLmjOspFp50bvF_ht_oeqU&cbr=铬&eventid=bLVzVpr2KInQ4QKx3qOoCQ&errordetail=0&csi_page_type=嵌入&cbrver=47.0.2526.80&enablecsi=1

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

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

这是你无法控制的,因为你没有视频。即使你找到了一些解决方案,也不能保证它会持续下去。

因此,我建议您使用错误代码,然后转到下一个可播放项目。

显然,wmode步出API——相反,它与flash本身绑定——因此不需要任何引号。

根据这个答案,wmode : "opaque"为某人做了手脚。不过,那是四年前的事了,所以……直到现在才给你带来任何麻烦,这似乎很奇怪。似乎谷歌上所有很酷的东西都会表现得非常奇怪。我现在正在深入研究iFrame API,它对我正在进行的项目很有希望,但它的不稳定让我不敢将其用作可靠的解决方案。。。但我知道,无论如何,当我的延期在四个月后到期时,我最终会使用它,并变得疯狂。

最新更新