## 架构
Janus的整体架构是插件化的,其中只有Core部分是正常启动,其它三部分Transports,Plugin,EventHandler都是由Core动态从配置文件janus.jcfg中读取配置的目录,然后从配置的目录中读取动态库加载的,只要动态库中实现了指定的一些方法就能被Core模块正确的加载;这样从某种意义上来说Transports,plugin,EventHandler都是插件;可以被定制化增减;
架构简图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200616172536330.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Fsc2hvdXl1,size_16,color_FFFFFF,t_70)
架构详细图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020061617255516.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Fsc2hvdXl1,size_16,color_FFFFFF,t_70)
下面来详细说一说整体架构中所有模块的功能,看上面我绘制的详细架构图,本图虽然不能体现所有功能,但是已经展示了所有重要的功能了;
### Core模块
Core模块中包含的都是Janus WebRTC server中必要的一些功能,一下做一些简单说明
Session池:维护ICE过来的客户端,这样根据一定的规则把接收过到的RTP包转给Session池中维护的端,
消息池:客户端通过Tranports中过来的消息可以进行异步处理,先放入待处理池增加吞吐量;
配置管理:Janus 虽然提供了很多默认的配置,但是这些配置是可以被修改这些都是在配置管理中进行处理
日志体系:Janus中的日志都是通过这个模块对外进行输出,它管理了日志级别控制了输出目标,支持文件输出
ICE:ICE是Janus WebRTC server代理UDP的核心通过它进行P2P连接然后接收RTP包转发
Stun/Turn server: 它们为ICE提供穿越打洞的能力,可以配置是否开启,如果Janus和其它端在同一个NAT内无需打洞,可以通过配置关闭此功能,增加性能
RTP/RTCP:媒体的UDP包都是大包成RTP包转发的
安全:支持SSL
### Transports通道
Transports顾名思义,它就是通道;具体来说就是信令通道;信令可以通过这些通道来从客户端到服务端; Janus WebRTC server中实现了很多的信令通道方式,看上图的六种通道,实际应用中我们不需要所有信令通道;实际情况下面我们根据实际情况只需要选择1到2中信令通道就行了
### Plugin
Janus WebRTC server通过Plugin提供各种业务支持
Audiobridge:实现的功能是语音会议室,只发语音
Lua:让插件支持lua
VideoRoom: 音视频会议室功能
SIP:支持接入SIP协议
VideoCall: 上图有点问题,是VideoCall,也就是视频一对一通话功能
Streaming: 抽取放出音视频流,这样您整个系统中其它组件需要纯粹的音视频流就可以实现了
### EventHandler
Janus中实现的事件机制,产生的事件可以通过这些Handler来处理,
支持的主要Handler有MQTT,RabbitMQ,WebSocket等
## WebRTC音视频转发核心原理
Janus WebRTC server 通过开源库libnice这个ICE开源库把服务端模拟成一个Peer对等端;具体来说就是客户端发起Offer并且发送自己的SDP和Candidate给Janus WebRTC server,然后Janus把服务器的IP和端加入Candidate作为Answer发送给客户端,这样客户端和服务端就进行了对等连接;并且ICE监听UDP通道接收到RTP包后转发给其它的对等连接;这里要着重说明的是Janus每个客户端发起连接后Janus都分配一个端口,也就是每个端占用一个UDP端口;Janus是多端口,这是不友好的点,后续有机会我们改造成单端口
转发的核心原理就这么简单,详细的后面我们来看具体的代码
## 总结
看了这篇文章我们基本能了解Janus WebRTC server是一种什么架构,它支持哪些功能适合什么样的业务场景;如何转发媒体包
* * *
**引用文章请标明出处,否则可以保留一切追究责任的权利**
**技术交流:**
**qq:408365330**
**微信:egojit**
- 序言
- 编解码
- H264
- HEVC码流解析
- H264编码原理
- 多媒体封装
- MP4
- 学好 MP4,让直播更给力
- AAC
- FLV
- 流媒体协议
- RTSP
- RTCP
- RTP
- H265 RTP封包笔记
- SDP
- RTMP
- RTMP URL
- rtmp url基础
- webrtc
- 编译
- 最简单的编译webrtc方案
- Webrtc音视频会议之Webrtc“不求甚解”
- Webrtc音视频会议之Mesh/MCU/SFU三种架构
- 音频传输之Jitter Buffer设计与实现
- Janus
- Webrtc音视频会议之Janus编译
- Webrtc音视频会议之Janus源码架构设计
- webrtc服务器-janus房间管理
- 源码分析
- WebRTC视频JitterBuffer详解
- 走读Webrtc 中的视频JitterBuffer(一)
- 走读webrtc 中的视频JitterBuffer(二)
- webrtc视频帧率控制算法机制
- 目标码率丢帧-1
- 目标帧率丢帧-2
- 29 如何使用Medooze 实现多方视频会议
- FFmpeg
- FFmpeg编译
- Window10下编译最新版FFmpeg的方法步骤
- FFMPEG静态库编译
- ffmpeg实现画中画
- FFmpeg推流器
- ffmpeg-aac
- OpenCV
- OpenCV学习笔记——视频的边缘检测
- 图像特征点匹配(视频质量诊断、画面抖动检测)
- 图像质量诊断