Error #1009: null object reference

I think I’m getting close on this, but I keep getting the error message that reads:

"TypeError: Error #1009: Cannot access a property or method of a null object reference.
at com.realeyes.media::AS3videoPlayer() "

I have a feeling it’s likely in my constructor block, but I don’t know where else to put the addEventListeners there. (See below)

Any suggestions?

Thanks!

package com.realeyes.media{

//-------------------------------------------------
//IMPORTS
//-------------------------------------------------

import flash.display.MovieClip;
import flash.events.NetStatusEvent;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.system.Capabilities;
import flash.events.*;
import fl.controls.Button;

import flash.media.SoundChannel;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.events.IEventDispatcher;
import flash.media.*;
import flash.geom.Rectangle;
/**
* ...
* @author David Hassoun | RealEyes Media | [email][email protected][/email]
* 
* USE AT YOUR OWN RISK.
*/
public class AS3videoPlayer extends MovieClip {

	//-------------------------------------------------
	//DECLARATIONS
	//-------------------------------------------------

	private var _nc:NetConnection;
	private var _ns:NetStream;
	private var _ds:DynamicStream;
	private var _vidDisp:Video;
	private var _connClient:ConnectionClient;
	private var _isServerCapable:Boolean;



	//******************************************************************************
	//******************************************************************************
	private var _uri:String="rtmp://flash2.scoe.net/vod";
	//******************************************************************************
	//******************************************************************************


	private var _startingBitrate:Number=512;
	private var _targetFMSVersion:Number=3.5;
	private var _targetFPVersion:Number=10;


	private var vol:SoundTransform=SoundMixer.soundTransform;
	private var ratio_volume:Number;
	private var trackBounds:Rectangle=track_mc.getBounds(track_mc);
	private var xPos:Number=trackBounds.x+6;
	private var yPos:Number=trackBounds.y+5;
	private var widthPos:Number=trackBounds.width-track_mc.slider_mc.width;
	private var heightPos:Number=0;
	private var bounds:Rectangle=new Rectangle(xPos,yPos,widthPos,heightPos);




	//-------------------------------------------------
	//CONSTRUCTOR
	//-------------------------------------------------

	public function AS3videoPlayer() {
		_init();
		
		track_mc.slider_mc.addEventListener(MouseEvent.MOUSE_DOWN,dragSlider);
		stage.addEventListener(MouseEvent.MOUSE_UP,stopSlider);
	}


	//-------------------------------------------------
	//INIT METHODS
	//-------------------------------------------------


	private function _init():void {
		setupButtons();
		_initConnection();
		speedBubbleHi.visible=false;
		speedBubbleMed.visible=false;
		speedBubbleLow.visible=false;
		
		track_mc.slider_mc.x=widthPos;
		track_mc.mouseEnabled=false;
		track_mc.slider_mc.buttonMode=true;

		
	}

	private function _initConnection():void {
		_nc=new NetConnection  ;
		_connClient=new ConnectionClient(this);
		_nc.client=_connClient;
		_nc.addEventListener(NetStatusEvent.NET_STATUS,_onNetStatus);
		_nc.connect(_uri);
	}

	private function onClick(event:MouseEvent):void {
		switch (event.currentTarget) {
			case myPauseButton :
				_ds.togglePause();
				scrollingText.stop();
				myPauseButton.x=-45;
				myPlayButton.x=35;
				break;
			case myPlayButton :
				_ds.togglePause();
				scrollingText.play();
				myPlayButton.x=-45;
				myPauseButton.x=35;
				break;
			case ccOnButton :
				scrollingText.visible=true;
				ccOnButton.x=388;
				ccOffButton.x=207;
				break;
			case ccOffButton :
				scrollingText.visible=false;
				ccOffButton.x=388;
				ccOnButton.x=207;
				break;
		}






	}





	private function _initStream():void {
		trace("-INIT STREAM -");

		if (! _vidDisp) {
			_vidDisp=new Video  ;
			this.addChild(_vidDisp);
			_vidDisp.x=25;
			_vidDisp.y=9;
		}

		var fpVersion:Number=getFlashPlayerMajorVersion();

		trace("fpVersion: "+fpVersion+" && _isServerCapable: "+_isServerCapable);

		if (fpVersion>=_targetFPVersion&&_isServerCapable) {
			_initDynamicStream();
		} else {
			_initNetStream();
		}

	}





	private function _initNetStream():void {
		trace("_initNetStream()");

		_ns=new NetStream(_nc);
		_ns.client=_connClient;
		_ns.addEventListener(NetStatusEvent.NET_STATUS,_onNetStatus);

		_vidDisp.attachNetStream(_ns);

	}

	private function _initDynamicStream():void {
		trace("_initDynamicStream()");

		_ds=new DynamicStream(_nc);
		_ds.client=_connClient;
		_ds.addEventListener(NetStatusEvent.NET_STATUS,_onNetStatus);



		_vidDisp.attachNetStream(_ds);

		var dsi:DynamicStreamItem=new DynamicStreamItem  ;
		dsi.addStream("E02L05-A01_75",150);
		dsi.addStream("E02L05-A01_150",500);
		dsi.addStream("E02L05-A01",700);

		//OPTIONAL
		dsi.startRate=_startingBitrate;

		//COMMAND TO STREAM _LIVE_ VIDEO! (set to -1)
		//dsi.start=-1;
		//Or rather, for DVR, use 0:
		dsi.start=0;

		_ds.startPlay(dsi);
		//_ds.seek(1000000);  //seeks to the end of the video, good for live video webcasts

	}

	private function setupButtons():void {


		scrollingText.visible=false;
		ccOnButton.buttonMode=true;
		ccOffButton.buttonMode=true;

		myPauseButton.addEventListener(MouseEvent.CLICK,onClick);
		myPlayButton.addEventListener(MouseEvent.CLICK,onClick);
		ccOnButton.addEventListener(MouseEvent.CLICK,onClick);
		ccOffButton.addEventListener(MouseEvent.CLICK,onClick);


	}



	//-------------------------------------------------
	//CONTROL METHODS
	//-------------------------------------------------


	public function setVideoSize(p_w:Number,p_h:Number):void {
		trace("Set video Size: "+p_w+" x "+p_h);
		_vidDisp.width=p_w;
		_vidDisp.height=p_h;
		/*_vidDisp.width=640;
		_vidDisp.height=480;*/


		if (_ds) {
			trace("Current Bitrate: "+_ds.currentStreamBitRate);
			if (_ds.currentStreamBitRate<=150) {
				speedBubbleHi.visible=false;
				speedBubbleMed.visible=false;
				speedBubbleLow.visible=true;
			} else if (_ds.currentStreamBitRate>150&&_ds.currentStreamBitRate<650) {
				speedBubbleHi.visible=false;
				speedBubbleMed.visible=true;
				speedBubbleLow.visible=false;
			} else if (_ds.currentStreamBitRate>=650) {
				speedBubbleHi.visible=true;
				speedBubbleMed.visible=false;
				speedBubbleLow.visible=false;
			}
		}
	}




	private function _verifyServerVersion(p_version:String):void {
		var fmsVersion:Number=Number(p_version.split(",",2).join("."));

		trace("fmsVersion: "+fmsVersion);

		if (fmsVersion>=_targetFMSVersion) {
			_isServerCapable=true;
		} else {
			_isServerCapable=false;
		}
	}



	public function getFlashPlayerMajorVersion():Number {

		var fpVersionStr:String=Capabilities.version;

		return Number(fpVersionStr.split(" ")[1].split(",",1));

	}

	//-------------------------------------------------
	//EVENT HANDLERS
	//-------------------------------------------------



	private function _onNetStatus(p_evt:NetStatusEvent):void {

		trace("NetStatus.info: "+p_evt.info.code);


		for (var i:String in p_evt.info) {
			trace(i+" : "+p_evt.info*);
		}

		switch (p_evt.info.code) {
			case "NetConnection.Connect.Success" :
				{
					trace("VERSION: "+p_evt.info.data.version);

					_verifyServerVersion(p_evt.info.data.version);


					_initStream();
					break;




			}
		}
	}

}

};

