流媒体开源服务 MediaSoup 初识

news2024/11/22 8:58:34

目录

前言

正文

一、简单介绍

二、关键特色

1. 超强 SFU 功能

2. Node.js 模块

3. 客户端 SDK

三、架构组成

1. 关键实例

2. 重要模块

四、发展现状


前言

最近收看了一期微软(中国)关于云原生、大数据、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 的了解,发现其设计巧妙,扩展性强,非常推荐大家把它作为云原生领域的流媒体服务器。


作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一名典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解。同时也是 CSDN 博客专家(博客之星)、华为云享专家(共创编辑、十佳博主)、51CTO社区编辑、InfoQ 签约作者,欢迎关注我分享更多干货!😄

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/91737.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

垃圾回收算法

1.种类 垃圾回收算法通常意义上有两种: 引用计数式垃圾收集追踪式垃圾收集 追踪式垃圾收齐又称“间接垃圾收集”,现在有很多算法大都遵循了分代收集理论,而分代收集理论的基础,却是以下俩个分代假说: 强分代假说&am…

MyPerf4J一个高性能、无侵入的Java性能监控和统计工具,有点东西!

背景 随着所在公司的发展,应用服务的规模不断扩大,原有的垂直应用架构已无法满足产品的发展,几十个工程师在一个项目里并行开发不同的功能,开发效率不断降低。 于是公司开始全面推进服务化进程,把团队内的大部分工程…

软件测试之移动app测试框架有哪些?

一、适用于Android的移动app测试框架 1.Espresso 十分流行的一款谷歌开发的Android测试框架,具备高性能性。可以创建非常简单直接的测试,而不必担心app的基础架构。此外,它是开源的,这使开发人员能够自定义框架。 2.Selendroid…

DOM算法系列003-获取节点A相对于节点B 的位置

UID: 20221214170009 aliases: tags: source: cssclass: created: 2022-12-14 1. 节点位置关系 两个节点A、B之间的位置关系总共有几种?我们第一时间能想到的: 节点A在节点B之后节点A在节点B之前节点A包含节点B节点A被节点B包含 除此之外,…

【python绘制地图——使用folium制作地图,可解决多数问题】

Python使用folium制作地图并生成png图片 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 第一章 使用folium制作地图 第二章 使用Html2Image生成png图片 第三章 使用reportlab制作pdf报告 提示:写完文章后,目录…

JavaWeb:Mysql(数据库管理系统)、Navicat(Mysql的图形化工具)

MyBatis是对JDBC的简化 以后的升级框架,基本都是围绕 JavaWeb程序 所做的升级 Mysql就是一个数据库管理系统,在系统里可以创建一个个数据库,即DBMS中创建一个个DB Mysqul官网https://downloads.mysql.com/archives/community/ 选择5.7.2…

PCB设计—AD20和立创EDA设计(1)创建项目

(1)纯新手建议先利用立创EDA画一个PCB,对PCB有一个简单的了解再学习AD20。 (2)立创EDA教程:立创EDA极速入门(1)——熟悉PCB和立创EDA基本操作;立创EDA极速入门&#xff0…

《纳瓦尔宝典》笔记二——停止出卖时间后,如何才能有收入

目录 一、引言 二、经典观点 1、没有捷径成功,所以不要抱走捷径心态 2、书的价值 3、一种杠杆-资产(公司、股票、实业)或被动收入(媒体或代码) 4、薪水与财富的区别 5、把自己产品化 6、共事的人和工作的内容比…

C# .net 接口接收不同类型参数

