写在前面

实现房间内人员的视频聊天,由于并未很完善,所以需要严格按照步骤来,当然基于此完善,就是时间的问题了。

架构

整个设计架构如下:

图片来自于参考博文。我使用的是第一种Mesh 架构,无需任何流媒体服务器,直接利用成熟的WebRTC 协议。该体系架构基于从每一个发送者创建多个一对一 的数据流到每一个接收端。客户端创建多个对等连接,连接数量基于房间内的其它成员数。

应用程序实现

基础实现如下:

第1步:将 注册用户身份信息和表明想加入房间号和连接建立成功放在一起是为了在连接一建立成功就向信令服务器发送信息。

第2步:客户端发起多个连接创建请求(即视频通话请求)。

第3步:响应客户端的多个连接创建请求,返回房间内成员信息;排除自己以及以及发起了多个连接创建请求的成员。

第4步:客户端创建多个连接,并将包含多个连接的offer和成员信息的消息发送给信令服务器。

第5步:注册onIceCandidate 事件,发送 单个candidate 给信令服务器。

第6步:接收信令服务器的单个 answer 消息,设置为对应用户连接的desc。

第7步:接收信令服务器的单个 candidate 消息,添加到对应用户连接的iceCandidate。

客户端

客户端使用adapter.js , demo的代码来自于开源的webrtc-samples,基于其中的 peerconnection 内容修改而成的。效果如下图:

注:其中两个客户端采用的是虚拟摄像头

关于客户端更详细的设计参考推荐博文。

信令服务器设计

信令服务器的作用在于转发各个sdp 给对应的客户端,协助对等连接的建立。

如果需要实现多人视频聊天,其中的逻辑则更为复杂。通过websockets 来实现客户端与信令服务器之间的消息传输,并且设置了多种消息格式,具体格式如下:

const requestType = {// 用户认证USER_IDENTITY: 'USER_IDENTITY',// type 为 offer 的 descSDP_OFFER: 'SDP_OFFER',// type 为 answer 的 descSDP_ANSWER: 'SDP_ANSWER',// candidateSDP_CANDIDATE: 'SDP_CANDIDATE',// 创建多个连接请求CLIENT_MULTIPLY_CONNECTION_CREATEQUE: 'CLIENT_MULTIPLY_CONNECTION_CREATEQUE',// 房间成员消息响应SERVER_CALLEESRESP: 'SERVER_CALLEESRESP'
};

关于信令服务器更详细的设计参考推荐博文。

源码

源码地址,以下流程可能不适用,以源码中的 readme 为准,代码写的有点晦涩,欢迎哥哥们提意见 /鲜花。

  1. 启动信令服务器,修改前端代码中的websockets 地址,部署启动前端代码
  2. 客户端A 访问地址 …/index.html?name=clientA&roomId=001, 点击start
  3. 客户端A 访问地址 …/index.html?name=clientB&roomId=001,点击start
  4. 客户端C 访问地址 …/index.html?name=clientC&roomId=001,点击start
  5. 客户端D 访问地址 …/index.html?name=clientD&roomId=001,点击start, 并点击Call。
  6. 整个完整的流程如上。

注:以上流程能够得到保证,其它流程我的代码均未考虑。并且执行一次以上流程可能需要重启信令服务器,重新执行整个流程。

推荐博文


WebRTC实现多人视频聊天之客户端设计
WebRTC实现多人视频聊天之信令服务器设计

参考博文


https://blog.csdn.net/gupar/article/details/53101435 基于webrtc 多人音视频的研究

如果你觉得我的文章对你有所帮助的话,欢迎关注我的公众号。赞!
认认真真学习,做思想的产出者,而不是文字的搬运工。错误之处,还望指出!

