Mediasoup 杂谈(待完善)

Stella981
• 阅读 543

1. Mediasoup 基本组件框图

Mediasoup 杂谈(待完善)

2. Mediasoup 的初始化基本流程

1. 客户端访问 https://192.168.2.84:3000/?info=true , 返回初始化页面 html

2. 这是一个新发起的请求 websocket
wss://192.168.2.84:4443/?roomId=7xexh3xi&peerId=za4svz6e
客户端一个请求过来,首先根据 url 里的 roomId 查找 Room,如果不存在 Room,则轮询挑选一个 worker ,产生一个协议层面的 Room 以及通过 worker 产生一个 router ,
通过 router 产生一个与底层交互的 DirectTransport ,这个用来 js 与底层 worker 的信令或数据交互,然后创建一个上层的 Room 对象,包含这些新产生的对象

3. 客户端首先获取 getRouterRtpCapabilites

4. 客户端产生一个 createWebRtcTransport 生产者 和一个 createWebRtcTransport 消费者

5. 客户端然后执行加入 Room 的指令 join

6. 客户端执行 connectWebRtcTransport 进行 ice 的相关动作,两次一个生产者一个消费者

7. 客户端执行产生 produce ,并为 Room 的每个用户创建相应的 consume ,后续通过 produce 上传音视频数据

3.  Producer 的简单说明

每个 producer 分为三个种类 :  all, audio & video ,根据产生 produce 的 json 字段 kind 指定,
同时也支持三种类型 type 的输出,分别为 none, simple, simulcast, svc, pipe,根据产生 producer 的 json 字段 encodings 进行判断
当 encodings 列表个数为 1 时,判断 if (encoding.spatialLayers > 1 || encoding.temporalLayers > 1) 则为 SVC,否则就为 SIMPLE, 当
encodings 列表个数大于 1 时, 则 type 为 SIMULCAST,如果 encodings 为 0 时,则为 NONE

4. 数据接收及转发流程

UdpSocket ---> WebRtcTransport --- 根据 ssrc 获取 producer ---> Producer ---> WebRtcTransport ---> Router --- 根据 producer 获取 consumer ---> consumer (抖动缓冲) ---> WebRtcTransport

5. 题外话

新用户加入到 Room 会为当前 Room 内已经存在的每一个 producer 产生一个 consumer ,consumer 产生成功,把此 consumer 的信息通过上述通道,发送指令 newConsumer 到新用户的客户端上,这样就建立了客户端与服务器端的 consumer 的通道,而新用户的每次创建一个 producer 就会为当前 Room 的已经存在的用户产生一个 consumer ,然后把此信息发送到已经存在的用户客户端上,这样就为已经存在的用户建立 了consumer 的通道。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
vue 引用tinymce(富文本)遇到的坑,以及添加本地图片上传
1.安装npminstalltinymce 2.组件初始化:在需要用到富文本的组件内,importtinymcefrom'tinymce'然后初始化  tinymce.init3.加载富文本需要的资源文件,放在static目录下!(https://oscimg.oschina.net/oscnet/8cc8e9eade1
Stella981 Stella981
2年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
2年前
Jenkins流水线即代码之扩展共享库
!(https://oscimg.oschina.net/oscnet/ab8ee75c43cb1a3fd0fac241648861b03c5.gif)!(https://oscimg.oschina.net/oscnet/1a35fdf03222f188f706711d2b43eae6a14.gif)!(https://osci
Wesley13 Wesley13
2年前
mysql系列(三)——mysql架构与存储引擎
一、MySql逻辑架构!(https://oscimg.oschina.net/oscnet/up35e1824330cd1df7ac66652b9b1dbc41965.png)1.连接层!(https://oscimg.oschina.net/oscnet/up272cb2634e262cc2df52220a063
Wesley13 Wesley13
2年前
Java 初始化执行顺序以及成员变量初始化顺序
一、静态变量初始化顺序大家先看两个例子:(1)!(https://oscimg.oschina.net/oscnet/66be9168f7cdf36484b71f1d67069f12492.jpg)!(https://oscimg.oschina.net/oscnet/bf5d0b172f00f9aa237b3aee5b58cad5d0
Stella981 Stella981
2年前
Python_爬虫_案例汇总:
1.豆瓣采集!(https://oscimg.oschina.net/oscnet/29e918bf2ebced4da903f8ab789cd37ca35.jpg)!(https://oscimg.oschina.net/oscnet/83a646b5655e70dc379744e8ebfe145238d.jpg)1codin
Stella981 Stella981
2年前
Redis Cluster in Ubuntu
1\.首先,进到Redisserver 的位置,确认Redisserver 可以正常启动!(https://oscimg.oschina.net/oscnet/fb11911e35266a35f5b62dcbf9b02288c97.png)2. 在 redis5.0.3 目录下创建文件夹redisCluster\_Demo\_byMe
Stella981 Stella981
2年前
Js使用面向对象和面向过程的方法实现拖拽物体的效果
1.面向过程的拖拽实现代码:!(https://oscimg.oschina.net/oscnet/d680c759957babef2fec0902676eaa35ad9.gif)<!DOCTYPEhtml<html<head<titledragDiv</title
Stella981 Stella981
2年前
Eclipse 中的Maven常见报错及解决方法
1.不小心将项目中的MavenDependencies删除报错!(https://oscimg.oschina.net/oscnet/fd35e500e2580bca2afb81f35233b87a6ee.png)项目报错:!(https://oscimg.oschina.net/oscnet/8623bd4293fea39ca83a6