Tutorial: 开启大小流自动切换插件

开启大小流自动切换插件

功能描述

本文主要介绍如何使用 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 每个用户允许的最大自动切换到小流次数,超过后不再自动切小流

切换逻辑说明

切换到小流条件

  1. 网络条件:延迟连续 poorCount 次超过 rttPoorLimit、或丢包率连续 poorCount 次超过 lossPoorLimit
  2. 帧率条件:大流帧率波动较大(最大帧率与最小帧率的差值超过最大帧率的1/3)
  3. 限制条件:用户当前订阅的是大流,且自动切换次数未达到 maxAutoSwitchToSmallCount 上限,且不在休眠期

切换到大流条件

  1. 网络条件:延迟连续 goodCount 次低于 rttGoodLimit、且丢包率连续 goodCount 次低于 lossGoodLimit
  2. 帧率条件:小流帧率稳定(最大帧率与最小帧率的差值不超过最大帧率的1/3)
  3. 限制条件:用户当前订阅的是小流,且该用户只切换过1次小流,且不在休眠期

注意:

  • 检测频率为每 2 秒一次
  • 网络质量和帧率数据的统计窗口大小自动适应poorDuration和goodDuration的最大值
  • 每次切换后会进入 sleepTime 时长的休眠期,期间不会再次触发自动切换
  • 只有自动切换过1次小流的用户才允许切回大流,切换过2次的用户将保持小流状态