webrtc服务器meidasoup框架介绍
最近自己由于做一个互动会议的项目用到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框架介绍相关推荐
- Unity3damp;amp;C#分布式游戏服务器ET框架介绍-组件式设计
前几天写了<开源分享 Unity3d客户端与C#分布式服务端游戏框架>,受到很多人关注,QQ群几天就加了80多个人.开源这个框架的主要目的也是分享自己设计ET的一些想法,所以我准备写一系列 ...
- webrtc服务器mediasoup源码分析
一.webrtc服务器meidasoup框架介绍 二.webrtc客户端与mediasoup服务器连接过程(服务器接收流媒体数据之前的工作) 三.mediasoup服务器接收流媒体数据及接收拥塞控制 ...
- webrtc服务器压测工具使用
主要介绍3个开源的webrtc压力测试框架–kite,pion及srs_bench,以janus服务器为例. 1.KITE KITE整合了Selenium和Aullure.Selenium ...
- ESFramework网络通信框架介绍之(2)――网络通信消息NetMessage
ESFramework网络通信框架与元数据 较之C++而言,.NET是一个更加"动态"的平台,其动态能力建立在反射机制之上,而反射的基础是"元数据". 上文已经 ...
- dommel mysql_.Net Core AA.FrameWork应用框架介绍
开发多年,一直在从社区获取开源的便利,也深感社区力量的重要性,今天开源一个应用基础框架AA.FrameWork,也算是回馈社区,做出一点点贡献,希望能够帮助类似当年入行的我. AA.FrameWork ...
- p2p webrtc服务器搭建系列1: 房间,信令,coturn打洞服务器
中继(relay) 在RTCPeeConnection中,使用ICE框架来保证RTCPeerConnection能实现NAT穿越 ICE,全名叫交互式连接建立(Interactive Connecti ...
- 流行的9个Java框架介绍: 优点、缺点等等
流行的9个Java框架介绍: 优点.缺点等等 在 2018年,Java仍然是世界上最流行的编程语言.它拥有一个巨大的生态系统,在全世界有超过900万Java开发人员.虽然Java不是最直接的语言,但是 ...
- 揭开webRTC媒体服务器的神秘面纱——WebRTC媒体服务器开源项目介绍
揭开webRTC媒体服务器的神秘面纱--WebRTC媒体服务器&开源项目介绍 WebRTC生态系统是非常庞大的.当我第一次尝试理解WebRTC时,网络资源之多让人难以置信.本文针对webRTC ...
- iOS流媒体直播整个框架介绍(HLS、RTSP)
iOS流媒体直播整个框架介绍(HLS.RTSP) 目录技术文章2016年7月17日 一.HTTP(WebService) 基于HTTP的渐进下载Progressive Download流媒体播放仅是在 ...
最新文章
- Linux redis安装教程,Linux 下redis5.0.0安装教程详解
- JSP页面图片路径为中文时乱码解决办法
- 图片文字识别(一):tesseract-ocr-4.00的安装与初步进行图片文字识别
- U盘里的文件夹会以应用程序的方式出现解决
- python windows 远程执行bat
- 2021-09-08173. 二叉搜索树迭代器 栈
- 微信H5 跳转小程序 (html版本)
- ADC参数中的SNR、SNDR与SFDR的区别是什么
- 杨柳絮-Info:阜阳市多举措治理杨柳絮问题
- iOS开发之静态库.a的制作教程
- 【防火墙篇】03. Web 登录 ❀ Juniper 防火墙
- #R语言# 生成随机数
- Unity --- 角色移动时播放动画 与 动画剪辑
- 生成对抗网络 – Generative Adversarial Networks | GAN
- html打开网页过场动画_网页制作设计基础知识
- 从零开始的DIY智能家居 - 基于 ESP32 的土壤湿度传感器
- 520送对象什么礼物最好?精选4款好用的电容笔
- dirsearch的使用
- python批量修改图片格式和名称
- java解析json文件并保存到mysql数据库