Mediasoup 是完全兼容webrtc的高性能sfu服务器,采用单进程模式,多少核心数开启多少个进程。另外,mediasoup使用 Nodejs 做 信令处理及业务的管理 工作,流媒体转发工作由Mediasoup(C++)部分实现的。Nodejs 与 Mediasoup之间通过管道进行通信。Mediasoup的默认端口为4000~4999。

mediasoup特性:

支持IPV6

ICE/DTLS/RTP/RTCP    既可以在TCP协议上运行也可以在UDP协议上运行

支持Simulcast(多流发送) 和 SVC(分层接收)

支持拥塞控制

带宽评估

支持STCP协议(非音视频数据 如文件,文本数据)

 多路使用同一个 ICE + DTLS 传输通道 (减少端口的占用)

拥有强大的性能(底层是C++ 使用进程+LIBUV  异步I/O实践处理机制)

一个Worker代表着一个运行在单核CPU上并处理Router实例的mediasoup C++子进程;每个Worker里有多个Router;每个Worker里都有一个Channel(管道) 通过其与C++进行通讯。代码中根据CPU核数启动相对应的Worker数量;一个房间只能在一个Worker里

Router用于注入、选择和转发通过Transport实例创建的媒体流;

每个用户的Transport可能会有多个Produces或者 Consume;

Transport将终端与MediaSoup Router连接起来,并通过在其上创建的Producer和Consumer实例实现双向媒体传输,实现了3种Transport(基类):

WebRtcTransport:浏览器加密数据使用的传输

PlainRtpTransport:自定义Rtp数据,如FFmpeg推流使用的传输

PipeTransport:不同Router之间的通信传输

  1. 每个Client创建两个Peerconnection分别用于发送和接受媒体流,发送端用于发送承载本地videoTrack和audioTrack的localStream,接收端接受来自其他Client的remoteStream;
  2. 同时Room会为每个Client创建一个Peer,Peer管理两个Transport用于接受Client的媒体流和向Client发送媒体流;
  3. Peer为对应的Client发送的videoTrack和audioTrack分别创建一个Producer(共2个);
  4. Peer为其他两个Client发送的videoTrack和audioTrack分别创建2个Consumer(共2个);
  5. Producer将媒体数据发送给每一个订阅者Consumer;
  6. Consumer代表着一个被MediaSoup Router转发到终端的音频或视频源。它是在定义媒体数据包传送方式的Transport之上创建的。

SimpleConsumer

普通RTP数据的消费者,比如有音频流和视频流每个都是SimpleConsumer,没有按类型区分,音视频流都是一样的,最简单的consumer

PipeConsumer

不同Worker之间Router之间的数据流转,则其为接收或者消费从另外一个Worker中的Router传过来的数据

SvcConsumer

传输时一般分为3层(核心层、拓展层、边缘层)进行传输,则其处理消费多层数据

SimulcastConsumer

当共享者使用的是多路流时,则使用其来接收

RtpPack的起作用为对rtp数据包的一个分析,如Rtp包中有包头,拓展头,数据,对于数据协议或者解析都是它的工作

SeqManager对传输的数据重新进行排序和处理,相当于WebRtc客户端与服务端之间进行传输数据的时候 服务端要新产生一个流推送给客户端,整个顺序都是重新排的,某个SSRC所对应的起始位置是多少,后面的包都是以这个起始包基础上进行传输和排序递增

所有Consumer都包含了RtpStreamSend对象, 从服务端角度来说,消费数据等于把数据发送给其他客户端

Producer对于服务端来说,他要生产流数据则就是接受客户端传输来的数据,因此每个Producer会对应多个RtpStreamRecv,为什么会有多个接收流?有可能是丢包了,丢包重传的数据也是单独的一路流。RtpStreamRecv使用了NackGenerator(丢包的一个产生器),对于接受者来说,发送者发了100个包,那么接受者是知道丢了哪些包(通过SeqManager知道丢的哪些包), 如果短时间内可以通过NackGenerator对客户端通知 进行补包。

mediasoup详解相关推荐

  1. 【流媒体服务器Mediasoup】 NodeJs与C++信令通信详解及Linux下管道通信的详解(五)

    目录 前言 匿名管道进程间通信 进程间管道 的创建与图解 MediaSoup中的管道创建 MediaSoup Channel的创建 NodeJs和 C++ 管道通信的过程 MediaSoup 消息确认 ...

  2. WebRTC技术详解

    随着4G的普及和5G技术的应用,实时音视频技术正在蓬勃发展.实时通信技术已经渗透到各行各业,支撑着人们的日常生活.在互联网领域,花椒.映客等直播平台吸引了大量的用户:在教育领域,通过实时直播技术搭建的 ...

  3. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  4. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

  5. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  6. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

  7. 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法

    深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...

  8. CUDA之nvidia-smi命令详解---gpu

    nvidia-smi是用来查看GPU使用情况的.我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下. ...

  9. Bert代码详解(一)重点详细

    这是bert的pytorch版本(与tensorflow一样的,这个更简单些,这个看懂了,tf也能看懂),地址:https://github.com/huggingface/pytorch-pretr ...

最新文章

  1. windows10 Selenium Chrome 驱动安装
  2. 计算机进制转换图,计算机等级考试进制转换及常用函数
  3. windows rt_如何在Windows RT上轻松将网站添加到Flash白名单
  4. 吐血整理!近二十年全国数学联赛赛题大全,烧脑全集来啦!
  5. oracle 数据库备份
  6. java登录功能多线程_java之多线程
  7. ZooKeeper监控
  8. Cisco PPPOE配置详解
  9. 4复数与复变函数(四)
  10. Makefile--伪目标 (三)
  11. 分布式存储系统学习笔记(二)—分布式文件系统(4)—内容分发网络(CDN)
  12. pom文件各标签解释
  13. 苹果手机不支持网易云音乐服务器,为什么我的苹果手机总是打不开网易云音乐。...
  14. C++程序设计语言学习笔记:异常处理
  15. 计算机电源的功能,电源屏主要功能及工作原理
  16. stm32学习笔记---STM32F4知识
  17. css预处理器sass/scss入门
  18. 彻底卸载Windows 10自带的杀毒软件windows defender
  19. 解决《空中英语教室》Super MP3光盘繁体字乱码的方法
  20. 天国没有加班,胡新宇兄弟一路好走

热门文章

  1. Jenkins 分布式部署
  2. 如何在海外推广一个新品牌?
  3. 《旅行的邀约》摄影展闭展辞
  4. Centos8 Yum 无法使用
  5. 【毕业设计】STM32电风扇智能调速器的设计【硬件+原理图+实物+论文】
  6. 二十多年为之感动的一句话,永远不晚,永远不腻!
  7. Microsoft Excel 2010--迷你图
  8. Android内存与性能优化
  9. 【噪声】2. 白噪声
  10. linux创建交换分区设置_如何在Linux上创建交换文件