我想用JS调用别人开发的SWF里的一个方法,在网上找了一些方法都不成功,有高手懂吗?
下面是swf的代码,
package player_fla
{
...
dynamic public class MainTimeline extends MovieClip
{
....
public function MainTimeline()
{
addFrameScript(0, frame1);
return;
}// end function public function ncOnStatus(event:NetStatusEvent)
{
trace("nc: " + event.info.code + " (" + event.info.description + ")");
if (event.info.code == "NetConnection.Connect.Success")
{
playLiveStream();
videoLastW = 0;
videoLastH = 0;
videoObj.visible = true;
}
else if (event.info.code == "NetConnection.Connect.Failed")
{
prompt.text = "Connection failed: Try rtmp://[server-ip-address]:[port]/rtplive";
}
else if (event.info.code == "NetConnection.Connect.Rejected")
{
prompt.text = event.info.description;
}
return;
}// end function public function getPlayState()
{
return m_playstate;
}// end function public function nsOnStatus(event:NetStatusEvent)
{
....
}// end function public function enterFullscreen(event:MouseEvent)
{
...
}// end function public function doStop()
{
nsPlay.close();
videoObj.clear();
if (videoSizeTimer)
{
clearInterval(videoSizeTimer);
}
videoSizeTimer = 0;
videoLastW = 0;
videoLastH = 0;
nsPlay = null;
nc.close();
nc = null;
prompt.text = "";
if (debugInterval != 0)
{
clearInterval(debugInterval);
}
debugInterval = 0;
m_playstate = 0;
return;
}// end function public function updateStreamValues()
{
var _loc_1:String = "";
if (nsPlay != null)
{
_loc_1 = Math.round(nsPlay.currentFPS * 1000) / 1000 + " fps/" + Math.round(nsPlay.bufferLength * 1000) / 1000 + " secs";
}
return;
}// end function public function showMsg(param1)
{
prompt.visible = true;
prompt.text = param1;
return;
}// end function public function updateVideoSize()
{
var _loc_1:Number = NaN;
var _loc_2:Number = NaN;
videoObj.visible = true;
return;
}// end function public function stageResize(event:Event) : void
{
backdrop.width = stage.stageWidth;
backdrop.height = stage.stageHeight;
prompt.y = stage.stageHeight - prompt.height;
prompt.width = stage.stageWidth;
saveStageW = stage.stageWidth;
saveStageH = stage.stageHeight;
saveVideoObjW = stage.stageWidth;
saveVideoObjH = stage.stageHeight;
videoObj.width = stage.stageWidth;
videoObj.height = stage.stageHeight;
return;
}// end function public function hideAllControls(param1:Boolean)
{
backdrop.visible = !param1;
return;
}// end function public function enterLeaveFullscreen(event:FullScreenEvent)
{
trace("enterLeaveFullscreen: " + event.fullScreen);
hideAllControls(event.fullScreen);
if (!event.fullScreen)
{
stage.scaleMode = "noScale";
videoObj.width = adjVideoObjW;
videoObj.height = adjVideoObjH;
videoObj.y = saveVideoObjY + saveVideoObjH - adjVideoObjH;
videoObj.x = (saveStageW - adjVideoObjW) / 2;
}
return;
}// end function public function doPlay(param1, param2)
{
m_playstate = 1;
m_server = param1;
m_stream = param2;
showMsg("准备播放...");
nc = new NetConnection();
nc.connect(m_server);
nc.addEventListener(NetStatusEvent.NET_STATUS, ncOnStatus);
return;
}// end function function frame1()
{
Security.allowDomain("*");
nc = null;
stageListener = new Object();
videoSizeTimer = 0;
videoLastW = 0;
videoLastH = 0;
fullscreenCapable = false;
hardwareScaleCapable = false;
debugInterval = 0;
bufferTime = 3;
m_playstate = 0;
m_defaul_msg = "播放器就绪";
ExternalInterface.addCallback("doPlay", doPlay);
ExternalInterface.addCallback("doStop", doStop);
ExternalInterface.addCallback("getPlayState", getPlayState);
h264Capable = testVersion(9, 0, 115, 0);
stage.addEventListener(FullScreenEvent.FULL_SCREEN, enterLeaveFullscreen);
stage.addEventListener(Event.RESIZE, stageResize);
saveVideoObjX = videoObj.x;
saveVideoObjY = videoObj.y;
saveStageW = stage.stageWidth;
saveStageH = stage.stageHeight;
var _loc_1:* = videoObj.width;
saveVideoObjW = videoObj.width;
adjVideoObjW = _loc_1;
var _loc_1:* = videoObj.height;
saveVideoObjH = videoObj.height;
adjVideoObjH = _loc_1;
videoObj.visible = false;
fullscreenCapable = testVersion(9, 0, 28, 0);
hardwareScaleCapable = testVersion(9, 0, 60, 0);
stage.align = "TL";
stage.scaleMode = "noScale";
stageResize(null);
return;
}// end function public function testVersion(param1:Number, param2:Number, param3:Number, param4:Number) : Boolean
{
var _loc_8:Number = NaN;
var _loc_5:* = Capabilities.version;
var _loc_6:* = Capabilities.version.indexOf(" ");
_loc_5 = _loc_5.substr((_loc_6 + 1));
var _loc_7:* = _loc_5.split(",");
var _loc_9:Boolean = true;
while (true)
{
if (Number(_loc_7[0]) < param1)
{
_loc_9 = false;
break;
}
else if (Number(_loc_7[0]) > param1)
{
break;
}
if (Number(_loc_7[1]) < param2)
{
_loc_9 = false;
break;
}
else if (Number(_loc_7[1]) > param2)
{
break;
}
if (Number(_loc_7[2]) < param3)
{
_loc_9 = false;
break;
}
else if (Number(_loc_7[2]) > param3)
{
break;
}
if (Number(_loc_7[3]) < param4)
{
_loc_9 = false;
break;
}
break;
}
trace("testVersion: " + Capabilities.version + ">=" + param1 + "," + param2 + "," + param3 + "," + param4 + ": " + _loc_9);
return _loc_9;
}// end function public function playLiveStream()
{
m_playstate = 2;
nsPlay = new NetStream(nc);
nsPlay.addEventListener(NetStatusEvent.NET_STATUS, nsOnStatus);
var nsPlayClientObj:* = new Object();
nsPlay.client = nsPlayClientObj;
nsPlayClientObj.onMetaData = function (param1:Object)
{
var _loc_2:String = null;
trace("onMetaData");
for (_loc_2 in param1)
{
trace(" " + _loc_2 + " = " + param1[_loc_2]);
}
return;
}// end function
;
nsPlay.bufferTime = bufferTime;
nsPlay.play(m_stream);
videoObj.attachNetStream(nsPlay);
m_playstate = 3;
clearMsg();
return;
}// end function public function clearMsg()
{
prompt.visible = false;
prompt.text = "";
return;
}// end function }
}
怎样用JS调用doPlay(),doStop(),getPlayState()这三个方法?
下面是swf的代码,
package player_fla
{
...
dynamic public class MainTimeline extends MovieClip
{
....
public function MainTimeline()
{
addFrameScript(0, frame1);
return;
}// end function public function ncOnStatus(event:NetStatusEvent)
{
trace("nc: " + event.info.code + " (" + event.info.description + ")");
if (event.info.code == "NetConnection.Connect.Success")
{
playLiveStream();
videoLastW = 0;
videoLastH = 0;
videoObj.visible = true;
}
else if (event.info.code == "NetConnection.Connect.Failed")
{
prompt.text = "Connection failed: Try rtmp://[server-ip-address]:[port]/rtplive";
}
else if (event.info.code == "NetConnection.Connect.Rejected")
{
prompt.text = event.info.description;
}
return;
}// end function public function getPlayState()
{
return m_playstate;
}// end function public function nsOnStatus(event:NetStatusEvent)
{
....
}// end function public function enterFullscreen(event:MouseEvent)
{
...
}// end function public function doStop()
{
nsPlay.close();
videoObj.clear();
if (videoSizeTimer)
{
clearInterval(videoSizeTimer);
}
videoSizeTimer = 0;
videoLastW = 0;
videoLastH = 0;
nsPlay = null;
nc.close();
nc = null;
prompt.text = "";
if (debugInterval != 0)
{
clearInterval(debugInterval);
}
debugInterval = 0;
m_playstate = 0;
return;
}// end function public function updateStreamValues()
{
var _loc_1:String = "";
if (nsPlay != null)
{
_loc_1 = Math.round(nsPlay.currentFPS * 1000) / 1000 + " fps/" + Math.round(nsPlay.bufferLength * 1000) / 1000 + " secs";
}
return;
}// end function public function showMsg(param1)
{
prompt.visible = true;
prompt.text = param1;
return;
}// end function public function updateVideoSize()
{
var _loc_1:Number = NaN;
var _loc_2:Number = NaN;
videoObj.visible = true;
return;
}// end function public function stageResize(event:Event) : void
{
backdrop.width = stage.stageWidth;
backdrop.height = stage.stageHeight;
prompt.y = stage.stageHeight - prompt.height;
prompt.width = stage.stageWidth;
saveStageW = stage.stageWidth;
saveStageH = stage.stageHeight;
saveVideoObjW = stage.stageWidth;
saveVideoObjH = stage.stageHeight;
videoObj.width = stage.stageWidth;
videoObj.height = stage.stageHeight;
return;
}// end function public function hideAllControls(param1:Boolean)
{
backdrop.visible = !param1;
return;
}// end function public function enterLeaveFullscreen(event:FullScreenEvent)
{
trace("enterLeaveFullscreen: " + event.fullScreen);
hideAllControls(event.fullScreen);
if (!event.fullScreen)
{
stage.scaleMode = "noScale";
videoObj.width = adjVideoObjW;
videoObj.height = adjVideoObjH;
videoObj.y = saveVideoObjY + saveVideoObjH - adjVideoObjH;
videoObj.x = (saveStageW - adjVideoObjW) / 2;
}
return;
}// end function public function doPlay(param1, param2)
{
m_playstate = 1;
m_server = param1;
m_stream = param2;
showMsg("准备播放...");
nc = new NetConnection();
nc.connect(m_server);
nc.addEventListener(NetStatusEvent.NET_STATUS, ncOnStatus);
return;
}// end function function frame1()
{
Security.allowDomain("*");
nc = null;
stageListener = new Object();
videoSizeTimer = 0;
videoLastW = 0;
videoLastH = 0;
fullscreenCapable = false;
hardwareScaleCapable = false;
debugInterval = 0;
bufferTime = 3;
m_playstate = 0;
m_defaul_msg = "播放器就绪";
ExternalInterface.addCallback("doPlay", doPlay);
ExternalInterface.addCallback("doStop", doStop);
ExternalInterface.addCallback("getPlayState", getPlayState);
h264Capable = testVersion(9, 0, 115, 0);
stage.addEventListener(FullScreenEvent.FULL_SCREEN, enterLeaveFullscreen);
stage.addEventListener(Event.RESIZE, stageResize);
saveVideoObjX = videoObj.x;
saveVideoObjY = videoObj.y;
saveStageW = stage.stageWidth;
saveStageH = stage.stageHeight;
var _loc_1:* = videoObj.width;
saveVideoObjW = videoObj.width;
adjVideoObjW = _loc_1;
var _loc_1:* = videoObj.height;
saveVideoObjH = videoObj.height;
adjVideoObjH = _loc_1;
videoObj.visible = false;
fullscreenCapable = testVersion(9, 0, 28, 0);
hardwareScaleCapable = testVersion(9, 0, 60, 0);
stage.align = "TL";
stage.scaleMode = "noScale";
stageResize(null);
return;
}// end function public function testVersion(param1:Number, param2:Number, param3:Number, param4:Number) : Boolean
{
var _loc_8:Number = NaN;
var _loc_5:* = Capabilities.version;
var _loc_6:* = Capabilities.version.indexOf(" ");
_loc_5 = _loc_5.substr((_loc_6 + 1));
var _loc_7:* = _loc_5.split(",");
var _loc_9:Boolean = true;
while (true)
{
if (Number(_loc_7[0]) < param1)
{
_loc_9 = false;
break;
}
else if (Number(_loc_7[0]) > param1)
{
break;
}
if (Number(_loc_7[1]) < param2)
{
_loc_9 = false;
break;
}
else if (Number(_loc_7[1]) > param2)
{
break;
}
if (Number(_loc_7[2]) < param3)
{
_loc_9 = false;
break;
}
else if (Number(_loc_7[2]) > param3)
{
break;
}
if (Number(_loc_7[3]) < param4)
{
_loc_9 = false;
break;
}
break;
}
trace("testVersion: " + Capabilities.version + ">=" + param1 + "," + param2 + "," + param3 + "," + param4 + ": " + _loc_9);
return _loc_9;
}// end function public function playLiveStream()
{
m_playstate = 2;
nsPlay = new NetStream(nc);
nsPlay.addEventListener(NetStatusEvent.NET_STATUS, nsOnStatus);
var nsPlayClientObj:* = new Object();
nsPlay.client = nsPlayClientObj;
nsPlayClientObj.onMetaData = function (param1:Object)
{
var _loc_2:String = null;
trace("onMetaData");
for (_loc_2 in param1)
{
trace(" " + _loc_2 + " = " + param1[_loc_2]);
}
return;
}// end function
;
nsPlay.bufferTime = bufferTime;
nsPlay.play(m_stream);
videoObj.attachNetStream(nsPlay);
m_playstate = 3;
clearMsg();
return;
}// end function public function clearMsg()
{
prompt.visible = false;
prompt.text = "";
return;
}// end function }
}
怎样用JS调用doPlay(),doStop(),getPlayState()这三个方法?
解决方案 »
- 关于Jquery-Append的使用
- jsp 中在父页面打开的showModalDialog 点击关闭后自己又打开一次怎么回事啊
- 讨论下DHTML这个概念
- 修改火狐兼容问题啊!!! 谁会来看看,很锻炼你的技术啊!!!
- 请教javascript数值问题
- jquery实现连续选中的TR向下移动
- chrome浏览器对cssRules的支持
- 在用 showModalDialog 是显示的数据不刷新,怎么办?急!!
- 谁知道哪里有Javascript Style Sheets,我在上网找不到相关学习资料
- 求救!在线等待!
- js如何加载这样的xml
- 在editorgrid中如何使用My97datepicker日期控件???
LZ实在做不出来,就参考SWFObject的代码吧。
ExternalInterface.addCallback("doStop", doStop);
ExternalInterface.addCallback("getPlayState", getPlayState);添加类似的声明
<object><param name="allowScriptAccess" value="sameDomain" /></object>
<embed allowScriptAccess="sameDomain">如果是跨域加载的flash,sameDomain改成always
<object><param name="allowScriptAccess" value="always" /></object>
<embed allowScriptAccess="always">