近期需要做一个类似会议室功能,但网络上大多数是一对一通信,故记录分享希望帮助到有用的人

WebRTC一对一聊天原理

关于WebRTC建立一对一聊天的模板网上很多,可参考以下博客:springboot+websocket+webRTC在chrome上实现web视频通话

关于WebRTC原理也在此简单讲解,内容引用:WebRTC通信流程

上述序列中,标注的场景是ClientA向ClientB发起对聊请求,调用描述如下(此流程图最好对着代码阅读后进行理解):

  • ClientA首先创建PeerConnection对象,然后打开本地音视频设备,将音视频数据封装成MediaStream添加到PeerConnection中。

  • ClientA调用PeerConnection的CreateOffer方法创建一个用于offer的SDP对象,SDP对象中保存当前音视频的相关参数。ClientA通过PeerConnection的SetLocalDescription方法将该SDP对象保存起来,并通过Signal服务器发送给ClientB。

  • ClientB接收到ClientA发送过的offer SDP对象,通过PeerConnection的SetRemoteDescription方法将其保存起来,并调用PeerConnection的CreateAnswer方法创建一个应答的SDP对象,通过PeerConnection的SetLocalDescription的方法保存该SDP对象并将它通过Signal服务器发送给ClientA。

  • ClientA接收到ClientB发送过来的应答SDP对象,将其通过PeerConnection的SetRemoteDescription方法保存起来。

    交换Candidate(Candidate信息是交换SDP对象自动收集的信息。在创建端点(PeerConnection)的时候,添加回调函数(onIceCandidate))
  • 在SDP信息的offer/answer过程中(不要被流程图误导,认为是按流程图顺序执行),ClientA和ClientB已经根据SDP信息创建好相应的音频Channel和视频Channel并开启Candidate数据的收集,Candidate数据可以简单地理解成Client端的IP地址信息(本地IP地址、公网IP地址、Relay服务端分配的地址)。

  • 当ClientA收集到Candidate信息后,PeerConnection会通过OnIceCandidate接口给ClientA发送通知,ClientA将收到的Candidate信息通过Signal服务器发送给ClientB,ClientB通过PeerConnection的AddIceCandidate方法保存起来。同样的操作ClientB对ClientA再来一次。

  • 这样ClientA和ClientB就已经建立了音视频传输的P2P通道,ClientB接收到ClientA传送过来的音视频流,会通过PeerConnection的OnAddStream回调接口返回一个标识ClientA端音视频流的MediaStream对象,在ClientB端渲染出来即可。同样操作也适应ClientB到ClientA的音视频流的传输。

WebRTC多对多设计思路

如果你已经熟悉上述的流程,那么就可以构建群聊,首先看流程图



理解流程图之后,可以直接下载Demo进行阅读和改造:WebRTC多对多会议室

最新文章

  1. wampserver安装配置
  2. Java系列:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
  3. Missing artifact com.sun:tools:jar 1.5.0 终极解决方法
  4. 一个android的各种控件库
  5. 源码解读—LinkedList
  6. webapp开发经验和资料
  7. Linux学习之chkconfig命令
  8. Linux平台下使用rman进行oracle数据库迁移
  9. 访问Ice-Pick Lodge:假设公众筹款网站Kickstarter在成功
  10. python算法题
  11. js 高阶函数 闭包
  12. 第九周博客作业 <西北师范大学| 周安伟>
  13. Batch_Size对网络训练结果的影响
  14. vue 路由传参 params 与 query两种方式的区别
  15. SQL函数汇总大全
  16. 20155219 2016-2017-2 《Java程序设计》第2周学习总结
  17. 基于LiFi可见光通信技术的研究及应用转化调查
  18. PIL图片合成旋转缩放
  19. Oracle Stream配置详细步骤
  20. c# 如何制作RealPlayer 视频播放器

热门文章

  1. day28-jQuery01
  2. 使用.NET7和C#11打造最快的序列化程序-以MemoryPack为例
  3. 【Java EE】Day13 Web概念回顾、Tomcat、Servlet
  4. python读入中文文本编码错误
  5. 《MySQL必知必会》之事务、用户权限、数据库维护和性能
  6. 服务器迁移遇到的bug
  7. 使用 BenchmarkDotNet 比较指定容量的 List 的性能
  8. jquerylib表单
  9. JavaScript:函数:函数传参传的是什么?值传递还是引用传递?
  10. JUC源码学习笔记7——FutureTask源码解析,人生亦如是,run起来才有结果