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流程

  1. 通过http与nuve通信,在erizoController上创建room,返回tokenid和erizoController地址
  2. 与返回的erizoController地址建立soketio连接,发送tokenid。erizoController通过tokenid查找到roomid
  3. 客户端发送publish命令,erizoController新建或者利用已有erozoJS进程管理该publisher
  4. 客户端与erizoJS交互offer、answer、candidate信息,建立媒体通道。

备注:
信令详细格式可以在chrome的开发者工具里查看,首先打开开发者工具,如下图所示

然后在地址栏里输入licode服务端地址,即可以看到每一步的详细消息。

3,subscribe流程

  1. 通过http与nuve通信,在erizoController上创建room,返回tokenid和erizoController地址
  2. 与返回的erizoController地址建立soketio连接,发送tokenid。erizoController通过tokenid查找到roomid
  3. 有新的publisher进来,服务端给同一个room里的参会者广播该publisherid(onAddStream)
  4. 客户端发送subscribe命令,参数为需要订阅的publisherid;erizoController根据publisherid找到对应的erizoJS
  5. 客户端与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部署

  1. 可以在basicExample模块里添加认证功能,与业务系统的权限功能关联,加强整个系统的安全性。
  2. licode模块支持分布式部署。通过以上分析可以看出,多个会议可以分散到多个erizoController上;同一个会议的多个publisher可以分散到多个erizoJS上。通过分布式部署这些模块,整个系统可以支持大容量的会议需求。不足之处在于同一个publisher的内容都由一个erizoJS分发,不支持erizoJS的级联,如果有海量用户订阅同一个publisher,这块有性能瓶颈。同时如果订阅者与发布者不在同一个网络内(如分处于联通和电信),这块也有转发性能问题。 如果用于线上环境,应该考虑实现erizoJS的级联功能。

licode服务架构及流程相关推荐

  1. 服务架构:统一身份认证和授权技术解决方案

    本文讨论的是基于微服务架构下的身份认证和用户授权的技术方案,从背景到微服务架构整套流程分解. 一.预备知识 本文讨论基于微服务架构下的身份认证和用户授权的技术方案,在阅读之前,最好先熟悉并理解以下几个 ...

  2. .net erp(办公oa)开发平台架构之流程服务概要介绍

    背景 搭建一个适合公司erp业务的开发平台. 架构概要图:     流程引擎开发平台:   包含流程引擎设计器,流程管理平台,流程引擎服务.目前只使用单个数据库进行管理.   流程引擎设计器 采用si ...

  3. 如何搭建微服务架构?【流程】

    通过前面的java学习后,相信很多人对微服务架构都会产生这样一些疑问,例如我要何时使用微服务架构?又如何将应用程序分解为微服务?分解后,要如何去搭建微服务架构?同时,在微服务架构中,因为会涉及到多个组 ...

  4. 如何构建成功的微服务架构?带你洞悉微服务构建流程,以实战角度出发,详解微服务架构

    前言 随着技术变得更加复杂,许多团队正在评估他们的架构如何最好地支持未来的业务.其中一种架构,微服务正在成为前瞻性技术部门越来越流行的选择.微服务架构可能是释放业务潜力的关键,但如何实现呢? 微服务是 ...

  5. VLC架构及流程分析

    0x00 前置信息 VLC是一个非常庞大的工程,我从它的架构及流程入手进行分析,涉及到一些很细的概念先搁置一边,日后详细分析. 0x01 源码结构(Android Java相关的暂未分析) # bui ...

  6. 你必须了解的微服务架构设计的10个要点!

    近来,几乎人人都在谈论微服务.微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活.更能适应现在需求快速变更的大环境等.本文将介绍微服务架构设计中的一些要点. 微服务架构设计时有哪些要点 ...

  7. Dubbo和Spring Cloud微服务架构对比

    一.为什么要使用微服务? 微服务提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合. 今天我们来了解下业内主要的微服务框架:Dubbo 和 Spring Cloud 微服务主要的优势 降 ...

  8. 在微服务架构下基于 Prometheus 构建一体化监控平台的最佳实践

    欢迎关注方志朋的博客,回复"666"获面试宝典 随着 Prometheus 逐渐成为云原生时代的可观测事实标准,那么今天为大家带来在微服务架构下基于 Prometheus 构建一体 ...

  9. GitHub 的微服务架构设计与实践

    以下文章来源方志朋的博客,回复"666"获面试宝典 本文介绍 GtHub 如何从单体架构迁移到微服务架构,并对其中一些最佳实践做了详细说明. 1 旅程开启 GitHub 创建于 2 ...

最新文章

  1. php更新用户数据为空,php – Instagram实时更新标签 – 获取空数据,为什么?
  2. 2013高教社杯---B碎纸片的拼接复原
  3. python使用openpyxl读取数据_Python-openpyxl读取和写入数据1
  4. C++对象内存布局--⑤GCC编译器--单个虚拟继承
  5. 【Android 逆向】类加载器 ClassLoader ( 类加载时机 | 隐式加载 | 显示加载 | 类加载步骤 | 装载 | 链接 | 初始化 )
  6. RHEL5搭建apache服务器全过程(四)配置heartbeat和ipvsadm
  7. gin框架长连接_一个TCP长连接设备管理后台工程(一)
  8. USACO 2.4.1 The Tamworth Two
  9. 区块链优秀gitbook资料
  10. 教新手小白如何通过五分钟学会用Python爬取女神照片!
  11. 7-11 公约数与公倍数 (10 分)
  12. java设置cookie_java之Cookie详解
  13. 强化学习入门1—多臂老虎机Multi-armed Bandits
  14. sql end关键字
  15. mysql密码认证插件_关于mysql:无法加载身份验证插件’caching_sha2_password’
  16. VMware Workstation 不可恢复错误:(vmui)
  17. 串口打印中文乱码及注释乱码问题
  18. HaaS100 云端钉一体智能语音播放器设计
  19. android ims注册流程,ims注册流程volte通话流程总结
  20. vscode+arm-gcc编译STM32标准外设库工程教程(小白亲历填坑版)

热门文章

  1. 一步步教你新电脑如何分区教程
  2. B2B2C系统亮点是什么?如何助力珠宝首饰企业打造全渠道多商户商城管理体系
  3. 为什么技术越牛逼的人,越得不到提拔?
  4. 简单梳理一下MySQL多版本并发控制原理
  5. 柳岩清晨晒素颜照称拿去辟邪 网友称吓人没认出来
  6. 用uni-app开发的微信小程序轮播图----和用微信小程序原生开发的轮播图
  7. 从满腹经纶到入行小白:理论学习与实际应用的差距
  8. 计算机load代表,什么是 Load ? 什么是 Load Average ?
  9. C++ 中 char[],char *,string之间转换
  10. WebService开发--手机号码归属地查询和天气预报查询