一、概述
动态加速是指 SDK 持续监测网络质量,只在网络变差时自动建议开启加速,网络恢复后建议关闭。这样可以在保障体验的同时节省加速流量成本。动态加速的核心问题只有两个:什么时候开?什么时候关?本文档目标旨在帮助理解动态加速的策略配置逻辑,以及不同场景下加速参数的选择和调整。
二、核心概念
1. 三个关键维度
配置动态加速前,需要理解三个相互独立但有推荐搭配关系的维度:
动态加速的场景分别有游戏、实时音视频、直播推流;
模式可选择多发选收模式(双发)、实时模式(RTC)、聚合模式;
动态加速策略包括探测启动策略、快启动策略、动态回源策略和建议关闭策略。
2. 场景与模式的推荐搭配
以下是经过验证的推荐搭配(非强制),一般按推荐模式搭配效果最佳:
场景 | 推荐模式 | 原因 | 典型客户 |
游戏(FPS/MOBA) | 多发选收(双发) | 小包业务,追求极低延迟 | 对战类手游 |
实时音视频 | 实时模式(RTC) | 音视频流对连续性要求高 | 语音通话 视频会议 |
直播推流 | 聚合模式 | 大带宽需求,聚合多通道 | 游戏 户外直播 |
三、策略详解
四个策略覆盖了动态加速从开启到关闭的完整判断链路:
注意:
策略配置独立于模式。不同场景和模式的区别主要体现在策略参数的推荐值不同,策略逻辑本身是通用的。
1. 探测启动策略
SDK 持续监测网络质量,当指标在一段时间内持续超出阈值时,回调给客户端建议开启加速。属于渐进式检测,适合发现网络正在恶化的趋势。判断逻辑:在【时间窗口】内,平均时延超过阈值、或抖动超过阈值、或丢包率超过阈值(三者满足任一),即触发回调。通俗地说,过去 X 秒内,延迟太高/抖动太大/丢包太多,就建议开加速。下表为参数推荐值。
参数 | 含义 | 游戏场景 | 实时音视频 | 推流场景 |
时间窗口 | 观察时间段 | 8s | 8s | 建议全时开启(无需配置) |
时延阈值 | 平均延迟超此值触发 | 60ms | 80ms | - |
抖动阈值 | 延迟波动超此值触发 | 15ms | 20ms | - |
丢包阈值 | 丢包率超此值触发 | 5% | 5% | - |
说明:
游戏场景阈值更低是因为游戏对延迟极度敏感(60ms 即可感知卡顿),需要更早触发。推流场景因为带宽需求大且持续,建议全时开启,无需探测触发。
2. 快启动策略
与探测启动互补,探测启动是8秒窗口的趋势判断,快启动是2秒窗口的紧急判断。当网络突然急剧恶化时(如进电梯、Wi-Fi 断开),快启动能更快触发。两个策略同时生效,任一触发即回调。判断逻辑:在【时间窗口】内,时延超过【时延阈值】即触发。注意快启动只看时延一个指标(不看抖动和丢包),窗口更短、阈值更高,专门用于捕捉突然变差。下表为参数推荐值。
参数 | 含义 | 游戏场景 | 实时音视频 | 推流场景 | |
时间窗口 | 检测窗口时长 | | 2s | 2s | 建议全时开启 |
时延阈值 | 延迟超此值触发 | | 80ms | 100ms | - |
探测启动和快启动的对比如下:
对比 | 探测启动 | 快启动 |
窗口 / 指标 | 8s / 时延+抖动+丢包 | 2s / 仅时延 |
触发阈值 | 较低(灵敏) | 较高(防误触) |
定位 | 发现持续变差的趋势 | 捕捉突然恶化的突变 |
3. 动态回源策略
保护机制——加速开启后,如果加速链路本身出现严重问题(比直连还差),SDK 自动将流量回退到直连主链路,避免加速反而更卡。与建议关闭策略的区别:动态回源是 SDK 自动执行的保护动作(不等客户决定),建议关闭则是通知客户由客户自行决定。触发条件如下(满足任一即自动回源)。
条件 | 判断规则 | 通俗含义 |
条件一完全失联 | 加速链路连续丢包达到【连续丢包次数】,且主链路未同时失联。 | 加速链路断了,但直连还通,应立即回退。 |
条件二延迟极高 | 加速链路连续【连续高延迟包数】个包的延迟≥【单包延迟上限】ms。 | 没断但延迟已高到不可接受。 |
条件三持续比直连差 | 【评估窗口】内,加速平均延迟 > 主链路×【延迟比例阈值】%,且加速平均延迟 >【最低延迟阈值】ms。 | 长期观察走加速还不如直连,且延迟确实不低。 |
说明:
条件三为什么需要最低延迟阈值?——避免误判。例如主链路10ms、加速12ms 虽然超过110%,但12ms 本身完全可接受,不应回源。加上最低阈值(66ms)可过滤此类情况。
各场景参数推荐值如下。
条件 | 参数 | 游戏(多发选收) | 实时音视频(RTC) |
条件一 | 连续丢包次数 | 4个包 | 4个包 |
条件二 | 连续高延迟包数 | 4个包 | 不启用 |
| 单包延迟上限 | 400ms | - |
条件三 | 评估窗口时长 | 60秒 | 60秒 |
| 延迟比例阈值 | 110% | 110% |
| 最低延迟阈值 | 66ms | 66ms |
推流/聚合模式 | 仅启用条件一(连续丢包次数=4),不启用条件二、三。 | | |
说明:
实时场景不启用条件二,因 RTC 协议自身有重传机制。聚合模式不启用时延类条件(二、三),因聚合天然会有较高延迟。
4. 建议关闭策略
当加速不再必要或物理条件不支持时,SDK 回调建议客户端关闭加速。客户端可选择接受或忽略。
触发条件如下(满足任一即回调建议)。
条件 | 判断规则 | 通俗含义 |
条件一仅剩单网卡 | 设备仅剩一个网卡可用,等待【等待时长】秒后建议关闭。 | 多发需要至少两个网卡,只剩一个时加速无意义。 |
条件二完全无网 | 设备无可用网卡,则立即建议关闭。 | 没网了加速自然要关。 |
条件三效果长期不佳 | 【质量评估窗口】内加速时延 > 主链路×【时延比例阈值】%,且 抖动 > 主链路×【抖动比例阈值】%。 | 长期加速效果不如直连,关了省成本。 |
条件四副链路全挂 | 【测量窗口】秒内副链路全部丢包。 | 所有副网卡访问超时,加速无意义。 |
各场景参数推荐值如下。(推流/聚合模式:仅启用条件一(等待10秒)和条件二(立即触发),不启用条件三、四。聚合模式不建议用时延条件做关闭判断。)
条件 | 参数 | 游戏(多发选收) | 实时音视频(RTC) |
条件一 | 等待时长 | 10秒 | 10秒 |
条件二 | (立即触发) | - | - |
条件三 | 质量评估窗口 | 300秒 | 300秒 |
时延比例 / 抖动比例 | 100% / 80% | 100% / 80% | |
条件四 | 测量窗口 | 不启用 | 10秒 |
四、设置接口
1. 探测启动策略
测速配置对象,通过设置此参数,实现动态加速效果。
1.1 Android SDK
API | 描述 |
setRTT | 设置时延阈值 |
setLoss | 设置丢包率阈值 |
setJitter | 设置抖动阈值 |
setTime | 设置滑动窗口测量时间 |
setRTT
设置时延阈值,当滑动窗口内终端实际网络时延大于设置的时延阈值时,会回调 onStartMpAcc 接口。
public MeasureConfig setRTT(int RTT)
参数说明:
参数 | 类型 | 描述 |
RTT | int | 延迟阈值(毫秒) |
setLoss
设置丢包率阈值,当滑动窗口内终端实际网络丢包大于设置的丢包阈值时,会回调 onStartMpAcc 接口。
public MeasureConfig setLoss(int loss)
参数说明:
参数 | 类型 | 描述 |
loss | int | 丢包率百分比阈值(0-100) |
setJitter
设置抖动阈值,当滑动窗口内终端实际网络抖动大于设置的抖动阈值时,会回调 onStartMpAcc 接口。
public MeasureConfig setJitter(int jitter)
参数说明:
参数 | 类型 | 描述 |
jitter | int | 网络抖动阈值(毫秒) |
setTime
设置滑动窗口测量时间。
public MeasureConfig setTime(int time)
参数说明:
参数 | 类型 | 描述 |
time | int | 测量时长,单位:ms |
1.2 iOS SDK
属性 | 描述 |
time | 滑动窗口测量时间 (ms),默认30000 |
rtt | 时延阈值,单位:ms |
loss | 丢包率百分比阈值(0-100) |
jitter | 抖动阈值,单位:ms |
2. 快启动策略
通过设置快启动窗口时间和快启动时延阈值实现快启动。
2.1 Android SDK
API | 描述 |
setQuickTime | 设置快启动窗口时间 |
setQuickRtt | 设置快启动时延阈值 |
setQuickRtt
设置快启动时延阈值,此接口主要针对时延陡增场景,当快启动窗口内终端实际网络时延大于设置的快启动时延阈值时,会回调 onStartMpAcc 接口。
public MeasureConfig setQuickRtt(int quickRtt)
参数说明:
参数 | 类型 | 描述 |
quickRtt | int | 快启动时延阈值,单位:ms |
setQuickTime
设置快启动窗口测量时间。
public MeasureConfig setQuickTime(int quickTime)
参数说明:
参数 | 类型 | 描述 |
quickTime | int | 快启动窗口时间,单位:ms |
2.2 iOS SDK
属性 | 描述 |
quickTime | 快启动窗口时间,单位:ms |
quickRtt | 快启动时延阈值,单位:ms |
3. 动态回源策略
逃生回源自定义对象,如果业务未设置 AdditionalOptions,SDK 会采用默认逃生逻辑(触发 onAccException),如果业务已设置,则 SDK 逃生逻辑以业务设置为主。
3.1 Android SDK
API | 描述 |
PacketLossEscape | 加速链路连续【packetLossCount】失联,触发逃生。 |
MaxRttEscape | 加速链路连续【maxRttCount】ping 值大于等于【rttThreshold】ms,触发逃生。 |
RttExceptionEscape | 加速链路【detectWindowTime】ms 平均 ping 值大于主链路【rttDiffThreshold】%,并且 acc 平均时延大于【accBenchmarkRtt】ms,触发逃生。 |
StopAccRemind | 加速链路【detectWindowTime】内平均时延大于主链路【rttDiffThreshold】%,且抖动大于主链路【jitterDiffThreshold】%,建议关闭加速(触发 onStopMpAcc)。 |
setAdditionalOptions | 设置逃生回源自定义选项。 |
setAdditionalOptions
设置逃生回源自定义选项。
public MeasureConfig setAdditionalOptions(AdditionalOptions additionalOptions)
3.2 iOS SDK
属性 | 描述 |
packetLossEscape | 加速链路连续【packetLossCount】失联。 |
maxRttEscape | 加速链路连续【maxRttCount】ping 值大于等于【rttThreshold】ms。 |
rttExceptionEscape | 加速链路【detectWindowTime】平均 ping 值大于主链路【rttDiffThreshold】%,并且 acc 平均时延大于【accBenchmarkRtt】ms。 |
stopAccRemind | 加速链路【detectWindowTime】内平均时延大于主链路【rttDiffRate】%,且抖动大于主链路【jitterRate】%,建议关闭加速。 |
additionalOptions | 设置逃生附件选项。 |
4. 建议关闭策略
该策略一般不需要修改配置,采用默认值。如需修改在 StopAccRemind 进行修改。
4.1 Android SDK
API | 描述 |
StopAccRemind | 加速链路【detectWindowTime】内平均时延大于主链路【rttDiffThreshold】%,且抖动大于主链路【jitterDiffThreshold】%,建议关闭加速(触发 onStopMpAcc)。 |
setDisableSlaveLossDetect | 设置禁用从路丢包检测。 |
setDisableSlaveLossDetect
设置禁用从路检测,针对快切模式,默认不禁用。如果在测量窗口内,从路时延出现100%丢包现象,将会回调 onStopMpAcc 提醒关闭加速。
public MeasureConfig setDisableSlaveLossDetect(boolean disableSlaveLossDetect)
参数说明:
参数 | 类型 | 描述 |
disableSlaveLossDetect | boolean | true:禁用 false:不禁用 |
4.2 iOS SDK
属性 | 描述 |
stopAccRemind | 加速链路【detectWindowTime】内平均时延大于主链路【rttDiffRate】%,且抖动大于主链路【jitterRate】%,建议关闭加速。 |
disableSlaveLossDetect | 设置禁用从路丢包检测。 true:禁用 false:不禁用 |