直播一对一视频直播聊天
直播间一对一展示代码
webrtc+websocket 直接上代码
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();
}
}
@Component
@ServerEndpoint("/groupChat/{roomId}/{username}")
public class GroupChatController {
// 保存 聊天室id -> 聊天室成员 的映射关系
private static ConcurrentHashMap<String, List<Session>> rooms = new ConcurrentHashMap<>();// 收到消息调用的方法,群成员发送消息
@OnMessage
public void onMessage(@PathParam("roomId") String roomId,@PathParam("username") String username, String message) {List<Session> sessionList = rooms.get(roomId);System.out.println("sessionList"+sessionList);// 分别向聊天室的成员发送消息for (Session session : sessionList) {try {String text=username+": "+message;session.getBasicRemote().sendText(text);} catch (IOException e) {e.printStackTrace();}}
// lambda表达式写法
// sessionList.forEach(item -> {
// try {
// String text = username + ": " + message;
// item.getBasicRemote().sendText(text);
// } catch (IOException e) {
// e.printStackTrace();
// }
// });
}// 建立连接调用的方法,群成员加入
@OnOpen
public void onOpen(Session session, @PathParam("roomId") String roomId, @PathParam("name") String name) {List<Session> sessionList = rooms.get(roomId);if (sessionList == null) {sessionList = new ArrayList<>();rooms.put(roomId, sessionList);}sessionList.add(session);System.out.println("成员加入---- 聊天室号:" + roomId + " 当前聊天室人数:" + sessionList.size());}// 关闭连接调用的方法,群成员退出
@OnClose
public void onClose(Session session, @PathParam("roomId") String roomId) {List<Session> sessionList = rooms.get(roomId);sessionList.remove(session);System.out.println("成员退出---- 聊天室号:" + roomId + " 当前聊天室人数:" + sessionList.size());
}// 传输消息错误调用的方法
@OnError
public void OnError(Throwable error) {System.out.println("消息传递出错");
}
}
websocket多人聊天室
<style>.container {margin-top: 30px;margin-left: 30px;}.span1 {display: inline-block;width: 80px;font-size: 13px;}input {width: 200px;height: 30px;outline: none;border: 1px solid #3998f7;border-radius: 3px;padding: 0 10px;}input:hover,textarea:hover {box-shadow: 0 0 3px #3998f7;}#name {margin-top: 15px;}button {width: 100px;height: 30px;outline: none;color: #fff;font-size: 13px;font-weight: bold;background-color: #168ed1;border: none;border-radius: 5px;cursor: pointer;}#connectBtn,#content,#sendBtn,#closeBtn {margin-top: 10px;}#messages {margin-top: 20px;}textarea {width: 300px;height: 80px;outline: none;border: 1px solid #3998f7;border-radius: 3px;color: rgba(0, 0, 0, 0.7);font-size: 13px;font-weight: bold;padding: 5px;}#messages, .me, .name {color: rgba(0, 0, 0, 0.7);font-size: 14px;font-weight: bold;}.me {color: red;}.name {color: royalblue;}</style>
昵称:
刷新
连接
发送 退出
网上看着扒下来的一个 聊天室 前端后端
视频直播加聊天室
昵称:
刷新
连接
发送 退出
js代码
// 产生随机数
if (!location.hash) {
location.hash = Math.floor(Math.random() * 0xFFFFFF).toString(16);
}
// 获取房间号
var roomHash = location.hash.substring(1);
// 放置你自己的频道id, 这是我注册了 ScaleDrone 官网后,创建的channel
// 你也可以自己创建
var drone = new ScaleDrone(‘87fYv4ncOoa0Cjne’);
// 房间名必须以 'observable-'开头
var roomName = ‘observable-’ + roomHash;
var configuration = {
iceServers: [{
urls: ‘stun:stun.l.google.com:19302’ // 使用谷歌的stun服务
}]
};
var room;
var pc;
function onSuccess() {}
function onError(error) {
console.error(error);
}
drone.on(‘open’, function(error){
if (error) { return console.error(error);}
room = drone.subscribe(roomName);
room.on('open', function(error){if (error) {onError(error);}
});// 已经链接到房间后,就会收到一个 members 数组,代表房间里的成员
// 这时候信令服务已经就绪
room.on('members', function(members){console.log('MEMBERS', members);// 如果你是第二个链接到房间的人,就会创建offervar isOfferer = members.length === 2;startWebRTC(isOfferer);
});
});
// 通过Scaledrone发送信令消息
function sendMessage(message) {
drone.publish({
room: roomName,
message
});
}
function startWebRTC(isOfferer) {
pc = new RTCPeerConnection(configuration);
// 当本地ICE Agent需要通过信号服务器发送信息到其他端时
// 会触发icecandidate事件回调
pc.onicecandidate = function(event){if (event.candidate) {sendMessage({ 'candidate': event.candidate });}
};// 如果用户是第二个进入的人,就在negotiationneeded 事件后创建sdp
if (isOfferer) {// onnegotiationneeded 在要求sesssion协商时发生pc.onnegotiationneeded = function() {// 创建本地sdp描述 SDP (Session Description Protocol) session描述协议pc.createOffer().then(localDescCreated).catch(onError);};
}// 当远程数据流到达时,将数据流装载到video中
pc.onaddstream = function(event){remoteVideo.srcObject = event.stream;
};// 获取本地媒体流
navigator.mediaDevices.getUserMedia({audio: true,video: true,
}).then( function(stream) {// 将本地捕获的视频流装载到本地video中localVideo.srcObject = stream;// 将本地流加入RTCPeerConnection 实例中 发送到其他端pc.addStream(stream);
}, onError);// 从Scaledrone监听信令数据
room.on('data', function(message, client){// 消息是我自己发送的,则不处理if (client.id === drone.clientId) {return;}if (message.sdp) {// 设置远程sdp, 在offer 或者 answer后pc.setRemoteDescription(new RTCSessionDescription(message.sdp), function(){// 当收到offer 后就接听if (pc.remoteDescription.type === 'offer') {pc.createAnswer().then(localDescCreated).catch(onError);}}, onError);}else if (message.candidate) {// 增加新的 ICE canidatet 到本地的链接中pc.addIceCandidate(new RTCIceCandidate(message.candidate), onSuccess, onError);}
});
}
function localDescCreated(desc) {
pc.setLocalDescription(desc, function(){
sendMessage({ ‘sdp’: pc.localDescription });
},onError);
}
这些都是网上扒下来整理啦一下 侵权什么的联系我秒删
直播一对一视频直播聊天相关推荐
- 一对一视频直播源码实现网络中一对一视频聊天
一对一视频直播源码实现网络中一对一视频聊天 代码实现步骤 概述 首先要通信那就得满足通信的基础,我选择和目标放通信,前提就是我通过一定的条件将自己和目标建立链接,然后再将自己的通信信息交给目标,目标也 ...
- 直播交友app开发,一对一视频直播聊天APP定制,语音直播交友软件源码
直播类app近两年十分受欢迎,一对一视频直播交友,直播交友app目前主要是语音直播间陪玩,视频直播间打赏,pk,视频相亲,七人语音直播间,多人视频直播间,语音直播交友软件源码! 1,首页主播列表:包含 ...
- 一对一视频直播APP开发要点
每个时代都有每个时代的印记,季节轮回交替,生命生生不息.科学技术蓬勃发展的今天,你记住了这个时代的什么呢?这是个色彩斑斓的世界,每一刻都值得被记录. 在这场激烈的竞争之中,少不了程序大神的付出,代码的 ...
- 新手主播在一对一视频直播平台更容易发展,轻松月入过万!
很多不了解直播行业的人,都很想了解网络主播到底是怎么赚钱的?作为直播行业的内行人士今天我就来给大家讲讲网络主播到底是如何通过网络直播平台实现收益的.传统的一对多直播平台网络主播主要是靠粉丝送礼物赚钱. ...
- 一对一视频直播源码|手机视频直播平台android源码/可打包视频直播
源码介绍 一对一视频直播源码|手机视频直播平台android源码集视频.语音.动态.直播.社交等功能于一身. 前端功能说明: 登入注册:手机验证码登入.编辑个人信息.上传头像 首页直播:查看主播用户. ...
- 一对一直播源码开发,一对一视频直播解决方案新思路
随着传统秀场直播的普及,"直播+"开发热潮的来临,一对一直播俨然成为了直播行业又一火爆的应用领域.对于一对一直播的大胆尝试,让一对一直播有了极为广泛的应用场景,本篇内容为大家展示一 ...
- 一对一直播源码 一对一视频直播软件未来发展趋势
一对一视频直播软件对比传统直播平台,直播方式更简单自由,同时也更加私密,比传统直播平台更能保护用户私密,又能增加主播与用户之间的互动. 一对一视频直播的方式颠覆了人们对传统直播的看法,一对一直播凭借高 ...
- 一对一社交直播源码是怎么火起来的,一对一视频直播实现形式
一对一社交直播源码是怎么火起来的,一对一社交直播源码顺应市场的需求,满足了用户的新的口味,这是如今的新时代娱乐和技术发展的结合. 社交互动:直播最大的一块潜力市场是视频社交,资本方对直播的关注,也是因 ...
- 一对一视频直播源码 视频直播你应该知道的基础功能
一对一视频直播系统有直播和社交双重属性,因此要比我们常见的一对多视频直播平台功能丰富的多.一对一视频直播系统源码还要具备哪些基础功能呢 一.什么是视频直播源码 视频直播源码与很多应用程序源代码一样,有 ...
最新文章
- 你以为你真的了解final吗?
- c保留小数点后三位数没有则为0_哪位老师整理的,这么齐全?赶紧存下为孩子期末考试助力...
- 写给程序员的最好的13条建议
- 【建议收藏】HTTP与HTTPS的区别
- poj2182 Lost Cows-暴力
- 使用Spring WS创建合同优先的Web服务
- MTK 驱动开发(16)---LCM 移植
- Leetcode每日一题:134.gas-station(加油站)
- [51nod 1051 最大子矩阵和]前缀和+dp
- 每天好心情——Python画一棵樱花树
- ASC19 T4 CESM
- Selenium 入门篇
- java生成二维码合成背景图
- (十一) ELK快速入门
- MarkDown支持Emoji表情
- 简析BlockingQueue
- excel中sheet不见了,怎么办
- Excel设置下拉选项的方法
- 2011年5月51CTO壁纸点评活动获奖名单【已结束】
- POI读取Excle模板中的数据(增强版)
热门文章
- 最近在做的用户留存分析,和几种方法。
- Centos 7安装、配置SVN
- kirin710f是什么处理器_我告诉你麒麟710f相当骁龙什么处理器
- 为啥Spring事务失效了,你踩坑了吗?
- 400分理科学计算机,2021高考400分左右的理科大学有哪些
- 解决 “您必须首先安装.NETFramework的以下版本“
- 智融SW6206、SW3516、SW3522、SW2303等快充市场方案应用
- 2022区块链应用全景及未来展望
- 以下可用作c语言中的字符常量是,C语言-第3章简单的C程序设计 练习题.doc
- 计算机bootmgr丢失,如何修复BOOTMGR缺少错误