51CTO下载Flex+Red5语音视频聊天程序实现.docx

上传人:b****5 文档编号:6871980 上传时间:2023-01-11 格式:DOCX 页数:9 大小:18.59KB
下载 相关 举报
51CTO下载Flex+Red5语音视频聊天程序实现.docx_第1页
第1页 / 共9页
51CTO下载Flex+Red5语音视频聊天程序实现.docx_第2页
第2页 / 共9页
51CTO下载Flex+Red5语音视频聊天程序实现.docx_第3页
第3页 / 共9页
51CTO下载Flex+Red5语音视频聊天程序实现.docx_第4页
第4页 / 共9页
51CTO下载Flex+Red5语音视频聊天程序实现.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

51CTO下载Flex+Red5语音视频聊天程序实现.docx

《51CTO下载Flex+Red5语音视频聊天程序实现.docx》由会员分享,可在线阅读,更多相关《51CTO下载Flex+Red5语音视频聊天程序实现.docx(9页珍藏版)》请在冰豆网上搜索。

51CTO下载Flex+Red5语音视频聊天程序实现.docx

51CTO下载Flex+Red5语音视频聊天程序实现

Flex+Red5语音视频聊天程序实现  

2010-12-0609:

30:

32|  分类:

程序代码|  标签:

red5  |字号大中小 订阅

java代码部分

packagefirst;

importjava.util.HashMap;

importjava.util.Iterator;

importjava.util.Map;

importjava.util.Set;

importorg.red5.server.adapter.ApplicationAdapter;

importorg.red5.server.api.IConnection;

importorg.red5.server.api.IScope;

importorg.red5.server.api.Red5;

importorg.red5.server.api.service.IServiceCapableConnection;

importorg.red5.server.api.so.ISharedObject;

