51CTO下载Flex+Red5语音视频聊天程序实现.docx
- 文档编号:6871980
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:9
- 大小:18.59KB
51CTO下载Flex+Red5语音视频聊天程序实现.docx
《51CTO下载Flex+Red5语音视频聊天程序实现.docx》由会员分享,可在线阅读,更多相关《51CTO下载Flex+Red5语音视频聊天程序实现.docx(9页珍藏版)》请在冰豆网上搜索。
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;
privateMap
//程序运行时志向
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 CTO 下载 Flex Red5 语音 视频 聊天 程序 实现