鉴于当前视频会议方案的高成本,Linphone 团队开发了选择性转发单元算法(SFU),取代了传统方案在服务器端解码再编码的方式,实现了一个由现代 SFU 服务器提供支持的基于 SIP 的开源会议解决方案,使端到端加密成为可能。
来源:FOSDEM 2023
主讲人:Jehan Monnier
视频链接:https://fosdem.org/2023/schedule/event/linphone_sfu/
内容整理:王妍
由于视频编解码器的算法复杂性,现有的“多点控制单元”或“媒体混合器”类型的音频/视频会议解决方案已被证明在视频处理方面的资源成本很高。这种限制导致了新解决方案的出现——从所有参与者那里接收到的流的有用子集传输给每个参与者。例如:仅将主动发言参与者的视频与其他参与者的一些分辨率非常低的视频流一起发送给每个参与者。该技术称为“选择性转发单元”(SFU)或“选择性转发中间盒”(SFM)。
选择性转发单元的主要优点是它能够接收多个媒体流,然后决定应将哪些媒体流发送给哪个参与者。这样,在技术上就可以增加群组通话的参与者数量。此时采用的会话管理服务器不再解码媒体内容。
Linphone 介绍
Linphone 项目始于 2001 年,是一个由现代 SFU 服务器提供支持的基于 SIP 的开源会议解决方案:
- 适用于 Linux, android, iOS, Windows, Mac;
- 把 SIP 作为几乎所有内容,包括音频、视频、电话和即时消息的基础标准;
- 为基于信号协议的消息传递提供了一些端到端加密。
Linphone 团队还提供了一个开源的 SIP 代理 Flexisip 以及免费的 SIP 服务器 sip.linphone.org。
SIP 视频会议
SIP 视频会议符合 IETF 和 GSMA/RCS 规范,主要包括建立会话、发送通知、媒体传输、安全四项标准。
- 建立会话:对 SIP 客户端和会议服务器之间创建,修改,终止会议的规定大多基于 RFC 4579,该协议定义了如何加入/离开会议;用 RFC 5366 确定会议参与者名单;用 RFC 5627 实现多设备联动。
- 发送通知:当一个参与者加入或离开会议时,它向服务器发起 SIP 通知(根据 RFC 6665),然后服务器通知到会议的每个参与者。RFC 4575 中定义了一切与会议状态有关的事件。
- 媒体传输:采用常规的 RTP 加上 RFC 8861 和 RFC 8108,将所有主要的流捆绑到同一个套接字中,以免每个参与者都有大量的 RTP 流。
- 安全:传输时,RTP 本身使用 AES 256 加密,SIP 用SDES, ZRTP 或 SRTP-DTLS 传递密钥。
选择性转发单元
传统视频会议的服务器接收每个参与者的视频,然后解码视频流,进行一些混合操作后重新编码,发送给每个参与者。
以 RFC 7667 为例, A,B,C 三个客户端分别向媒体服务器发送了一个音频流,所有码流都在服务端解码,混合并发送回每个客户端。
传统的视频会议方案虽然在客户端一侧非常简单,呼叫一个会议服务器和呼叫普通的用户代理几乎一样,但存在很多缺点:
- 视频布局定义在服务器端;
- 服务器端需要大量的 CPU 资源;
- 每个视频流都需要被解码,然后重新编码,服务器知道传输内容,不能实现端到端加密。
SIP 视频会议应用选择性转发单元,不再是解码再重新编码,而是将来自每个设备的视频转换到每个设备。为此,还需要来自每个客户端的一些信息,比如音频流的音量,以便能够在不解码音频流的情况下知道谁在说话。
同样是 RFC 7667 ,每个客户端仍然有一个 RTC 流发送到主服务器。但现在 RTC 流被直接复制到其它客户端。所以服务器不再是一个媒体混合器,而是一个转换矩阵。该方案的优点是:
- 视频布局不再通过两侧来定义,但是客户端可以决定在哪里显示会议的每个参与者;
- 服务器端占用低 CPU,便于扩展;
- 媒体服务器不再解码视频流,可以实现端到端加密。
缺点是客户端需要多流管理:
- 大多情况下需要客户端编码两个视频流(其中一个为高分辨率)或使用H264 AVC/VP9等多层视频压缩器;
- 需要解码多个视频流,每个参与者一个。
SDP 服务器端实例
- rtcp-mux 是为了限制用于媒体的套接字数量。
- 三个 extmap 与音频级别相关,以便服务器能够知道谁在说话。
- 接收端有 2 个视频流。一个用于相机的 I/O 分辨率,另一个用于子集传输。也可以用一些支持多层功能的视频编码器代替。
- 发送端取决于参与者数量。
项目测试
- 在与 RFC 4579 兼容的测试服务器:sip:videoconference-factory@sip.linphone.org 创建视频会议。
- 使用 5.0 版本以上的 linphone 客户端加入会议。
未来的改进方向
- 实现 XCON 高级会议管理以便在网站上管理会议。
- 实现端到端加密。
- 实现 Web 客户端与 Webrtc 的兼容。
信息渠道
- Linphone 网站:https://www.linphone.org
- Mediastreamer2:https://www.linphone.org/technical-corner/mediastreamer2-ortp
- 会议服务器:https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/A.%20Configuration%20Reference%20Guide/master/conference-server
- Linphone 特征:https://www.linphone.org/features
- gitlab 上的 Linphone:gitlab.linphone.org
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。