“易+”开源 | 网易会议开源之移动端篇
導讀:
網易會議組件目前已經開源,源代碼已經上傳至 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 的相關研發工作。
總結
以上是生活随笔為你收集整理的“易+”开源 | 网易会议开源之移动端篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AQS 源码流程分析
- 下一篇: 隐私安全的必答题,网易云信如何解?