在视频通话场景中,若多个用户同时发流,由于设备性能消耗和网络流量的上升,可能带来比较大的体验下降。

本章节指导您通过实时音视频 RTC SDK 实现多人视频通话。通过合理的集成方式,最多可支持 17 人同时发视频流。

多人视频通信场景下,为降低带宽占用、确保通话流畅,建议您所有的发流端均开启双流模式,接收端设置 1-N 订阅模式,即订阅一路大流和 N 路小流。

说明

双流模式是指实时音视频 RTC SDK 在发送一路视频流的同时,额外发送一路低分辨率、低码率的视频流。其中,原视频流也称为大流,分辨率和码率更低的那路流则称为小流

前提条件

  • 已实现基本的实时音视频通信功能。

  • 在加入频道前调用 setParameters("{"che.audio.live_for_comm": true}"),启用针对多人通信场景的优化策略。

操作步骤

步骤一:开启双流模式

各发流端在加入频道前或者后,都可以调用 enableDualStreamMode 方法开启双流模式。开启后,SDK 会在发送视频流的同时,额外发送一路分辨率低、码率低的视频流。其中,原视频流也称为大流,分辨率和码率更低的那路流则为小流。

SDK 会根据大流的视频属性,自动设置小流的默认视频属性。

步骤二:设置订阅流类型

接收端调用 setRemoteVideoStreamType 方法,将订阅的一路视频流设置为大流,其它路视频流均设置为小流

步骤三:手动设置小流视频属性

为保证通信流畅,建议您调用如下方法自定义小流属性,防止因小流码率过高而造成带宽压力。

说明

小流最高可支持分辨率 640px × 480px,帧率 30fps 和码率 1000Kbps。

为保证通信质量,实时音视频 RTC 建议自定义的小流分辨率不超过 320px × 180px,码率不超过 140Kbps,且小流帧率不能超过大流帧率。

// 自定义视频小流参数设置:320 px × 180 px, 5 fps, 140 Kbps
setParameters("{\"che.video.lowBitRateStreamParameter\":{\"width\":320,\"height\":180,\"frameRate\":5,\"bitRate\":140}}");

大小流视频属性对应关系

实时音视频 RTC SDK 根据大流的视频属性自动设置小流的视频属性。若您无需手动设置小流视频属性,可以参考如下内容,了解大流和小流视频属性的对应关系。

视频通信大小流对应关系

视频通信场景下,小流的默认规则属性遵循以下规则:

  • 小流宽高 = 大流宽高 × 0.45,且最大不超过 288,最小不低于 64,且宽高保持比例

  • 小流帧率固定为 5

  • 小流码率 = 大流码率 × 0.1

  • 小流的宽必须为 4 的倍数,高必须为偶数

主流分辨率大小流视频属性对应关系

您也可以参考下表,了解视频通信场景下主流视频大流属性下,默认的小流属性。各数字依次表示宽 × 高、帧率、码率。

大流属性 小流属性

320 x 240,15,200

144 x 108,5,20

640 x 360,15,400

288 x 162,5,40

640 x 480,15,500

288 x 216,5,50

1280 x 720,15,1130

288 x 162,5,113

240 x 320,15,200

108 x 144,5,20

240 x 320,15,200

108 x 144,5,20

360 x 640,15,400

164 x 288,5,40

480 x 640,15,500

216 x 288,5,50

720 x 1280,15,1130

164 x 288,5,113

注意事项

  • 视频属性的单位,若无特别说明,分辨率为 px,帧率为 fps,码率 Kbps。

  • 视频双流不适用于屏幕共享的场景。

  • 为保证通信质量,建议大流视频分辨率不超过 640 x 480,帧率不超过 15 fps。

  • 建议界面布局采用一大多小的窗口布局。即大窗口显示大流的画面,小窗口显示小流的画面。

  • 视频通话或直播过程中,若有发流用户离开频道,接收端可以再收到该用户离线的回调后,调用 setupRemoteVideo 方法,将该用户的 view 设置为空,APP 即可彻底释放该用户占用的 view