当前位置:网站首页>Mediasoup 杂谈(待完善)
Mediasoup 杂谈(待完善)
2022-08-02 14:16:00 【freeabc】
1. 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 的通道。
边栏推荐
猜你喜欢
随机推荐
图解MESI(缓存一致性协议)
【网络安全】学习笔记 --00
Oauth2.0 自定义响应值以及异常处理
Priority table and Ascll table
WEB自动化之多窗口操作、切换frame、弹窗处理
implement tcp bbr on ns3 (在ns3上实现TCP BBR)
移动拷贝构造函数
HCIE学习记录——数通网络基础
代码细节带来的极致体验,ShardingSphere 5.1.0 性能提升密钥
Technical Selection of Message Queuing
使用三个线程,按顺序打印X,Y,Z,连续打印10次
Mysql锁机制与事务隔离
项目管理模块-项目权限功能开发
Mysql索引优化一
一分钟之内搭建自己的直播服务器?
分布式一致性协议-Gossip
【软件测试】用例篇
audio console无法连接到RPC服务
Zabbix: PHP option“date.timezone” Fail
理解:野指针,空指针,失效指针。