共计 2315 个字符,预计需要花费 6 分钟才能阅读完成。
导读:
网易会议组件目前曾经开源,源代码曾经上传至 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/yu…
(四) 音视频美颜外接纹理
网易会议应用了 ExternalTexture 计划,通过 Pigeon 主动生成 MethodChannel 通道,调用 Native 层的 createVideoRenderer,创立 Render,Native 通过 FlutterTextureRegistry 保留以后的 TextureId,Flutter 层将原生层传递回来的 textureId 和 Dart 层与 Texture Widget 进行绑定。Native 音视频 SDK 会将数据格式回调 Flutter,依据共享纹理的形式获取图像数据进行渲染。
四、 网易会议开源交换群
本文次要介绍了网易会议组件在网易会议挪动端的落地实际,心愿可能帮忙客户及三方开发者疾速搭建本人的会议 APP 利用,同时也心愿通过本文的分享,能对其余团队的研发有所启发。上面是网易会议开源交换群,更多开源相干信息能够关注本公众号,接下来的工夫咱们会持续前行摸索。
网易会议开源交换群
网易会议 GitHub 地址
https://github.com/GrowthEase…
作者介绍
赵冲,网易云信资深挪动端开发工程师,热衷于钻研跨平台开发技术以及工程提效,目前次要负责视频会议组件化 SDK 的相干研发工作。