Licode架构分析

Licode架构分析

本文将对Licode的架构进行分析。
源码安装。
API接口说明。

0 代码框架

在这里插入图片描述
如图是在Ubuntu上编译安装完成后代码的目录结构图。
1)erizo是用c++语言实现的webrtc栈,主要实现了与客户端的交互性连接建立、DTLS握手、媒体数据的发送和接收、使用SRTP实现媒体数据的加解密。
2)erizoAPI是erizo的封装,实现js和c++间的调用;
3)erizo_controller 下的代码使用Javascript语言实现,包括客户端和服务器端的接口模块。其中erizoClient是客户端的API它与运行在服务器端的erizoController使用Socket.io连接实现控制命令和信令(主要是sdp和candidate)的传输。erizoAgent和erizoJS是分布式MCU的一部分,它们也是运行在服务器端,具体的位置如下架构图所示。

1 架构图

在这里插入图片描述

2 功能模块说明

在这里插入图片描述

3 模块之间的交互

在这里插入图片描述在服务端使用高级消息队列(AMPQ)实现模块间的远程调用。

在这里插入图片描述
浏览器客户端与服务器端的交互包含两个部分,信令使用websocket传输,媒体数据的传输则是基于LibNice库实现的。

4 发布流

在这里插入图片描述
一个用户在浏览器端可以将本地的视频发布到服务器,这样其他用户就可以知道并订阅该视频。发布视频流的大体处理流程如图所示。

5 WebRtc协议栈对输入输出流的处理

在这里插入图片描述
Licode服务端中实现了Webrtc协议栈,对输入输出流使用Pipeline进行处理,在管道中对输入输出流按顺序使用不同的模块进行处理。

在这里插入图片描述
各个模块功能介绍如表格所示。功能模块可能只对输入流做处理,也可能只对输出流做处理,不过大多数模块都是同时对输入输出流做处理。表格中的functional对both的表述,前面部分是输入,后面部分是输出,fireRead表示该模块对输入没有做什么处理,直接抛给下个模块,fireWrite表示该模块对输出没有做什么处理,直接抛给下一个模块。

6 发布者和订阅者管理

在这里插入图片描述
在licode的服务端,对订阅者和发布者的管理在erizoJS下,使用js实现的,现在用UML图的形式表示如上图所示:
1)当一个用户发布流时将在ErizoJSController中创建一个Client和一个Publisher;
2)一个用户可能会发布自己的视频流并同时订阅多个其他用户的视频流,所以在Client中可能持有多个Connection,每个Connection有自己的WebRtcConnection和MediaStream;
3)多个用户可能会同时订阅同一个视频流,所以一个Publisher中可能持有多个Subscriber;

7 ICE、DTLS及媒体数据传输

在这里插入图片描述
在erizo中实现了webrtc栈,其中交互性连接的建立(ICE),DTLS握手消息的传递及媒体数据的传送使用的部分类图如上图所示:
1)使用LibNice库实现所有上述消息及数据包的传递;
2)LibNiceConnection收到数据报通过DtlsTransport中转分发给不同的模块处理;
3)处理的先后顺序为先建立里交互性连接,连接完成后通过DtlsSocketContext及DtlsSocket实现握手,握手完成后可以拿到ClientKey及ServerKey并对SrtpChannel进行初始化,之后对收到和发送的媒体数据包可以先用不同的key进行加解密。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值