16 Replies Latest reply: Dec 30, 2013 10:24 PM by NightostJ RSS

    i used netStream.appendBytes() ,but can not call bitmapData.draw()

    lanphonexm

      the tips: Error #2123: Security sandbox violation: BitmapData.draw: cannot access null. No policy files granted access.

       

      Here is some sample code

       

      package
      {
         
      import flash.display.Sprite;
         
      import flash.filesystem.File;
         
      import flash.filesystem.FileMode;
         
      import flash.filesystem.FileStream;
         
      import flash.media.Video;
         
      import flash.net.NetConnection;
         
      import flash.net.NetStream;
         
      import flash.net.NetStreamAppendBytesAction;
         
      import flash.utils.ByteArray;
         
      import flash.display.BitmapData;

         
      class ByteArrayPlayer extends Sprite
         
      {
             
      private var _ns:NetStream;
             
      private var _nc:NetConnection;
             
      private var _video:Video;

             
      public function playVideo(path:String):void
             
      {
                  _nc
      = new NetConnection();
                  _nc
      .connect(null);
                  _ns
      = new NetStream(_nc);

                  _ns.checkPolicyFile = true;

                  _video
      = new Video();
                  addChild
      (_video);
                  _video
      .attachNetStream(_ns);

                  _ns
      .play(null);
                  _ns
      .appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN);

                 
      var file:File = new File(path);
                 
      var fileStream:FileStream = new FileStream();
                  fileStream
      .open(file, FileMode.READ);

                 
      var bytes:ByteArray = new ByteArray();

                  fileStream
      .readBytes(bytes);

                  _ns
      .appendBytes(bytes);
             
      }


             
      public function getImage(video:Video):BitmapData
             
      {
                 
      var bit:BitmapData = new BitmapData(_video.width, _video.height);
                  bit
      .draw(_video);            //This will cause the error
                 
      return bit;
             
      }
         
      }
      }

       

      This is only sample code use for an explanation. The error would happen when calling the getImage method while the video is playing.

      The error mentions a policy file not found. Since the file is loaded locally there isn't really a place to put a policy file.

      Is there a policy setting somewhere that needs to be set or is the BitmapData.draw feature just not available when using appendBytes?

      It is a local flv file,  not an ramp stream from a server.