-
Extending AS2 FLVPlayback
Hi,
I'm diving back into AS2 to help a vendor. I've never extended a component class in AS2, and I'm having problems with it now.
Here's my class file:
Actionscript Code:
import mx.video.FLVPlayback; import mx.video.*; class AkamaiFLVPlayback extends FLVPlayback{ public function AkamaiFLVPlayback() { super()
} }
Here's how I'm trying to instantiate it from the FLA:
Actionscript Code:
import AkamaiFLVPlayback
var g = new AkamaiFLVPlayback() this.attachMovie(g,myVid,1) g.contentPath = "http://phpmotion.fahiec.com/uploads/EY0ttuJbAIerDIpOdDch.flv"
Now this DOES NOT WORK... at all. I can see that the super class FLVPlayback is creating variables, but it's not loading to the stage or initializing.
Any help will be greatly appreciated.
enjoy,
-tutash
-
got it
Now remember, this just fixes my problem with connecting to Akamai (it was a security issue). Your mileage may vary.
The AS file:
Actionscript Code:
class ExtendedNCManager extends NCManager implements INCManager { private var xml:XML; private var akamaiHost:String; private var isAkamai:Boolean private var _akamaiToken:String private var _serverNameAkamai:String public function connectToURL(url:String):Boolean { //trace("----------------KAPLAN NC MANAGER----------------") initOtherInfo(); _contentPath = url; if (_contentPath == null || _contentPath == undefined || _contentPath == "") { throw new VideoError(VideoError.INVALID_CONTENT_PATH); } // parse URL to determine what to do with it var parseResults:Object = parseURL(_contentPath); if (parseResults.streamName == undefined || parseResults.streamName == "") { throw new VideoError(VideoError.INVALID_CONTENT_PATH, url); } // connect to either rtmp or http or download and parse smil if (parseResults.isRTMP) { // Check to see if we are dealing with an Akamai URL isAkamai = isAkamaiStreamingURL(url) if (isAkamai) { // Check to see if that serverName has already been processed if (akamaiHost == parseResults.serverName) { _streamName = _contentPath.slice(_contentPath.indexOf("ondemand/")+9, _contentPath.length); if (_streamName.slice(-4).toLowerCase() == ".flv") { _streamName = _streamName.slice(0, -4); } // if this hostname is already in use then reuse the existing connection return true; } else { try { xml = new XML(); xml.ignoreWhite = true; xml.onLoad = Delegate.create(this, this.xmlOnLoad); xml.load("http://"+parseResults.serverName+"/fcs/ident");
return false; } catch (err:Error) { _nc = undefined; _owner.ncConnected(); throw err; } } } else { var canReuse:Boolean = canReuseOldConnection(parseResults); _isRTMP = true; _protocol = parseResults.protocol; _streamName = parseResults.streamName; _serverName = parseResults.serverName; _wrappedURL = parseResults.wrappedURL; _portNumber = parseResults.portNumber; _appName = parseResults.appName; if (_appName == undefined || _appName == "" || _streamName == undefined || _streamName == "") { throw new VideoError(VideoError.INVALID_CONTENT_PATH, url); } _autoSenseBW = (_streamName.indexOf(",")>=0); return (canReuse || connectRTMP()); } } else { if (parseResults.streamName.toLowerCase().indexOf(".flv") != -1) { var canReuse:Boolean = canReuseOldConnection(parseResults); _isRTMP = false; _streamName = parseResults.streamName; return (canReuse || connectHTTP()); } if (parseResults.streamName.indexOf("/fms/fpad")>=0) { try { return connectFPAD(parseResults.streamName); } catch (err:Error) { // } } _smilMgr = new SMILManager(this); return _smilMgr.connectXML(parseResults.streamName); } } private function xmlOnLoad(success:Boolean) { try { if (!success) { _nc = undefined; _owner.ncConnected(); } else { var ipNode = xml.firstChild.firstChild; if (ipNode.nodeName != "ip") { throw new VideoError(VideoError.INVALID_XML, "URL: \""+_contentPath+"\" did not return a valid XML when queried using IDENT"); } else { var parseResults:Object = parseURL(_contentPath); // _serverNameAkamai = _contentPath.split("://")[1].split("?")[0].split("ondemand")[0] _akamaiToken = "ondemand?auth=" + _contentPath.split("auth=")[1] // akamaiHost = parseResults.serverName; _isRTMP = true; _protocol = parseResults.protocol; _streamName = parseResults.streamName; _appName = parseResults.appName; _streamName = _contentPath.slice(_contentPath.indexOf("ondemand/")+9, _contentPath.length); _serverName = ipNode.firstChild.toString(); _wrappedURL = parseResults.wrappedURL; _portNumber = parseResults.portNumber; _appName = "ondemand?_fcs_vhost="+parseResults.serverName; if (_streamName.slice(-4).toLowerCase() == ".flv") { _streamName = _streamName.slice(0, -4); } // if (_appName == undefined || _appName == "" || _streamName == undefined || _streamName == "") { throw new VideoError(VideoError.INVALID_CONTENT_PATH, _contentPath); } connectRTMP(); } } } catch (err:Error) { _nc = undefined; _owner.ncConnected(); throw err; } } private function isAkamaiStreamingURL(url:String):Boolean { return (url.toLowerCase().indexOf("edgefcs.net/") != -1); } private function nextConnect():Void { // clearInterval(_tryNCIntervalId); _tryNCIntervalId = 0; var protocol:String; var port:String; if (_connTypeCounter == 0) { protocol = _protocol; port = _portNumber; } else { port = null; if (_protocol == "rtmp:/") { protocol = "rtmpt:/"; } else if (_protocol == "rtmpe:/") { protocol = "rtmpte:/"; } else { _tryNC.pop(); return; } } // if (isAkamai == true) { var xnURL:String = protocol + "/" + _serverNameAkamai + _akamaiToken } else { var xnURL:String = protocol + ((_serverName == undefined) ? "" : "/" + _serverName + ((port == null) ? "" : (":" + port)) + "/") + ((_wrappedURL == undefined) ? "" : _wrappedURL + "/") + _appName; } // _tryNC[_connTypeCounter].pending = true; _tryNC[_connTypeCounter].connect( xnURL, _autoSenseBW); if (_connTypeCounter < (_tryNC.length-1)) { _connTypeCounter++; _tryNCIntervalId = setInterval(this, "nextConnect", 1500); } } }
The code to include in the FLA:
Actionscript Code:
var __forceExtendedNCManager:ExtendedNCManager; mx.video.VideoPlayer.DEFAULT_INCMANAGER = "ExtendedNCManager"
I must say that this type of thing is MUCH easier to figure out in AS3. I've done my AS2 work for the week. Enough.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|