• 大小: 132KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-24
  • 语言: 其他
  • 标签: WEBRTC  

资源简介

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\.mymetadata
     文件        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.xml
     文件          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\meta-INF\
     文件          36  2016-08-04 09:26  WebRTC\WebRoot\meta-INF\MANIFEST.MF
     目录           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个文件信息

评论

共有 条评论