Skip to content

该项目中白板的通讯和视频会话的通讯哪些是闭源的? #1

@grootgordon

Description

@grootgordon

项目中闭源的通讯部分

该项目(netless-io/flat)本身是 MIT 开源协议,但其白板和视频会话的底层通讯能力,依赖了多个闭源的第三方商业 SDK。项目通过开源的接口层(IServiceWhiteboardIServiceVideoChatIServiceTextChat)将它们封装起来。


一、白板通讯(Whiteboard)

白板通讯的核心是 white-web-sdk(Netless 闭源 SDK)以及封装它的 @netless/fastboard

项目中的开源适配类 Fastboard 实现了 IServiceWhiteboard 接口,内部调用了 @netless/fastboard 提供的 createFastboard1

它对 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 v1AgoraRTM 使用 agora-rtm-sdk(闭源): 6

  • RTM v2AgoraRTM2 使用 agora-rtm(闭源): 7


总结

功能 闭源 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 均通过抽象接口层(IServiceWhiteboardIServiceVideoChatIServiceTextChat 定义在 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions