分类:FMS路上FlashMediaServer入门教程[2007-08-2914:56:31|发布:N神]字体大小:大|中|小FMS入门教程我把我以前的那些FMS学习笔记整理了一下,做了下修改,成了一页的FMS教程,方便想学FMS的新手来看,如果还有错误或者看不懂的地方欢迎留言,或email偶,偶会进行更改什么是FlashMediaServer?Flash大家庭里的一员,这个东东以前叫FlashCommunicationServer,传说中的FCS就是这个,现在改叫FMS了...不见不知道哦,一见真可怕,adobe还有这么cool的东东,自从见了她,让我做些小东东的兴趣全没了,一心想研究这个这东东能做什么?视频录制啊,flash聊天室啊,在线视频会议啊啊,网络游戏?不管怎样先安个试试吧先到这里下载免费的开发者版本吧然后安装,安装时记得用户名和密码不要瞎填自己要记住,如果你已经瞎填了那就到安装目录下\conf\fms.ini里找吧偶装到了c盘,找到目录C:\ProgramFiles\Macromedia\FlashMediaServer2先要打开服务器哦你在本机装的fms,本机就是服务器了哦!记得现在你的机器既是客户端又是服务端哦开始===程序===Macromedia===FlashMediaServer2有两个start****,都要打开,关时候两个都要关,如果你怕麻烦直接找tool文件夹里的批处理文件StartServerService.bat吧,双击他,他会帮你搞定地,想关就找StopServerService.bat。~applications文件夹你可以在里边建一个文件夹例如叫FirstApp,这就建了一个Application,以后所有此项目服务器端的flv文件啊,共享文件啊都会在这里边,有时服务器端需要写程序的时候里边会有个main.asc文件,这个就是服务器端程序,服务器端程序目前只支持as1写,是在服务器上执行的,你也可以用trace调试,怎么trace管理服务器时候你会看到,你可能会建若干个app,在一台服务器上同时运行,比如录象的app,聊天室的app。。。这些所有的app都通过fms自带的fms2_console.swf管理,现在就去看看如何管理服务器吧!管理服务器~服务器打开后就要管理了哦,点开fms2_console.swf,别看他只是个swf,后台管理就靠他了,输入你安装时候的密码和用户,服务器地址写localhost就好看到了吧,熟悉熟悉他吧以后我们写程序最常用的就是这个ViewApplications,每当有客户端连接服务器时,左边就会列出连接的是哪个app,有多少连接下图为连接applications文件夹下的bs文件夹(bs文件夹,因为每个文件夹对应一个app,就是bsapp),连接数为1,458是实例名(实例名默认为_definst_,每个文件夹可以有若干实例,互相不影响,这个特性可以用来做聊天是的房间,以后再说)选中某个app后,或者客户端有连接,会看到当前打开的app的状态,这个LiveLog服务器端的trace就这里看了,右边依次是客户端情况,共享对象,流,执行的情况(占内存,cpu等),后边两个小按钮,调试时候常用哦,reload和unload!每当服务器端main.asc修改后一定记得reload或者unload一下,否则不会生效,unload会把窗口关闭,有客户端连的时候还会自动打开总有人告诉我,他的fms经常会出现诡异现象,比如连接不上,代码已经删了还会执行,一生气连文件夹都删了,还会执行,怀疑是自己的rp有问题。。那不是rp问题,记住出现问题就reload!实在不行就去tools文件夹点StopServerService.batconf文件夹还有重要的是conf文件夹了,里边是一些服务器端的配置文件,以后可能会用,先不用动。。。。自此,安装部分结束,goon...有一种协议叫rtmp客户端和服务器端通信是使用协议rtmp的现在在服务器端applications文件夹(当然偶的客户端和服务器端是一台机器了)里建个test1文件夹,你的地址就为rtmp:/test1或者rtmp://localhost/test1注意两个地址中的/符号打开flash与服务器通信首先要建个NetConnection()nc=newNetConnection();连接nc.connect(rtmp://localhost/test1);怎么知道连没连上呢?顺利连接服务器后会触发一个onStatus事件,自己trace一下info.codenc.onStatus=function(info){//trace(info)//trace(info.code)for(iininfo){trace(i+:+info[i]);}};完整代码:nc=newNetConnection();nc.onStatus=function(info){trace(info.code);if(info.code==NetConnection.Connect.Success){trace(接通);}};nc.connect(rtmp://localhost/test1);注意:默认情况下服务器是允许你连接的,但只是默认,如果服务器拒绝你连接的话,上述代码就不好用了。怎么回事?我们看看连接的过程吧连接过程每当客户端试图连接服务器,一个NetConnection.connect(),服务器将会调用application.onConnect来鉴定是不是允许客户端连接,onConnect()方法返回null或不返回则将进入未决状态,直到onConnect方法中返回true或执行acceptConnection(client)则允许,返回false或执行rejectConnection(client)则拒绝,如图(从左往右看)服务器文件是以.asc形式存在的,可以在test1文件夹里建一个main.ascapplication.onConnect=function(client){this.rejectConnection(client);//this.acceptConnection(client)}这样就拒绝连接了,动手试试,别忘了,服务器端改动的话,别忘了到fms2_console.swf去reload!不知道按哪个的到上边找,每当有客户端连接,那个reload按钮的界面就会出来哦。检查是否uri错误如果你的rtmp地址是从其他什么地方传过来的,可以顺便检查一下rtmp是否错误,下边代码如果地址是错误的就会trace出来mync=newNetConnection();mync.onStatus=function(info){if(info.code==NetConnection.Connect.Success){trace(连接成功);}};//正确的uri//uri=rtmp://localhost/connect;//错误的uriuri=rtmpppppp://localhost/connect;if(mync.connect(uri,N神)){trace(尝试连接服务器中。。);}else{trace(没有尝试连接服务器~是uri错误???);}ok了,现在我们深入一点点。。看看连接上的一些细节问题info.code:连接后info.code会告诉你连接的状态,上边看的都是NetConnection.Connect.Success,还有一些其他值,和这些值是什么意思,自己看看。值得注意的是。NetConnection.Connect.Rejected,收到这条消息的时候说明服务器端拒绝了你,接着马上你会收到另一条,NetConnection.Connect.Closed,连接就关闭了~~~mync=newNetConnection();mync.onStatus=function(info){switch(info.code){caseNetConnection.Connect.Success:trace(连接成功);break;caseNetConnection.Connect.Failed://关掉服务器的情况trace(尝试连接失败,服务器有可能挂掉了-_-b);break;caseNetConnection.Connect.Rejected://注意这里,服务器拒绝你的情况,如果遭到拒绝,将会调用两次mync.onStatus,//第一次NetConnection.Connect.Rejected第2次NetConnection.Connect.Closedtrace(遭到服务器拒绝);trace(服务器返回信息:+info.application.msg);break;caseNetConnection.Connect.Closed:trace(连接关闭);break;}};mync.connect(rtmp://localhost/connect,N神);//mync.connect(rtmp://localhost/connect,小新)服务器端拒绝连接?好象见过。。。回头找找。。。。。。。。哦在这里application.onConnect=function(client){this.rejectConnection(client);}我不能所有人都拒绝了。。我要把讨厌的人拒绝了。。。传给服务器一个人名~~mync.connect(rtmp://localhost/connect,N神);服务器看看是不是讨厌的人。。application.onConnect=function(client,name){trace(name);if(name==N神){//拒绝连接,并返回个错误对象{msg:服务器不想+name+进去,哈哈~},包含错误消息application.rejectConnection(client,{msg:服务器不想+name+进去,哈哈~});}else{application.acceptConnection(client);//成功不能返回客户端信息}};看客户端的代码。。caseNetConnection.Connect.Rejected://注意这里,服务器拒绝你的情况,如果遭到拒绝,将会调用两次mync.onStatus,//第一次NetConnection.Connect.Rejected第2次NetConnection.Connect.Closedtrace(遭到服务器拒绝);trace(服务器返回信息:+info.application.msg);break;遭到服务器拒绝后会trace出服务器返回的错误消息,这是一个最基础的与服务器交互的例子,以后还会有很多滴下边进入新一层次。。。视频,流这个比较重要,但超简单,网上播放电影,在线录制,在线播放,视频会议,视频电话,全靠他了,下边我们先做一个最简单录制和播放录制视频打开flash,新建一个fla,Ctrl+L打开library,右键新建视频,确定。拉到舞台上起个名叫my_video第一帧开始加代码//从麦和设像头显示视频显示在my_video上my_video.attachVideo(Camera.get());my_video.attachAudio(Microphone.get());//像以前一样连接nc=newNetConnection();nc.connect(rtmp://localhost/aaaa);//注意这里,Applications文件夹里要有aaaa文件夹哦!//可以理解为在nc连接上绑一个流nsOut=newNetStream(nc);//在流上加麦克风和视频头nsOut.attachVideo(Camera.get());nsOut.attachAudio(Microphone