WebRTC实现多人视频聊天相关推荐

  1. WebRTC实现多人视频聊天之客户端设计

    写在前面 在开始之前,需要对如何建立点对点连接有一个了解,参考我的另一篇博文:WebRTC之点对点连接.下图是来自参考博文中的一张图片. 基础想法 基础架构如下: 客户端主要在于处理从WebSocke ...

  2. WebRTC实现多人视频聊天之信令服务器设计

    基础设想 信令服务器主要负责转发 SDP ,当然,我也可以选择将我的业务逻辑写在里面(生产环境不推荐这样做).选择基于Web Sockets主要是因为这块比较熟悉,并且双向连接,我们能够基于此做的事非 ...

  3. 实践:《从头到脚撸一个多人视频聊天 — 前端 WebRTC 实战(一)》

    2019独角兽企业重金招聘Python工程师标准>>> 请先阅读原文,链接:从头到脚撸一个多人视频聊天 - 前端 WebRTC 实战(一),本文只涉及实践过程中的问题 1.video ...

  4. 教你用WebRTC撸一个多人视频聊天

    之前公司准备用 webRTC 来实现视频聊天,研究了几天,撸了个 demo 出来,(虽然最后并没有采用这项技术,囧),但是还是写一个出来吧! WebRTC简单介绍 WebRTC (Web Real-T ...

  5. Android 集成 Agora SDK 快速体验 RTC 版多人视频聊天|掘金技术征文

    RTC (Real-Time Communication) 作为实时通讯领域的"新贵",在互动直播.远程控制.多人视频会议.屏幕共享等领域广受好评,如果你还不了解 RTC ,Tak ...

  6. 【游戏开发实战】Unity从零开发多人视频聊天功能,无聊了就和自己视频聊天(附源码 | Mirror | 多人视频 | 详细教程)

    文章目录 一.前言 二.思考问题与解决方案 1.思考问题 2.解决方案 2.1.Unity中如何开启摄像头并对图像进行采样 2.2.图像如何中转给其他客户端 2.3.如何实现清晰度切换 2.4.客户端 ...

  7. (Agora声网)多人视频聊天应用的开发(三)多人聊天

    转载于:Android多人视频聊天应用的开发(三)多人聊天-玖哥的书房-51CTO博客 http://blog.51cto.com/dongfeng9ge/2104587 本系列文章结合声网官方在Gi ...

  8. (Agora声网)多人视频聊天应用的开发(二)一对一聊天

    转载于:Android多人视频聊天应用的开发(二)一对一聊天-玖哥的书房-51CTO博客 http://blog.51cto.com/dongfeng9ge/2095626 本系列文章结合声网官方在G ...

  9. (Agora声网)多人视频聊天应用的开发(一)快速集成

    转载于:Android多人视频聊天应用的开发(一)快速集成-玖哥的书房-51CTO博客 http://blog.51cto.com/dongfeng9ge/2095621 本系列文章结合声网官方在Gi ...

最新文章

  1. Angular ɵɵelementStart和ɵɵText的工作原理
  2. mac nginx 非brew安装_Nginx服务器环境手动安装Discuz! Q非详细教程
  3. Go语言大神亲述:历七劫方可成为程序员!
  4. L2-022. 重排链表(双队列)
  5. swagger - RESTFUL接口文档在线自动生成、代码自动生成工具详解
  6. Word转PDF表格边框横线丢失
  7. diadem2017注册机 ni_NI DIAdem2017下载
  8. python opencv读大华摄像头视频流实时移动侦测运动检测截图拍照保存
  9. bin是什么文件,要如何打开?
  10. 乐刻运动年陈文化中的那六个成语解析:日拱一卒,功不唐捐|筚路蓝缕 玉汝于成|有梦可依,未来可期
  11. 在阿里云ECS上搭建Skynet服务器与Unity通信
  12. SQL Server Note [vaynexiao]
  13. CentOS系列之Elasticsearch(二):查询
  14. 大数据开发(牛客)面试被问频率最高的几道面试题
  15. java 启动参数 别名,Spring boot 参数别名处理
  16. 【开发工具】SVN 忽略指定类型文件或指定名称文件夹
  17. ... ...WOW S4套装
  18. 什么?还在用delete删除数据《死磕MySQL系列 九》
  19. c语言凑数的不同种方法,凑数强化版【庆贺2021年5月9日母亲节】
  20. 累涨超200%成华尔街新宠 Fastly借边缘云有望冲上“云”霄?

热门文章

  1. 实现H264格式视频的流媒体播放
  2. python 椭圆曲线加法_椭圆曲线密码学简介(一):实数域的椭圆曲线及其群运算规则...
  3. Python Gdal 栅格数据处理之hgt转tif数据
  4. 编写应用程序,从命令行传入两个整型数作为除数和被除数。要求程序中捕获NumberFormatException 异常和ArithmeticException 异常,而且无论在哪种情况下,“总是被执行”
  5. 教程:Win10移动User文件夹到其他位置(多图)
  6. U盘硬件设备怎么连接计算机,电脑无法识别u盘设备怎么解决?
  7. 2022 buaa CO P6(Verilog实现流水线CPU(plus))
  8. panic: Error 1045: Access denied for user ‘root‘@‘117.61.242.215‘ (using password: YES)
  9. 使用第三方云通讯平台时,出现{'172001':'网络错误'}解决方法
  10. 列表2:查询复制函数实操