publicclassApplicationextendsApplicationAdapter{ 

 //属性

 privateIScopeappScope;

 

 privateStringuserName;

 //共享存储在线用户

 privateISharedObjectlistSO; 

 privateMaponlineList=newHashMap();//在线用户表

 //程序运行时志向

 publicbooleanappStart(IScopeapp){

  if(!

super.appStart(app)){

     returnfalse;

  }

  appScope=app;

  returntrue;

 }

 @Override

 publicbooleanappConnect(IConnectionarg0,Object[]arg1){

  /**

  * 用户首次连接server时触发,检查用户是否重复登录,将用户添加到在线用户表中

  */

  StringuserId=arg0.getClient().getId();

  if(!

super.appConnect(arg0,arg1)){

   returnfalse;

  }

  if(arg1!

=null){

   userName=(String)arg1[0];

  }

  if(onlineList.get(userName)!

=null){

   rejectClient("请不要重复登录");

   returnfalse;

  }

  onlineList.put(userName,arg0);

  listSO=getSharedObject(appScope,"listSO",false); 

  listSO.setAttribute(userId,userName);

  System.out.println("Theuser:

"+userName+","+userName+"loginedsuccessfully");

  returntrue;

 }

 /**

 *通知所有人当前用户登录

 *@paramparams

 */

 publicvoidgetOnloadUser(Object[]params){   

  StringclientName=params[0].toString();  

  if(null==clientName||"".equals(clientName)){

    return;

  }

  //给所有客户端数据

  IScopescope=Red5.getConnectionLocal().getScope();

  Iteratorit=scope.getConnections().iterator();

  for(;it.hasNext();){

   Setconnections=(Set)it.next();

   IConnectiontempConn=(IConnection)connections.iterator().next();

   if(tempConninstanceofIServiceCapableConnection){

    IServiceCapableConnectionsc=(IServiceCapableConnection)tempConn;

    sc.invoke("result_getOnloadUser",newObject[]{clientName});

   }

  }

 }

 //聊天

 publicvoidsayToAll(Object[]params){

  IConnectionconn=Red5.getConnectionLocal();

  Stringuser_id=conn.getClient().getId();

  StringclientName=(String)listSO.getAttribute(user_id);

  System.out.println("************发言者是:

"+clientName);

  StringsayToName=params[0]==null?

"":

params[0].toString().trim();  

  StringsayWhat=params[1]==null?

"":

params[1].toString().trim();

  if("".equals(sayToName)||"All".equals(sayToName))//发消息给聊天室的所有人.

  {

   IScopescope=Red5.getConnectionLocal().getScope();

   Iteratorit=scope.getConnections().iterator(); 

   for(;it.hasNext();){

     Setconnections=(Set)it.next();

     IConnectiontempConn=(IConnection)connections.iterator().next();

    if(tempConninstanceofIServiceCapableConnection){

        IServiceCapableConnectionsc=(IServiceCapableConnection)tempConn;

     //调用客户端showMessage方法。

        sc.invoke("showMessage",newObject[]{clientName+"toAll:

"+sayWhat});

     }

  }

  }else{

    IConnectiontempConn=onlineList.get(sayToName);    

    if(tempConninstanceofIServiceCapableConnection){

     IServiceCapableConnectionsc=(IServiceCapableConnection)tempConn;    

     sc.invoke("showMessage",newObject[]{clientName+"to"+sayToName+":

"+sayWhat});

     }

    IServiceCapableConnectionsc=(IServiceCapableConnection)conn;

    sc.invoke("showMessage",newObject[]{clientName+"to"+sayToName+":

"+sayWhat});

  }

 }

 //用户断开连接的时候触发

 publicvoidappDisconnect(IConnectionconn){

  Stringdis_user_id=conn.getClient().getId();

  Stringuser=(String)listSO.getAttribute(dis_user_id);

  //根据ID删除对应在线纪录

  onlineList.remove(user);

  //删除用户列表共享对象的对应属性

  listSO.removeAttribute(dis_user_id);

  IScopescope=Red5.getConnectionLocal().getScope();

   Iteratorit=scope.getConnections().iterator(); 

   for(;it.hasNext();){

    Setconnections=(Set)it.next();

    IConnectiontempConn=(IConnection)connections.iterator().next();

    if(tempConninstanceofIServiceCapableConnection){

        IServiceCapableConnectionsc=(IServiceCapableConnection)tempConn;

      //服务器端调用客户端flash方法。

        sc.invoke("disconnectMessage",newObject[]{user});

     }

   }

 }

 //视频邀请

 publicvoidvideoInvite(Object[]params){

  IConnectionconn=Red5.getConnectionLocal();

  Stringuser_id=conn.getClient().getId();

  StringclientName=(String)listSO.getAttribute(user_id);

  System.out.println("************视频邀请者是:

"+clientName);

  StringsayToName=params[0]==null?

"":

params[0].toString().trim();

  if("".equals(sayToName)||"All".equals(sayToName))//发消息给聊天室的所有人.

  {

  System.out.println("不可以邀请0或者多个人");  

  }else{

    IConnectiontempConn=onlineList.get(sayToName);    

    if(tempConninstanceofIServiceCapableConnection){

     IServiceCapableConnectionsc=(IServiceCapableConnection)tempConn;    

     sc.invoke("showInviteMessage",newObject[]{clientName+";"+sayToName});

     }

  }

 }

 //同意邀请后调用邀请方方法

 publicvoidagreeVideoInvite(Object[]params){

   IConnectionconn=Red5.getConnectionLocal();

   System.out.println("<<<<

   //邀请者

   StringinviteUserName=params[0]==null?

"":

params[0].toString().trim();

   //被邀请者

   StringotherUserName=params[1]==null?

"":

params[1].toString().trim();

   System.out.println("***邀请者是:

"+inviteUserName);

   System.out.println("***被邀请者是:

"+otherUserName);

   if("".equals(inviteUserName))//发消息给聊天室的所有人.

   {

   System.out.println("出错了");  

   }else{

     System.out.println("*********调用成功");

     IConnectiontempConn=onlineList.get(inviteUserName);    

     if(tempConninstanceofIServiceCapableConnection){

      IServiceCapableConnectionsc=(IServiceCapableConnection)tempConn;    

      sc.invoke("showVideo",newObject[]{otherUserName});

      System.out.println("*********调用结束");

      }

   }

  }

}

Flex3代码部分

xmlversion="1.0"encoding="utf-8"?

>

WindowedApplicationxmlns:

mx="layout="absolute">

 

Script>

  

[CDATA[

   importmx.events.CloseEvent;

   importmx.collections.ArrayCollection;

   importmx.controls.Alert;

   

   privatevarlistSO:

SharedObject;

   privatevaruserArr:

Array;  

   privatevarconn:

NetConnection;

   privatevarlocalUsername:

String;

   privatevarstm:

NetStream;

   privatevarstm2:

NetStream;

   //摄像头

   privatevarcam:

Camera;  

   //麦克风

   privatevarmic:

Microphone;

   privatevarvideo_0:

Video;

   privatevarvideo_1:

Video;

   [Bindable]

   publicvarcards:

ArrayCollection;

   //视频邀请集合

   publicvarvideoUsers:

Array;

   protectedfunctionlogin(event:

MouseEvent):

void

   {

    //TODOAuto-generatedmethodstub    

    localUsername=txt_name.text;

    if(localUsername==""){

     Alert.show("用户名不能为空");

     return;

    }else{

     if(conn==null){

      conn=newNetConnection();

      conn.client=this;

      conn.addEventListener(NetStatusEvent.NET_STATUS,_statusHandler);        

      conn.connect("rtmp:

//192.168.0.10/szftest",localUsername);

     }

    }

   }

   //状态监听

   privatefunction_statusHandler(evt:

NetStatusEvent):

void{

    if(evt.info.code=="NetConnection.Connect.Success"){

     this.currentState="chat";

     Alert.show("连接成功");

     _setListSO();     //创建用户列表共享对象

     this.showJoinInInfo(localUsername); 

    }

    if(evt.info.code=="NetConnection.Connect.Failed"){

     Alert.show("连接失败"); 

    }

    if(evt.info.code=="NetConnection.Connect.Closed"){

     Alert.show("连接关闭");

    }

   }

   publicfunctionshowJoinInInfo(message:

String):

void

   {

    //conn.call("getOnloadUser",newResponder(result_getUsers);     

    conn.call("getOnloadUser",null,message);

   }

   publicfunctionresult_getOnloadUser(str:

String):

void{ 

    txt_chatmsg.text+=str+"加入聊天室"+"\n";    

   }

   //创建用户列表共享对象

   privatefunction_setListSO():

void{

    listSO=SharedObject.getRemote("listSO",conn.uri,false);

    listSO.connect(conn);

    listSO.addEventListener(SyncEvent.SYNC,_listSOSyncHandler);

   }

   //用户列表共享对象被更新之后事件

   privatefunction_listSOSyncHandler(evt:

SyncEvent):

void{

    _showUserList();    //更新用户列表

   }

   //更新用户列表

   privatefunction_showUserList():

void{

    cards=newArrayCollection(

     [{label:

"All"}]

    );

    userArr=newArray();

    //用户数组更新

    for(vartmp:

StringinlistSO.data){

     userArr.push(listSO.data[tmp]);

    }

    //添加ArrayCollection    

    for(vari:

int=0;i

     cards.addItem({label:

userArr[i]});

    }

    //将数组添加到列表中显示出来

    userList.dataProvider=cards;

    users.dataProvider=cards;

   }

   

   publicfunctionshowMessage(message:

String):

void

   {

    txt_chatmsg.text+=message+"\n";

   }

   protectedfunctionsendMessage(event:

MouseEvent):

void

   {

    //TODOAuto-generatedmethodstub

    varsendString:

String=txt_yousay.text;

    //varsendTo:

String=users.selectedItem.userName==null?

"":

users.selectedItem.userId;

    varsendTo:

String=userList.selectedItem.label;    

    txt_yousay.text="";

    conn.call("sayToAll",null,sendTo,sendString);

   }

   //断线通知

   publicfunctiondisconnectMessage(disUser:

String):

void{

    txt_chatmsg.text+=disUser+"退出聊天室\n";

   }

   //视频邀请

   protectedfunctionvideo_clickHandler(event:

MouseEvent):

void

   {

    //TODOAuto-generatedmethodstub

    varsendTo:

String=userList.selectedItem.label;

    conn.call("videoInvite",null,sendTo);    

   }

   //显示自己的视频

   publicfunction_publishVideo():

void{

    stm=newN

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 成考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1