KamoCRM 的视频会议运行在我们运营的媒体基础设施上:选择性转发单元、会议焦点、TURN 中继、录制和流媒体网关组件。 实时媒体是网络上最不容忍的东西,除了运行它之外,没有任何方法可以学习它。
| 措施 | 价值 | 资料来源 | 已计量 |
|---|---|---|---|
| 生产中的实时媒体组件 | 6 (media server, conference focus, signalling, recording, telephony gateway, TURN relay) | kubectl get deployments,statefulsets -n kamo | |
| 与会议一起运行的流媒体服务器 | 1 (MediaMTX, live streaming only) | kubectl get deployments -n kamo |
它教会了我们什么建筑
实时媒体惩罚近似。 一个网络请求需要多花200毫秒的时间是不值得注意的;在一个通话中200毫秒的抖动是关于谁在谈论谁的争论。 连接是协商而不是配置的 — — 收集候选地址,测试路径,在找不到直接路径时使用中继 — — 失败模式是不对称的,令人愤怒。
我们从中学到的最大的失败是,一个会议在第二个人加入后结束,看起来像是应用程序错误,但实际上并非如此:媒体服务器自动标记为无法运行,会议焦点没有地方路由第二个流,会议因此中断。 我们从中学到的教训是诊断顺序 — — 在读取一行应用程序代码之前检查媒体服务器自己的健康端点 — — 这一点适用于我们从那时起所处理的每个分布式系统。
我们还负责传输和录制。 隐私义务在录制时变得具体而不是理论,因为录制是关于可识别个人的文件,现在有人必须合法地存储,这是一种设计约束,远远早于政策文件。
建于
- WebRTC
- Jitsi Videobridge
- Jicofo
- Prosody
- coturn
- MediaMTX
- XMPP
- ICE
- SRTP
