[FMS]一步一步学Flash Media Server(五)

使用FMS 4.5(Flash Media Server 4.5) 搭建视频直播(HLS) 服务端软件Flash Media Server 4.51、下载后一路next,注意如果要搭建hls,就是http的直播,fms会自动安装Apache。 2、默认的管理页面是\Adobe\Flash Media Server 4.5\tools\fms_adminConsole.htm 3、Apache的documentroot 默认目录是:\Adobe\Flash Media Server 4. 阅读详情

今天我们的讲解的是在昨天代码的功能上加上在线列表的功能,同时会去掉共享对象,用另一种方法向客户端发消息.

先看看服务端代码我们更改些什么代码:

application.onAppStart = function() {
    
this.chatMsgArray = new Array();
    
this.userListArray = new Array();
}

application.onConnect 
= function(client, userName) {
    
if(checkOnline(userName)){
        
this.rejectConnection(client);
        
return;
    }
    
this.acceptConnection(client);
    client.userName 
= userName;
    
this.userListArray.push(userName);
    sendUserList();
    
//客户端调用方法
    client.getMsg = function(){
        
return application.chatMsgArray;
    }
    client.sendMsg 
= function(msg){
        var chatInfo 
= this.userName + " : " + msg;
        application.chatMsgArray.push(chatInfo);
        sendMsgToClient(chatInfo);
    }
}

application.onDisconnect 
= function(client) {
    trace(
"用户:"+client.userName+" 离开");
    var len 
= this.userListArray.length;
    
for(var i=0;i<len;i++){
        
if(this.userListArray[i] == client.userName){
            
this.userListArray.splice(i,1);
            sendUserList();
        }
    }
}


application.onAppStop 
= function() {
    delete 
this.chatMsg_so;
}

function checkOnline(userName){
    var len 
= application.userListArray.length;
    
for(var i=0;i<len;i++){
        
if(application.userListArray[i] == userName){
            
return true;
        }
    }
    
return false;
}

function sendMsgToClient(chatInfo){
    var len 
= application.clients.length;
    
for(var i=0;i<len;i++){
        application.clients[i].call(
"getMsgInfo",null,chatInfo);
    }
}

function sendUserList(){
    var len 
= application.clients.length;
    
for(var i=0;i<len;i++){
        application.clients[i].call(
"getUserList",null,application.userListArray);
    }
}

 

this.chatMsgArray = new Array();
this.userListArray = new Array();

这两个定义的数组是在开始定义的,chatMsgArray是存储所有的聊天信息,userListArray是一个存储在线列表的数组


当用户连接进来的时候,我们用了一个函数checkOnline来检查用户是不是在在线列表中,如果在就用this.rejectConnection(client);拒绝这个连接,如果不在就接受这个连接并加到在线列表中

sendUserList函数是向所以客户端发送在线列表信息,application.clients是一个存储所以客户端连接的信息,application.clients.call就是调用客户端函数,使用方法跟客户端调服务器端是一样的.

然后我们增加了1个供客户端调用的函数

client.getMsg = function(){
 return application.chatMsgArray;
}

client.getMsg是返回所有的聊天信息,当用户第一次连接时,得到别人的聊天记录

在用户断开连接的时候增加了将断线用户从在线列表中清除,并且发送在线列表.

再来看看客户端代码:

 

