Hi Folks,
I’ve created an animation that plays an FLV and listens for cue points. I have it working locally perfectly, but when I upload to a web server it will not work. It thows an asyncError that I am handling, but don’t understand.
I’ve attached my code below
import flash.display.Sprite;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.media.Video;
import flash.events.AsyncErrorEvent;
import flash.display.Graphics;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
var cuePointNumber:Number=0;
var metadataArray:Array = new Array();
var yArray:Array=[0,20];
var xmlArray:Array = new Array();
var newY:Number=20;
var spacer:Number=20;
var maxHeight:Number=450;
var XMLLoader:URLLoader = new URLLoader();
var XMLrequest:URLRequest=new URLRequest("../ObjectFiles/swfIFL0480011.xml");
try {
XMLLoader.load(XMLrequest);
} catch (error:Error) {
trace("Unable to load requested document.");
}
//add container for conversation
var myContainer:MovieClip = new MovieClip();
myContainer.y = 20;
addChild(myContainer);
configureListeners(XMLLoader);
createStageItems();
var customClient:Object = new Object();
customClient.onCuePoint = cuePointHandler;
customClient.onMetaData = metaDataHandler;
var videoConnection:NetConnection = new NetConnection();
videoConnection.connect(null);
//
var videoStream:NetStream=new NetStream(videoConnection);
videoStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
//videoStream.client=this;
videoStream.client=customClient;
videoStream.play("../ObjectFiles/auIFL0480011.flv");
//
var video:Video = new Video();
video.attachNetStream(videoStream);
addChild(video);
//
var netErrorText:TextField = new TextField();
netErrorText.y = 30;
netErrorText.autoSize = TextFieldAutoSize.LEFT;
addChild(netErrorText);
//
videoConnection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
videoStream.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
function configureListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
dispatcher.addEventListener(Event.OPEN, openHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}
function createStageItems() {
//display header
var myHeader:mcHeader = new mcHeader();
myHeader.x = 839.5;
myHeader.y = 1.5;
addChild(myHeader);
//display footer
var myFooter:mcFooter = new mcFooter();
myFooter.x = 840;
myFooter.y = 483;
addChild(myFooter);
//display start
var myStart:mcStart = new mcStart();
myStart.x = 741;
myStart.y = 512.5;
addChild(myStart);
myStart.name = "start_mc";
myStart.addEventListener(MouseEvent.CLICK,clickHandler);
//display prev
var myPrev:mcPrev = new mcPrev();
myPrev.x = 808.1;
myPrev.y = 512.5;
addChild(myPrev);
myPrev.name = "prev_mc";
myPrev.addEventListener(MouseEvent.CLICK,clickHandler);
//display next
var myNext:mcNext = new mcNext();
myNext.x = 875.3;
myNext.y = 512.5;
addChild(myNext);
myNext.name = "next_mc";
myNext.addEventListener(MouseEvent.CLICK,clickHandler);
//display end
var myEnd:mcEnd = new mcEnd();
myEnd.x = 942.5;
myEnd.y = 512.5;
addChild(myEnd);
myEnd.name = "end_mc";
myEnd.addEventListener(MouseEvent.CLICK,clickHandler);
}
function completeHandler(event:Event):void {
var myXML:XML=XML(event.target.data);
trace("completeHandler: " + event.target);
parseXML(myXML);
displayGraphic();
}
function openHandler(event:Event):void {
trace("openHandler: " + event);
}
function progressHandler(event:ProgressEvent):void {
trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
}
function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
}
function httpStatusHandler(event:HTTPStatusEvent):void {
trace("httpStatusHandler: " + event);
}
function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
}
function clickHandler(e:MouseEvent):void {
trace(e.target.name + " clicked");
switch (e.target.name) {
case "start_mc" :
if (cuePointNumber!=1) {
for (var i:Number = cuePointNumber; i>0; i--) {
removeContainer(i);
}
cuePointNumber=0;
videoStream.seek(metadataArray[cuePointNumber+1]);
}
if (myContainer.height < maxHeight && myContainer.y<0) {
var myStartTween:Tween = new Tween(myContainer, "y", Regular.easeOut, myContainer.y, yArray[1], .5, true);
}
break;
case "end_mc" :
if (cuePointNumber!=metadataArray.length-1) {
var myInfoObject:Object = new Object();
for (var j:Number = cuePointNumber; j<metadataArray.length-2; j++) {
cuePointHandler(myInfoObject);
//onCuePoint(myInfoObject);
}
videoStream.seek(metadataArray[metadataArray.length-1]);
}
break;
case "next_mc" :
if (cuePointNumber!=metadataArray.length-1) {
videoStream.seek(metadataArray[cuePointNumber+1]);
}
break;
case "prev_mc" :
if (cuePointNumber!=1) {
removeContainer(cuePointNumber);
removeContainer(cuePointNumber-1);
videoStream.seek(metadataArray[cuePointNumber-1]);
cuePointNumber-=2;
}
if (myContainer.height < maxHeight && myContainer.y<0) {
var myPrevTween:Tween = new Tween(myContainer, "y", Regular.easeOut, myContainer.y, yArray[1], 1, true);
}
break;
default :
trace("default");
}
}
function parseXML(myXML:XML) {
//trace(myXML.sentence);
var i:Number=1;
for each (var sentence:XML in myXML..sentence) {
xmlArray*=[sentence.@speaker,sentence];
i++;
}
}
function asyncErrorHandler(e:AsyncErrorEvent) {
var errorText:TextField = new TextField();
errorText.autoSize = TextFieldAutoSize.LEFT;
errorText.text = e.text + " " + e;
addChild(errorText);
trace(e.text);
}
function netStatusHandler(e:NetStatusEvent):void {
trace("netStatusHandler: " + e.info.code);
netErrorText.text = "netStatusHandler: " + e.info.code;
switch (e.info.code)
{
case "NetStream.Play.Start":
trace("PLAYING");
break;
case "NetStream.Play.Stop":
trace("STOPPED");
break;
}
}
function cuePointHandler(infoObject:Object):void {
//function onCuePoint(infoObject:Object):void {
//
cuePointNumber++;
trace("
"+cuePointNumber+" "+xmlArray[cuePointNumber][0]+" "+yArray[cuePointNumber]+"
"+xmlArray[cuePointNumber][1]);
//
var textHeight:Number = new Number();
var container:Sprite = new Sprite();
//
container.name="container"+cuePointNumber;
trace(" Container Name: "+container.name);
//add avatar
displayAvatar(container);
//add text
textHeight=displayText(container);
trace(" Text Height: "+textHeight);
//draw bubble
if (textHeight<40) {
drawRoundedRectangle(container,271,40,20,0xFFFFFF);
} else {
drawRoundedRectangle(container,271,textHeight,20,0xFFFFFF);
}
stage.scaleMode=StageScaleMode.NO_SCALE;
container.x=stage.stageWidth-container.width-60;
myContainer.addChild(container);
container.y=yArray[cuePointNumber];
yArray[cuePointNumber+1]=yArray[cuePointNumber]+container.height+spacer;
trace("Y POS: "+yArray[cuePointNumber]);
trace(" Overall Height: "+myContainer.height);
if (myContainer.height > maxHeight) {
var newY:Number = new Number();
//tween container
trace("Bigger than 500!");
newY = maxHeight-spacer-myContainer.height;
trace(" My Container Y: "+myContainer.y);
trace(" newY: "+newY);
var myTween:Tween = new Tween(myContainer, "y", Regular.easeOut, myContainer.y, newY, 1, true);
}
}
function removeContainer(containerNumber:Number) {
myContainer.removeChild(myContainer.getChildByName("container"+containerNumber));
}
function displayAvatar(container:Sprite) {
trace(" Display Avatar Called - CuePoint Number: "+cuePointNumber);
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadHandler);
loader.load(new URLRequest(xmlArray[cuePointNumber][0]));
function loadHandler(e:Event) {
container.addChild(loader);
}
}
function displayGraphic() {
trace(" Display Graphic Called - CuePoint Number: "+cuePointNumber);
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadHandler);
loader.load(new URLRequest("../ObjectFiles/gIFL0480011.gif"));
function loadHandler(e:Event) {
addChildAt(loader,0);
}
}
function displayText(container:Sprite):Number {
var myText:TextField = new TextField();
myText.defaultTextFormat=textFormat();
myText.width=260;
myText.multiline=true;
myText.wordWrap=true;
myText.embedFonts=true;
myText.antiAliasType=flash.text.AntiAliasType.ADVANCED;
myText.autoSize=TextFieldAutoSize.LEFT;
myText.text=xmlArray[cuePointNumber][1];
myText.x=60;
container.addChild(myText);
return myText.height;
}
function textFormat():TextFormat {
var myFont:Font = new dinRegular();
var myTextFormat:TextFormat = new TextFormat();
myTextFormat.font=myFont.fontName;
myTextFormat.color=0x002D62;
myTextFormat.size=12;
return myTextFormat;
}
function metaDataHandler(infoObject:Object):void {
//function onMetaData(infoObject:Object):void {
trace("onMetaData >");
trace(" Number of cue points: " + infoObject.cuePoints.length);
for(var i:Number = 1; i < infoObject.cuePoints.length+1; i++){;
trace(" " + i + ": " + infoObject.cuePoints[i-1].time + ", " + infoObject.cuePoints[i-1].type);
metadataArray*=infoObject.cuePoints[i-1].time;
}
}
function drawTriangle(container:Sprite,fillColor:Number):void {
var triangle:Shape = new Shape();
triangle.graphics.beginFill(fillColor);
triangle.graphics.moveTo(0,5);
triangle.graphics.lineTo(-5,10);
triangle.graphics.lineTo(0,15);
triangle.graphics.lineTo(0,5);
triangle.x=60;
container.addChild(triangle);
}
function drawRoundedRectangle(container:Sprite, width:Number, height:Number, cornerRadius:Number, fillColor:Number) {
drawTriangle(container,fillColor);
var square:Shape = new Shape();
square.graphics.beginFill(fillColor);
square.graphics.drawRoundRect(0, 0, width, height, cornerRadius);
square.graphics.endFill();
square.x=60;
container.addChildAt(square,0);
}