对于同一路视频流,发布端可以向房间内的其他用户,同时编码并推送多路内容相同、规格不同的视频流。以满足自动回退或订阅端的需求。
其中,分辨率最高的一路流为大流,其他几路分辨率较小的流统称为 Simulcast 流。
以下场景适合开启 Simulcast 功能。
微信小程序端 SDK 不支持本功能。
只有在发布端开启 Simulcast 功能后,才能实现媒体流在发布端和订阅端自动回退功能,订阅端才能自主选择 Simulcast 流。
setVideoEncoderConfig
设置大流的视频编码参数。setLocalSimulcastMode
开启 Simulcast 功能。同时选择 Simulcast 功能的模式,发送全部流或按订阅发送。setLocalSimulcastMode
,设置每路 Simulcast 流的编码参数,按照分辨率从小到大进行设置。Native SDK,最多设置 3 路 Simulcast 流。Web SDK 最多设置 2 路 Simulcast 流。setLocalSimulcastMode
更新 Simulcast 流的编码参数。但无法切换 Simulcast 功能模式,也无法更改 Simulcast 流路数。发布端或订阅端设备性能不足或网络环境劣化时,高清视频流可能发生卡顿,你可以通过开启自动回退功能,切换到规格较低的视频流,优先保障流畅的观看体验。
在网络和设备性能正常时自动恢复到回退前的设定值。
setPublishFallbackOption
开启。功能开启后,如果发布端的网络条件或者设备性能不佳时,SDK 将按照通过 setLocalSimulcastMode
设置的 Simulcast 流编码参数,逐级回退,直到回退到最小分辨率的流。
通过 setSubscribeFallbackOption
开启订阅端的自动回退功能,通过枚举值传入回退策略:
当订阅端渲染远端视频流的窗口大小发生变化,如果发布端已发布 Simulcast 流,你可以根据窗口大小选择接收的视频流的规格。
发布端开启 Simulcast 功能,通过 stream_config[]
数组设置 Simulcast 流的规格。参见 发布 Simulcast 流。
接收端通过 setRemoteSimulcastStreamType
设置 Simulcast 流订阅偏好。你可以通过传入枚举值指定订阅偏好。
当发布端发布了 3 路 Simulcast 流时,发布端的 Simulcast 流和订阅偏好枚举值的对应关系如下:
发布端设置的 Simulcast 流 | 订阅端的 Simulcast 流订阅偏好 |
---|---|
stream_config[0] | 弱流:kSimulcastStreamTypeWeak = 0 |
stream_config[1] | 小流:kSimulcastStreamTypeLow |
stream_config[2] | 中流:kSimulcastStreamTypeMid |
stream_config[0]
时,如果订阅端偏好为中流或小流,实际订阅到的都是stream_config[0]
。stream_config[0]
和 stream_config[1]
时,如果订阅端偏好为中流,实际订阅到的是 stream_config[1]
。stream_config[0]
,即规格最低的视频流。stream_config[0]
,即规格最低的视频流。功能/平台 | Android | iOS | macOS | Windows | Linux | Web |
---|---|---|---|---|---|---|
订阅端开启和设置 Simulcast 功能 | setLocalSimulcastMode(VideoSimulcastMode mode) | setLocalSimulcastMode: | setLocalSimulcastMode: | setLocalSimulcastMode(VideoSimulcastMode mode) | setLocalSimulcastMode(VideoSimulcastMode mode) | setLocalSimulcastMode |
设置大流的编码参数 | setVideoEncoderConfig | setVideoEncoderConfig: | setVideoEncoderConfig: | setVideoEncoderConfig | setVideoEncoderConfig | setVideoEncoderConfig |
设置 Simulcast 流的编码参数 | setLocalSimulcastMode(VideoSimulcastMode mode, VideoEncoderConfig[] streamConfig) | setLocalSimulcastMode:config: | setLocalSimulcastMode:config: | setLocalSimulcastMode(VideoSimulcastMode mode, VideoEncoderConfig[] streamConfig) | setLocalSimulcastMode(VideoSimulcastMode mode, VideoEncoderConfig[] streamConfig) | setLocalSimulcastMode |
设置期望订阅的远端视频流的参数 | setRemoteSimulcastStreamType | setRemoteSimulcastStreamType:streamType: | setRemoteSimulcastStreamType:streamType: | setRemoteSimulcastStreamType | setRemoteSimulcastStreamType | setRemoteSimulcastStreamType |
设置发布的音视频流的回退选项 | setPublishFallbackOption | setPublishFallbackOption: | setPublishFallbackOption: | setPublishFallbackOption | setPublishFallbackOption | 无 |
设置订阅的音视频流的回退选项 | setSubscribeFallbackOption | setSubscribeFallbackOption: | setSubscribeFallbackOption: | setSubscribeFallbackOption | setSubscribeFallbackOption | setSubscribeFallbackOption |
在 Native SDK V3.60.2 和 Web SDK V4.63.0 中,我们升级了 Simulcast 功能的使用方式。本功能在历史版本中的使用说明参见 推送多分辨率视频流 和 音视频流回退。