通过它我们可以非常方便的实现在线视频录制、视频直播、视频聊天以及视频会议等类似应用程序的开发。在《FMS3系列(四):在线视频录制、视频回放》 这篇文章里我写了通过对外军贸(对外军售的缩写)来实现在线视频录制和视频回放的功能,客户端的开发和这篇文章是相同的,不同的是本文将使用弯曲来开发。首先我们来看看使用氟化铀服务端是如何开发的,建立ApplicationAdapter是必然的,这里我们为本文中的示例程序建立的ApplicationAdapter为视频应用,并为其添加RemotingServiceAttribute如下代码块:namespaceFx .适配器{///摘要///视频应用////summary[Remoting ServiCe]公共类视频应用程序:应用程序适配器{ publicOverrideboolppstart(is pea application){ return base .AppStart(应用程序);} publicatoverrideboolpconnect(iconnection connection,object[]参数){returnbase .AppConnect(连接,参数);}}}ApplicationAdapter模板所提供的方法在实际项目开发中根据自己的需求去重写,这里不作过多介绍。光是这样还是不能实现视频的录制和回放的功能,这只是实现了基本的启动应用程序和客户端连接等基本功能,要想实现视频录制和回放,我们还得让视频应用实现IStreamService接口,该接口提供了实现视频发布和播放的相应功能,其定义如下:namespaceFluorineFx .信息。API。stream {[符合cls(false)]publicationinterfaceistreamservice :是peservice,iseservice { voice close stream();int CreateStream();voiddeleteStream(intstreamId);voiddeleteStream(IStraamecapableconnectionconnection,IntStreamID);voidpause(boolpausePlayback,双位置);无效播放(booldontStop);void play(字符串名称);voidplay(stringname,双启动);空隙率(stringname、doublestart、double length);voidplay(stringname、doublestart、doublelength、boolfulusplaylist);void publish(booldontStop);void publish(字符串名称);voidpublish(stringname,字符串模式);void receive audio(boolreceive);void receive video(boolreceive);voidreleaseStream(stringstreamName);voidseek(双位置);} }好的,有了应用处理器接下来在氟化铀网站的应用程序中添加应用程序(VideoApp),并配置好由此处理器来处理视频录制和回放。xmlversion='1.0 '编码='utf-8 '?配置应用程序处理程序类型=' Fx .适配器。视频应用//配置要使用RTMP协议,那么配置RTMP通信信道肯定是不能少的,在配置文件WEB-INF/flex/service-config。可扩展置标语言中配置使用RTMP协议的通信信道。xmlversion='1.0 '编码='utf-8 '?服务-配置通道-通道定义id=' my-rtmp ' class=' MX。消息。频道。rtmp channel“endpointuri=”rtmp :/{服务器。name } :1617 ' class=' flex。消息。端点。rtmpendpoint ”/通道定义/通道/服务-配置于此氟化铀服务器端"基本"算是完成了。下面转到客户端的开发,建立弯曲项目并设计好界面,如下图
建立与氟化铀服务器上应用程序的连接,连接成功则将自己的视频数据显示到界面上,如下实现代码:privatefronationconnectionserver(事件: mouse event): void { NC=new net connection();NC。connect(' rtmp ://localhost :1617/video record ',' beniao ',' 123456 ');NC。add event listener(NetStatusEvent .NET_STATUS,onnetstauthandler);NC . client=this } privatefronnitstotshandler(事件: netstatuseven): void { if(事件。信息。代码==' NetConnection .连接。成功’){ cam=相机。getcamera();if(cam!=null){ this。我的视频。连接摄像机;}else{Alert.yesLabel='确定;Alert.show('没有检测到视频摄像头','系统提示');}}}录制视频也就是将自己本机的视频摄像头获取的视频数据以及音频设备的数据附加到网络流(NetStream),使用网络流的发布()方法将流发布到服务器上,这和使用对外军贸(对外军售的缩写)是相同的privatefonionrecordvideo(事件: mouse event): void { if(this。NC){ varmic :麦克风=麦克风。得到麦克风();ns=NewNetStream(这。NC);ns。连接摄像机;ns。附件音频(mic);ns . client=thins . publish(this . video name . text,' record ');这个。BTN开始。enabled=false这个。btnend。enabled=true} } private functionontoprecord(事件: mouse event): void { if(this。NC){这个。NC。close();这个。BTN开始。enabled=true这个。btnend。enabled=false这个。BTN躺着。enabled=true}}停止视频录制的功能就更加简单了,直接断开当前客户端与服务器端的连接就可以,使用网络连接(网络连接)的关闭()方法
录制好的视频将会保存在网站下的应用/视频应用/流目录中,如下图
录制的视频回放实际上是在服务器上播放. flv视频文件。还需要与服务器建立网络连接,通过网络流加载指定的视频文件,最后显示在应用界面上。privatefonionplayvideo(event : mouseevent): void { NC=new netconnection();NC . connect(' rtmp ://localhost :1617/video record ',' beniao ',' 123456 ');NC . addeventlistener(NetStatusEvent。NET_STATUS,onplaynetstathandler);nc.client=this} PrivateFunctionPlaynetStatsHandler(event : NetStatusEvent): void { if(event . info . code=' NetConnection。connect . Success '){ ns=new netstream(this . NC);ns.client=thisvarvideo : video=new video();video.width=320视频. height=240;video . attachnetstream(this . ns);this.myVideo.addChild(视频);this . ns . play(this . video name . text);}}这就完成了使用FluorineFx.Net进行视频录制和播放的功能。接下来,让我们来看一下FluorineFx如何处理发布录制视频流和直播视频流的安全方面。flufefx . messaging . API . stream . is tream publish security接口专门用于处理发布流的安全性。如果你想处理发布流的安全性,你应该定制一个实现这个接口的安全策略类,在策略类中根据你的实际情况来处理安全设置。通过这个安全策略类,可以方便地判断发布流的类型和名称,对发布流进行授权。以下安全策略类:namespace FX . adapter { public class publishsecurity : is tramepublishsecurity { publibublishallied(ispecoscope,stringname,string mode){//它是记录流吗如果(!记录。equals(mode)){ return false;}//文件名是否以test if(!名字。start with(' test ')返回false;elsereturntrue}}}通过ApplicationAdapter提供的RegisterStreamPublishSecurity()方法在应用程序处理程序中注册安全策略,定义如下:publicationregisterstreampublishsecurity(issstreampublishsecurityhandler);为了注册发布流的安全策略,通常在应用程序启动时注册,如下所示:publikeroverridbooslapstart(is peaapplication){ registerstrampublishservice(new publishsecurity());returnbase。AppStart(应用程序);}通过RegisterStreamPublishSecurity()方法注册发布流的安全策略后,每个发布流都会通过自定义的安全策略检查当前发布流是否符合自定义的安全规则。这种便利可以保证其他人恶意连接你的应用发布流,消耗网络带宽等不利现象,更多的好处需要研究。下载本文中的示例程序。