最近自己由于做一个互动会议的项目用到webrtc,客户端用webrtc库开发,服务端针对webrtc的服务器有很多种,鉴于对C++比较熟悉且mediasoup比较轻量级,所以选用了mediasoup作为webrtc互动会议的服务器端。想要开发好一个互动会议的软件,只懂的用库不是我一贯的追求作风,我比较喜欢研究优秀的开源库,了解其工作原理,这样自己开发的软件出现问题了,就可以轻松定位到问题所在,并能很好的解决;或者需要添加一些额外的功能,也可以拿到源码作二次修改,因此怀着这个目的,我决定对mediasoup源码进行一次深入研究,并记录下来供后来的学习者一点指引,如果文中有错误,恳请指正,共同学习。
   mediasoup是一种SFU模式的服务器,作用是接收一个终端的音视频媒体流然后转发到其他的终端。每个终端都将媒体流发送到服务器,mediasoup转发到除自己以为的其他终端。相比于混流器或者MCU模型的服务器,SFU模式的服务器有更好的性能和比较低的延时以及更高的吞吐量,因为SFU服务器不需要编解码等耗费CPU的操作,对操作系统性能要求没那么高。由于终端分别获取其他终端的媒体流,它们可以有一个个性化的布局,所以一个终端可以选择性的渲染某些流。
   mediasoup又和其他SFU服务器不一样的地方就是,它不是一个独立的模块,不能单独运行,而是和Node.js模块集成在一起的。mediasoup由两部分组成:
   1. 由javascript层编写的API——node.js :房间管理,信令管理
   2. 由C++编写的处理模块——Worker:处理媒体流
两个模块采用进程间通信——管道——相互通讯。mediasoup服务器有以下几个特点:
   **1.**运用ECMAScript 低级别的API
   **2.**多路音视频流通过单个ICE+DTLS通道传输。
   **3.**支持ipv6
   **4.**通过UDP或TCP传输ICE、DTLS、RTP和RTCP
   **5.**支持广播和SVC模式
   **6.**拥塞控制
   **7.**使用空间/时间层分布算法估计发送端和接收端带宽。
   **8.**基于libUV库的C++子进程处理模块worker处理媒体流
mediasoup结构如下:

   处理媒体流的子进程为worker进程,worker进程启动数量由cpu内核数决定,每个cpu核运行一个worker进程,每个worker进程中可以创建多个router,每个router对应一个房间room。在这个room里的所有参会者发送接收数据处理都在router中进行。因此可以理解为每个worker可以创建很多个会议房间,只要带宽条件和其他硬件条件满足,理论上可以创建无数房间,且两两之间不受干扰。
   当参会者发送音视频到mediasoup服务器时,router会创建produce来接收媒体流(每一路流创建一个produce,音频对应一个视频对应一个),当参会者接收媒体流时,router中对应的produce会创建一个comsumer,将produce的流发送到comsumer端然后转发到其他参会者。mediasoup传输有三种模式:
   1.WebRtcTransport:该模式代表着终端和mediasoup两者之间通过ICE+DTLS协商通信的网络路径。webrtc传输可以接收媒体数据,发送媒体数据和既可以接收也可以发送,没有限制。但是这种设计使得的mediasoupclient和libmediasoup在发送和接收时需要独立的webrtc传输。
   2.PlanTransport:Plan传输表示传输RTP、RTCP(可选择使用SRTP保护)和SCTP (datachchannel)的网络路径。
   3.PipeTransport:管道传输表示传输RTP、RTCP(可选择使用SRTP保护)和SCTP (datachchannel)的网络路径。管道传输的目的是同一主机上或单独主机上的两个Router实例相互通信。当在管道传输上调用consume()时,生产者的所有RTP流都被逐字传输,与WebRtcTransport和PlainTransport相反,在WebRtcTransport和PlainTransport中,一个连续的RTP流被发送到消费端点。
本文只是大致讲解下mediasoup的框架,后续的meidasoup使用以及源码分析可以阅读其他的博文。关于mediasoup的详细介绍以及api介绍可以去mediasoup官网了解mediasoup官网

