Question

J'essaie de faire fonctionner le lecteur youtube as3 sans chrome. J'ai suivi le youtube Exemples d'API as3 et voici ce que j'ai obtenu jusqu'à présent:

public class Main extends Sprite 
{
    Security.allowDomain("*");

    private var player:Sprite;
    private var loader:Loader;

    public function Main():void 
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);

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

    private function onLoaderInit(e:Event):void
    {
        player = Sprite(loader.content);
        addChild(player);
        player.addEventListener("onReady", onPlayerReady);
        player.addEventListener("onError", onPlayerError);
        player.addEventListener("onStateChange", onPlayerStateChange);
        player.addEventListener("onPlayerQualityChange", onVideoPlaybackQualityChange);
    }

    private function onPlayerReady(e:Event):void
    {
        trace("Player ready: " + Object(e.target).Data);
        // player.loadVideoById("uad17d5hR5s");
    }
    private function onPlayerError(e:Event):void
    {
        trace("Player error: " + Object(e).Data);
    }
    private function onPlayerStateChange(e:Event):void
    {
        // trace("Player state: " + Object(e).Data);
    }
    private function onVideoPlaybackQualityChange(e:Event):void
    {
        trace("Video quality: " + Object(e).Data);
    }
}

Les événements onPlayerReady et onStateChange se déclenchent mais des erreurs se produisent. Lors du traçage de l'objet (e) .Data, le message d'erreur suivant s'affiche:

ReferenceError: Error #1069: the property Data was not found for com.google.youtube.event.ExternalEvent and there is no standard value.
(traduit du suédois)

Lors du passage à Objet (e.target) .Data , il trace "" non défini". et Objet (e.target) traces "[objet SwfProxy]".

Si j'essaie player.loadVideoById ("uad17d5hR5s"); j'obtiens cette erreur:

1061: Appel de la méthode loadVideoById éventuellement indéfinie via une référence de type statique flash.display: Sprite.

Était-ce utile?

La solution

Je ne pense pas que vous deviez convertir loader.content en tant que Sprite. Vous devriez plutôt lancer le joueur sur un type d'objet. La variable de lecteur sert uniquement à accéder aux appels de l'API. Pour ce qui est du placement, du déplacement et de l’ajout à la liste d’affichage, utilisez l’objet Loader contenant l’objet SwfProxy. Essayez ce code:

package
{
 import flash.display.*;
 import flash.events.*;
 import flash.system.Security;
 import flash.net.*;

 public class Main extends MovieClip 
 {
  Security.allowDomain("*");

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

  public function Main():void 
  {
   if (stage) init();
   else addEventListener(Event.ADDED_TO_STAGE, init);
  }

  private function init(e:Event = null):void 
  {
   removeEventListener(Event.ADDED_TO_STAGE, init);

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

  private function onLoaderInit(e:Event):void
  {
   player = Sprite(loader.content);
   addChild(loader);
   player.addEventListener("onReady", onPlayerReady);
   player.addEventListener("onError", onPlayerError);
   player.addEventListener("onStateChange", onPlayerStateChange);
   player.addEventListener("onPlayerQualityChange", onVideoPlaybackQualityChange);
  }

  private function onPlayerReady(e:Event):void
  {
   trace("Player ready: " + Object(e.target).Data);
   player.loadVideoById("uad17d5hR5s");
   player.setSize(480, 365);
  }
  private function onPlayerError(e:Event):void
  {
   trace("Player error: " + Object(e).Data);
  }
  private function onPlayerStateChange(e:Event):void
  {
   // trace("Player state: " + Object(e).Data);
  }
  private function onVideoPlaybackQualityChange(e:Event):void
  {
   trace("Video quality: " + Object(e).Data);
  }
 }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top