目录

前言

正文

一、简单介绍

二、关键特色

1. 超强 SFU 功能

2. Node.js 模块

3. 客户端 SDK

三、架构组成

1. 关键实例

2. 重要模块

四、发展现状


https://liuzhen.blog.csdn.net/article/details/115603863https://liuzhen.blog.csdn.net/article/details/115603863

前言

最近收看了一期微软(中国)关于云原生、大数据、AI 领域的开源服务创新的线上圆桌论坛,感觉收获颇丰。众所周知,随着云原生、大数据和 AI 领域的快速发展,各领域之间的技术融合和相互驱动也越来越明显,开源服务无疑是其中最核心的组件。

正文

本次圆桌论坛邀请了三位技术大咖,其中一位是百家云集团流媒体高级研发工程师 ,刘振老师。刘老师是一位优秀的音视频专家,在公司主要负责音视频 QoE 相关的研发工作。他分享中介绍到了一个云原生应用——开源流媒体服务 MediaSoup ,今天主要就给大家科普一下 MediaSoup。

一、简单介绍

Mediasoup 官网对其的定位和评价还是非常高的:Cutting Edge WebRTC Video Conferencing,意思是顶尖的 WebRTC 视频会议产品。

官网地址:https://mediasoup.org/

仓库地址:https://github.com/versatica

二、关键特色

1. 超强 SFU 功能

凭借丰富的功能和灵活性,SFU 模式广泛应用在多方会议或者类似场景,正在逐步取代更加消耗资源的 MCU 模式。

2. Node.js 模块

Mediasoup 并不是创建了一个固定的单体服务,而是一个 Node.js 模块,可以集成到更大的应用程序中,也可以独立运行,具备非常灵活的移植能力。

3. 客户端 SDK

Mediasoup 还提供了强大的 JS SDK,通过统一的 API 接口可以在任意浏览器上非常简单的构建出视频会议应用。

三、架构组成

Mediasoup 有一张非常经典的架构图,如下图所示:

1. 关键实例

上图涉及了三个关键实例,分别是 Worker、Router、Transport。其中,一个 Worker 代表一个运行在单核 CPU 上并处理 Router 实例的 MediaSoup C++ 子进程;Router 的作用是用于注入、选择和转发通过 Transport 实例创建的媒体流,包括音频流、视频流;Transport 是客户端与 MediaSoup Router 连接的桥梁,并通过在其上创建的 Producer 和 Consumer 实例实现双向媒体传输。

主要包括 4 种 Transport:WebRtcTransport、PlainRtpTransport、PipeTransport、DirectTransport。其中,WebRtcTransport 主要用于浏览器之间的或者浏览器与其他终端进行通讯的,这种传输数据一般是进行加密的,为了保证数据安全,它有很多安全机制,安全机制较为复杂;PlainRtpTransport 用于普通或者自定义的 RTP 数据传输;PipeTransport 用于不同 Worker 的 Router 之间的数据传输;DirectTransport 用于 JS 层与底层 Worker 之间的信令和数据交互。

2. 重要模块

但是,这张图主要描述了媒体数据在服务器侧的流转过程,没有更好体现出 WebRTC C/S 架构的特点,因此,自己更喜欢网上的这张图,它让 PeerConnection 与 Consumer 和 Producer 的关系更加明确。

在上图中,每个 WebRTC 客户端 Client 都会创建两个 Peerconnection,分别用于发送和接受媒体流,发送 PC 用于发送 LocalStream,其中包含了本地的 VideoTrack 和 AudioTrack,接收 PC 用来接受来自其他 Client 的 RemoteStream。同时,Room 会在流媒体服务器侧为每个 Client 创建一个 Peer,Peer 管理两个 Transport 用于接受 Client 的媒体流和向 Client 发送媒体流。

接下来,介绍一下 Peer 的作用。Peer 为对应的 Client 发送的 VideoTrack 和 AudioTrack 分别创建一个 Producer(一共是2个),Peer 也会为 Client 接收的 VideoTrack 和 AudioTrack 分别创建一个 Consumer(一共是2个)。其中,Producer 将媒体数据发送给每一个订阅者 Consumer,Consumer 表示一个被 MediaSoup Router 转发到客户端的音频流或者视频流。

下面再详细的介绍一下 Consumer,Consumer 根据功能划分可以分为四种,分别是 SimpleConsumer、PipeConsumer、SvcConsumer、SimulcastConsumer。其中,SimpleConsumer 是普通 RTP 数据的消费者,是一种最简单的 Consumer,音视频和视频流的都一样,没有类型区分;PipeConsumer 是不同 Worker 的 Router 之间的数据流转,表示接收或者消费从另外一个 Worker 中的 Router 传过来的数据;SvcConsumer 是处理和消费多层数据,传输时一般分为3层(核心层、拓展层、边缘层);SimulcastConsumer 是处理大小流的媒体数据。

四、发展现状

