WebRTC流媒体服务器Janus各文件主要作用
在《WebRTC流媒体服务器-Janus的安装与布署》
一文中我已经向你介绍了如何布署Janus,今天我们来了解一下 Janus 的源码,看看Janus目录中都包括哪些文件,以及它们所起的作用是什么。
![](https://img.haomeiwen.com/i5956443/21cd4233e8f71802.png)
下载 Janus 源码
我们可以在这里找到 Janus 服务器的源码,执行下面命令即可将其下载下来:
git clone https://github.com/meetecho/janus-gateway.git
cd janus-gateway
Janus各源码文件的作用
当我们打开 Janus 源码目录后可以看到有一堆文件,这些文件的作用是什么呢?下面我们就对几个重要的文件和目录做下说明:
events
plugins # 各种业务插件,所有的业务应用都在这里实现
transports
docs # Janus的文档,它是通过 Doxygen 生成的
html # Web端的Demo都放在这里
rtcp.h # RTCP 是RTP的控制协议
rtcp.c # RTCP 协议的具体实现
rtp.c # RTP协议的实现,它用于传输音视频数据
rtp.h # RTP 协议的头文件
rtpsrtp.h # SRTP 协议
sctp.c # SCTP 协议的实现
sctp.h # SCTP 协议的头文件
sdp.c # SDP 协议的实现
sdp.h # SDP 协议的头文件
sdp-utils.c # 处理 SDP 的常用工具
sdp-utils.h
test # 测试文件所在目录
record.c # Janus的录制功能在该文件中实现
record.h
ice.c # Janus 使用 libnice 实现 ICE 功能,该文件是对libnice库的封装
ice.h
janus.c # 该文件是Janus的主框架程序,里边做了很多事儿
janus.h
log.c # 日志
log.h
dtls-bio.c # DTLS 中 BIO 的实现
dtls-bio.h
dtls.c # DTLS 协议实现
dtls.h
events.c
events.h
通过上面的描述,我们大体上可以知道 Janus 的实现并不是特别复杂。它自己实现了 RTP/RTCP、SRTP、SCTP、DTLS/DTLS-BIO、SDP 等 WebRTC 必要的协议,而对于数据传输,则是使用 libnice 库,并通过 ice.c/h 对libnice 做了一层封装。
除此之外,它所有的业务层都是以 plugin 的方式实现的,这对于后面的业务拓展有很大的优势。当我们要实现一个新业务时,只要按照 plugin 的规则进行开发就好了,非常简单。
另外,Janus是用纯C实现的,并且使用了Linux社区丰常优秀的库 glib(注意不是glibc),这个库的性能非常好,对于在Linux 下开发的同学来说对它应该十分熟悉。
小结
通过本文,你应该对 Janus 的源码有了一个大体功能的了解。由于 WebRTC 使用了很多的协议(如 RTP/RTCP、DTLS、SDP等),因此作为服务端的 Janus 也都必须实现这些协议,这样才能与 WebRTC 进行通信。
对于 Janus 使用的这些协议可能很多同学会觉得一脸懵B,不知道其中的原理和作用。如果你对这块感兴趣的话,可以去看我的网课《WebRTC入门》,在课程里我对这些协议都做了详细介绍。
如果你有一定基础的话,现在应该知道 Janus 的实现并不是特别复杂,但它的架构设计还是很值得借鉴的,尤其是plugin 的设计方案。
今天我只是对Janus做个初步分析,后面会对它的一些性能做下详细分析,静请期待!