webrtc第二篇 聊天室
2024-08-26 13:57:26
聊天室模型不一样考虑的问题也不一样
1.websocket文本聊天
* step1 : 向聊天室所有用户(不包括该用户自己)发送当前用户上线信息。客户端用户栏回添加此用户
* step2 : 将该用户添加至连接池中
* step3 : 向该用户发送该聊天室所有用户列表
* 注:step1 和 step2 顺序颠倒时,会在客户端显示两个"自己"
A客户端向服务器发送消息,服务器向所有连接上的websocket客户端发送消息。
2.webrtc聊天室查看所有人音视频
A客户端已经加入聊天室,B客户端后加入。
B客户端
step1:B客户端加入后获取所有在线用户。
step2:向所有PeerConnection发送Offer类型信令
//向所有PeerConnection发送Offer类型信令
skyrtc.prototype.sendOffers = function() {
var i, m,
pc,
that = this,
pcCreateOfferCbGen = function(pc, socketId) {
return function(session_desc) {
pc.setLocalDescription(session_desc);
that.socket.send(JSON.stringify({
"eventName": "__offer",
"data": {
"sdp": session_desc,
"socketId": socketId
}
}));
};
},
pcCreateOfferErrorCb = function(error) {
console.log(error);
};
for (i = 0, m = this.connections.length; i < m; i++) {
pc = this.peerConnections[this.connections[i]];
pc.createOffer(pcCreateOfferCbGen(pc, this.connections[i]), pcCreateOfferErrorCb);
}
};
step3:接收到answer类型信令后将对方的session描述写入PeerConnection中
//接收到answer类型信令后将对方的session描述写入PeerConnection中
skyrtc.prototype.receiveAnswer = function(socketId, sdp) {
var pc = this.peerConnections[socketId];
pc.setRemoteDescription(new nativeRTCSessionDescription(sdp));
};
A客户端:
step1:接收到Offer类型信令后作为回应返回answer类型信令
//接收到Offer类型信令后作为回应返回answer类型信令
skyrtc.prototype.receiveOffer = function(socketId, sdp) {
var pc = this.peerConnections[socketId];
this.sendAnswer(socketId, sdp);
}; //发送answer类型信令
skyrtc.prototype.sendAnswer = function(socketId, sdp) {
var pc = this.peerConnections[socketId];
var that = this;
pc.setRemoteDescription(new nativeRTCSessionDescription(sdp));
pc.createAnswer(function(session_desc) {
pc.setLocalDescription(session_desc);
that.socket.send(JSON.stringify({
"eventName": "__answer",
"data": {
"socketId": socketId,
"sdp": session_desc
}
}));
}, function(error) {
console.log(error);
});
};
参考:
https://segmentfault.com/a/1190000000436544
最新文章
- tomcat 虚拟节点
- 日期转换(用DateTime的ParseExact方法解析特殊的日期时间)
- How to check “hasRole” in Java Code with Spring Security?
- MSDN 2005 安装问题
- sharepoint2013 新建母板页 新建页面布局 关联母板页和页面布局
- 【锋利的jQuery】表单验证插件踩坑
- Oracle_SQL92_连接查询
- 如何解决-win7系统打开截图工具显示“截图工具当前未在计算机上运行”
- openssl升级
- java ee,包括js,html,jsp等等知识整合
- ECMAScript 6 入门之字符串
- Linux终端小技巧
- NAT与FULL NAT的区别
- 从0x7fffffff+1开始的数学期望
- javascript:typeof与instanceof区别
- 《java虚拟机》----java内存区域与内存溢出异常
- Ubuntu 16.04 搭建 ELK
- c#调用c++库函数
- Jmeter-7-在命令行中运行Jmeter.
- SQL Server “超过了锁请求超时时段”错误
热门文章
- POJ 1804 Brainman(归并排序)
- SampleDateFormat进行日期格式化
- linux下svn 搭建
- 一键搭建vpn服务器
- 淘淘商城基于maven和svn的理解
- (翻译)如何对python dict 类型按键(keys)或值(values)排序
- MFC学习-第2,3课 MFC框架的运行机制
- JQuery------prevAll(),nextAll(),attr()方法的使用
- ORACLE查看并修改session和连接最大数
- CURL常用命令--update20151015