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]david@realeyes.com[/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]david@realeyes.com[/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);
}
}