public ActionResult ccbwx_notifyurl() { #region 请求参数 Hashtable has new Hashtable(); System.Collections.Specialized.NameValueCollection collection; //if (this.HttpContext.Request.HttpMethod.ToUppe…

前端基础(八)_盒子模型(标准盒子模型和怪异盒子模型)

盒子模型 什么是盒子模型 网页设计中常听的属性名:内容(content)、内边距(padding)、边框(border)、外边距(margin), CSS盒子模型都具备这些属性。这些属性我们可以用日常生活中的常见事物——盒子作一个比喻来理解,所以叫它盒子模型。CSS盒…

Jenkins 解决GIT部署出现连续SCM部署的问题

背景 最近在工作中用Jenkins部署项目代码,但是每当我选择好了Gittag参数进行部署时会出现两个Job 其中一个Job是由我本人创建的,还有一个Job是由SCM自动创建的,而且由SCM自动创建的Gittag参数是默认值。 我想关闭这个SCM构建,但是…

模板方法模式(Template Method)

参考: 模板方法设计模式 (refactoringguru.cn) design-patterns-cpp/TemplateMethod.cpp at master JakubVojvoda/design-patterns-cpp GitHubhttps://github.com/JakubVojvoda/design-patterns-cpp/blob/master/state/State.cpp) 文章目录一、什么是模板方法模…

41_STM32CAN外设简介

目录 STM32的CAN外设简介 CAN控制内核 工作模式 位时序及波特率 CAN发送邮箱 CAN接收FIFO 验收筛选器 筛选器设置举例 STM32的CAN外设简介 STM32的芯片中具有bxCAN控制器(Basic Extended CAN),它支持CAN协议2.0A和2.0B标准。 该CAN控制器支持最高的通讯速率为1Mb/s;可…

汉字风格迁移篇--KAGAN:一种中国诗歌风格转换的方法

🚀针对问题: 以往的方法都是针对单字图像,容易忽略了中文句子或一张图像中包含的多个字符。 🚀提出的方法: Constancy Loss, Smooth L1 loss;TV loss ,key-attention mechanism GAN;多通道鉴别器 🚀使用的指标 L1 Loss ,SSIM, PSNR, LPIPS 已有工作 字符风…

LiveGBS国标流媒体平台-海康NVR摄像机自带物联网卡摄像头注册GB/T28181国标平台看不到设备的时候如何抓包及排查

GB/T28181国标流媒体平台海康大华宇视华为等硬件NVR摄像机注册到LiveGBS国标平台看不到设备的时候如何抓包及排查1、设备注册后查看不到1.1、是否是自带物联网卡的摄像头1.2、关闭萤石云1.3、防火墙排查1.4、端口排查1.5、IP地址排查1.6、设备TCP/IP配置排查1.7、设备多网卡排查…

java计算机毕业设计基于安卓Android的学生作业管理系统APP

项目介绍 网络的广泛应用给生活带来了十分的便利。所以把学生作业管理与现在网络相结合,利用java技术建设学生作业管理APP,实现学生作业管理的信息化。则对于进一步提高学生作业管理发展,丰富学生作业管理经验能起到不少的促进作用。 学生作业管理APP能够通过互联网得到广泛的、…

国内船载B级(CSTDMA)AIS设备使用问题简析

2019-06-30 01:45王晏海朱小平 航海订阅 2019年3期 收藏 王晏海 朱小平 国内船载B级(CSTDMA)AIS设备使用问题简析_参考网 摘 要:国内船载B级AIS大多采用载波侦听时分多址(CSTDMA)技术,目前仍存在部分船…

已解决raise JSONDecodeError(“Expecting value”, s, err.value) from None

已解决raise JSONDecodeError(“Expecting value”, s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 文章目录报错代码报错翻译报错原因解决方法帮忙解决报错代码 粉丝群一个小伙伴想用Python读取json报错,但是…

分布式基础篇1——环境搭建

一、项目简介1、电商模式2、项目前置知识3、项目技术&特色4、项目架构图5、微服务划分图二、分布式基础概念1、微服务2、集群&分布式&节点3、远程调用4、负载均衡5、服务注册/发现&注册中心6、配置中心7、服务熔断和服务降级8、API网关三、环境搭建1、使用 Vag…

PGL 系列(三)词向量 Skip-gram

环境 python 3.6.8paddlepaddle-gpu 2.3.0numpy 1.19.5一、Skip-gram概念 Skip-gram:根据中心词推理上下文 在Skip-gram中,先在句子中选定一个中心词,并把其他词作为这个中心词的上下文。如 上图 Skip-gram所示,把“spiked”作为中心词,把“Pineapples、are、and、yellow”…