Problems with dispatchEvent and with accessing a netStream object inside custom class

Hej Guys!

I currently work on a simple VideoObject class. This class extends Sprite. The constructor takes 3 parameters: the filename of a .flv, width and height of the video. The class does all the netConnect and netStream stuff to load the video and add it to its displayList.

My goal is that I can finally simply create a new VideoObject wherever I want, supply the 3 parameters and get the reference to a sprite containing a connected, streaming and paused video.
Then I could for example place the VideoObject somewhere on the stage and resume playing or seek or whatever.

I hope that’s understandable so far.

Basically my class works. But I still encounter a bigger and a minor problem:

The bigger problem:
As you can see in the code below, I create a netStream inside my VideoObject class called ns as a public property.
But when I try to access the netStream Object through an instance of my VideoObject, I get an error telling me that I try to access a null object reference. Tracing myVideoObject.ns returns null as well.
Now what could be the problem? I mean, I should be able to access the netStream object from outside the class as well, right?

The smaller problem:
I try to dispatch a custom event when the video is ready and listen for the event from outside the class (see .fla code). The event gets dispatched but so far I have not been able to receive it.

Any ideas would be highly appreciated!

Here comes the class:


 package {
    import flash.display.Sprite;
    import flash.events.Event;
	import flash.events.NetStatusEvent;
	import flash.events.SecurityErrorEvent;
	import flash.events.AsyncErrorEvent;
    import flash.media.Video;
    import flash.net.NetConnection;
    import flash.net.NetStream;

    public class VideoObject extends Sprite {
        public var videoURL:String;
		public var videoWidth:int;
		public var videoHeight:int;
		public var ns:NetStream;

		public var video:Video;
        private var nc:NetConnection;
		private var myEvent:Event;
		
        public function VideoObject(videoURL:String,videoWidth:int,videoHeight:int)
		{
			this.videoURL = videoURL;
			this.videoWidth = videoWidth;
			this.videoHeight = videoHeight;
			init();
        }
		//
		//initialize
		private function init():void
		{
			myEvent = new Event("video_loaded");
			
			nc = new NetConnection();
            nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
            nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
            nc.connect(null);
		}
		//
		//check network connection and proceed if successfull
        private function netStatusHandler(event:NetStatusEvent):void
		{
            switch (event.info.code) {
                case "NetConnection.Connect.Success":
                    connectStream();
                    break;
                case "NetStream.Play.StreamNotFound":
                    trace("Unable to locate video: " + videoURL);
                    break;
            }
        }
		//
		//begin video streaming
        private function connectStream():void
		{
            var ns:NetStream = new NetStream(nc);
            ns.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
            ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
            var video:Video = new Video();
            video.attachNetStream(ns);
            ns.play(videoURL);
			ns.pause();
			
			video.width = videoWidth;
			video.height = videoHeight;
			video.x = -videoWidth/2;
			video.y = -videoHeight/2;
            addChild(video);
			
			dispatchEvent(myEvent);
        }
		//
		//handle security errors
        private function securityErrorHandler(event:SecurityErrorEvent):void
		{
            trace("securityErrorHandler: " + event);
        }
        //
		//handle async error
        private function asyncErrorHandler(event:AsyncErrorEvent):void
		{
            // ignore AsyncErrorEvent events.
        }
    }
 }

and here is the .fla where I create a videoObject and listen for my event:


var myVideo:VideoObject = new VideoObject("test.flv",720,405);
myVideo.x = stage.stageWidth/2;
myVideo.y = stage.stageHeight/2
addChild(myVideo);

trace(myVideo.ns);
myVideo.ns.resume();

myVideo.addEventListener("video_loaded", onVideoLoaded);


function onVideoLoaded(event)
{
	trace("video loaded");
}