package net.smilecn.chat{
    
    
import flash.display.Sprite;
    
import flash.net.NetConnection;
    
import flash.net.Responder;
    
import flash.events.NetStatusEvent;
    
import flash.events.SyncEvent;
    
import flash.events.MouseEvent;
    
import fl.controls.TextArea;
      
import fl.controls.Button;
      
import fl.controls.TextInput;
    
import fl.controls.Label;
    
import fl.controls.List;
    
import fl.data.DataProvider;

    
    
public class Chat extends Sprite{
        
        
private var nc:NetConnection;
        
private var rtmpUrl:String = "rtmp://localhost/chat";
        
private var msg:Label;
        
private var userNameInput:TextInput;
        
private var enterBtn:Button;
        
private var button:Button;
        
private var textArea:TextArea;
        
private var textInput:TextInput;
        
private var userList:List;
        
        
private var userName:String = "user002";
    
        
public function Chat():void{
            userNameInput 
= new TextInput();
            userNameInput.move(
100,200);
            addChild(userNameInput);
            enterBtn 
= new Button();
            enterBtn.move(
220,200);
            enterBtn.label 
= "进入";
            addChild(enterBtn);
            enterBtn.addEventListener(MouseEvent.CLICK,enterBtnClickHandler);
            msg 
= new Label();
            msg.move(
100,230);
            msg.text 
= "";
            addChild(msg);
        }
        
        
private function enterBtnClickHandler(event:MouseEvent):void{
            
if(userNameInput.text!=""){
                userName 
= userNameInput.text;
                removeChild(userNameInput);
                removeChild(enterBtn);
                removeChild(msg);
            
                textArea
=new TextArea();
                textArea.setSize (
200,300);
                textArea.move (
20,20);
                addChild (textArea);

                textInput
=new TextInput();
                textInput.width 
= 140;
                textInput.move (
20,330);
                addChild (textInput);

                   button
=new Button();
                button.width
=50;
                   button.label
="发送";
                   button.move (
170,330);
                addChild(button);
                button.addEventListener (MouseEvent.CLICK,sendMsg);
                
                userList 
= new List();
                userList.move(
250,20);
                userList.setSize(
100,300);
                addChild(userList);
            
                nc
=new NetConnection();
                nc.addEventListener (NetStatusEvent.NET_STATUS,netStatusHandler);
                nc.connect (rtmpUrl,userName);
                nc.client 
= this;
            }
else{
                msg.text 
= "请输入用户名";
            }
            
        }
        
        
private function netStatusHandler(event:NetStatusEvent):void{
            trace(
"event.info.code:",event.info.code);
            
if(event.info.code == "NetConnection.Connect.Success"){
                nc.call(
"getMsg",new Responder(getMsgResult,getMsgFault))
            }
        }
        
        
private function getMsgResult(re:Array):void{
            var s:String
="";
            var len:Number 
= re.length;
            
for(var i=0;i<len;i++){
                s 
+= re[i]+" ";
            }
            textArea.text 
= s;
        }
        
        
private function getMsgFault(fe:*):void{
            trace(fe);
        }
        
        
private function sendMsg (e:MouseEvent):void{
            nc.call(
"sendMsg",null,textInput.text);
            textInput.text 
= "";
        }
        
        
public function getMsgInfo(msg:String):void{
            textArea.appendText(msg
+" ");
        }
        
        
public function getUserList(list:Array):void{
            userList.dataProvider 
= new DataProvider(list);
        }
    }
    
}

 

客户端首先增加了一个用户输入名字,这是些简单的代码.

然后共享对象的那部份去掉了,加了句这样的代码:nc.client = this;

这句话的意思是指定当前对象为服务器回调方法的对象

public function getMsgInfo(msg:String):void{
 textArea.appendText(msg+"/n");
}
  
public function getUserList(list:Array):void{
 userList.dataProvider = new DataProvider(list);
}

这两个方法就是服务器调用的方法.

在nc连接成功的地方加了句nc.call("getMsg",new Responder(getMsgResult,getMsgFault)),这句是在刚连接成功的时候得到以前用户的聊天记录.

顺便说一句,客户端代码用到了组件,所以要把这些组件放到库中才能运行,上一节也是这样的.

下节继续.

(本教程如需转载请注明出处!)

 

 

 

Adobe Flash Media Server安装 Flash Media ServerFMS)是一个流媒体服务器 使用 实时消息传送协议(RTMP),RTMP是一种未加密的TCP/IP协议,专门设计用来高速传送音频、视频和数据信息。 3.5版32位下载(内含windows和linux版):链接:http://pan.baidu.com/s/1miTce1M 密码:2rzb 4.5版64位linux版:链接:ht 阅读详情

相关推荐

FMS5.0注册码 FlashMediaServer5序列号 保证可用

FMS5.0注册码 FlashMediaServer5序列号 保证可用

Adobe Media Server 5(AMS)的安装及使用

一.什么是Adobe Media Server? Adobe Media Server也叫Adobe Flash Media ServerFMS),是Adobe出品的一款流媒体服务器,它使用Adobe传统的流媒体协议RTMP(实时消息协议)提供视频的点播和直播服务。 二.安装 adobe Media Server下载地址:http://www.adobe.com/support

草上爬的博客 2万+

Adobe_Flash_Media_Server_5_介绍与入门

Adobe_Flash_Media_Server_5_介绍与入门

Flash Media Server 5.0 (FMS)注册码

flash media server 4.5 及最新 flash media server 5.0 注册码 防止图片打不开时: Name:tam/CORE Serial:1652-5580-8001-8333-2201-1631 http://f.hiphotos.bdimg.com/album/pic/item/267f9e2f0708283842c952dab999...

