OWT Server 整体架构分析

2023-11-22 15:08
文章标签 分析 整体 架构 server owt

本文主要是介绍OWT Server 整体架构分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基础模块架构图

按自己的理解用 visio 大体画了一下。

前一篇博客讲过OWT Server是模块化的设计,不同模块可以分开部署,便于新手入门,下面画了OWT Server的一些基础模块(支持WebRTC开会)的框架图,如果把这几个模块搞清楚了,差不多对OWT Server也就理解了。

OWT-Server framework

  1. 模块内部的 RPC 调用都是通过 RabbitMQ 消息队列实现的,都不是直接调用,即上图中 所有的虚线都是通过RabbitMQ间接通信的,而不是直接连接

  2. 模块内部流交换(Internal IO)默认用的是 TCP 协议直接交互。

  3. 会议房间信息(默认布局和支持的编码格式等)在创建会议的时候存储在 MongoDB 中。

基础模块介绍

模块功能
Cluster Manager集群管理模块, 负责监控与调度集群中的其他模块,其他模块启动后会加入集群,并维持约1秒一次的心跳保活。
Conference Agent会议控制管理模块,所有的会中逻辑,包括但不限于发布和订阅媒体流,静音媒体流等操作。也负责调度其他模块,比如激活一场会议,Conference模块要申请并维护至少一个 Video、Audio 和 WebRTC 模块。
Management API提供整个系统的对外Restful API,就是一个简单的HTTP服务器,提供创建与删除会议、获取入会token和会议控制等功能的接口。
Portal是 OWT 系统对接客户端 WebRTC 协议入会的信令模块,使用的WebSocket保持与服务器间的信令交互。
WebRTC Agent是OWT系统对接客户端WebRTC协议入会的媒体处理模块,主要是接收客户端WebRTC协议过来的媒体流 解包转换为内部流交换封包格式发送给Video/Audio Agent,和反向的媒体流操作。
Video Agent负责视频混流和视频转码功能,MCU会议模式下,一场会上来好几路视频流,都通过WebRTC 模块发送给Video模块就行混流,然后输出一路视频再发给用户。
Audio Agent负责音频混流和转码,功能通Video模块。

其他模块介绍

其他模块功能
Management Console会议房间配置的Web管理页面,默认端口3300。
Streaming Agent对接通用流媒体的模块,内部分为 streaming-in 和 streaming-out ,对应 RTSP / RTMP 等格式的拉流和推流。
Recording Agent录制模块,可以录制任意指定ID的媒体流,保存为 H264 & AAC 编码格式的的 mp4 或者 mkv 文件。与Streaming Agent 类似功能流程,从Video/Audio Agent获取媒体流进行保存。如果完全按照Streaming Agent 的 In 和 Out 思想的话,也应该包含 读取媒体文件的功能,但是它没有,完全可以自己实现。
SIP Portal对接SIP系统的信令模块。对应支持 WebRTC 协议的Portal模块。
SIP Agent对接SIP系统的流媒体模块。与WebRTC Agent类似功能。
Analytics Agent顾名思义 媒体或网络分析用的吧,没用过,不熟悉。

Agent 模块架构

这里说的 Agent 模块指的是 Conference AgentWebRTC AgentVideo AgentAudio AgentStreaming AgentRecording AgentSIP AgentAnalytics Agent。可能你刚才就在纳闷为啥这些模块名字都带有agent字样,是的,它们具有同样的设计思想。Agent 有代理人的意思,也就是说这些模块不是“真正干活的”。

所有的 Agent 模块都采用两层工作模型,即agent进程和node进程。node 进程是实际干活的,agent 进程负责创建和管理 node 进程。node 进程与 agent 进程通过管道进行进程间通信。

服务启动后即创建一个 agent 进程,加入集群并定时向Cluster Manager 发送 KeepAlive 消息和汇报机器负载信息。同时创建N个 node 进程预留使用,N由配置文件指定。比如在会议初始化的过程中,1. 负责具体房间的某个Conference nodeCluster Manager 申请调度一个Video agent (RPC schedule),2. 然后Conference node 向这个Video agent申请一个Video node(RPC getNode)。3. 接下来Video agent调用这个Video node的RPC方法进行发布或者订阅视频。

这篇关于OWT Server 整体架构分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/410991

相关文章

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

SQL server配置管理器找不到如何打开它

《SQLserver配置管理器找不到如何打开它》最近遇到了SQLserver配置管理器打不开的问题,尝试在开始菜单栏搜SQLServerManager无果,于是将自己找到的方法总结分享给大家,对SQ... 目录方法一:桌面图标进入方法二:运行窗口进入方法三:查找文件路径方法四:检查 SQL Server 安

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.