licode服务架构及流程
1,licode模块
licode服务端主要由nuve、erizoController、erizoAgent和erizoJS组成。模块之间的关系借用网络上图片如下所示
详情可参阅文章https://zhuanlan.zhihu.com/p/40462946。
简单点理解:
- nuve管理多个erizoController
- erizoController管理多个会议室room,一个room有一个或多个publisher,这些publiser会分配到一个或多个erizoJS上。
- erizoJS管理多个发布者publisher,同一个publisher只会在一个erizoJS上有,所以该publisher的所有媒体转发都由这一个erizoJS负责。
2,publish流程
- 通过http与nuve通信,在erizoController上创建room,返回tokenid和erizoController地址
- 与返回的erizoController地址建立soketio连接,发送tokenid。erizoController通过tokenid查找到roomid
- 客户端发送publish命令,erizoController新建或者利用已有erozoJS进程管理该publisher
- 客户端与erizoJS交互offer、answer、candidate信息,建立媒体通道。
备注:
信令详细格式可以在chrome的开发者工具里查看,首先打开开发者工具,如下图所示
然后在地址栏里输入licode服务端地址,即可以看到每一步的详细消息。
3,subscribe流程
- 通过http与nuve通信,在erizoController上创建room,返回tokenid和erizoController地址
- 与返回的erizoController地址建立soketio连接,发送tokenid。erizoController通过tokenid查找到roomid
- 有新的publisher进来,服务端给同一个room里的参会者广播该publisherid(onAddStream)
- 客户端发送subscribe命令,参数为需要订阅的publisherid;erizoController根据publisherid找到对应的erizoJS
- 客户端与erizoJS交互offer、answer、candidate信息,建立媒体通道。
4,移动客户端
移动客户端参考上述发布和订阅流程实现,用sockeio实现信令发送和接收,用webrtc库实现sdp协商和媒体流的传输。
在github上有一个ios客户端的开源代码,https://github.com/zevarito/Licode-ErizoClientIOS,这个客户端直接与nuve交互,没用basicExample,调通比较麻烦,我改成了与basicExample交互。代码地址https://github.com/lipku/Licode-ErizoClientIOS,修改的地方可以参考https://github.com/lipku/Licode-ErizoClientIOS/commit/824aead3ddc93f41ee78da9894919416d8d43b22。 如果需要与你自己的licode服务器通信,只需要修改nuve.m里kNuveHost的地址即可。
5,licode部署
- 可以在basicExample模块里添加认证功能,与业务系统的权限功能关联,加强整个系统的安全性。
- licode模块支持分布式部署。通过以上分析可以看出,多个会议可以分散到多个erizoController上;同一个会议的多个publisher可以分散到多个erizoJS上。通过分布式部署这些模块,整个系统可以支持大容量的会议需求。不足之处在于同一个publisher的内容都由一个erizoJS分发,不支持erizoJS的级联,如果有海量用户订阅同一个publisher,这块有性能瓶颈。同时如果订阅者与发布者不在同一个网络内(如分处于联通和电信),这块也有转发性能问题。 如果用于线上环境,应该考虑实现erizoJS的级联功能。
licode服务架构及流程相关推荐
- 服务架构:统一身份认证和授权技术解决方案
本文讨论的是基于微服务架构下的身份认证和用户授权的技术方案,从背景到微服务架构整套流程分解. 一.预备知识 本文讨论基于微服务架构下的身份认证和用户授权的技术方案,在阅读之前,最好先熟悉并理解以下几个 ...
- .net erp(办公oa)开发平台架构之流程服务概要介绍
背景 搭建一个适合公司erp业务的开发平台. 架构概要图: 流程引擎开发平台: 包含流程引擎设计器,流程管理平台,流程引擎服务.目前只使用单个数据库进行管理. 流程引擎设计器 采用si ...
- 如何搭建微服务架构?【流程】
通过前面的java学习后,相信很多人对微服务架构都会产生这样一些疑问,例如我要何时使用微服务架构?又如何将应用程序分解为微服务?分解后,要如何去搭建微服务架构?同时,在微服务架构中,因为会涉及到多个组 ...
- 如何构建成功的微服务架构?带你洞悉微服务构建流程,以实战角度出发,详解微服务架构
前言 随着技术变得更加复杂,许多团队正在评估他们的架构如何最好地支持未来的业务.其中一种架构,微服务正在成为前瞻性技术部门越来越流行的选择.微服务架构可能是释放业务潜力的关键,但如何实现呢? 微服务是 ...
- VLC架构及流程分析
0x00 前置信息 VLC是一个非常庞大的工程,我从它的架构及流程入手进行分析,涉及到一些很细的概念先搁置一边,日后详细分析. 0x01 源码结构(Android Java相关的暂未分析) # bui ...
- 你必须了解的微服务架构设计的10个要点!
近来,几乎人人都在谈论微服务.微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活.更能适应现在需求快速变更的大环境等.本文将介绍微服务架构设计中的一些要点. 微服务架构设计时有哪些要点 ...
- Dubbo和Spring Cloud微服务架构对比
一.为什么要使用微服务? 微服务提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合. 今天我们来了解下业内主要的微服务框架:Dubbo 和 Spring Cloud 微服务主要的优势 降 ...
- 在微服务架构下基于 Prometheus 构建一体化监控平台的最佳实践
欢迎关注方志朋的博客,回复"666"获面试宝典 随着 Prometheus 逐渐成为云原生时代的可观测事实标准,那么今天为大家带来在微服务架构下基于 Prometheus 构建一体 ...
- GitHub 的微服务架构设计与实践
以下文章来源方志朋的博客,回复"666"获面试宝典 本文介绍 GtHub 如何从单体架构迁移到微服务架构,并对其中一些最佳实践做了详细说明. 1 旅程开启 GitHub 创建于 2 ...
最新文章
- php更新用户数据为空,php – Instagram实时更新标签 – 获取空数据,为什么?
- 2013高教社杯---B碎纸片的拼接复原
- python使用openpyxl读取数据_Python-openpyxl读取和写入数据1
- C++对象内存布局--⑤GCC编译器--单个虚拟继承
- 【Android 逆向】类加载器 ClassLoader ( 类加载时机 | 隐式加载 | 显示加载 | 类加载步骤 | 装载 | 链接 | 初始化 )
- RHEL5搭建apache服务器全过程(四)配置heartbeat和ipvsadm
- gin框架长连接_一个TCP长连接设备管理后台工程(一)
- USACO 2.4.1 The Tamworth Two
- 区块链优秀gitbook资料
- 教新手小白如何通过五分钟学会用Python爬取女神照片!
- 7-11 公约数与公倍数 (10 分)
- java设置cookie_java之Cookie详解
- 强化学习入门1—多臂老虎机Multi-armed Bandits
- sql end关键字
- mysql密码认证插件_关于mysql:无法加载身份验证插件’caching_sha2_password’
- VMware Workstation 不可恢复错误:(vmui)
- 串口打印中文乱码及注释乱码问题
- HaaS100 云端钉一体智能语音播放器设计
- android ims注册流程,ims注册流程volte通话流程总结
- vscode+arm-gcc编译STM32标准外设库工程教程(小白亲历填坑版)
热门文章
- 一步步教你新电脑如何分区教程
- B2B2C系统亮点是什么?如何助力珠宝首饰企业打造全渠道多商户商城管理体系
- 为什么技术越牛逼的人,越得不到提拔?
- 简单梳理一下MySQL多版本并发控制原理
- 柳岩清晨晒素颜照称拿去辟邪 网友称吓人没认出来
- 用uni-app开发的微信小程序轮播图----和用微信小程序原生开发的轮播图
- 从满腹经纶到入行小白:理论学习与实际应用的差距
- 计算机load代表,什么是 Load ? 什么是 Load Average ?
- C++ 中 char[],char *,string之间转换
- WebService开发--手机号码归属地查询和天气预报查询