WebRTC 是一个支持网页浏览器进行实时语音对话或视频对话的技术 ,,最近工作需要研究了一下,写一个demo供大家参考,原理方面的东西大家可以百度一下,需要注意的是demo目前只支持火狐 因为谷歌目前必须是https 访问 才可以获取视频信息.系统环境为:tomcat8+jdk7
websocket
package com.li.web;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
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;
@ServerEndpoint("/video/{roomId}/{userId}")
public class VideoScoket {
/**
* 存放房间与用户
*/
private static HashMap> usersRoom = new HashMap>();
/**
* 打开websocket
* @param session websocket的session
* @param uid 打开用户的UID
*/
@OnOpen
public void onOpen(Session session, @PathParam("roomId")String roomId, @PathParam("userId")String userId) {
Set users = usersRoom.get(roomId);
if(users== null ){
users = new HashSet();
}
if(users.size()>=2){
sendMessage(session, "peopleMax");//目前只支持两个人之间的通讯 ,所以不能超过两个人
}else{
User user = new User();
user.setId(userId);
user.setSession(session);
users.add(user);
usersRoom.put(roomId,users);
}
}
/**
* websocket关闭
* @param session 关闭的session
* @param uid 关闭的用户标识
*/
@OnClose
public void onClose(Session session, @PathParam("roomId")String roomId, @PathParam("userId")String userId) {
Set users = usersRoom.get(roomId);
if(users!=null){
for (User user:users) {
if(user.getId().equals(userId)){
users.remove(user);
return;
}else if(!user.getId().equals(userId)){
sendMessage(user.getSession(), "bye");//退出之后,发送给另一个人信息,以便让他断开视频连接
return;
}
}
}
}
/**
* 收到消息
* @param message 消息内容
* @param session 发送消息的session
* @param uid
*/
@OnMessage
public void onMessage(String message,Session session, @PathParam("roomId")String roomId, @PathParam(