多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 架构 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**