DA6328的博客 624

adobe flash media service5简单使用

前几天要搞直播这一块的内容,就查资料,需要ffmpeg来推流,测试的时候可以用adobe flash media service5来播放。 网上好像都怎么说一个详细的步骤,就随便试,后来终于好了。 现在把在自己机器上面安装的步骤说下吧。 这篇文章是上文字下图片的,所以大家也就不要看岔了。 1.     首先是下载安装包,下载的是fms5, 地址是这个:http://www.xdowns.

cmqwan的博客 1万+

Adobe/Flash Media Server 5.0 配置与优化

安装完成后 一、挂载目录 # cd / # mkdir /data # mount /dev/sdb /data # cd /data # mkdir video # mkdir video/ssdcached # mount /dev/sdc /data/video/ssdcached 二、修改Apache的监听端口 # cd /opt/adobe/ams/Apach

北雨南萍 4727

[FMS]一步一步Flash Media Server()

从今天起,我们来习一下 Flash Media Server,简称FMS,从名字上我们可以看出这是一个媒体服务器,其它简单点理解就是一个交互服务器,而且可以实现媒体方面的交互,我们可以利用它来完成一些网络版的FLASH程序,比如聊天室,网络版的不是很复杂的游戏,等等。大家可以到如下地址下载最新的3.0版本:http://www.adobe.com/products/flashmediaint

2003

[FMS]一步一步Flash Media Server()

今天我们来看一下用AS 3连接FMS3的代码(这些代码其它对FMS2也是适用的).这个例子我们不会去写FMS的代码,但我们需要建一个FMS应该程序,其实就是建一个目录,在FMS放应该程序的目录(applications)里建一个文件夹,我们后面要做聊天室的例子,所以我们就建一个名叫chat的目录.接下来就是客户端的代码了,我们建一个chat.fla的FLASH文件,再建一个文档类Chat.as:

1393

fms5.0下载与注册码

flash media server 5.03下载与注册码

FMS 5.0 注册码

FMS FMS5 FlashMediaServer5注册码

FMS4.0 flash media server4.0附带注册机实现RTMP无限制连接

FMS4.0实现流媒体服务器的配置,包含FMS的配置说明,FMS4.0和3.5注册机,另附带RTMP视频测试播放工具。360可能会提示危险,请放心,绝对无毒。 亲测可用。因为上传大小的限制 没有FMS软件 如有需要 请联系作者

Flash Media Server 一些教程

最近火爆的 随机视频聊天网站  http://www.chatroulette.com/  看到那个就是用FMS做的视频聊天 。   1  FMS入门教程的 地址是:http://www.nshen.net/blog/article.asp?id=509  作者N神   现在版本虽然是3.5 但是并不影响FMS3.5开发版的下载地址是:http://trials.adobe.c

swort_177的专栏 4562

Flash Media Server(FMS)应用一例

一、需求是这样的现有一个游戏,服务器端管理员要通过摄像头把游戏演示实况记录下来,客户端网友可以通过浏览器观看游戏直播,服务器端还提供一个小窗口查看客户端看到直播视频的模样(以免出错),同时可以暂停一下录像(作假用^-^),客户端网友以为只是网络卡了一下,不知情者并不知道怎么回事!服务器端的Flash如下图:二、所需软件(1)Macromedia Flash按需设计Flash程序

4856

在Ubuntu上安装Flash Media Server 3.5(FMS 3.5)

总结:在Ubuntu上安装FMS,跟linux不一样,Ubuntu需要先安装补丁,也许你的环境还需要lib神马的。。。 1。切换到root权限        sudo -i 2。进入apt源列表       cd /etc/apt/sources.list.d 3。添加ubuntu 13.04的源,因为13.10的后续版本废弃了ia32-libs    echo

whyzh的专栏 1305

Adobe/Flash Media Server 5.0 使用配置文件

一、编辑配置文件 Note: 配置文件位于 rootinstall/conf 文件夹,如 /opt/adobe/ams/conf  To edit a configuration file, including fms.ini, do the following: 编辑包括 fms.ini的配置文件,按照如下操作: 1). 在文本编辑器中打开文件 2). 编辑文件 3). 保存文

北雨南萍 3435
上一篇: [FMS]一步一步学Flash Media Server(四)
arrowyoung
博客等级 码龄23年 23粉丝 50原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值