功能描述
本文主要介绍如何使用 SmallStreamAutoSwitcher 插件来启动自动切换大小流的能力。该插件通常用在带宽受限的场景,如带宽不足,导致大流卡顿,则自动切换到小流,会降低分辨率但保证流畅度。
前提条件
- TRTC Web SDK 版本 >= 5.11.0
实现流程
引入并注册插件
import SmallStreamAutoSwitcher from 'trtc-sdk-v5/plugins/small-stream-auto-switcher';
const trtc = TRTC.create({ plugins: [SmallStreamAutoSwitcher] });
插件启动
默认的切换策略为:
- 当网络持续 10s 内延迟大于 200ms 或 丢包率大于 20%,并且帧率波动较大时,则切换到小流
- 当网络持续 20s 内延迟小于 100ms 且 丢包率小于 10% 时,并且帧率恢复正常时,则切回到大流
- 只允许自动切换到小流 2 次,超过 2 次后,则不再自动切换到小流
trtc.startPlugin('SmallStreamAutoSwitcher');
插件停止
trtc.stopPlugin('SmallStreamAutoSwitcher');
进阶使用
可以通过自定义参数来调整插件的策略,如:
只允许自动切换到小流 1 次,切换后不再切回大流。
trtc.startPlugin('SmallStreamAutoSwitcher', {
maxAutoSwitchToSmallCount: 1,
});
以下为所有参数的说明,不传则使用默认策略。
trtc.startPlugin('SmallStreamAutoSwitcher', {
rttPoorLimit: 200, // 延迟阈值,单位:ms,当延迟大于此值时触发切换到小流的条件,默认 200
lossPoorLimit: 20, // 丢包率阈值,单位:%,当丢包率大于此值时触发切换到小流的条件,默认 20
poorDuration: 10 * 1000, // 网络状况差的持续时间阈值,单位:ms,当延迟或丢包率连续超过阈值达到此次数时,开始检查是否切换到小流,默认 10000(10秒)
rttGoodLimit: 100, // 延迟良好阈值,单位:ms,当延迟小于此值时触发切换到大流的条件,默认 100
lossGoodLimit: 10, // 丢包率良好阈值,单位:%,当丢包率小于此值时触发切换到大流的条件,默认 10
goodDuration: 20 * 1000, // 网络状况好的持续时间阈值,单位:ms,当延迟和丢包率连续低于阈值达到此次数时,开始检查是否切换到大流,默认 20000(20秒)
sleepTime: 30 * 1000, // 切换后的休眠时间,单位:ms,在此时间内不再进行自动切换,默认 30000(30秒)
maxAutoSwitchToSmallCount: 2, // 每个用户最大自动切换到小流的次数,超过此次数后不再自动切换到小流,默认 2
});
参数说明
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
rttPoorLimit | number | 200 | 延迟阈值(ms),当网络延迟大于此值时,开始计数切换到小流的条件 |
lossPoorLimit | number | 20 | 丢包率阈值(%),当丢包率大于此值时,开始计数切换到小流的条件 |
poorDuration | number | 10000 | 网络状况差的持续时间阈值(ms),当延迟或丢包率连续超过阈值达到此次数时,开始检查是否切换到小流,默认 10000(10秒) |
rttGoodLimit | number | 100 | 延迟良好阈值(ms),当网络延迟小于此值时,开始计数切换到大流的条件 |
lossGoodLimit | number | 10 | 丢包率良好阈值(%),当丢包率小于此值时,开始计数切换到大流的条件 |
goodDuration | number | 20000 | 网络状况好的持续时间阈值(ms),当延迟和丢包率连续低于阈值达到此次数时,开始检查是否切换到大流,默认 20000(20秒) |
sleepTime | number | 30000 | 切换后休眠时间(ms),在此期间内不会再次触发自动切换,避免频繁切换 |
maxAutoSwitchToSmallCount | number | 2 | 每个用户允许的最大自动切换到小流次数,超过后不再自动切小流 |
切换逻辑说明
切换到小流条件
- 网络条件:延迟连续
poorCount
次超过rttPoorLimit
、或丢包率连续poorCount
次超过lossPoorLimit
- 帧率条件:大流帧率波动较大(最大帧率与最小帧率的差值超过最大帧率的1/3)
- 限制条件:用户当前订阅的是大流,且自动切换次数未达到
maxAutoSwitchToSmallCount
上限,且不在休眠期
切换到大流条件
- 网络条件:延迟连续
goodCount
次低于rttGoodLimit
、且丢包率连续goodCount
次低于lossGoodLimit
- 帧率条件:小流帧率稳定(最大帧率与最小帧率的差值不超过最大帧率的1/3)
- 限制条件:用户当前订阅的是小流,且该用户只切换过1次小流,且不在休眠期
注意:
- 检测频率为每 2 秒一次
- 网络质量和帧率数据的统计窗口大小自动适应poorDuration和goodDuration的最大值
- 每次切换后会进入
sleepTime
时长的休眠期,期间不会再次触发自动切换- 只有自动切换过1次小流的用户才允许切回大流,切换过2次的用户将保持小流状态