资源简介
WEBRTC多人视频通话,可以支持多人视频通话,目前是三人的,因为视频通话的信令用到的是websocket,所以代码里面也放入了单独websocket通信的demo,解释也比较详细了,原来有一个列子是两人的,后面改成三人的,多人的按照原理也是没问题,原创代码,转载注明出处
代码片段和文件信息
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 {
// 最大通话数量
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关闭
* @param session 关闭的session
* @param uid 关闭的用户标识
*/
@OnClose
public void onClose(Session session @PathParam(“uid“)String uid) {
remove(session uid);
}
/**
* 收到消息
* @param message 消息内容
* @param session 发送消息的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 发送消息的session
*/
private void nowaiting(Session session) {
session.getAsyncRemote().sendText(“{\“type\“ : \“nowaiting\“}“);
}
/**
* 是否可以继续创建通话房间
* @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 是否是创建者:如果没有申请对话ID为创建者,否则为为加入者。创建者返回: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
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 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个文件信息
相关资源
- webrtc音频数据流流程图
- webRTC_ios.zip
- WebRTC_AEC_流程图
- webrtc+VS2017完整工程及编译结果
- webRTC视频通信(通过浏览器调用摄像
- webRTC信令服务器实现音视频聊天
- StreamChange.rar
- LearningWebRTC
- webrtc降噪和增益的部分代码
- ajhifddimkapgcifgcodmmfdlknahffk_3_4.crx
- sipjs+FreeSWITCH+webrtc电话呼入、呼出、转
- 支持webrtc的sip js demo
- webrtc中AEC代码解读.zip
- vue+node(socket.io)+webRTC一对一视频通
- WebRTC实时通信系列webrtc-web-master.zip
- webrtc回声消除原理及延时估算方法.
- webrtc aec3
- webrtc新版语音流程图
- 基于tomcat7利用webrtc API实现一对一视频
- 音视频WebRTC实时互动直播技术实战视
- webrtc 视频数据流流程图
评论
共有 条评论