## 架構
Janus的整體架構是插件化的,其中只有Core部分是正常啟動,其它三部分Transports,Plugin,EventHandler都是由Core動態從配置文件janus.jcfg中讀取配置的目錄,然后從配置的目錄中讀取動態庫加載的,只要動態庫中實現了指定的一些方法就能被Core模塊正確的加載;這樣從某種意義上來說Transports,plugin,EventHandler都是插件;可以被定制化增減;
架構簡圖:

架構詳細圖:

下面來詳細說一說整體架構中所有模塊的功能,看上面我繪制的詳細架構圖,本圖雖然不能體現所有功能,但是已經展示了所有重要的功能了;
### 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學習筆記——視頻的邊緣檢測
- 圖像特征點匹配(視頻質量診斷、畫面抖動檢測)
- 圖像質量診斷