多人视频场景

最近更新时间:2022-09-20 05:17:40

概述

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

本文展示如何使用 anyRTC RTC SDK 可以支持多达 50 人同时发视频流。

anyRTC 建议所有发流端开启 双流模式,接收端设置订阅一路大流和 N 路小流。

实现方法

请确保已在你的项目中实现基本的实时音视频通信功能。

1. 开启双流模式

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

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

2. 设置订阅流类型

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

3. 手动设置小流视频属性

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

(可选)频道内主播自定义发送的视频小流参数。

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

API 参考

  • enableDualStreamMode
  • setRemoteVideoStreamType
  • setParameters

大小流对应规则

下表展示不同的大流宽高比下,小流默认的分辨率、码率和帧率。

大流宽高比小流分辨率(宽 x 高,px)小流码率(Kbps)小流帧率(fps)
1:1160 × 1606810
3:4120 × 1604510
4:3160 × 1204510
9:16108 × 1925010
16:9192 × 1085010
其他宽高比宽高中的较大值取 160,较小值根据大流宽高比计算得出6810

集成注意事项

  • SDK 根据大流的视频属性自动设置小流的视频属性。如果你无需手动设置小流视频属性。
  • 视频双流不适用于屏幕共享和视频自采集的场景。
  • 本文各视频属性参数的单位,如无特别说明,分辨率为 px,帧率为 fps,码率为 Kbps。
  • anyRTC 建议你在界面布局里采用一大多小的窗口布局:大窗口显示大流的画面,小窗口显示小流的画面。
  • 在 Web 端,如果你手动设置小流视频属性,请确保小流宽高比与大流宽高比一致。
  • 在 Native 端,通话或直播过程中,如果有发流用户离开频道,接收端可以在收到该用户离线的回调后,调用 setupRemoteVideo 方法,将该用户的 view 设为空,app 即可彻底释放该用户占用的 view
  • 视频小流的宽高比例需要和视频大流的宽高比例相同。推荐你使用分辨率不超过 320 x 180 或 180 x 320,码率不超过 140 Kbps 的小流参数。