//-------------------------------------------------
//CONNECTION/STREAM CLIENT CLASSES
//-------------------------------------------------

import com.realeyes.media.AS3videoPlayer;

class ConnectionClient {
private var _owner:AS3videoPlayer;

public function ConnectionClient(p_owner:AS3videoPlayer) {
	_owner=p_owner;
}

public function onBWCheck(... rest):Number {
	return 0;
}


public function onBWDone(... rest):void {
	//rest[0]; //is the available bw

}


public function onMetaData(p_metaData:Object):void {
	trace("- Meta Data Received - ");
	_owner.setVideoSize(p_metaData.width,p_metaData.height);
}


public function onCuePoint(p_data:Object):void {
	trace("client.onCuePoint() "+p_data);
}

public function onImageData(p_data:Object):void {
	trace("client.onImageData() "+p_data);
}


public function onPlayStatus(p_data:Object):void {
	trace("client.onPlayStatus() "+p_data);
	trace("////////////////////");
	for (var i:String in p_data) {
		trace(i+" : "+p_data*);
	}


	trace("////////////////////");
}

public function onTextData(p_data:Object):void {
	trace("client.onTextData() "+p_data);
}

}package com.realeyes.media{

//-------------------------------------------------
//IMPORTS
//-------------------------------------------------

import flash.display.MovieClip;
import flash.events.NetStatusEvent;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.system.Capabilities;
import flash.events.*;
import fl.controls.Button;

import flash.media.SoundChannel;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.events.IEventDispatcher;
import flash.media.*;
import flash.geom.Rectangle;
/**
* ...
* @author David Hassoun | RealEyes Media | [email][email protected][/email]
* 
* USE AT YOUR OWN RISK.
*/
public class AS3videoPlayer extends MovieClip {

	//-------------------------------------------------
	//DECLARATIONS
	//-------------------------------------------------

	private var _nc:NetConnection;
	private var _ns:NetStream;
	private var _ds:DynamicStream;
	private var _vidDisp:Video;
	private var _connClient:ConnectionClient;
	private var _isServerCapable:Boolean;



	//******************************************************************************
	//******************************************************************************
	private var _uri:String="rtmp://flash2.scoe.net/vod";
	//******************************************************************************
	//******************************************************************************


	private var _startingBitrate:Number=512;
	private var _targetFMSVersion:Number=3.5;
	private var _targetFPVersion:Number=10;


	private var vol:SoundTransform=SoundMixer.soundTransform;
	private var ratio_volume:Number;
	private var trackBounds:Rectangle=track_mc.getBounds(track_mc);
	private var xPos:Number=trackBounds.x+6;
	private var yPos:Number=trackBounds.y+5;
	private var widthPos:Number=trackBounds.width-track_mc.slider_mc.width;
	private var heightPos:Number=0;
	private var bounds:Rectangle=new Rectangle(xPos,yPos,widthPos,heightPos);




	//-------------------------------------------------
	//CONSTRUCTOR
	//-------------------------------------------------

	public function AS3videoPlayer() {
		_init();
		
		track_mc.slider_mc.addEventListener(MouseEvent.MOUSE_DOWN,dragSlider);
		stage.addEventListener(MouseEvent.MOUSE_UP,stopSlider);
	}


	//-------------------------------------------------
	//INIT METHODS
	//-------------------------------------------------


	private function _init():void {
		setupButtons();
		_initConnection();
		speedBubbleHi.visible=false;
		speedBubbleMed.visible=false;
		speedBubbleLow.visible=false;
		
		track_mc.slider_mc.x=widthPos;
		track_mc.mouseEnabled=false;
		track_mc.slider_mc.buttonMode=true;

		
	}

	private function _initConnection():void {
		_nc=new NetConnection  ;
		_connClient=new ConnectionClient(this);
		_nc.client=_connClient;
		_nc.addEventListener(NetStatusEvent.NET_STATUS,_onNetStatus);
		_nc.connect(_uri);
	}

	private function onClick(event:MouseEvent):void {
		switch (event.currentTarget) {
			case myPauseButton :
				_ds.togglePause();
				scrollingText.stop();
				myPauseButton.x=-45;
				myPlayButton.x=35;
				break;
			case myPlayButton :
				_ds.togglePause();
				scrollingText.play();
				myPlayButton.x=-45;
				myPauseButton.x=35;
				break;
			case ccOnButton :
				scrollingText.visible=true;
				ccOnButton.x=388;
				ccOffButton.x=207;
				break;
			case ccOffButton :
				scrollingText.visible=false;
				ccOffButton.x=388;
				ccOnButton.x=207;
				break;
		}






	}





	private function _initStream():void {
		trace("-INIT STREAM -");

		if (! _vidDisp) {
			_vidDisp=new Video  ;
			this.addChild(_vidDisp);
			_vidDisp.x=25;
			_vidDisp.y=9;
		}

		var fpVersion:Number=getFlashPlayerMajorVersion();

		trace("fpVersion: "+fpVersion+" && _isServerCapable: "+_isServerCapable);

		if (fpVersion>=_targetFPVersion&&_isServerCapable) {
			_initDynamicStream();
		} else {
			_initNetStream();
		}

	}





	private function _initNetStream():void {
		trace("_initNetStream()");

		_ns=new NetStream(_nc);
		_ns.client=_connClient;
		_ns.addEventListener(NetStatusEvent.NET_STATUS,_onNetStatus);

		_vidDisp.attachNetStream(_ns);

	}

	private function _initDynamicStream():void {
		trace("_initDynamicStream()");

		_ds=new DynamicStream(_nc);
		_ds.client=_connClient;
		_ds.addEventListener(NetStatusEvent.NET_STATUS,_onNetStatus);



		_vidDisp.attachNetStream(_ds);

		var dsi:DynamicStreamItem=new DynamicStreamItem  ;
		dsi.addStream("E02L05-A01_75",150);
		dsi.addStream("E02L05-A01_150",500);
		dsi.addStream("E02L05-A01",700);

		//OPTIONAL
		dsi.startRate=_startingBitrate;

		//COMMAND TO STREAM _LIVE_ VIDEO! (set to -1)
		//dsi.start=-1;
		//Or rather, for DVR, use 0:
		dsi.start=0;

		_ds.startPlay(dsi);
		//_ds.seek(1000000);  //seeks to the end of the video, good for live video webcasts

	}

	private function setupButtons():void {


		scrollingText.visible=false;
		ccOnButton.buttonMode=true;
		ccOffButton.buttonMode=true;

		myPauseButton.addEventListener(MouseEvent.CLICK,onClick);
		myPlayButton.addEventListener(MouseEvent.CLICK,onClick);
		ccOnButton.addEventListener(MouseEvent.CLICK,onClick);
		ccOffButton.addEventListener(MouseEvent.CLICK,onClick);


	}



	//-------------------------------------------------
	//CONTROL METHODS
	//-------------------------------------------------


	public function setVideoSize(p_w:Number,p_h:Number):void {
		trace("Set video Size: "+p_w+" x "+p_h);
		_vidDisp.width=p_w;
		_vidDisp.height=p_h;
		/*_vidDisp.width=640;
		_vidDisp.height=480;*/


		if (_ds) {
			trace("Current Bitrate: "+_ds.currentStreamBitRate);
			if (_ds.currentStreamBitRate<=150) {
				speedBubbleHi.visible=false;
				speedBubbleMed.visible=false;
				speedBubbleLow.visible=true;
			} else if (_ds.currentStreamBitRate>150&&_ds.currentStreamBitRate<650) {
				speedBubbleHi.visible=false;
				speedBubbleMed.visible=true;
				speedBubbleLow.visible=false;
			} else if (_ds.currentStreamBitRate>=650) {
				speedBubbleHi.visible=true;
				speedBubbleMed.visible=false;
				speedBubbleLow.visible=false;
			}
		}
	}




	private function _verifyServerVersion(p_version:String):void {
		var fmsVersion:Number=Number(p_version.split(",",2).join("."));

		trace("fmsVersion: "+fmsVersion);

		if (fmsVersion>=_targetFMSVersion) {
			_isServerCapable=true;
		} else {
			_isServerCapable=false;
		}
	}



	public function getFlashPlayerMajorVersion():Number {

		var fpVersionStr:String=Capabilities.version;

		return Number(fpVersionStr.split(" ")[1].split(",",1));

	}

	//-------------------------------------------------
	//EVENT HANDLERS
	//-------------------------------------------------



	private function _onNetStatus(p_evt:NetStatusEvent):void {

		trace("NetStatus.info: "+p_evt.info.code);


		for (var i:String in p_evt.info) {
			trace(i+" : "+p_evt.info*);
		}

		switch (p_evt.info.code) {
			case "NetConnection.Connect.Success" :
				{
					trace("VERSION: "+p_evt.info.data.version);

					_verifyServerVersion(p_evt.info.data.version);


					_initStream();
					break;




			}
		}
	}

}

};

//-------------------------------------------------
//CONNECTION/STREAM CLIENT CLASSES
//-------------------------------------------------

import com.realeyes.media.AS3videoPlayer;

class ConnectionClient {
private var _owner:AS3videoPlayer;

public function ConnectionClient(p_owner:AS3videoPlayer) {
	_owner=p_owner;
}

public function onBWCheck(... rest):Number {
	return 0;
}


public function onBWDone(... rest):void {
	//rest[0]; //is the available bw

}


public function onMetaData(p_metaData:Object):void {
	trace("- Meta Data Received - ");
	_owner.setVideoSize(p_metaData.width,p_metaData.height);
}


public function onCuePoint(p_data:Object):void {
	trace("client.onCuePoint() "+p_data);
}

public function onImageData(p_data:Object):void {
	trace("client.onImageData() "+p_data);
}


public function onPlayStatus(p_data:Object):void {
	trace("client.onPlayStatus() "+p_data);
	trace("////////////////////");
	for (var i:String in p_data) {
		trace(i+" : "+p_data*);
	}


	trace("////////////////////");
}

public function onTextData(p_data:Object):void {
	trace("client.onTextData() "+p_data);
}

}