项目中闭源的通讯部分
该项目(netless-io/flat)本身是 MIT 开源协议,但其白板和视频会话的底层通讯能力,依赖了多个闭源的第三方商业 SDK。项目通过开源的接口层(IServiceWhiteboard、IServiceVideoChat、IServiceTextChat)将它们封装起来。
一、白板通讯(Whiteboard)
白板通讯的核心是 white-web-sdk(Netless 闭源 SDK)以及封装它的 @netless/fastboard。
项目中的开源适配类 Fastboard 实现了 IServiceWhiteboard 接口,内部调用了 @netless/fastboard 提供的 createFastboard: 1
它对 white-web-sdk 的依赖也体现在 flat-stores 的依赖配置中: 2
二、视频/音频会话通讯(RTC)
视频通话依赖 声网(Agora)的 RTC SDK,分为 Web 端和桌面端两个闭源 SDK:
Web 端:使用 agora-rtc-sdk-ng(闭源),由 AgoraRTCWeb 类封装: 3
桌面端(Electron):使用 agora-electron-sdk(闭源),由 AgoraRTCElectron 类封装: 4
由于 agora-electron-sdk 包含原生 native 二进制文件,需要单独通过 postinstall 脚本下载,故在根 package.json 中被配置为不参与构建: 5
三、实时消息通讯(RTM,辅助视频会话使用)
实时消息(RTM)用于发送文字消息、课堂指令(举手、禁言等),同样依赖声网(Agora)的闭源 RTM SDK:
总结
| 功能 |
闭源 SDK |
封装类(开源) |
| 白板通讯 |
white-web-sdk + @netless/fastboard |
Fastboard |
| 视频/音频(Web) |
agora-rtc-sdk-ng |
AgoraRTCWeb |
| 视频/音频(桌面) |
agora-electron-sdk |
AgoraRTCElectron |
| 实时消息 v1 |
agora-rtm-sdk |
AgoraRTM |
| 实时消息 v2 |
agora-rtm |
AgoraRTM2 |
Notes
- 项目本身(本仓库所有代码)是完全开源的,闭源的是其依赖的底层第三方商业 SDK(声网 Agora 和 Netless 的服务)。
- 这些闭源 SDK 均通过抽象接口层(
IServiceWhiteboard、IServiceVideoChat、IServiceTextChat 定义在 packages/flat-services)进行了隔离,理论上可以替换为其他实现。
white-web-sdk 和 @netless/fastboard 均属于 Agora 旗下的 Netless 品牌提供的服务,与 RTC/RTM 使用的是同一家公司(声网 Agora)的不同产品线。
Citations
File: service-providers/fastboard/src/index.ts (L1-2)
import { createFastboard, createUI, FastboardApp, addManagerListener } from "@netless/fastboard";
import { DeviceType, RoomPhase, DefaultHotKeys } from "white-web-sdk";
File: packages/flat-stores/package.json (L11-14)
"peerDependencies": {
"@netless/fastboard": ">=0",
"mobx": "6.x",
"white-web-sdk": ">=2.16"
File: service-providers/agora-rtc/agora-rtc-web/src/agora-rtc-web.ts (L3-10)
import AgoraRTC, {
IAgoraRTCClient,
IAgoraRTCRemoteUser,
ICameraVideoTrack,
IMicrophoneAudioTrack,
IRemoteAudioTrack,
NetworkQuality,
} from "agora-rtc-sdk-ng";
File: service-providers/agora-rtc/agora-rtc-electron/src/agora-rtc-electron.ts (L1-2)
import type AgoraSdk from "agora-electron-sdk";
import type { AgoraNetworkQuality, RtcStats } from "agora-electron-sdk/types/Api/native_type";
File: package.json (L66-70)
"pnpm": {
"//": "don't worry, we will download it in the @netless/flat-service-provider-agora-rtc-electron -> postinstall script.",
"neverBuiltDependencies": [
"agora-electron-sdk"
],
File: service-providers/agora-rtm/src/rtm.ts (L12-12)
import RtmEngine, { RtmChannel, RtmClient, RtmMessage, RtmStatusCode } from "agora-rtm-sdk";
File: service-providers/agora-rtm2/src/rtm2.ts (L9-9)
import AgoraRTM, { RTMClient, RTMEvents } from "agora-rtm";
更多参考:https://deepwiki.com/search/_60e822d4-45d2-4441-bf58-d9bea56277a5?mode=deep
项目中闭源的通讯部分
该项目(
netless-io/flat)本身是 MIT 开源协议,但其白板和视频会话的底层通讯能力,依赖了多个闭源的第三方商业 SDK。项目通过开源的接口层(IServiceWhiteboard、IServiceVideoChat、IServiceTextChat)将它们封装起来。一、白板通讯(Whiteboard)
白板通讯的核心是
white-web-sdk(Netless 闭源 SDK)以及封装它的@netless/fastboard。项目中的开源适配类
Fastboard实现了IServiceWhiteboard接口,内部调用了@netless/fastboard提供的createFastboard: 1它对
white-web-sdk的依赖也体现在flat-stores的依赖配置中: 2二、视频/音频会话通讯(RTC)
视频通话依赖 声网(Agora)的 RTC SDK,分为 Web 端和桌面端两个闭源 SDK:
Web 端:使用
agora-rtc-sdk-ng(闭源),由AgoraRTCWeb类封装: 3桌面端(Electron):使用
agora-electron-sdk(闭源),由AgoraRTCElectron类封装: 4由于
agora-electron-sdk包含原生 native 二进制文件,需要单独通过 postinstall 脚本下载,故在根package.json中被配置为不参与构建: 5三、实时消息通讯(RTM,辅助视频会话使用)
实时消息(RTM)用于发送文字消息、课堂指令(举手、禁言等),同样依赖声网(Agora)的闭源 RTM SDK:
RTM v1:
AgoraRTM使用agora-rtm-sdk(闭源): 6RTM v2:
AgoraRTM2使用agora-rtm(闭源): 7总结
white-web-sdk+@netless/fastboardFastboardagora-rtc-sdk-ngAgoraRTCWebagora-electron-sdkAgoraRTCElectronagora-rtm-sdkAgoraRTMagora-rtmAgoraRTM2Notes
IServiceWhiteboard、IServiceVideoChat、IServiceTextChat定义在packages/flat-services)进行了隔离,理论上可以替换为其他实现。white-web-sdk和@netless/fastboard均属于 Agora 旗下的 Netless 品牌提供的服务,与 RTC/RTM 使用的是同一家公司(声网 Agora)的不同产品线。Citations
File: service-providers/fastboard/src/index.ts (L1-2)
File: packages/flat-stores/package.json (L11-14)
File: service-providers/agora-rtc/agora-rtc-web/src/agora-rtc-web.ts (L3-10)
File: service-providers/agora-rtc/agora-rtc-electron/src/agora-rtc-electron.ts (L1-2)
File: package.json (L66-70)
File: service-providers/agora-rtm/src/rtm.ts (L12-12)
File: service-providers/agora-rtm2/src/rtm2.ts (L9-9)
更多参考:https://deepwiki.com/search/_60e822d4-45d2-4441-bf58-d9bea56277a5?mode=deep