导读:

网易会议组件目前已经开源,源代码已经上传至 Github。该项目由网易云信团队自研,结合网易云信系统相关通讯功能、实时音视频、即时消息、白板、直播等功能构建了一套会议系统,本文主要介绍了网易会议组件在网易会议移动端的实践落地。

文|赵冲 网易云信资深移动端开发工程师

一、背景

最近几年线上会议系统越来越流行, 各大企业也逐步开始使用相关会议系统。网易云信作为通信 PaaS 服务提供商,实际具备了一套会议系统相关功能(实时音视频、白板、聊天、直播等), 但我们没有相对完整的会议系统, 因此我们希望能够打造一套基于网易云信通信能力的会议系统,同时我们也希望通过开源让业界其他公司很容易具备高效稳定会议系统能力, 一周就能开发出一个属于自己的 ZOOM。

 二、思考与挑战

(一)语言多样化 

移动端主流的原生语言并不相同,目前 Android 主要是 JAVA 和 Kotlin。iOS 需要支持 Object-C 和 Swift 语言。在官方的原生之外,许多大厂和中小互联网企业也储备了当前流行的跨平台开发,对跨平台高效开发也有很大的需求。为了满足业务需求和痛点,网易会议选用的是 Google 官方的 Flutter 跨平台技术来进行开发。

选择 Flutter 的主要目的是赋能业务业务提效,一套代码多端复用,提高开发者集成效率。其次支持移动端多语言接口的场景,目前网易会议及网易会议组件(以下简称会议组件)则是支持 Flutter 和 Native 多元化接口。核心控制层逻辑则可支撑一套代码多端复用的能力。

 (二)跨平台组件化 

会议组件的功能非常丰富且复杂,网易会议是具体的场景解决协作方案,会议组件则需要进行支持功能组件化,让项目可以基于房间简单的组合功能就可以开发一个泛应用场景,那么就需要对账号体系、会议预订系统、会议成员管理等功能进行组件拆分,并且在语言上做到多端复用。

(三)音视频外部渲染 

在移动端的跨平台开发中,Flutter 提供了链接原生控件的能力。比如 PlatformView,在 Android、iOS 上显示自定义的 View。也可以使用 ExternalTexture(外接纹理),开发者可以对自己的图形数据进行外部渲染。因为音视频也需要支持美颜对性能画布要求比较高,所以在设计视频渲染组件时自研了外部渲染视频插件。

三、思路和方案

网易会议的系统设计利用了网易云信原有的 PaaS 能力, 我们通过 IM Server 来进行会控通知和多方聊天, 通过 Media Server 实现媒体数据的转发。在此基础上我们重点对会议相关特性进行了设计,包括多租户账号体系、安全入会、会议预定、会议控制、视图布局、角色控制等功能。

 (一)基于网易云信 PaaS 服务搭建会议系统 

(二)组件化设计与集成 

整套会议系统客户端支持 Android、iOS、Web、Electron、Windows、MacOS 等平台, 如何确保用户快速接入以及各端一致性的问题, 我们对会议客户端进行了一系列的拆分设计。

Base:这一层主要是包含网易云信的各基础 SDK,同时也会包含一些第三方 SDK。

Room Kit:Room Kit 是一个无 UI 的房间服务组件,这一层承载了 Server 通信逻辑,同时处理了一些会控逻辑,未来也会向泛会议的房间服务演进。如果用户不想复用我们默认的 UI 布局,可以基于 Room Kit 来实现自己的会议 UI。

移动端基于 Flutter 实现,为了方便原生项目接入,我们同样提供了混合开发模式允许 Java 以及 OC 等原生语言接入。

Meeting SDK:Meeting SDK 是一个带 UI 的会议服务组件,相比于 RoomKit 来讲,我们提供了一整套标准会议的 UI 实现, 同时我们也提供了有限的 UI 自定义功能。

移动端基于 Flutter 实现, 为了方便原生项目接入,我们同样提供混合开发模式,允许通过 Java 以及 OC 等原生语言接入。

App:网易云信标准版的网易会议应用,可以直接编译成一个独立的应用。

(三)跨平台组件化 

会议组件使用了高内聚、低耦合的设计方式,各模块分而治之。每个模块也可以通过原生的接口进行二次开发,UI 也可以做到插拔式集成,方便开发者做二次高效率开发。

(三)开源版本管理 

会议组件的 Android 版本,使用的是 Gradle 的方式进行包管理, iOS 原生对应的版本管理使用的是 Pod 库。Flutter 则是发布到我们网易云信官方的地址https://pub.dev/publishers/yunxin.163.com/packages

(四)音视频美颜外接纹理 

网易会议使用了 ExternalTexture 方案,通过 Pigeon 自动生成 MethodChannel 通道,调用 Native 层的 createVideoRenderer,创建 Render,Native 通过 FlutterTextureRegistry 保存当前的 TextureId,Flutter 层将原生层传递回来的 textureId 和 Dart 层与 Texture Widget 进行绑定。Native 音视频 SDK 会将数据格式回调 Flutter,根据共享纹理的方式获取图像数据进行渲染。

四、网易会议开源交流群

