2013-07-19 168 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