流媒体服务器(17)—— 流媒体开源服务 MediaSoup 初识
目录
前言
正文
一、简单介绍
二、关键特色
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 初识相关推荐
- 流媒体服务器 性能,流媒体服务器性能
流媒体服务器性能 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 在EulerO ...
- GB/T28181国标视频流媒体服务器EasyGBS流媒体服务器设备注册成功却无法播放问题解析
背景分析 2012年6月1日,由公安部牵头起草的GB/T28181-2011 <安全防范视频监控联网系统信息传输.交换.控制技术要求>正式发布实施.要将全国视频统一联网,制定统一的国家标准 ...
- 微软流媒体服务器直播,流媒体服务器Flussonic Media Server对直播流进行录制
Flussonic Media Server可以对直播流进行录制,然后在提供播放服务. 我们首先来看如何为直播流配置录制功能,如下: stream channel0 { url tshttp://vl ...
- 主流开源流媒体服务器有哪些?
流媒体解决方案 Live555 流媒体平台框架 EasyDarwin 实时流媒体播放服务器程序DarwinStreamingSrvr 流媒体实时传输开发包 jrtplib 多媒体处理工具 ffmpeg ...
- Linux下使用Nginx搭建Rtmp流媒体服务器,实现视频直播功能
一.环境介绍 操作系统:虚拟机运行的Ubuntu18.04 64位系统 二.流媒体服务器介绍 百度百科: 流媒体指以流方式在网络中传送音频.视频和多媒体文件的媒体形式.相对于下载后观看的网络播放形式而 ...
- (音视频开发)WebRTC进阶流媒体服务器开发-多人互动架构
一:多人互动架构方案 (一)WebRTC回顾,两层含义: 1.WebRTC是google开源的流媒体客户端,可以进行实时通讯,主要应用于浏览器之间进行实时通讯,也可以单独编译在自己的应用中 2.Web ...
- 流媒体服务器使用手册
流媒体服务器使用手册 版本:V5.2 目 录 第1章 产品概述... 3 第2章 产品使用详解... 4 2.1 产品主要功能... 4 2.2 产品安装. ...
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器解决方案之CDN内容分发网络
背景分析 EasyDSS流媒体解决方案提供一站式的转码.点播.直播.录像.检索.时移回放服务,极大地简化了开发和集成的工作,并且EasyDSS支持多种特性,完全能够满足企业视频信息化建设方面的需求.其 ...
- 搭建自己的流媒体服务器-(1)服务器搭建篇
搭建自己的流媒体服务器-(1)服务器搭建篇 http://download.csdn.net/download/katdriver/3272133 http://blog.csdn.net/haoli ...
最新文章
- 英国政府开源了其大规模监控软件
- 5.1 Android Basic QuickStart Layouts Linear Layout
- C++ STL 一般总结
- (九)nodejs循序渐进-Express框架(进阶篇)
- oracle rman备份整库,RMAN备份恢复整个库
- 配置连接池连接oracle,Oracle连接池怎么配置
- 生命周期 用户可以操作dom_当面试官问:能否介绍下Vue生命周期时,该如何回答...
- sql server 替换有反斜杠的字符串_字符串提取,到底谁是你的菜?
- 学习Cocos2d的博客 --推荐
- notepad++批量操作笔记(持续更新..)
- C语言表白代码,复杂动态爱心
- 使用超级鹰模拟登录验证码报错的解决办法
- SLA、BFD、NQA、ACl 笔记
- CogPDF417Tool工具
- 学习记录476@linux硬盘分区
- python坦克大战游戏_python实现坦克大战游戏
- leaflet 导出图片,打印图片(A4横版或竖版)
- photoshop 2019 mac版 可支持最新M1芯片处理器
- iOS-使用Masonry布局不能立即获取到frame
- 硬件描述语言实验五:四位加法器实验
热门文章