webrtc服务器meidasoup框架介绍相关推荐

  1. Unity3damp;amp;C#分布式游戏服务器ET框架介绍-组件式设计

    前几天写了<开源分享 Unity3d客户端与C#分布式服务端游戏框架>,受到很多人关注,QQ群几天就加了80多个人.开源这个框架的主要目的也是分享自己设计ET的一些想法,所以我准备写一系列 ...

  2. webrtc服务器mediasoup源码分析

    一.webrtc服务器meidasoup框架介绍 二.webrtc客户端与mediasoup服务器连接过程(服务器接收流媒体数据之前的工作) 三.mediasoup服务器接收流媒体数据及接收拥塞控制 ...

  3. webrtc服务器压测工具使用

      主要介绍3个开源的webrtc压力测试框架–kite,pion及srs_bench,以janus服务器为例. 1.KITE    KITE整合了Selenium和Aullure.Selenium ...

  4. ESFramework网络通信框架介绍之(2)――网络通信消息NetMessage

    ESFramework网络通信框架与元数据 较之C++而言,.NET是一个更加"动态"的平台,其动态能力建立在反射机制之上,而反射的基础是"元数据". 上文已经 ...

  5. dommel mysql_.Net Core AA.FrameWork应用框架介绍

    开发多年,一直在从社区获取开源的便利,也深感社区力量的重要性,今天开源一个应用基础框架AA.FrameWork,也算是回馈社区,做出一点点贡献,希望能够帮助类似当年入行的我. AA.FrameWork ...

  6. p2p webrtc服务器搭建系列1: 房间,信令,coturn打洞服务器

    中继(relay) 在RTCPeeConnection中,使用ICE框架来保证RTCPeerConnection能实现NAT穿越 ICE,全名叫交互式连接建立(Interactive Connecti ...

  7. 流行的9个Java框架介绍: 优点、缺点等等

    流行的9个Java框架介绍: 优点.缺点等等 在 2018年,Java仍然是世界上最流行的编程语言.它拥有一个巨大的生态系统,在全世界有超过900万Java开发人员.虽然Java不是最直接的语言,但是 ...

  8. 揭开webRTC媒体服务器的神秘面纱——WebRTC媒体服务器开源项目介绍

    揭开webRTC媒体服务器的神秘面纱--WebRTC媒体服务器&开源项目介绍 WebRTC生态系统是非常庞大的.当我第一次尝试理解WebRTC时,网络资源之多让人难以置信.本文针对webRTC ...

  9. iOS流媒体直播整个框架介绍(HLS、RTSP)

    iOS流媒体直播整个框架介绍(HLS.RTSP) 目录技术文章2016年7月17日 一.HTTP(WebService) 基于HTTP的渐进下载Progressive Download流媒体播放仅是在 ...

最新文章

  1. Linux redis安装教程,Linux 下redis5.0.0安装教程详解
  2. JSP页面图片路径为中文时乱码解决办法
  3. 图片文字识别(一):tesseract-ocr-4.00的安装与初步进行图片文字识别
  4. U盘里的文件夹会以应用程序的方式出现解决
  5. python windows 远程执行bat
  6. 2021-09-08173. 二叉搜索树迭代器 栈
  7. 微信H5 跳转小程序 (html版本)
  8. ADC参数中的SNR、SNDR与SFDR的区别是什么
  9. 杨柳絮-Info:阜阳市多举措治理杨柳絮问题
  10. iOS开发之静态库.a的制作教程
  11. 【防火墙篇】03. Web 登录 ❀ Juniper 防火墙
  12. #R语言# 生成随机数
  13. Unity --- 角色移动时播放动画 与 动画剪辑
  14. 生成对抗网络 – Generative Adversarial Networks | GAN
  15. html打开网页过场动画_网页制作设计基础知识
  16. 从零开始的DIY智能家居 - 基于 ESP32 的土壤湿度传感器
  17. 520送对象什么礼物最好?精选4款好用的电容笔
  18. dirsearch的使用
  19. python批量修改图片格式和名称
  20. java解析json文件并保存到mysql数据库

热门文章

  1. NDK abiFilters含义
  2. (技术贴)铁道部12306网站瘫痪:网络购票技术之罪
  3. IE直接打开文件的保存位置
  4. 图文详解神秘的梯度下降算法原理(附Python代码)
  5. 为什么程序员需要德沃夏克
  6. 2021-05-05
  7. PHP-RSA公钥加密
  8. SSM学习——Spring事务(9)
  9. CISCO PVST+配置和结果验证
  10. STM32的定时器详解(嵌入式学习)