I am testing the video player Flex app over 'file:///C:/' but the Flash CS4 demo is technically on 'file:///C:/' as well. Both are in subdirectories of my desktop/document folder and both are trying to access the very same file over RTMP. Here's the official error from the video player:
--------- Security sandbox violation: BitmapData.draw: file:///C:/<...>/bin- debug/BaseFLVPlayer.swf cannot access rtmp://<...>/vod/. No policy files granted access. at flash.display::BitmapData/draw() --------- I think I'm going test the video player SWF online instead of on my desktop. I don't think it will help but I've got no other ideas at this point. --- In flexcoders@yahoogroups.com, Alex Harui <aha...@...> wrote: > > Are you testing this over http:// or file:// > > If file:// crossdomain.xml may not be in play. > > From: flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] On Behalf Of jwebbsuccess > Sent: Friday, January 16, 2009 11:50 AM > To: flexcoders@yahoogroups.com > Subject: [flexcoders] Security sandbox violation on Bitmapdata.draw( rtmpVid ) despite crosspolicy.xml > > > Take a look at this video player; notice there is an image on screen > before the video begins playback: > > http://www.huffingtonpost.com/2009/01/14/obama-on-inauguration- > you_n_157881.html > > I'm trying to create similar 'preview frame' functionality in my own > custom-built Flex/AS3-based RTMP video player... I need my the player > to seek ahead to a given point in video, grab a snapshot for display > as a preview frame, then seek back to the beginning before the user > initiates playback... Or something like that. > > I've already got demo code (AS2) for taking a snapshot of a video > after it has started playing. The problem is when I try to write code > to do the same thing in my AS3 player, I get sandbox violation error > as if I were running the demo SWF and my video player SWF on different > servers. Both SWFs are in document folders on my computer... The > RTMP host and I have confirmed that the permissions for using > 'BitmapData.draw( obj )' on a video stream are in place (the demo > works) so I've got no idea why I'm getting the sandbox violation > error. > > Can anyone help me to get a snapshot of a video stream and then return > the stream to the beginning before the user initiates playback? I've > included the FLA for the demo in Flash CS4 and CS3 format: > > http://www.futurewebstudios.com/bitMapViewer2.zip > > The demo code is attached separately: > > ------------------------------- > > import flash.display.BitmapData; > > var nc:NetConnection = new NetConnection(); > var ns:NetStream; > var myBitmapData:BitmapData = new BitmapData( 160, 120, false, > 0x00CCCCCC ); > var mc_1:MovieClip = this.createEmptyMovieClip( "mc", > this.getNextHighestDepth() ); > > btnCap.addEventListener( "click", captureVid ); > nc.connect( "rtmp://okojcizj1r.rtmphost.com/vod" ); > //nc.connect( "rtmp://localhost/vod" ); > > nc.onStatus = function( p_o ) > { > var code = p_o.code; > trace( code ); > if ( code == "NetConnection.Connect.Success" ) > { > playLive(); > } > }; > > function playLive() > { > trace( "playLive" ); > mc_1._x = 195; > mc_1._y = 15; > > ns = new NetStream( nc ); > myVideo.attachVideo( ns ); > myVideo.attachAudio( ns ); > ns.play( "kaye_400" ); > ns.onStatus = function( p_o ) > { > trace( p_o.code ); > }; > mc_1.attachBitmap( myBitmapData,this.getNextHighestDepth() ); > } > > function captureVid() > { > trace( "captureVid" ); > myBitmapData.draw( myVideo ); > } > > ------------------------------- > > I've also attached a piece of the code in my video player app so you > can see what I'm trying to do; if you need to see more of the code, > let me know and I'll send it to you: > > ------------------------------- > > public function getScreenCaptureData( seekTime:Number, > vidWidth:Number, vidHeight:Number ):Bitmap > { > var startAt:Number = _netStream.time; > > trace( this + " getScreenCaptureData --> startAt: " + startAt > + ", seekTime: " + seekTime + ", vidWidth: " + vidWidth + ", > vidHeight: " + vidHeight ); > > _netStream.seek( seekTime ); > var tempVid:Video = new Video( vidWidth, vidHeight ); > tempVid.attachNetStream( _netStream ); > var bd:BitmapData = new BitmapData( vidWidth, vidHeight ); > bd.draw( tempVid ); > _netStream.seek( startAt ); > > //to be continued... > > return new Bitmap(); > } > > ------------------------------- > > Thanks in advance for your help. >