2013-07-19 68 views
5

错误代码0在YouTube Flash API中的含义是什么?它在尝试使用API​​播放一些视频时发生。其他错误代码在API Reference解释,但不是错误代码0YouTube API播放器不播放某些视频

如何使YouTube播放器播放所有视频,就像它在YouTube Player Demo

FLA和SWF文件:https://s3.amazonaws.com/YouTubeAPIError0/YouTubeAPIError0.zip

package { 
    import flash.system.Security; 
    import flash.display.MovieClip; 
    import flash.display.Loader; 
    import flash.events.Event; 
    import flash.net.URLRequest; 
    import fl.data.DataProvider; 
    import fl.controls.ComboBox; 
    import fl.controls.TextArea; 

    public class YouTubeAS3 extends MovieClip { 
     public var VidHolder:MovieClip; 
     public var VidSelection:ComboBox; 
     public var traceArea:TextArea; 

     private var player:Object; 
     private var loader:Loader; 
     private var vidCollection:DataProvider; 

     public function YouTubeAS3():void { 
      Security.allowInsecureDomain("*"); 
      Security.allowDomain("*"); 

      vidCollection = new DataProvider(); 
      vidCollection.addItem({data:"eDdI7GhZSQA", label:"Video 1"}); 
      vidCollection.addItem({data:"S09F5MejfBE", label:"Video 2"}); 
      vidCollection.addItem({data:"QUwxKWT6m7U", label:"Video 3"}); 
      vidCollection.addItem({data:"TAbnQZZ6QXc", label:"Video 4"}); 
      vidCollection.addItem({data:"QH2-TGUlwu4", label:"Errorless Video"}); 

      VidSelection.dataProvider = vidCollection; 
      VidSelection.addEventListener(Event.CHANGE, cueVideo); 

      loader = new Loader(); 
      loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit); 
      loader.load(new URLRequest("http://www.youtube.com/apiplayer?version=3")); 
     } 

     private function onLoaderInit(event:Event):void { 
      VidHolder.addChild(loader); 
      loader.content.addEventListener("onReady", onPlayerReady); 
      loader.content.addEventListener("onError", onPlayerError); 
      loader.content.addEventListener("onStateChange", onPlayerStateChange); 
      loader.content.addEventListener("onPlaybackQualityChange", onVideoPlaybackQualityChange); 
     } 

     private function onPlayerReady(event:Event):void { 
      traceArea.text += "player ready: " + Object(event).data + "\r"; 
      player = loader.content; 
      player.setSize(480, 360); 
      VidSelection.selectedIndex = 0; 
      VidSelection.dispatchEvent(new Event(Event.CHANGE)); 
     } 
     private function cueVideo(event:Event):void { 
      traceArea.text += "switch to: " + event.target.selectedItem.label + "\r"; 
      player.cueVideoById(event.target.selectedItem.data); 
     } 

     private function onPlayerError(event:Event):void { 
      traceArea.text += "player error: " + Object(event).data + "\r"; 
     } 

     private function onPlayerStateChange(event:Event):void { 
      traceArea.text += "player state: " + Object(event).data + "\r"; 
     } 

     private function onVideoPlaybackQualityChange(event:Event):void { 
      traceArea.text += "video quality: " + Object(event).data + "\r"; 
     } 
    } 
} 
+0

我的猜测是,这是在YouTube播放器中的错​​误,在错误不是在分派事件之前正确初始化。不幸的是,我不能重复你所看到的 - 当我运行它时,你提供的示例代码对我来说工作得很好,没有任何错误。 –

+0

@joshbuhler什么让你的机器特​​别?我甚至多次通过美国/加拿大代理服务器连接,前4个视频仍然存在错误0。 – Pleo

+0

是否有人用上面的代码获得这个奇怪的错误? – Pleo

回答

0

我已经为0的错误状态 - 当视频超时。

如果您在开发人员工具中查找与您合作的任何浏览器,则应该看到名为“videoplayback”的标注,该标注已超时。我在7.5分钟后超时,但这可能与连接有关。

此外,当前记录的错误状态中未涵盖“超时”错误。

+0

但为什么它从不播放一些视频并产生错误代码0,而始终播放其他视频没有问题? – Pleo

+0

选项列表当前为: HTML5播放器与Flash播放器(某些视频针对一种而非另一种进行了优化) 广告 - YouTube将广告注入到流中,我不知道如何检测它。 或者您曾经播放过一次视频,并将其缓存在某处。 –

0

这是和YouTube AS3 Player API Error Code 0一样的问题......当然,这个问题也没有答案,但是(有趣的是,虽然同样的4个视频被用作无法播放的vids的例子)。

我唯一的建议是寻找数据中的模式。例如,v3数据API显示,您列出的所有未播放的所有4个视频都在德国被屏蔽,而您提供的那个播放的视频没有这种屏蔽。这将导致这样的假设,即错误可能与区域块有关(请注意,区域块与“可嵌入”块(它是上传器可设置的元数据)不同)。在德国阻止的视频都是这样做的,因为Vevo不允许在那里,他们都是Vevo的视频。

当然,我并不一定暗示“不可玩性”是故意的,虽然它可能是;我不知道直接的文档详细说明了当API(而不是Youtube网站,它使用不同的方法来播放视频,所以你不能直接比较)尝试播放区域被阻止的视频时会发生什么。也许@Dominic Orme是正确的,它与超时,区域块引起的超时有关(或者试图使用代理绕过区域块)。

您可以通过查找适合该模式的其他视频来测试此理论。例如,所有Vevo视频都无法在您的代码中播放?在其他国家阻止的视频也无法播放?

+0

我试图在发布我自己的,但没有结果之前添加示例代码的问题。无论如何,这4个视频不是所有的Vevo视频,只有第三个视频。事实上,Vevo视频的播放次数往往比较少。我不在德国,所以我不知道它与区域阻塞有多大关系。观察到的模式之一是几乎所有披头士的视频都无法播放。相比之下,所有视频在我的YouTube网站上播放都很好。 – Pleo

+0

是的......我在Vevo问题上不好。我看到泰勒斯威夫特vid是,而我只通过数据API查看其他人,所以只是做了假设。然而,这种模式仍然表明,你列出的4个视频在德国都被封锁了(再次,我并不是说你在德国,但也许有内部的东西导致与此相关的错误)。你说Vevo视频一般都有效,而另外一些Beatles视频则没有。你能提供一些这些ID来看看吗?另外,有没有不能播放音乐的视频? – jlmcdonald

+0

并重申,根据我的经验,在网站上播放的内容通常与通过API播放视频的能力几乎没有关系,因为它们用于检索,回放等不同方法。虽然您可能还想报告什么当您尝试通过JavaScript API嵌入这些视频与iframe时发生,看看你是否得到不同的结果。 – jlmcdonald