//flex 程序,主要是实现一个视频预览功能,调用flex的时候要把 预览视频的 ftp服务器地址传的flex程序中, flex程序或得视频服务器地址把地址赋值给 VideoDisplay
// 的source之后立刻播放就可以了,flex程序中有添加了一个可以用javascript调用的方法,用于用户关闭预览页面时调用该方法关闭正在播放的视频。
*****************************************html页面上的脚本程序**********************************************************************************
<script src="../scripts/swfobject.js" type="text/javascript"></script>
<script src="../scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script type="text/javascript">
//视频信息都获取到后,调用flex播放视频
function vdeflexShow(vdopat) {
var flashvars = {
path: vdopat //vdopat 是视频的ftp地址,path是自己定义的key (flex程序中要用这个key获取vdopat变量的值)
};
var params = {
wmode: "transparent",
bgcolor: "#ffffff",
allowFullScreen: "true",
allowScriptAccess: "always",
quality: "high"
};
var attributes = {
id: 'VideoPreview1', //VideoPreview1 是返回的flex的id值,是它的唯一标示,当flex加载后可以通过这个id值来调用flex的方法或做一些操作
name: 'VideoPreview1' //比如调用flex定义的myFunc(在下边的flex程序中有定义) VideoPreview1.myFunc()
};
swfobject.embedSWF("../controls/flex/DN1000/VideoPreview.swf", "VideoPreview1", "350", "280", "10.0.0", "../scripts/expressInstall.swf", flashvars, params, attributes);
} //这个是flex加载后替换 html标签的id<div id="var attributes = {id: 'VideoPreview1',"
// 这个id跟var attributes = { id: 'VideoPreview1', 可以不一样,我定义的一样是有我的用意如果不一样第一次调用flex视频可以正常播放,当我想预览另一个视频把ftp地址传发到方法里, 结果显示的还是第一个视频, 我想如果不一样第一次的时候 把 id为VideoPreview1的html标签替换为定义的flex id比如是 var attributes = {id: 'Video1'," ,这样第二次的时候,就找不到要被替换的标签(id 为 VideoPreview1 的), 如果定义的一样就没有问题
//ext:Window hide 时要关闭正在播放的视频, 关闭预览页面之前要先调用这个方法,之前我是 调用flex中的关闭方法VideoPreview1.myFunc() 的,但是发现只有第一次关闭正常之后就不行了,我想是跟我上边猜想的 第二次找不到要替换的标签应该是一个意思,所有我就想 先把flex remove掉 之后在原先 的位置 从新添加一个 ("<div id='VideoPreview1' , id要一样,用于下次调用flex时被替换,这样就可定能找到要被替换的html标签了, 事件证明这样是ok的, 同理我想也可以调用VideoPreview1.myFunc()
来关闭视频,但是既然实现了我就懒得试了
function vdeflexClose() {
swfobject.removeSWF("VideoPreview1");
$("#vdotd").html("<div id='VideoPreview1' style='height: 280px; width: 350;'></div>");
}
</script>
下边只是部分html代码,用于被替换flash的一个div
<table border="0">
<tr>
<td id="vdotd">
<div id="VideoPreview1" style="height: 280px; width: 350;">
//flex将要替换这个div的位置
</div>
</td>
</tr>
</table>
***************************************************************************************************************************************************
**************************************************************** flex程序****************************************************************************
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
initialize="App_init()" // 加载时调用相当于页面初始化吧
creationComplete="init()" //加载完成后调用
>
<fx:Script>
<![CDATA[
import mx.core.FlexGlobals //这个要引入不然vdoftppath=FlexGlobals.topLevelApplication.parameters["path"]; 会提示引用未定义的什么东东
public var vdoftppath:String;
public function App_init():void {
Security.allowDomain("*");
ExternalInterface.addCallback("videoclose",myFunc); // 注册个方法用于 javascript调用 VideoPreview1.myFunc() 关闭视频
vdoftppath=FlexGlobals.topLevelApplication.parameters["path"]; // var flashvars = { path: vdopat 现在知道是干嘛的了吧
myplayer.source=vdoftppath; //把视频的ftp地址赋给 播放器的 source
}
public function init():void {
myplayer.play(); //加载完成后开始播放就可以了
}
public function myFunc():String {
myplayer.close(); //定义的用于javascript调用的关闭视频播放器的方法
return "success";
}
]]>
</fx:Script>
<mx:VideoDisplay width="350" height="250" left="0" id="myplayer"
autoPlay="true"/> //其实这里想用 <s:VideoPlay 的无奈 赋给他视频的ftp地址时 不能播放,要是有手知道是啥原因 教教我哈
</s:Application>
//************************************************************************************************************************************************