本文主要介绍了网易会议组件在网易会议移动端的落地实践,希望能够帮助客户及三方开发者快速搭建自己的会议 APP 应用,同时也希望通过本文的分享,能对其他团队的研发有所启发。下面是网易会议开源交流群,更多开源相关信息可以关注本公众号,接下来的时间我们会继续前行探索。

网易会议开源交流群

网易会议 GitHub 地址

作者介绍 

赵冲,网易云信资深移动端开发工程师,热衷于研究跨平台开发技术以及工程提效,目前主要负责视频会议组件化 SDK 的相关研发工作。

“易+”开源 | 网易会议开源之移动端篇相关推荐

  1. 网易会议开源指南 | 极速构建你的专属会议软件!

    Vol. 10 3 月以来,我国本土疫情累计报告感染者超过两万例,波及全国 28 个省份.全球正在经历新冠疫情第四波流行高峰,多地开启居家办公模式. 蔓延全球的新冠疫情加速了数字化转型发展的进程,移动 ...

  2. 网易会议开源之桌面端篇

    导读: 随着线上会议越来越普遍,各企业在这种环境下也更加重视,期望能够拥有一套自己的会议系统,方便展开工作和交流:网易云信在通信领域研发深耕 24 年,基于此能力打造了一款成熟的会议系统并将其开源,希 ...

  3. “易+”开源网易易盾 GameSentry 正式开源,做游戏安全保障的尖兵利刃

    The First Line Of Defense - GameSentry 哨兵是守护安全的第一道防线,不停的监视着每一个外敌可能进行渗透的角落.网易易盾的 GameSentry 作为游戏安全战场上 ...

  4. 2022 CCF中国开源大会会议通知(第四轮)

    一.会议简介 2022 CCF中国开源大会(CCF ChinaOSC)拟于2022年8月20日至21日在陕西省西安高新国际会议中心召开.大会由中国计算机学会(CCF)与开放原子开源基金会主办,CCF开 ...

  5. 【产业互联网周报】网易悄然上架网易会议App;阿里推出阿里云网盘App;腾讯云会展发布 “1+3易服务”体系...

    关注ITValue,看企业级最新鲜.最价值报道! [产业互联网周报是由钛媒体TMTpost发布的特色产品,将整合本周最重要的企业级服务.云计算.大数据领域的前沿趋势.重磅政策及行研报告.] 产业互联网 ...

  6. DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了

    DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了 参考文章: (1)DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + ...

  7. 码易众包平台致开源中国恶意剽窃的公开信

    近日,开源中国旗下众包平台推出自助报价系统,对于软件众包行业而言,为用户提供清晰明了的产品报价体系本无可厚非,但一家互联网企业选择"无缝抄袭"的形式完成自身报价体系构建,着实令人费 ...

  8. 国际表征学习会议ICLR 2020共计198篇开源代码论文目录

    国际学习表征会议 ICLR 2020 (International Conference on Learning Representation) 将于明年4月26日于埃塞俄比亚首都的斯亚贝巴举行.此次 ...

  9. 2023彩虹易支付最新原版开源网站源码

    2023彩虹易支付最新原版开源网站源码,完整的易支付源码,无后门. 下载地址:https://www.djmale.cn/49.html 一.源码介绍 完整的易支付源码 全开源+批量生成商户+即时到账 ...

最新文章

  1. hadoop2.4.1+hbase0.98.3实现的分布式网盘系统初步(已开源)
  2. 使用fiddler进行app弱网测试
  3. 每天一道LeetCode-----计算小于n的素数个数
  4. 2010.07.13_19:30
  5. pptx模块的安装与基本使用
  6. Python中的GIL锁
  7. python没有错误但是不显示结果_python运行不报错又无任何结果输出
  8. 软件行业选择大公司还是小公司
  9. SQL Server性能调优:资源管理之内存管理篇(上)
  10. java数组名加括号_数组作参数被使用时,数组名后必须加方括号
  11. AWVS 12下载与破解
  12. stvd使用c语言编程,stm8编程tips(stvd)
  13. 自控原理学习笔记---控制系统稳定性分析
  14. 年薪80万难觅技术人才 杭州区块链人才需求旺盛
  15. 特朗普对五角大楼云计算合同表示担忧
  16. vue2.0 基础知识
  17. 使用paython制作简单贺卡
  18. 和数传媒专访天王链创始人梁震宇先生
  19. Python学习(13)--Lambda表达式和switch语句的实现
  20. Excel处理多余符号--查找替换功能SUBTITUTE公式的使用

热门文章

  1. JavaScript对象和数组
  2. redis基础之订阅发布、主从复制和事务(四)
  3. 小项目--bank1
  4. xcode svn commit is not under version control 和 git常用指令
  5. ubuntu12.04安装KDevelop
  6. IOS atomic与nonatomic,assign,copy与retain的定义和区别
  7. cocos2dx打飞机项目笔记五:CCSpriteBatchNode 的使用
  8. MYSQL数据库VALUES_MySQL数据库“十宗罪”(十大经典错误案例)
  9. pycharm安装包时各种报错,且pip无法安装
  10. JavaSE(二十六)——多线程之模拟龟兔赛跑