怎么实现两个flash player 10通信

FLASH课件制作技术-窗口控制_FLASH专题_且行资源
&当前位置: &
使用,首先要考虑的一个问题就是课件的窗口的大小,也就是FLASH舞台的大小。默认情况下,FLASH的舞台大小是550*400,做课件有时把舞台改成800*600/[或稍小],正好和普通的15/17寸显示分辨率一样,也有时我们希望FlASH可以全屏播放,用户不能更改窗口大小,这些问题要如何解决呢?问题一:如何改变舞台的大小解决方法:在新建FLASH文档后,在文档的属性面板上可以编辑舞台大小和其它属性,包括背景颜色和动画播放速度(帧频:每秒播放多少帧)等。如果看不到属性面板,请单击CTRL+F3.或者是从窗口菜单中选择。&深入理解:舞台对于FLASH来说非常重要,只有放在舞台上的东西才能显示出来,在新建FLASH文档时,系统通过Stage类自动创建一个舞台舞台实例:stage(也就是你看到的舞台)。在动画运行时,你可以通过stage的一些属性,如:stageWidth,stageHeight,stageframeRate等来获取舞台的具体状态:1 新建FLASH文档,在第一帧输入以下代码:trace(&舞台的宽度是:&+stage.stageWidth);
trace(&舞台的高度是:&+stage.stageHeight);
trace(&FLASH播放的帧频是:&+stage.frameRate);
trace(&FLASH的质量等级:&+stage.quality);2 输出结果为:舞台的宽度是:550
舞台的高度是:400
FLASH播放的帧频是:24
FLASH的质量等级:HIGH3 常用的stage公用属性还有:scaleMode : String& 一个 StageScaleMode 类中指定要使用哪种缩放模式的值。
stage.scaleMode=StageScaleMode.NO_SCALE;//设置舞台属性不跟随播放器大小而改变showDefaultContextMenu : Boolean 指定显示或隐藏 Flash Player 上下文菜单中的默认项。
& stage.showDefaultContextMenu= //屏蔽右键菜单width和height,用来取得舞台上显示对象的宽度和高度,注意此属性和stageWidht,stageHeight的区别。&问题二:如何全屏窗口以及让窗口在全屏和原来大小中切换。查看效果:(单击舞台上的按钮)全屏播放课件最大的好处就是可以适应所有电脑屏幕的大小和分辨率,在FLASH中实现全屏的方法是利用舞台的displayState属性:1 新建一个用来控制全屏和非全屏的按钮(可以制作成开关按钮),放到舞台上,起名为:full_btn2 在主场景的时间轴第一帧输入以下代码:说明:如果你只想实现全屏效果,只要在事件响应函数里写这一句就行了:stage.displayState=StageDisplayState.FULL_SCREEN;//为按钮添加侦听事件full_btn.addEventListener(MouseEvent.CLICK,goFullScreen);//用来实现全屏切换 function goFullScreen(event:MouseEvent):void {
&&&&& switch (stage.displayState) {
&&&&&&& case &normal& :
&&&&&&&&& stage.displayState = &fullScreen&;
&&&&&&& case &fullScreen& :
&&&&&&& default :
&&&&&&&&& stage.displayState = &normal&;
&&&&& }}3 利用Flash文件菜单,进入发布设置,选择发布为SWF和HTML两种格式后,发布。网页中的FLASH要实现全屏播放,请一定在HTML文件修改一下Flash播放时的属性:允许全屏播放&param name=&allowFullScreen& value=&true& /&类似的还有,控制Flash访问文件的安全性设置和背景透明等属性:设置FLASH访问文件安全性,不允许跨域访问&param name=&allowScriptAccess& value=&sameDomain& /&设置FLASH背景透明&param name=&wmode& value=&transparent&&&源文件下载:4 如果做课件经常使用到这种功能,可以制作一个类文件,以后只要利用这个类,在课件中生成一个实例就可以了。建立一个空Fla,类型为:AS3,保存文件为AS3FullScreen.fla建立一个FSButton.as文件,代码如下:package {
& import flash.display.S
& import flash.display.S
& import flash.events.MouseE
& public class FSButton extends Sprite {
&&& public function FSButton() {
&&&&& var navBtn1:AS3FullScreen=new AS3FullScreen();
&&&&& this.addChild(navBtn1);
&&&&& navBtn1.x=200;
&&&&& navBtn1.y=200;
&&&&& navBtn1.addEventListener(MouseEvent.CLICK,goFullScreen);
&&& function goFullScreen(event:MouseEvent):void {
&&&&& switch (stage.displayState) {
&&&&&&& case &normal& :
&&&&&&&&& stage.displayState = &fullScreen&;
&&&&&&& case &fullScreen& :
&&&&&&& default :
&&&&&&&&& stage.displayState = &normal&;
}在AS3FullScreen.fla文件中,利用文档类(舞台的属性)绑定:FSButton类。如果你不习惯按钮的外观,可以在FLASH里创建按钮。利用库中的按钮元件类,生成新实例。【】原文件下载:&问题三:如何关闭窗口退出利用AS中的fscommand()函数可以关闭FLASH播放器,除此之外,利用fscommand()还可以实现FLASH与其它程序通信,以及存储变量等操作,具体格式如下:fscommand(cmd_string, arg_string)cmd_string指定所要执行的指令名,arg_string声明该指令所用到的参数。注意这个函数的两个参数都是字符串,所以在输入参数时,必须加双引号,true或false也不例外,要用引号引起来。1 新建一个AS3文档,并创建一个按钮,实例名为:close_btn2 在场景主时间轴的第一帧上输入:close_btn.addEventListener(MouseEvent.CLICK,closeF);function closeF(event:MouseEvent):void {
&&& fscommand(&quit&,&true&);}3 输出swf文件后,请单独运行swf文件(因为这是退出flash player)因此在编辑环境中CTRL+ENTER测试是没有效果的。问题四:如何禁止用户缩放影片同问题三,使用的也是只是参数不同//不允许缩放即在改变Flash player窗口大小时,FLASH中的对象不会发生变化。fscommand(&allowscale&,&false&);与之类似的功能,还可以使用:stage.scaleMode=&noScale&;问题五:用户在改变窗口大小时,如何执行特别命令改变对你大小的事件是Event.RESIZE,所以可以用这个侦听窗口大小有没有改变。新建一个as3文档,在舞台上放一个info_txt的动态文本框stage.scaleMode=&noScale&;
stage.align =&TL&;
对齐方式这里纯粹是为多介绍一下stage的align属性,与此例功能无关。
StageAlign.TOP: 顶对齐
StageAlign.BOTTOM: 底对齐
StageAlign.LEFT: 左对齐
StageAlign.RIGHT: 右对齐
StageAlign.TOP_LEFT: 左上对齐简写TL
StageAlign.TOP_RIGHT: 右上对齐
StageAlign.BOTTOM_LEFT: 左下对齐。
StageAlign.BOTTOM_RIGHT: 右下对齐。
function resizeHandler(event:Event=null):void {
&&&&&&& info_txt.text =&你改变了窗口大小&;
}stage.addEventListener(Event.RESIZE,resizeHandler);这里有一些且行收集的很不错的FLASH课件推荐给大家:1角的度量:2 且行比赛计分器:3 as3 通过滑块控制图片的大小:&4 且行制作的FLASH课件模板:& 5你可以访问且行写的和提供的资料。
上一篇: 下一篇:
这个就是遮盖
哈哈,边学边做
坐得怎么样
呃...防止舞台以外漏点的那个,没看明白呢!?
这个就是遮盖
太有才了,每次来这里都收获多多谢谢
哈哈,边学边做
我坐个沙发
坐得怎么样
&14409&&&&&238&69325&&&&&116&20781&&&&&115&1414&&&&&83&8976&&&&&78
访客日访客日访客日访客日访客日
访客丫丫才哥lili黑眼睛李那个小00123木zhenjinyhy10句子wj木偶师黄晓君dugu
联系电话:原理机制(35)
1. Flash 运行时
用C++、汇编语言和ActionScirpt编写
发布的Flash Player版本向前兼容
一切归结为核心周期。。。
2. 核心周期
事件、用户代码、运行时环境和输出相当于Flash Player(其实是不只这些,还有通信),而Flash Player嵌入到浏览器中
3.用户代码
由上图可以看出,Flash Player内置两个虚拟机,它们各司其职,AVM1用来执行AS1和AS2编写的swf,AVM2用来执行AS3编写的swf。AVM1和AVM2是无法直接相互访问的,可以通过间接方法来实现。(比如ExternalInterface和javascript一起,或者LocalConnection)
4.用户代码的发展历史
Flash发展的最初是一个动画引擎,Flash Pro为每一帧动画创建swf代码,估计Flash Player里面只有一个swf代码处理器
不久后,人们希望在swf中增加交互的功能,ActionScript1(AS1)出现。AS都是基于ECMAScript,AS1由AVM1解释执行,而且是在特定的帧上执行,或者响应事件。
虚拟机(AVM)让Flash异常成功,但是还是无法满足游戏和应用开发的需要,主要体现在运行时的性能(连现在都是),运行时错误报告,调试和分析器。所以Adobe重写AVM和使用AS3,还在把AS3先转化为字节码然后再让AVM2执行。
5. AVM2如何工作
主要分为四个部分,这四个部分也是最为区别AVM1的。
首先是校验器,校验是保证用户代码执行时的安全机制(而且校验和代码执行是分开的),任何函数的第一次调用之前要验证其正确性(类型安全,合法跳转和引用),一次校验便可以生成安全高效的代码(因为字节码总是在解释器里不断的被执行,而验证监测只需一次,但AS2就是循环一万次,验证也执行一万次),而且校验器决定代码的执行方式。
其次是即时编译,AS3虚拟机是一个即时编译类型的虚拟机(常见的编译机制之一),AS字节码(ABC)转换为LIR(静态单赋值形式),生成的本地代码直接在CPU上执行(编译器是执行字节码机制中的主要部分,而不是解释器,解释器的工作是针对我们桌面系统平台底层语言而言的)。LIR的出现的原因可能是大多数优化器都依赖与LIR形式提供的数据流信息。对LIR优化,比如:常量叠算、子表达式消除、内联特殊函数运算、线性扫描寄存器分配。。
然后是解释器,高级代码总是被解释执行(如java),一个单独的内循环需要重复执行以下局部操作:抓一个指令、执行指令、处理下一个指令。
最后就是垃圾回收,内存具体怎么管理,我们无需知道。计数和标记来回收。逐步回收AS3对象和内部的C++对象。内存泄露:弱引用、事件监听、字典。
6.运行时环境
显示列表和文本引擎
首先是显示列表:Flash是“保留模式”,并不直接绘制屏幕。只有在显示列表中出现的显示对象才会在屏幕上出现,通过修改显示列表来完成。渲染器将显示列表转换为屏幕上的像素。无法强制Flash渲染屏幕。
然后是文本,分为文本框TextField和Flash文本引擎
文本框完全是用C++语言实现的,对国际化支持不足(从右向左文本或者竖排文本,复杂字形渲染)。单一实现,无法修改定制。对设备相关的输入法支持的很好。
Flash文本引擎和文本布局框架,复杂格式,复杂布局,高级印刷。
原来渲染器在这里。渲染器如果基于显示列表生成屏幕上的像素?第一步是视频解码:
第二步,分解显示列表,基于形状生成全局边缘列表,然后为栅格器优化
第三步,扫描边缘(Edges),逐行生成屏幕上的像素值,存储在缓冲区内。
第四步,将最终合成的位图交给浏览器展现在屏幕上。
最后总结一下,先看一下全图:
1.代码执行和渲染是两个完全分离的过程
2.帧执行模型:Flash Player发出事件——用户代码被执行(虚拟机以外由开发者编写的代码)——RENDER事件派发,显示列表是否失效——最后用户代码执行
3.渲染显示列表过程中不会与任何用户代码被执行。
转载:http://blog.csdn.net/sysu_2010/article/details/6592831
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:650137次
积分:12957
积分:12957
排名:第640名
原创:571篇
转载:502篇
评论:63条
(3)(6)(4)(1)(4)(5)(17)(4)(10)(5)(11)(3)(10)(4)(7)(3)(5)(6)(12)(5)(1)(1)(8)(2)(6)(20)(27)(13)(29)(9)(6)(1)(1)(4)(8)(25)(17)(4)(1)(1)(2)(6)(11)(57)(62)(37)(12)(9)(11)(5)(63)(46)(34)(65)(117)(74)(37)(48)(11)(8)(2)(3)(1)(1)(4)(1)(1)(1)(41)[120108](FLASH)借助FMS实现即时文字、语音、视频聊天|易语言俱乐部 - 易语言俱乐部 - Powered by phpwind
查看完整版本: [--
&Pages: ( 2 total )
[120108](FLASH)借助FMS实现即时文字、语音、视频聊天
[120108](FLASH)借助FMS实现即时文字、语音、视频聊天一、关于FMSFlash Media Server (简称FMS)  服务器是用于用户之间相互通讯的新平台。它集成了Flash多媒体交互的特性,又添加了实时音频和实时数据流等新特色应用  使用该平台,你可以通过网络存储录制下来的音频、视频,也可以共享数据对象,并且可以将这些音频、视频和共享数据对象传递给多个,实现实时同步共享。该平台集成了通讯功能和功能,它通过Flash Player(Flash player6或更高)在客户端提供音频共享,和数据流。  FMS是一个完全基于的多媒体实时通讯环境,代表了当前实时通讯领域内的发展的方向,并且,其自身也融合了大量的新特色,用于创建下一代通讯应用程序  简而言之,Adobe的FMS是一个多媒体应用平台,在这个平台上,可以实现多媒体流的点播、直播、交互等多种应用,由于Adobe公司在应用上的雄厚实力,以及Adobe Flash Player在网络上应用的广泛性,因此,FMS成为诸多多媒体应用的服务器端主要应用平台。如Youtube、tudou等。支持协议  、RTMPT、RTMPE、RTMPS、都是FMS支持的协议。二次开发  FMS是一个应用平台,同时更是一个二次开发平台,在这个平台上,可以实现多种网络多媒体内容的传播和交互应用。  作为二次开发平台,FMS具有很多领先优势,但同时因为Adobe本身对FMS的商业保护和使用限制,在具体应用上,也存在不少障碍,因此也有许多开源组织和相应的厂商推出了类似FMS的多媒体开发平台,如开源组织的Red5、国内的UBI Meeting 、八百里Flash P2P流媒体系统等,在这些平台上,开发者可以更为简洁的实现二次开发设计。具体对比如下:  Adobe Flash Media Server(FMS):专业厂商产品,性能优良、稳定。有版权问题,过高。核心技术为Adobe所有,后续扩展、升级、定制基本不可能。  基于开源代码的Media Server(如Red 5):目前主要是基本java的开源red5.性能较差,稳定性不够,距离稳定、大容量的商业化应用尚有一定的差距。  其他专业的Media Server(如UBI Meeting):专业商用产品,性能优良、稳定。,厂商拥有核心技术,具备开放性、模块化、扩展能力强等优势,后续升级、定制等服务及时。  八百里Flash P2P流媒体系统:专业商用产品,性能优良、稳定。自主知识产权,厂商拥有核心技术,具备开放性、模块化、扩展能力强等优势,后续升级、定制等服务及时。它无插件式设计,http/rtmp/rtmfp多协议支,支持多种播放方式(直播,点播,时移,伪直播)等等,视频清晰流畅。——百度百科二、关于RTMFP协议RTMFP  RTMFP是Adobe公司开发的一套新的通信协议,该协议可以让使用Adobe Flash Player的终端用户之间进行直接通信。用Adobe AIR框架开发的程序也可以用此协议来发布直播、实时信息。  通过使用RTMFP, 那些以来直播、实时通信的应用,比如社区、音视频聊天和多人游戏就有能力来发布高质量的通信解决方案。RTMFP让终端用户可以直接连接并通信,可以使用麦克风和摄象头直接聊天。RTMFP将不支持文件和文档共享。此方案提升了目前Flash Player在网络交互方面的体验。  RTMFP将减少直播、实时聊天方案的带宽消耗,例如音视频聊天和多人游戏。因为RTMFP的数据在终端用户之间流动,而不是和服务器,所以此方案很适合于大范围的部署。RTMFP因为采用了UDP也提升了传送的速度。UDP是Internet上一种更有效传送音频视频的方法,虽然会有一些丢包,错包。RTMFP有两个特性可以帮助解决一些连接错误。  快速连接恢复:连接在以外情况下将快速恢复。例如,一个无线连接掉线了,一旦重连,他将迅速拥有所有的传送能力。  IP动态化:一个活动的网络会话将以PEER来标识,即使他变了一个IP,也可以保持原来的会话。例如,一个笔记本在一个无线网络获得了一个新IP地址,他将立刻继续刚才的会话。  RTMP和RTMFP之间的不同。  最基本的确实是他们在网络上采用的协议。RTMFP是基于UDP的,RTMP是基于TCP的。UDP在传送直播数据方面比TCP还是有较多优势的,比如减少延时,对丢包的容忍,虽然在可靠性上有所损失。不象RTMP, RTMFP支持Flash Player直接发送数据给另一个,而不经过Server。服务端连接将被用来初始化并交互一些客户端之间的信息,也可用来进行服务端调用或者作为进入其他系统的网关。FMS也将用来为用户提供地址认证服务和NAT地址转换服务,避免用户陷入混乱。  历史:  该技术是由ADOBE在2006收购的公司Amicima最先开发的。——百度百科三、关于点对点应用[font='Times New Roman']Adobe Flash Player 10 和 Adobe AIR 1.5 引入了一个新的通讯协议,Real-Time Media Flow Protocol (RTMFP),其低延迟,端到端的对等功能,安全性和可扩展性使它特别适合开发实时协作应用,不仅提供卓越的用户体验,而且运营商降低成本。早前的Flash Player 版本使用Real-Time Messaging Protocol (RTMP) 需要Adobe Flash Media Server (FMS)提供合作应用(例如 Adobe Acrobat Connect Pro)或者音频视频流。RTMP是streaming media, shared objects, 和 remoting连接的卓越选择,它满足实时性要求的交互式音频和视频通信的能力有限。为了能够使用RTMFP,Flash Player 客户端必须连接到一个支持RTMFP协议的服务器,例如Adobe Stratus beta 服务器或者是新版本的FMS。Stratus 是一台用于Flash Player 客户端间通信的主机。不同于FMS, Stratus 不支持视频转播,shared objects,脚本,等。因此,使用Stratus,只可以开发Flash Player的客户端直接相互交流的应用程序。Flash Player 已经在web视频领域占有重要的市场份额。由于采用RTMFP和先进的媒体压缩技术,将有利于Flash Player 10处于实时通信的领先地位。在这篇文章中,我首先强调在即时通讯领域使用RTMFP的优势。其次,我将要介绍直接管理点对点RTMFP管理所对应的新的ActionScript 3.0 API。最后,我介绍我们的VideoPhone应用实例。Requirements要求为了使用文中的文件,你需要以下软件和文件:Flex Builder 3Try Buy 注意:请按照Introducing Flex SDK 3.2 and Flex Builder 3.0.2指南中的方法去安装Flex Builder 3.0.2.这里面包括Flex SDK 3.2, 这是为了建立 Flash Player 10应用。尽管你也可以使用Adobe Flash Professional CS4 作为开发工具,但这篇文件指导你如果使用Flex Builder 3建立一个简单的应用.Flash Player 10Download Sample files:stratus_article_assets.zip (ZIP, 13K) Prerequisite knowledge预备知识熟悉ActionScript 3.0 和 Flex Builder 是必要的。Benefits of RTMFPRTMFP的好处Real-Time Media Flow Protocol (RTMFP)是一个引入到Flash Player 10 和 in AIR 1.5新的通讯协议。同Real-Time Messaging Protocol (RTMP)的主要不同点之一是,RTMP基于传输控制协议 (TCP) 和 先前版本的Flash Player,RTMFP建立在 User Datagram Protocol (UDP)协议.TCP提供了可靠的数据传输(也适用于文件传输,电子邮件等) ,它没有提供任何端到端延迟保证。可靠的数据传输的TCP实现了重新传输丢失的数据,其中包括了延迟。由于尽量减少端到端延迟是实时通信 (几百毫秒的延迟可能使一个会话不可用)中最重要的一个目标,TCP是不适合用于这一目的。传输错误复原和恢复不可分割的组成部分,最先进的音频和视频压缩技术,如Speex音频和H.264视频编解码器,可同时在Flash Player 10 。因此,可靠的交付所提供的TCP没有必要的。因此, UDP连接,它提供了一个高效,快速的数据传输,是普遍使用的实时协作应用,尽量减少端到端延迟是至关重要的。另一个优势在于 UDP连接,它使端到端的对等,也就是说,数据直接的传输客户之间后面网络地址转换( NAT ) 。当同RTMP做对比,RTMFP提供下列高级的即时通讯:低延迟:一但RTMFP建立起了UDP,它将给即时通讯提供最小的延迟。重要的是要注意RTMFP提供了可靠和不可靠的服务。当在两个Flash Player 实例之间发送数据的时候(例如,使用NetStream.send()方法),可靠的数据传输被使用。当在两个Flash Player 实例之间发送Speex 音频的时候,不可靠的交互方式被使用,以提供最小的延迟。 点对点媒体传输:媒体直接发送给两个Flash Player的情况下,不通过路由,而是通过一个中央中继服务器。当同RTMP相比发现,在所有通过Flash Media Server传送的数据, RTMFP不仅进一步降低了端到端的延迟,而且也消除了中央数据中继的相关开销,因此,有助于自身的可扩展性部署。 数据的优先次序:音频传输具有较高优先于视频和非时间关键数据(如即时信息等) 。这可以通过带宽通信通道的限制大大提高在用户体验。 所有这些功能代表了应用于实时通信的巨大优势,提供了一个极大的用户体验,其成就比早期版本的Flash播放器的效应更为巨大。Firewall traversal穿越防火墙RTMFP是建立在UDP连接的基础上,使客户端直接的通信,即使它们位于NATs(译者注:是一个网络协议允许客户端后面的NAT (网络地址转换) ,以找出其公共地址,类型的NAT是延迟和互联网方面的端口相关的网络地址转换,尤其本地端口。此信息是用来建立UDP连接(用户数据报协议)之间的沟通 两个主机都是延迟的NAT路由器。该议定书是指在RFC 3489)或防火墙。为了RTMFP工作,您的防火墙必须配置为允许即将发出的UDP通信。大多数的消费者或小型办公室/家庭办公室( SOHO )的防火墙是这种情况,许多企业防火墙完全阻止UDP通信。一种解决办法是配置的Flash Player使用转向代理 (遍历周围可用的NAT ) 。 Flash Player的支持IETF的因特网草案draft-ietf-behave-turn-08。如果网络管理员配置转向代理,允许即将发送的UDP连接, Flash播放器可以增加在mms.cfg的配置(更多的信息Flash Player的配置和位置mms.cfg ,请阅读Adobe Flash Player的管理指南的Flash Player 10 ) :RTMFPTURNProxy=ip_address_or_hostname_of_TURN_proxy直接UDP通信总是被尝试,转向代理只是用来作为备份:它是用于UDP通信,不能在Flash Player和Stratus (如UDP协议封锁防火墙)之间或Flash Player的端点之间流动。即使你的防火墙使即将发送的UDP通信的用,可能和你对应端的防火墙不能够允许通过。当一个端点设在一个所谓的“对称的防火墙, ” 的后面,端到端的通信可能是不可以实现。 (对于多种防火墙,请进入维基百科参阅 网络地址转换。 )在这种情况下,你可以使用转代理援助你防火墙穿越。Stratus serviceStratus 服务器Flash Player实例必须连接到Adobe Stratus service(使用rtmfp : / /
) ,用以彼此的通讯。 Stratus是提供会合服务的主机,帮助Flash Player实例间的互相联系,即使它们位于NATs的后面。虽然连接到Stratus服务非常相似连接到Flash Media Server,Stratus没有提供任何Flash Media Server 典型的功能(媒体中继,共享对象,远程等)。 Flash Player客户端必须保持在整个通讯期间一直与Adobe Stratus连接。为了获得Stratus,您将需要您从Adobe公司申请来的开发密钥。RTMFP支持正在计划添加到未来版本的Flash Media Server(无发行日期) 。这样Flash Media Server,将有可能同Flash Player 9或更早的客户(使用RTMP )通信和Flash Player 10个客户端(使用RTMFP ) 通信。Security安全RTMFP 提供终端设备之间的安全通信。它的密钥采用128位AES谈判使用Diffie-Hellmann密钥交换方法。不过,这并不提供强大的终端认证,如SSL或RTMPS 。为了帮助端点认证, RTMFP和ActionScript揭露给应用开发者secure nonces。这些nonces可在双方沟通的Flash Player的终点,并保证比赛。通过核实这些nonces ,最终用户可以确保没有人在中间攻击。这些nonces还可以用来开发关键的连续性机制。重要的是要注意到, Flash播放器不仅从您的麦克风和摄像头设备发送媒体,其他的Flash Player端点订阅您的媒体流。代表Flash播放器并不中继任何其他Flash Player的端点数据(如在一个多播的情况) 。对于更多关于RTMFP的信息,请阅读Adobe Labs 上的帮助:Real‐Time Media Flow Protocol FAQ (PDF, 166K) ActionScript 3.0 API supporting RTMFPActionScript 3.0 API 支持 RTMFP有一个新版本的ActionScript 3.0API支持Flash Player 10的RTMFP 。连接到Stratus错服务和创造端到端媒体流的方法类似于Flash Media Server的工作方法。请注意,您必须使用的ActionScript 3.0或者Flash Professional CS4或Flex Builder 3 构建目标于Flash Player 10或AIR 1.5 。正如我前面提到的,首先你必须连接到Adobe公司Stratus的服务:private const StratusAddress:String = &rtmfp://&;private const DeveloperKey:String = &your-developer-key&;private var netConnection:NetC netConnection = new NetConnection();netConnection.addEventListener(NetStatusEvent.NET_STATUS,netConnectionHandler);netConnection.connect(StratusAddress + &/& + DeveloperKey);开发者钥匙是你通过登陆你的Adobe公司开发者帐户申请得到,这个申请在Adobe Stratus beta服务的网站。在成功连接到Stratus,你得到NetConnection.Connect.Success事件。失败可能有几个方面的原因。如果您提供了一个无效的开发者或不正确的钥匙指定地址,您将收到NetConnection.Connect.Failed 。如果你的防火墙阻挡即将发送的UDP通信,您会收到的NetConnection.Connect.Failed事件后, 90秒超时。在成功建立连接的Stratus服务中,您被分配一个独特的256位peer ID( NetConnection.nearID ) 。其他Flash Player的端点必须知道这个peer ID,以便收到您发表的音频/视频流。Flash Player或Stratus的服务是如何将这些ID在需要通讯的Flash Player客户端内传递,不在文章讨论范围内。对于交换ID ,你可以使用一个XMPP协议的服务或一个简单的网络服务,如视频电话样本应用程序。Flash Player实例直接通讯使用单向网流渠道。也就是说,如果你想双向语音交谈,每个Flash Player的端点必须建立一个发送NetStream和接收NetStream。首先创建一个发送NetStream:private var sendStream:NetS sendStream = new NetStream(netConnection, NetStream.DIRECT_CONNECTIONS);sendStream.addEventListener(NetStatusEvent.NET_STATUS,netStreamHandler);sendStream.publish(&media&);sendStream.attachAudio(Microphone.getMicrophone());sendStream.attachCamera(Camera.getCamera());这意味着,媒体作为一个端到端的流发布。由于Stratus不能中继媒体,您只可以发布端到端的流。从您的设置管理器选择本地默认设备发出的流媒体将包括音频和视频。注:音频/视频无法发送,直到另一Flash Player的客户端订阅您的媒体流。现在,创建接收NetStream:private var recvStream:NetS recvStream = new NetStream(netConnection, id_of_publishing_client);recvStream.addEventListener(NetStatusEvent.NET_STATUS, netStreamHandler);recvStream.play(&media&);在这一点上,你听到声音,你可以创建一个视频对象显示视频。为了创造接收NetStream,您必须知道发布者的256位peer ID(发布客户端的 id_ ) 。为了接收音频/视频,您必须知道被发布出来的流的名字。Advanced topics高级主题发布者有良好的控制权而接收端可以接收其发布的流。当一个用户试图获得发布的流时,onPeerConnect ()方法被调用(默认简单执行返回true )对发布的NetStream。发布者可以禁止某些Flash Player的终端接收媒体:var o:Object = new Object();o.onPeerConnect = function(subscriberStream:NetStream):Boolean{&& if (accept)&&&&{&&&&&&&&&&}&& else&& {&&&&&&&&&&}}sendStream.client = 在发布方, NetStream.peerStreams属性中拥有所有订阅发布的实例。例如,使用sendStream.send ()将发送相同的数据到所有用户。您可以使用下面的方法将信息发送到一个特定的用户:sendStream.peerStreams.send()NetConnection.maxPeerConnections属性指定被允许连接发布者的peer流的数量。默认值是设定为8但在实践中,这取决于您的应用程序时,必须考虑到大多数互联网服务供应商提供非对称互联网接入服务的许可。图1说明了直接和三个Flash Player的实例通讯 。每个Flash Player客户端发送和接收两个流,建立一个完全连接网格。从互联网下载的能力普遍高于上传的能力,你必须要格外小心,不要超负荷用户终端的上行能力。 图1 使用Stratus服务点对点连接NetConnection.unconnectedPeerStreams属性是一个没有相关发布的NetStreams数组。当一个发部流同一个订阅流相互竞争时,订阅NetStream从NetStream.peerStreams的数组中移除。探索视频电话示例应用程序我们已经开发了一个视频电话示例,说明如何使用Flash Player 10的端到端能力 。它也可作为部分文章。该视频电话示例应用程序依赖于一个用于交流Flash Player peer ID简单的HTTP服务。提供的一部分该脚本,封装在( reg.cgi ) 。这种网络服务不提供任何用户认证。在Flash播放器成功地连接到Stratus,但其peer ID的网络服务。当创建一个呼叫电话时,视频电话呼叫使用此网络服务来查找收件人的peer ID。Adobe公司运行这一网络服务专门提供视频电话样本。当您建立自己的视频电话样本,则必须运行您自己的网络服务,并在 VideoPhoneLabs.mxml 指定WebServiceUrl 。您应该使用自己重写的AbstractIdManager类来执行自己的peer ID身份证交流机制,例如, XMPP协议,谷歌应用服务,或Facebook的框架。下列是建立一个视频电话示例应用程序的必要步骤(更多详情,请参阅ReadMe.txt包中包含) :1.使用主机网络服务提供的peer ID的reg.cgi Python脚本。2. 更新的Flex Builder 3.0.2配置,并对应开发于Flash Player 10或AIR 1.5 环境下。3. 创建一个新的 Flex 项目。4. 添加源文件的包( VideoPhoneLabs.mxml , AbstractIdManager.as , HttpIdManager.as , IdManagerError.as ,并IdManagerEvent.as )的项目源文件夹中。5. 调试你的项目配制为Flex SDK 3.2 同时发布对象为Flash Player 10 或 AIR 1.5.6. 在VideoPhoneLabs.mxml文件中替换DeveloperKey为您的Stratus开发密钥。7. 在VideoPhoneLabs.mxml文件中替换WebServiceUrl为指定的web service。该视频电话示例应用程序使用的手机模型。呼叫建立程序执行是使用端到端 NetStream.send ()的信息。既然你可以使用NetStream.send ( )方法只对指定的NetStream,视频电话发表其他Flash Player客户端可以连接的所谓的“听众流” (在这里我们这样叫它)。当客户端(调用者)希望与客户B通讯( A呼叫B) ,他或她订阅客户B的听众流。在这一点上,客户端B的通知访问者peer ID 的来电(使用onPeerConnect ()方法) ,并订阅客户A的媒体流。通过这个媒体流,客户端A通知客户B对他或她的好友用户的名称(使用NetStream.send ( )方法) ,用户可以选择接受或拒绝呼叫。如果要求被接受,客户端B发布的媒体流和双向通信将要被成立。何去何从在本文中,我介绍了一些最令人激动的特点,新的RTMFP协议连同概述了新的ActionScript 3.0的API 。在阅读本文,您应该很好地理解如何使用这一革命性的协议。我希望你能利用端到端的和先进的媒体功能的Flash Player 10和AIR 1.5开发了不起的应用。
少模块?往下看部分代码说明:1、初始化连接器(分服务端客户端)public function demo() {// constructor codesnc = new NetConnection();snc.addEventListener(NetStatusEvent.NET_STATUS,snetStatus);cnc = new NetConnection();cnc.addEventListener(NetStatusEvent.NET_STATUS,cnetStatus);}2、d8c6d5b18ddf65bf1529fd4c-c98c749416ce为开发者id,试验用,一般自行架设FMS服务器Adobe Develop ID 可申请public const SERVER:String = "rtmfp://p2p.rtmfp.net/d8c6d5b18ddf65bf1529fd4c-c98c749416ce";3、服务器的连接事件public function snetStatus(evt:NetStatusEvent):void{switch(evt.info.code){ case "NetConnection.Connect.Success":S = "serverconnected:"+ snc.nearID;flash.utils.setTimeout(setServerOutGoing,1000); case "NetStream.Connect.Success":                    case "NetStream.Publish.Start":S = "serverpublished";flash.utils.setTimeout(c_connect,50);}}4、初始化发布流信息private function setServerOutGoing():void{sostream = new NetStream(snc, NetStream.DIRECT_CONNECTIONS);sostream.addEventListener(NetStatusEvent.NET_STATUS,snetStatus);sostream.publish("SERVER");var i:Object = new Object();i.onPeerConnect = onPeerCfunction onPeerConnect(tmpNS:NetStream){ 
S = "clientpearconnected"; flash.utils.setTimeout(connectClient,50,cnc.nearID);}sostream.client =}5、连接服务端private function connectServer(tmpP2PID:String){S = "connectingtoserver";cistream = new NetStream(cnc,tmpP2PID);var i:Object = new Object();i.showOmsg = showOfunction showOmsg(msg:String):void  //这里接受信息{ 
S = "servermessage:"+}cistream.client =cistream.play("SERVER");} 6、发布信息public function serverSay(msg:String):void{sostream.send("showOmsg", msg);}7、与易语言交互function getS():String{ var _tmp:String = demo.S; if(demo.S !="") {demo.S = ""; } return _}function serverSay(msg:String){ D.serverSay(msg);}function clientSay(msg:String){ D.clientSay(msg);}ExternalInterface.addCallback("getS", getS); //获取状态ExternalInterface.addCallback("serverSay", serverSay); //服务端发送信息ExternalInterface.addCallback("clientSay", clientSay); //客户端发送信息说明:1、源码较为简单,主要展示工作原理;2、源码功能是发送文本消息,可以通过AS3发布视频流(Camera)和音频流(Microphone)实现语音视频聊天;3、AS3源码将服务端与客户端合并,实际运用中应拆开。服务端客户端平等。4、易语言代码使用了 易语言我吃了的《内存加载FLASH》实现内存加载和动态创建播放器(模块)5、易语言中使用了时钟获取状态,实际运用中可挂接fscommand事件
  子程序名返回值类型公开备 注  getS文本型      (. (,         ))     子程序名返回值类型公开备 注  serverSay    参数名类 型参考可空数组备 注  msg文本型       . (,             )     子程序名返回值类型公开备 注  clientSay    参数名类 型参考可空数组备 注  msg文本型       . (,             )                                                                  
收藏,留待备用!
青蛙哥好啊。。
flash要淘汰了,下面就是air时代了。还有强大的html5
占位慢慢看
支持青蛙哥
青蛙哥&&威武.....
支持青蛙,占位有时间慢慢来消化
占位看看!
看完才回复,花都谢了
优秀文章,支持!n神马都是浮云
支持技术性帖子,这类太少了
坐这喝着小水慢慢的看完.
有空研究一下 是好东西
东西不错不过如果把客户端服务端分开写这样看起来比较爽一点,另外不知道怎么通过外网来进行通讯
优秀文章,支持!n神马都是浮云
引用 引用第18楼jyq-01-09 16:00发表的&&:东西不错不过如果把客户端服务端分开写这样看起来比较爽一点,另外不知道怎么通过外网来进行通讯
例程只是说明问题,实际使用当然需要分开原则上只要能连接fms即可,与外网内网无关(RTMFP是以UDP作为传输协议)
收藏,留待备用!
收藏 有时间了 研究一下
瞧一瞧,看一看。
这个东西不错啊
谢谢分享,学习……
收藏,留待备用!&&
收藏了.感谢大牛分享
收藏,留待备用!
另外不知道怎么使用多个客户端可以和这服务端联系,因为感觉有点意思哈哈
收藏,留待备用!&&&&&&&&&&&&
flash要淘汰了,下面就是air时代了。还有强大的html5
这个东西太好了 一定要仔细学习
收藏,留待备用!
分享是一种美德!
这个要顶顶顶啊
占个沙发, 不知道好用不
好大篇~~~~~~~
有点深奥,再看一遍,再看不懂就果断睡觉
看年啊是什么
有点深奥,再看一遍,再看不懂就果断睡觉
kan sh 看下视频聊天
研究一下 研究一下
不错,顶起。,
&&&& 大鸟的好东西&&不解释
查看完整版本: [--
Powered by
Gzip enabled

我要回帖

更多关于 flash player 10 的文章

 

随机推荐