基础介绍
Janus 是由Meetecho设计和开发的开源、通用的基于SFU架构的WebRTC流媒体服务器,它支持在Linux的服务器或MacOS上的机器进行编译和安装。Janus 是使用C语言进行编写的,它的性能十分优秀。
架构
janus为sfu架构
模块结构图
模块说明
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结合使用时可能会有所帮助。