janus架构学习

发布于:2024-04-18 ⋅ 阅读:(23) ⋅ 点赞:(0)

基础介绍

Janus 是由Meetecho设计和开发的开源、通用的基于SFU架构的WebRTC流媒体服务器,它支持在Linux的服务器或MacOS上的机器进行编译和安装。Janus 是使用C语言进行编写的,它的性能十分优秀。

架构

janus为sfu架构
image.png

模块结构图

模块说明

core模块

Janus WebRTC服务器建立在将相关部分粘合在一起的核心之上。主要代码是janus.c,它实现了服务器本身背后的逻辑:它实现了与浏览器交互的web服务器,并处理与浏览器的会话。这包括处理媒体信号和协商,以及使用可用插件桥接对等端。
ICE:打洞,负责与Peer的连通,Janus可以部署在NAT后⾯,使⽤了libnice;
DTLS:UDP版的TLS,就是加密的UDP,WebRTC⽤来传递SRTP的密钥,使⽤了
OpenSSL/BoringSSL;
RTP/RTCP:提供RTP/RTCP封/解包的接⼝,需要发送⼀些WebRTC⽀持的RTCP包,例如FIR、
PLI、RR等;
SRTP:加密的RTP,开启后WebRTC传输的RTP负载都是加密的;
SDP:提供SDP封/解包的接⼝,⽤于协商媒体的协议,可以⽤SDP对WebRTC的⼀些功能进⾏设定
(编码器优先、码率限制),媒体能⼒的协商;
candidate:⽹络信息,⽹络协商。
SCTP:WebRTC的数据通道使⽤的协议,就是加上了流控的UDP,可以传输任意数据

插件模块plugins

Echo Test 回声测试,⽀持通过按钮控制码率,从这⾥我们也可以学习到如何控制码率.
Streaming 播放视频或⾳频流,可⽤于⽹络直播或转播。
Video Call ⾳视频⼀对⼀通话,类似AppRTC的通话,但是⾳视频数据经过Janus进⾏传输。
SIP Gateway SIP⽹关演示,允许您在SIP服务器上注册并启动/接收呼叫。
Video Room 视频会议演示,允许您加⼊最多有六个⽤户的视频会议室。
Audio Room ⾳频会议演示,不同⽤户之间的⾳频将进⾏混⾳。
Text Room ⽂字聊天室,通过DataChannels进⾏传输。
Voice Mail 演示语⾳邮件功能,可以录制⼗秒的⾳频,然后可以进⾏回放。
Recorder/Playout 演示录制⾳频、视频,然后通过WebRTC进⾏回放.
NoSIP (SDP/RTP) 传统的互操作演示(例如,与SIP对等端),其中信令由应用程序决定。
Device Selection 回声测试演示的变体,允许您选择特定的捕获设备。
End-to-end Encryption Echo Test演示的一个变体,允许您以Janus无法访问但仍然可以路由的方式加密视频。
Multichannel Opus (surround) 回声测试演示的变体,显示了对多声道/环绕Opus的支持。
Canvas Capture Echo Test演示的一个变体,展示了如何使用画布元素作为WebRTC媒体源。
VP9-SVC Video Room A variant of the Video Room demo, that allows you to test the VP9 SVC layer selection, if available.
Admin/Monitor 一个简单的页面,展示如何使用Janus Admin/Monitor API。

transports模块

用于编写新插件的API在Transport API部分中指定。

event handles模块

用于编写新事件处理程序插件的API在事件处理程序API部分中指定。

loggers模块

用于编写新记录器插件的API在logger API部分中指定。

tools and utilities模块

一组简单的工具和实用程序,当与Janus结合使用时可能会有所帮助。