資源簡介
WEBRTC多人視頻通話,可以支持多人視頻通話,目前是三人的,因?yàn)橐曨l通話的信令用到的是websocket,所以代碼里面也放入了單獨(dú)websocket通信的demo,解釋也比較詳細(xì)了,原來有一個(gè)列子是兩人的,后面改成三人的,多人的按照原理也是沒問題,原創(chuàng)代碼,轉(zhuǎn)載注明出處

代碼片段和文件信息
package?com.acgist.demo;
import?java.io.IOException;
import?java.util.Collections;
import?java.util.HashMap;
import?java.util.Map;
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;
@ServerEndpoint(“/acgist.video/{uid}“)
public?class?AcgistVideo?{
//?最大通話數(shù)量
private?static?final?int?MAX_COUNT?=?20;
private?static?final?long?MAX_TIME_OUT?=?2?*?60?*?1000;
//?用戶和用戶的對話映射
private?static?final?Map?user_user?=?Collections.synchronizedMap(new?HashMap());?
//?用戶和websocket的session映射
private?static?final?Map?sessions?=?Collections.synchronizedMap(new?HashMap());
/**
?*?打開websocket
?*?@param?session?websocket的session
?*?@param?uid?打開用戶的UID
?*/
@OnOpen
public?void?onOpen(Session?session?@PathParam(“uid“)String?uid)?{
session.setMaxIdleTimeout(MAX_TIME_OUT);
sessions.put(uid?session);
}
/**
?*?websocket關(guān)閉
?*?@param?session?關(guān)閉的session
?*?@param?uid?關(guān)閉的用戶標(biāo)識
?*/
@OnClose
public?void?onClose(Session?session?@PathParam(“uid“)String?uid)?{
remove(session?uid);
}
/**
?*?收到消息
?*?@param?message?消息內(nèi)容
?*?@param?session?發(fā)送消息的session
?*?@param?uid
?*/
@OnMessage
public?void?onMessage(String?message?Session?session?@PathParam(“uid“)String?uid)?{
try?{
if(uid?!=?null?&&?user_user.get(uid)?!=?null?&&?AcgistVideo.sessions.get(user_user.get(uid))?!=?null)?{
Session?osession?=?sessions.get(user_user.get(uid));?//?被呼叫的session
if(osession.isOpen())
osession.getAsyncRemote().sendText(new?String(message.getBytes(“utf-8“)));
else
this.nowaiting(osession);
}?else?{
this.nowaiting(session);
}
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
/**
?*?沒有人在等待
?*?@param?session?發(fā)送消息的session
?*/
private?void?nowaiting(Session?session)?{
session.getAsyncRemote().sendText(“{\“type\“?:?\“nowaiting\“}“);
}
/**
?*?是否可以繼續(xù)創(chuàng)建通話房間
?*?@return?可以:true;不可以false;
?*/
public?static?boolean?canCreate()?{
return?sessions.size()?<=?MAX_COUNT;
}
/**
?*?判斷是否可以加入
?*?@param?oid?被申請對話的ID
?*?@return?如果能加入返回:true;否則返回false;
?*/
public?static?boolean?canJoin(String?oid)?{
return?!(oid?!=?null?&&?user_user.containsKey(oid)?&&?user_user.get(oid)?!=?null);
}
/**
?*?添加視頻對象
?*?@param?uid?申請對話的ID
?*?@param?oid?被申請對話的ID
?*?@return?是否是創(chuàng)建者:如果沒有申請對話ID為創(chuàng)建者,否則為為加入者。創(chuàng)建者返回:true;加入者返回:false;
?*/
public?static?boolean?addUser(String?uid?String?oid)?{
if(oid?!=?null?&&?!oid.isEmpty())?{
AcgistVideo.user_user.put(uid?oid);
AcgistVideo.user_user.put(oid?uid);
return?false;
}?else?{
AcgistVideo.user_user.put(uid?null);
return?true;
}
}
/**
?*?移除聊天用戶
?*?@param?session?移除的session
?*?@param?uid?移除的UID
?*/
private?static?void?
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2016-08-10?15:14??WebRTC\
?????文件?????????594??2016-08-04?09:28??WebRTC\.classpath
?????文件?????????291??2016-08-04?09:26??WebRTC\.myme
?????文件????????1749??2016-08-04?09:35??WebRTC\.project
?????目錄???????????0??2016-08-04?09:27??WebRTC\.settings\
?????文件?????????500??2016-08-04?09:26??WebRTC\.settings\.jsdtscope
?????文件??????????92??2016-08-04?14:53??WebRTC\.settings\org.eclipse.core.resources.prefs
?????文件?????????364??2016-08-04?09:26??WebRTC\.settings\org.eclipse.jdt.core.prefs
?????文件?????????456??2016-08-04?09:26??WebRTC\.settings\org.eclipse.wst.common.component
?????文件?????????252??2016-08-04?09:26??WebRTC\.settings\org.eclipse.wst.common.project.facet.core.xm
?????文件??????????49??2016-08-04?09:26??WebRTC\.settings\org.eclipse.wst.jsdt.ui.superType.container
?????文件???????????6??2016-08-04?09:26??WebRTC\.settings\org.eclipse.wst.jsdt.ui.superType.name
?????目錄???????????0??2016-08-10?10:09??WebRTC\WebRoot\
?????文件????????9086??2016-08-09?15:01??WebRTC\WebRoot\CopyrtcclientC.jsp
?????目錄???????????0??2016-08-04?09:26??WebRTC\WebRoot\me
?????文件??????????36??2016-08-04?09:26??WebRTC\WebRoot\me
?????目錄???????????0??2016-08-04?09:26??WebRTC\WebRoot\WEB-INF\
?????目錄???????????0??2016-08-10?10:52??WebRTC\WebRoot\WEB-INF\classes\
?????目錄???????????0??2016-08-10?10:52??WebRTC\WebRoot\WEB-INF\classes\com\
?????目錄???????????0??2016-08-10?10:52??WebRTC\WebRoot\WEB-INF\classes\com\acgist\
?????目錄???????????0??2016-08-10?10:52??WebRTC\WebRoot\WEB-INF\classes\com\acgist\demo\
?????文件????????3514??2016-08-10?10:52??WebRTC\WebRoot\WEB-INF\classes\com\acgist\demo\AcgistVideo.class
?????文件????????3533??2016-08-10?10:52??WebRTC\WebRoot\WEB-INF\classes\com\acgist\demo\AcgistVideoCopy.class
?????文件????????2277??2016-08-10?10:52??WebRTC\WebRoot\WEB-INF\classes\com\acgist\demo\Client.class
?????文件????????2236??2016-08-10?10:52??WebRTC\WebRoot\WEB-INF\classes\com\acgist\demo\Msg.class
?????文件????????2985??2016-08-10?10:52??WebRTC\WebRoot\WEB-INF\classes\com\acgist\demo\Msg1.class
?????目錄???????????0??2016-08-10?10:52??WebRTC\WebRoot\WEB-INF\classes\com\acgist\manyrtc\
?????文件????????1311??2016-08-10?10:52??WebRTC\WebRoot\WEB-INF\classes\com\acgist\manyrtc\ClientAServlet.class
?????文件????????1311??2016-08-10?10:52??WebRTC\WebRoot\WEB-INF\classes\com\acgist\manyrtc\ClientBServlet.class
?????文件????????1311??2016-08-10?10:52??WebRTC\WebRoot\WEB-INF\classes\com\acgist\manyrtc\ClientCServlet.class
?????文件????????4446??2016-08-10?15:14??WebRTC\WebRoot\WEB-INF\classes\com\acgist\manyrtc\WebSoketRTCTest.class
............此處省略49個(gè)文件信息
評論
共有 條評論