在视频通话或直播场景中,如果多个用户同时发流,由于设备性能消耗和网络流量的上升,可能带来比较大的体验下降。
本文展示如何使用 Agora RTC SDK 实现多人视频通话或直播,以及相关的集成注意事项。通过合理的集成方式,Agora 可以支持多达 17 人同时发视频流。
多人视频通信或直播场景下,为降低带宽占用、确保通话流畅,Agora 建议所有发流端开启双流模式,接收端设置 1-N 订阅模式,即订阅一路大流和 N 路小流。
在实现如下步骤前,请确保已在你的项目中实现基本的实时音视频通信功能。
setParameters("{"che.audio.live_for_comm": true}")
,启用针对多人通信场景的优化策略。setParameters("{\"che.video.moreFecSchemeEnabled\": true}")
开启 ULP FEC,提高视频数据传输的可靠性。各发流端在加入频道前或者后,都可以调用 enableDualStreamMode
方法开启双流模式。开启后,SDK 会在发送视频流的同时,额外发送一路分辨率低、码率低的视频流。其中,原视频流也称为大流,分辨率和码率更低的那路流则为小流。
SDK 会根据大流的视频属性,自动设置小流的默认视频属性。
接收端再调用 setRemoteVideoStreamType
方法,将订阅的一路视频流设为大流,其它路视频流均设置为小流。
为保证通信流畅,Agora 建议你调用如下方法自定义小流参数,防止因小流码率过高而造成带宽压力。
小流最高可支持分辨率 640 × 480 px,帧率 30 fps,和码率 1000 Kbps。但是为保证通信质量,Agora 建议自定义的小流分辨率不超过 320 × 180 px,码率不超过 140 Kbps,且小流帧率不能超过大流帧率。
// 自定义视频小流参数设置:320 px × 180 px, 5 fps, 140 Kbps
setParameters("{\"che.video.lowBitRateStreamParameter\":{\"width\":320,\"height\":180,\"frameRate\":5,\"bitRate\":140}}");
SDK 根据大流的视频属性自动设置小流的视频属性。如果你无需手动设置小流视频属性,可以参考本节内容,了解大流和小流视频属性的对应关系。
通信场景下,小流的默认视频属性遵循以下规则:
下表展示直播场景时,不同的大流宽高比下,小流默认的分辨率、码率和帧率。
大流宽高比 | 小流分辨率(宽 x 高,px) | 小流码率(Kbps) | 小流帧率(fps) |
---|---|---|---|
1:1 | 160 × 160 | 68 | 5 |
3:4 | 120 × 160 | 45 | 5 |
4:3 | 160 × 120 | 45 | 5 |
9:16 | 108 × 192 | 50 | 5 |
16:9 | 192 × 108 | 50 | 5 |
其他宽高比 | 宽高中的较大值取 160,较小值根据大流宽高比计算得出 | 68 | 5 |
你也可以参考下表,了解主流视频大流参数下,默认的小流参数,各数字依次表示宽 × 高、帧率、码率。注意下表中的大流参数为通信场景下的视频参数;直播场景下,大流的码率对照表中的值翻倍,但取值不能超过 6500。
大流参数 | 通信场景小流参数 | 直播场景小流参数 |
---|---|---|
320 × 240,15,200 | 144 × 108,5,20 | 160 × 120,5,45 |
640 × 360,15,400 | 288 × 162,5,40 | 192 × 108,5,50 |
640 × 480,15,500 | 288 × 216,5,50 | 160 × 120,5,45 |
1280 × 720,15,1130 | 288 × 162,5,113 | 192 × 108,5,50 |
240 × 320,15,200 | 108 × 144,5,20 | 120 × 160,5,45 |
240 × 320,15,200 | 108 × 144,5,20 | 120 × 160,5,45 |
360 × 640,15,400 | 164 × 288,5,40 | 108 × 192,5,50 |
480 × 640,15,500 | 216 × 288,5,50 | 120 × 160,5,45 |
720 × 1280,15 1130 | 164 × 288,5,113 | 108 × 192,5,50 |
setupRemoteVideo
方法,将该用户的 view
设为空,app 即可彻底释放该用户占用的 view
。