2013-07-19 18 views
5

Co oznacza kod błędu 0 w interfejsie API Flash w YouTube? Występuje podczas próby odtworzenia niektórych filmów za pomocą interfejsu API. Inne kody błędów są wyjaśnione w API Reference, ale nie kod błędu 0.Odtwarzacz YouTube API nie odtwarza niektórych filmów

Jak zrobić odtwarzacz YouTube grać wszystkie wideo, podobnie jak ma to miejsce na YouTube Player Demo?

FLA i SWF pliki: 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

Moje przypuszczenie byłoby, że był to błąd w odtwarzaczu YouTube, gdzie błąd nie był poprawnie zainicjalizowane przed wysłaniem zdarzenia. Niestety nie mogę duplikować tego, co widzisz - przykładowy kod, który podałeś, działa mi dobrze, gdy go uruchomię, bez żadnych błędów. –

+0

@joshbuhler Co wyróżnia Twoją maszynę? Łączę się przez kilka razy z serwerami proxy USA/Kanady, a błąd 0 utrzymywał się dla pierwszych 4 filmów. – Pleo

+0

Czy ktoś inny ma ten dziwaczny błąd z powyższym kodem? – Pleo

Odpowiedz

0

ja miałem stan błędu 0 - gdy czasy Video.

Jeśli zajrzysz w narzędziach programistycznych do dowolnej przeglądarki, z którą współpracujesz, powinieneś zobaczyć objaśnienie o nazwie "videoplayback", które przekroczyło limit czasu. Mam limit czasu po 7,5 minuty, ale może to być związane z połączeniem.

Ponadto, błąd "przekroczenia limitu czasu" nie jest uwzględniony w aktualnie udokumentowanych stanach błędu.

+0

Ale dlaczego nigdy nie odtwarza niektórych filmów i generuje kod błędu 0, podczas gdy zawsze odtwarza inne filmy bez problemów? – Pleo

+0

Lista opcji jest obecnie: Odtwarzacz HTML5 a odtwarzacz Flash (niektóre filmy są zoptymalizowane pod kątem jednego, a nie innego) Reklamy - youtube umieszcza reklamy w strumieniach i nie mam pojęcia, jak je wykryć. Albo raz odtworzyłeś wideo i zostało ono gdzieś zbuforowane. –

0

To jest to samo pytanie, co YouTube AS3 Player API Error Code 0 ... Oczywiście to pytanie również nie ma odpowiedzi (ciekawe, chociaż te same 4 filmy są używane jako przykłady nieodtwarzalnych filmów).

Jedyna sugestia, jaką chciałbym mieć, to znaleźć wzorzec w danych. Na przykład interfejs API danych v3 pokazuje, że wszystkie 4 niewysłane filmy, które nie są odtwarzane, są blokowane w Niemczech, a ten, który oferujesz, nie ma takiego bloku. Mogłoby to prowadzić do założenia, że ​​być może błąd jest związany z blokiem regionu (zauważ, że blok regionu różni się od bloku "osadzania", który jest metadanymi, które może ustawić przesyłający). Filmy zablokowane w Niemczech są zrobione, ponieważ Vevo nie jest tam dozwolony i wszystkie są plikami wideo Vevo.

Oczywiście nie sugeruję, że "nieprzyzwoitość" jest zamierzona, choć może być; Nie jestem świadomy bezpośredniej dokumentacji, która szczegółowo opisuje, co dzieje się, gdy interfejs API (w przeciwieństwie do witryny Youtube, która używa różnych metod odtwarzania filmów, aby nie można było dokonywać bezpośrednich porównań) próbuje odtworzyć zablokowany film regionalny. Być może @Dominic Orme jest poprawny, ponieważ jest powiązany z czasem oczekiwania, limitem czasu spowodowanym przez blok regionu (lub przez próbę użycia proxy do ominięcia bloku regionu).

Możesz przetestować tę teorię, znajdując inne filmy pasujące do wzorca. Na przykład, czy wszystkie filmy Vevo są nie do zagrania z twoim kodem? Czy filmy zablokowane w innych krajach również nie mogą być odtwarzane?

+0

Próbowałem dodać przykładowy kod do tego pytania przed opublikowaniem własnego, ale bezowocne. Tak czy inaczej, 4 filmy wideo nie są wyłącznie filmami Vevo, tylko trzecia. W rzeczywistości filmy Vevo są odtwarzane częściej niż nie. Nie jestem w Niemczech, więc nie mogę powiedzieć, ile ma to związek z blokowaniem regionu. Jednym z zaobserwowanych wzorców jest to, że praktycznie wszystkie filmy Beatlesów są nie do odtworzenia. W przeciwieństwie do tego wszystkie filmy grają dla mnie dobrze na stronie YouTube. – Pleo

+0

Tak ... moje złe w sprawie Vevo. Widziałem, że Taylor Swift vid był, a inne, na które patrzyłem tylko za pośrednictwem interfejsu API danych, więc właśnie założyłem. Jednak wzór nadal pokazuje, że 4 filmy, które wymieniłeś, są zablokowane w Niemczech (znowu, nie sugerowałem, że jesteś w Niemczech, ale być może jest coś wewnętrznie, co powoduje błąd związany z tym). Mówisz, że filmy Vevo na ogół działają, a dodatkowe filmy Beatlesów nie; czy mógłbyś podać niektóre z tych identyfikatorów do obejrzenia? Dodatkowo, czy są jakieś filmy, które nie są muzyką, która nie gra? – jlmcdonald

+0

I muszę powtórzyć, z mojego doświadczenia wynika, że ​​coś grającego na stronie, ogólnie rzecz biorąc, ma niewielki związek z możliwością odtwarzania wideo za pośrednictwem interfejsu API, ponieważ pracują oni z różnymi metodami pobierania, odtwarzania itp. Chociaż możesz również chcieć raportować, co dzieje się, gdy próbujesz osadzić te filmy za pomocą elementu iframe, za pośrednictwem interfejsu JavaScript API itp., aby sprawdzić, czy uzyskasz inne wyniki. – jlmcdonald