Licode架构分析
目录
- Licode架构分析
- 0 代码框架
- 1 架构图
- 2 功能模块说明
- 3 模块之间的交互
- 4 发布流
- 5 WebRtc协议栈对输入输出流的处理
- 6 发布者和订阅者管理
- 7 ICE、DTLS及媒体数据传输
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进行加解密。
Licode架构分析相关推荐
- pass基础架构分析
pass基础架构分析 Relay 和 TVM IR,包含一系列优化passes,可提高模型的性能指标,如平均推理,内存占用,或特定设备的功耗.有一套标准优化,及特定机器学习的优化,包括常量折叠,死代码 ...
- Yolov3网络架构分析
Yolov3网络架构分析 上图三个蓝色方框内表示Yolov3的三个基本组件: CBL:Yolov3网络结构中的最小组件,由Conv+Bn+Leaky_relu激活函数三者组成. Res uni ...
- 转:秒杀系统架构分析与实战
原文出处: 陶邦仁 欢迎分享原创到伯乐头条 0 系列目录 秒杀系统架构 秒杀系统架构分析与实战 1 秒杀业务分析 正常电子商务流程 (1)查询商品:(2)创建订单:(3)扣减库存:(4)更新订单: ...
- CommuntyServer架构分析
CommuntyServer架构分析 程序执行流程 *.aspx <CS:ContentContainer.../> - ...
- 大型网站系统架构分析--转
大型网站系统架构分析 原文地址:http://www.cnblogs.com/Mainz/archive/2009/04/28/1445424.html 千万级的注册用户,千万级的帖子,nTB级的附件 ...
- Android10.0 日志系统分析(二)-logd、logcat架构分析及日志系统初始化-[Android取经之路]
摘要:本节主要来讲解Android10.0 日志系统的架构分析,以及logd.logcat的初始化操作 阅读本文大约需要花费15分钟. 文章首发微信公众号:IngresGe 专注于Android系统级 ...
- 《libGDX移动游戏开发从入门到精通》一第2章 libGDX的架构分析
本节书摘来异步社区<libGDX移动游戏开发从入门到精通>一书中的第2章,第2.1节,作者: 黄俊东 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...
- 【转】秒杀系统架构分析与实战
0 系列目录 秒杀系统架构 秒杀系统架构分析与实战 1 秒杀业务分析 正常电子商务流程 (1)查询商品:(2)创建订单:(3)扣减库存:(4)更新订单:(5)付款:(6)卖家发货 秒杀业务的特性 (1 ...
- 研究项目: JBoss架构分析
原文转自:http://www.huihoo.org/jboss/jboss.cn.html 研究项目: JBoss架构分析 Jenny Liu School of Information Techn ...
最新文章
- 15天Python入门-3-流程控制-选择结构
- python在windows的开发环境_Python合集之Python开发环境在Windows系统里面搭建
- (诊断)处理错误fatal error: Python.h: No such file or directory
- 在没有DOM操作的日子里,我是怎么熬过来的(终结篇)
- hashmap 允许key重复吗_搞懂 HashMap,这一篇就够了
- 设置现金流量科目必须录入
- 如何优化 Java 性能? 1
- Mac OS X 通过命令行修改ip地址
- java算法编程题:某年某月某日是这一年的第几天
- BPMN,BPEL,XPDL
- The Independent JPEG Group‘s JPEG software
- mysql将没有员工的部门都删除_Mysql 用sql语句实现删除与CLARK同部门的员工信息...
- KeyMob聚合广告携手开发者 共谋移动应用广告的福利
- el表达式找不到属性的错误修改方法(`javax.el.PropertyNotFoundException: 类型[java.lang.String]上找不到属性[book])
- 【java实现二维码的生成(源码)】
- 如何设计好的RESTful API之安全性
- 阿里云服务器实时计算Flink/Blink首选大数据型d2c、d2s实例
- 【游戏推荐】癞子斗地主--OGEngine精品游戏推荐系列【一】
- alpha冲刺(事后诸葛亮)
- 三星借力北京奧運東風
热门文章
- 改进YOLO系列 | ICLR2022 | OMNI-DIMENSIONAL DYNAMIC CONVOLUTION: 全维动态卷积
- SpringBoot获取微信openid(java)
- istio-cni详解
- 开源的烽火 “烽火”的开源
- 从零开始社区之路,手把手教你开源自己的Python包
- 2018我的博客历程:你带来微笑,我有幸得到
- 2020高考一轮复习数学:必修1集合的概念及运算【经典例题及解析】
- listen的第二个参数
- Oracle索引梳理系列(七)- Oracle唯一索引、普通索引及约束的关系
- github东西无法下载_下载GitHub上文件的两种方法