资源简介
WEBRTC多人视频通话,可以支持多人视频通话,目前是三人的,因为视频通话的信令用到的是websocket,所以代码里面也放入了单独websocket通信的demo,解释也比较详细了,原来有一个列子是两人的,后面改成三人的,多人的按照原理也是没问题,原创代码,转载注明出处
![](http://www.nz998.com/pic/35793.jpg)
代码片段和文件信息
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+socketio+SpringBoot视频及文字聊天
- WebRtc视频聊天demo包括多人聊天
- WebRTC自带的peerconenction Windows版本
- WebRTC零基础开发者教程
- Learning WebRTC 无水印pdf
- webrtc中NLP处理
- audio_process
- WebRTCDemo.zip
- webrtc acem agc ns vad单独编译工程
- WebRTC噪声抑制算法源码
- webRTC服务器端代码
- WebRTC零基础开发者教程(纯净版)
- WebRTC学习之四:最简单的语音聊天
- LearningWebRTC中文版.pdf
- webrtc教程
- webrtcDemo150521
- kurento webRTC
- webrtc教程v0.3
- webrtc视频通话 浏览器
- learning webrtc 中文版
- Google App Engine 最新版 (google_appengin
- 国标28181转rtsp/rtmp/webrtc/hls/flv
- WebRtc+SignalR 的demo
- webRTC语音视频通话demo
- 部署文档_demo版本_v2.9.5.20200827_limit_
- webrtc音频数据流流程图
- webRTC_ios.zip
- WebRTC_AEC_流程图
- webrtc+VS2017完整工程及编译结果
评论
共有 条评论