目前看来,MediaSoup 是一个很有前途的项目。最近几年,使用 MediaSoup 的用户数量正在快速增长,而且 Kurento 技术团队自己也开始使用 MediaSoup 代替自己原来的架构方案,貌似也为我们指明了方向,哈哈,技术方案没有绝对,具体因人而异,因公司而不同。通过对 MediaSoup 的了解,发现其设计巧妙,扩展性强,非常推荐大家把它作为云原生领域的流媒体服务器。


作者简介:

流媒体服务器(17)—— 流媒体开源服务 MediaSoup 初识相关推荐

  1. 流媒体服务器 性能,流媒体服务器性能

    流媒体服务器性能 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 在EulerO ...

  2. GB/T28181国标视频流媒体服务器EasyGBS流媒体服务器设备注册成功却无法播放问题解析

    背景分析 2012年6月1日,由公安部牵头起草的GB/T28181-2011 <安全防范视频监控联网系统信息传输.交换.控制技术要求>正式发布实施.要将全国视频统一联网,制定统一的国家标准 ...

  3. 微软流媒体服务器直播,流媒体服务器Flussonic Media Server对直播流进行录制

    Flussonic Media Server可以对直播流进行录制,然后在提供播放服务. 我们首先来看如何为直播流配置录制功能,如下: stream channel0 { url tshttp://vl ...

  4. 主流开源流媒体服务器有哪些?

    流媒体解决方案 Live555 流媒体平台框架 EasyDarwin 实时流媒体播放服务器程序DarwinStreamingSrvr 流媒体实时传输开发包 jrtplib 多媒体处理工具 ffmpeg ...

  5. Linux下使用Nginx搭建Rtmp流媒体服务器,实现视频直播功能

    一.环境介绍 操作系统:虚拟机运行的Ubuntu18.04 64位系统 二.流媒体服务器介绍 百度百科: 流媒体指以流方式在网络中传送音频.视频和多媒体文件的媒体形式.相对于下载后观看的网络播放形式而 ...

  6. (音视频开发)WebRTC进阶流媒体服务器开发-多人互动架构

    一:多人互动架构方案 (一)WebRTC回顾,两层含义: 1.WebRTC是google开源的流媒体客户端,可以进行实时通讯,主要应用于浏览器之间进行实时通讯,也可以单独编译在自己的应用中 2.Web ...

  7. 流媒体服务器使用手册

    流媒体服务器使用手册 版本:V5.2 目 录 第1章 产品概述... 3 第2章 产品使用详解... 4 2.1            产品主要功能... 4 2.2            产品安装. ...

  8. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器解决方案之CDN内容分发网络

    背景分析 EasyDSS流媒体解决方案提供一站式的转码.点播.直播.录像.检索.时移回放服务,极大地简化了开发和集成的工作,并且EasyDSS支持多种特性,完全能够满足企业视频信息化建设方面的需求.其 ...

  9. 搭建自己的流媒体服务器-(1)服务器搭建篇

    搭建自己的流媒体服务器-(1)服务器搭建篇 http://download.csdn.net/download/katdriver/3272133 http://blog.csdn.net/haoli ...

最新文章

  1. 英国政府开源了其大规模监控软件
  2. 5.1 Android Basic QuickStart Layouts Linear Layout
  3. C++ STL 一般总结
  4. (九)nodejs循序渐进-Express框架(进阶篇)
  5. oracle rman备份整库,RMAN备份恢复整个库
  6. 配置连接池连接oracle,Oracle连接池怎么配置
  7. 生命周期 用户可以操作dom_当面试官问:能否介绍下Vue生命周期时,该如何回答...
  8. sql server 替换有反斜杠的字符串_字符串提取,到底谁是你的菜?
  9. 学习Cocos2d的博客 --推荐
  10. notepad++批量操作笔记(持续更新..)
  11. C语言表白代码,复杂动态爱心
  12. 使用超级鹰模拟登录验证码报错的解决办法
  13. SLA、BFD、NQA、ACl 笔记
  14. CogPDF417Tool工具
  15. 学习记录476@linux硬盘分区
  16. python坦克大战游戏_python实现坦克大战游戏
  17. leaflet 导出图片,打印图片(A4横版或竖版)
  18. photoshop 2019 mac版 可支持最新M1芯片处理器
  19. iOS-使用Masonry布局不能立即获取到frame
  20. 硬件描述语言实验五:四位加法器实验

热门文章

  1. Windows Server 2012搭建域教程
  2. 三角函数之角度与弧度
  3. 八数码难题的多种解法
  4. SSD 1306显示屏 adafruit SSD 1306
  5. 聚划算导航栏的反弹效果代码 纯原生js实现
  6. “5G消息”应用案例!七大银行试商用情况汇总!
  7. 解锁的Facebook其实是很容易的
  8. BULK INSERT如何将大量数据高效地导入SQL Server
  9. 【JVM进阶之路】垃圾回收机制和GC算法之三色标记(三)
  10. VirtualBox调整分辨率