0 Replies Latest reply: Jun 17, 2014 6:23 AM by cmalaboeuf RSS

    Error #2123 bitmap.draw à partir d'un flux HDS dans une application Flex

    cmalaboeuf

      Bonjour à tous,

      Je suis en train de développer un player vidéo en Flex qui doit prendre en charge le HDS.

      J'essaie en vain depuis hier de créer une une image Bitmap à partir d'un flux HDS que je récupère d'Akamai.

       

      J'ai essayer avec un Flux RTMP, aucun problème, j'arrive bien à créer une image bitmap à partir du flux vidéo. Mais dès  que j'essaie avec un flux HDS, j'ai une erreur # 2123 qui correspond à une violation de sécurité.

       

      le message complet :

      Error #2123: Violation de la sécurité Sandbox : BitmapData.draw : http://192.168.0.194/test-hds/testHDS.swf ne peut pas accéder à null. Accès refusé à tous les fichiers de régulation.

       

       

      J'ai créer un serveur avec Wowza en version trial pour avoir un exemple de flux HDS. Même problème qu'avec le flux d'Akamai

       

      Mon Code :

      Fichier testHDS.mxml

      <?xml version="1.0" encoding="utf-8"?>

      <mx:Application xmlns:fx="http://ns.adobe.com/mxml/2009"

                      xmlns:mx="library://ns.adobe.com/flex/mx"

                      xmlns:s="library://ns.adobe.com/flex/spark"

                      minWidth="955" minHeight="800" creationComplete="init()" layout="absolute">

              <!-- Placer ici les éléments non visuels (services et objets de valeur, par exemple). -->

          <fx:Declarations>

          </fx:Declarations>

          <fx:Script>

              <![CDATA[

                  import mx.controls.Alert;

                  import mx.core.FlexGlobals;

                  import mx.core.UIComponent;

                

                

                  private var osmfPlayer:OSMFPlayer;

                

                  public function init():void{         

                    

                 

                      Security.allowDomain("*")

                      Security.loadPolicyFile("http://192.168.0.194/crossdomain.xml");              

                    

                      osmfPlayer = new OSMFPlayer();

                    

                      this.addChild(osmfPlayer);

                  }

                  protected function myBtn_clickHandler(event:MouseEvent):void

                  {

                    

                      try {

                          var dpo:DisplayObject = osmfPlayer.player.displayObject;      

                        

                          var imgBD:BitmapData;

                          var imgBitmap:Bitmap;

                        

                          imgBD = new BitmapData(100,100);

                          imgBD.draw(osmfPlayer.player.displayObject as DisplayObject);

                        

                          imgBitmap=new Bitmap(imgBD);              

                          var comp :UIComponent = new UIComponent();

                          comp.addChild(imgBitmap);

                          comp.x =0  ;

                          comp.y = 720;

                          addChild(comp);

                          Alert.show("ok");              

                      }

                      catch(e:Error){

                          Alert.show(e.message);

                      }

                  }

              ]]>

          </fx:Script>

          <s:Button id="myBtn" x="0" y="720" label="MyButton" click="myBtn_clickHandler(event)">      

          </s:Button>

      </mx:Application>

       

      Fichier OSMFPlayer.as

       

      package

      {

          import mx.core.UIComponent;

        

          import org.osmf.containers.MediaContainer;

          import org.osmf.media.DefaultMediaFactory;

          import org.osmf.media.MediaElement;

          import org.osmf.media.MediaPlayer;

          import org.osmf.media.URLResource;

       

          public class OSMFPlayer extends UIComponent

          {

              //URI of the media

              public static const PROGRESSIVE_PATH:String =

                  "http://192.168.0.194:1935/vod/mp4:sample.mp4/manifest.f4m";       

            

              public var player:MediaPlayer;

              public var container:MediaContainer;

              public var mediaFactory:DefaultMediaFactory;  

            

              public function OSMFPlayer()

              {

                  initPlayer();

              }

            

              protected function initPlayer():void

              {

                  //the pointer to the media

                  var resource:URLResource = new URLResource( PROGRESSIVE_PATH );

                

                  // Create a mediafactory instance

                  mediaFactory = new DefaultMediaFactory();      

                

                  //creates and sets the MediaElement (generic) with a resource and path

                  var element:MediaElement = mediaFactory.createMediaElement( resource );

                

                  //the simplified api controller for media

                  player = new MediaPlayer( element );

                

                

                

                  //the container (sprite) for managing display and layout

                  container = new MediaContainer();

                  container.addMediaElement( element );

                

                

                  //Fit the player size

                  container.width =  1280;

                  container.height = 720 ;//- FlexGlobals.topLevelApplication.actionBar.height;

                

                

                

                  //Adds the container to the stage

                  this.addChild( container );

              }

          }

       

      crossdomain.xml

      Emplacement :  à la racine du serveur

       

      <?xml version="1.0"?>

      <cross-domain-policy>

      <site-control permitted-cross-domain-policies="master-only" />

      <allow-access-from domain="*" />

      <allow-access-from domain="*.adobe.com" />

      <allow-access-from domain="*.macromedia.com" />

       

      </cross-domain-policy>

       

       

       

      //fin de code

       

      J'ai d'abord pensé que c'était lié au crossdomain.xml, j'en ai testé un certains nombre, ca ne change rien.

      Je ne sais plus trop quoi faire

       

      Si quelqu'un avait une idée ou une piste, je suis à cours !

       

      Merci d'avance