You need to enable JavaScript to run this app.
导航

推送多分辨率视频流

最近更新时间2024.02.26 14:50:27

首次发布时间2021.07.18 15:06:31

使用场景

在推送视频流时,你可能遇到以下场景:

  • 接收端网络环境发生变化,网络连接较差,高清视频流卡顿较高时,希望切换到规格较低的视频流;
  • 接收端设备性能不足,解码高清视频流卡顿较高;
  • 接收端渲染远端视频流的窗口大小发生变化,需要根据窗口大小选择接收的视频流的规格。比如,全屏观看来自远端的音视频互动时,接收高清视频流;以小窗口形式观看同一个音视频互动时,仅需要接收标清视频流。

此时,发送端需要向房间内的其他用户,同时编码并推送多路内容相同、规格不同的视频流。

功能介绍

发布端设置

RTC SDK 支持同一用户发布至多 4 条编码规格不同的摄像头采集视频流,以满足订阅端不同的订阅需求,你可以:

  • 调用 setVideoEncoderConfig(1/2) 仅设置 1 路期望发布的最大分辨率的视频流,由 SDK 智能补齐另外 3 条视频流的参数
  • 或在对各路流的分辨率有强自定义需求的情况下,调用 setVideoEncoderConfig(2/2) 至多设置 3 条视频流的参数(设置的参数为各路流的分辨率上限),另外 1 路视频流则由 SDK 根据网络环境自动判断是否发布以满足性能回退的需求,该条视频流的参数固定为:分辨率 160px × 90px,帧率 15fps,最大码率 100kbps。

当发布端开启推送多分辨率视频流的功能时,SDK 会根据发布端的设置,将分辨率自动划分为四个等级,系统默认的等级划分如下:

视频流等级长度(px)宽度(px)帧率(fps)最大码率(kbps)
大流19201080303000
1280720301200
1120630301000
96054030900
中流80045030800
64036030600
48027015400
小流32018015300
25614415200
弱流1609015100

发布端设置了编码参数后,默认的等级划分将会依据发布端设置的各路流最大分辨率进行重新划分,具体划分规则参看视频流等级划分示例

在允许性能回退的场景下,发布的视频流会根据网络环境,按照上表中各等级的档位进行自动降级,具体参看音视频流回退,否则 SDK 仅会发送设置的分辨率值的流。

订阅端设置

订阅端可以设置期望订阅的流参数,所有订阅端的期望订阅流配置最终决定发布端发送的流数。

  • 订阅端完成期望的分辨率值设置后,收到的流为发布端在该值对应的等级中,与该值最为接近的档位的流。
  • 若所有订阅端设置的值均包含在发布端的同一分辨率等级中,则所有订阅端最终接收到的流为分辨率值最小的那一条流。

前提条件

你已经集成 v3.36 或更高版本的 RTC SDK,实现了基本的音视频通话。

微信小程序端 SDK 不支持本功能。

集成步骤

使用客户端 API

在设置发送多分辨率视频流后,建议你配合设置音视频流在弱网情况下的回退策略,参看音视频流回退

发布端

  1. 进房前调用 enableSimulcastMode 开启发送多分辨率视频流的模式。
  2. 对于摄像头采集的视频流,调用 setVideoEncoderConfig(1/2)setVideoEncoderConfig(2/2)设置 1 路或多路期望发布的流的分辨率上限。注意,需在发布流之前设置方可生效。
  3. 屏幕共享视频流的分辨率需通过 setScreenVideoEncoderConfig 进行设置,发布端只能设置/发布 1 路屏幕共享视频流。

订阅端

订阅端设置期望订阅的流的参数需在发布端开启发送多分辨率视频流的情况下方可生效

  1. 若想在进房前设置,则需在调用 joinRoom 时对 roomConfig 中的 remoteVideoConfig 进行设置
  2. 进房后可以通过调用 setRemoteVideoConfig 设置或更新设置

API 参考

功能/平台AndroidiOSWindows
开启发送多分辨率视频流的模式enableSimulcastModeenableSimulcastMode:enableSimulcastMode
设置期望发布的最大分辨率视频流参数setVideoEncoderConfig(1/2)setMaxVideoEncoderConfig:setVideoEncoderConfig(1/2)
设置期望发布的多分辨率视频流参数setVideoEncoderConfig(2/2)setVideoEncoderConfig:setVideoEncoderConfig(2/2)
设置屏幕共享视频流的期望编码参数setScreenVideoEncoderConfigsetScreenVideoEncoderConfig:SetScreenVideoEncoderConfig
设置期望订阅的远端视频流的参数setRemoteVideoConfigsetRemoteVideoConfig:remoteVideoConfig:setRemoteVideoConfig

使用服务端下发配置

你也可以联系技术支持同学,帮助你在 RTC 服务端进行推送多分辨率视频流的相关配置。当使用服务端下发配置实现时,下发配置优先级高于在客户端使用 API 设定的配置。

视频流等级划分示例

发布端

  • 例 1:发布端设置的 3 个分辨率上限分别为 720p、360p、144p,则等级划分会自动调整为下表所示:
视频流等级长度(px)宽度(px)帧率(fps)最大码率(kbps)
大流1280720301200
1120630301000
96054030900
80045030800
中流64036030600
48027015400
32018015300
小流25614415200
弱流1609015100
  • 例 2:发布端设置的 3 个分辨率上限分别为 720p、630p、540p,则等级划分会自动调整为下表所示:
视频流等级长度(px)宽度(px)帧率(fps)最大码率(kbps)
大流1280720301200
中流1120630301000
小流96054030900
80045030800
64036030600
48027015400
32018015300
25614415200
弱流1609015100
  • 例 3:若发布端设置了小于等于 3 条包含 90p 的流,当相邻两个分辨率呈大于等于 2 倍的关系时,则会在这两个分辨率之间额外插入 1 个等级;若 3 个值中相邻的分辨率两两均呈大于等于 2 倍的关系,则优先满足分辨率小的场景。如发布端设置的 3 个分辨率上限分别为 1080p、360p、90p,则优先在 360p 和 90p 之间插入一个等级,等级划分会自动调整为下表所示:
视频流等级长度(px)宽度(px)帧率(fps)最大码率(kbps)
大流19201080303000
1280720301200
1120630301000
96054030900
80045030800
中流64036030600
48027015400
小流32018015300
25614415200
弱流1609015100
  • 例 4:若发布端设置了小于 3 个分辨率上限值,则 SDK 自动补齐额外的等级。如当用户将分辨率上限值设为 360p,则等级划分会自动调整为下表所示:
视频流等级长度(px)宽度(px)帧率(fps)最大码率(kbps)
大流64036030600
中流48027015400
小流32018015300
25614415200
弱流1609015100

订阅端

当发布端的设置为例 1 所示时

  • 例 5:若订阅端设置了一个 639px × 363px 的不标准分辨率,则订阅端最终收到的流分辨率为 640px × 360px
  • 例 6:若订阅端共有 1080p、720p、630p 三种设置,则所有订阅端最终都会收到分辨率为 1120px × 630px 的一路流。