資源簡(jiǎn)介
基于webRTC和websocket簡(jiǎn)單實(shí)現(xiàn)多人視頻會(huì)議功能,前端純JS代碼,后臺(tái)JAVA代碼,主要實(shí)現(xiàn)功能暫未考慮效率,測(cè)試4人視頻會(huì)議延遲極低可控制在200毫秒內(nèi)

代碼片段和文件信息
package?com.scbd.bdpl.controller.multimedia;
import?java.io.IOException;
import?java.util.Collection;
import?java.util.HashMap;
import?java.util.Map;
import?java.util.Set;
import?javax.websocket.OnClose;
import?javax.websocket.OnMessage;
import?javax.websocket.OnOpen;
import?javax.websocket.Session;
import?javax.websocket.server.PathParam;
import?javax.websocket.server.ServerEndpoint;
import?com.alibaba.fastjson.JSON;
import?com.alibaba.fastjson.JSONobject;
/**
?*?websocket服務(wù)
?*?@author?Ivan
?*
?*/
@ServerEndpoint(“/websocket/{username}“)
public?class?SocketServer?{
private?static?Map?userOnlineMap?=?new?HashMap();
//連接時(shí)
@OnOpen
public?void?open(Session?session@PathParam(“username“)String?username)?{
for?(String?onlineUsername?:?userOnlineMap.keySet())?{
if(onlineUsername.equals(username))?{//用戶已存在
System.out.println(“用戶已存在或用戶名重復(fù)“);
return;
}
}
//轉(zhuǎn)發(fā)給其他人上線消息
JSONobject?json=new?JSONobject();
json.put(“type“?“userConnection“);
json.put(“data“?username);
forwardMessageExceptMe(session?json.toString());
System.out.println(username?+?“open“);
userOnlineMap.put(usernamesession);//添加用戶進(jìn)入在線列表
}
//收到消息
@OnMessage
public?void?OnMessage(String?message?Session?session@PathParam(“username“)String?username)?{
//獲得消息并轉(zhuǎn)為JSON
JSONobject?json=JSON.parseobject(message);
String?type=(String)?json.get(“type“);
//判斷消息
switch?(type)?{
//查詢?cè)诰€用戶
case?“getOnlineUserName“:
replyOnlineUserName(session);
break;
//轉(zhuǎn)發(fā)消息給sendTo
default:
String?sendBy=(String)?json.get(“sendBy“);
String?sendTo=(String)?json.get(“sendTo“);
if(sendBy!=null&&sendTo!=null)?{
forwardMessage(userOnlineMap.get(sendTo)?message);
}
break;
}
}
@OnClose
public?void?close(Session?session@PathParam(“username“)String?username)?{
System.out.println(username?+?“close“);
try?{
userOnlineMap.remove(username?session);
session.close();
//轉(zhuǎn)發(fā)給其他人下線消息
JSONobject?json=new?JSONobject();
json.put(“type“?“userClose“);
json.put(“data“?username);
forwardMessageExceptMe(session?json.toString());
}?catch?(IOException?e)?{
// e.printStackTrace();
}
}
//回復(fù)在線用戶
private?void?replyOnlineUserName(Session?session)?{
Set?OnlineUserNames=userOnlineMap.keySet();
JSONobject?json=new?JSONobject();
json.put(“type“?“userOnlineList“);
json.put(“data“?OnlineUserNames);
forwardMessage(sessionjson.toString());
}
//轉(zhuǎn)發(fā)消息特定目標(biāo)
private?void?forwardMessage(Session?sessionString?message)?{
try?{
session.getBasicRemote().sendText(message);
}?catch?(IOException?e)?{
// e.printStackTrace();
}
}
//轉(zhuǎn)發(fā)消息給所有人
private?void?forwardMessage(Collection?sessionsString?message)?{
for?(Session?session?:?sessions)?{
forwardMessage(sessionmessage);
}
}
//轉(zhuǎn)發(fā)消息給除自己以外的所有人
private?void?forwardMessageExceptMe(Session?sessionString?message)?{
for?(Session?sessions?:?userOnlineMap.values())?{
if(!sessions.equals(session)
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件?????535212??2018-08-06?16:45??webRTC多人視頻會(huì)議室\fastjson-1.2.41.jar
?????文件??????84349??2018-09-12?17:25??webRTC多人視頻會(huì)議室\jquery-2.1.4.min.js
?????文件???????3287??2018-10-29?16:05??webRTC多人視頻會(huì)議室\SocketServer.java
?????文件????????856??2018-10-29?16:28??webRTC多人視頻會(huì)議室\video.html
?????文件???????6322??2018-10-29?16:08??webRTC多人視頻會(huì)議室\video.js
?????文件????????194??2018-11-12?16:22??webRTC多人視頻會(huì)議室\說(shuō)明.txt
?????目錄??????????0??2018-11-12?16:20??webRTC多人視頻會(huì)議室
-----------?---------??----------?-----??----
???????????????630220????????????????????7
評(píng)論
共有 條評(píng)論