三、1. 三个关键维度
配置动态加速前,需要理解三个相互独立但有推荐搭配关系的维度:
·动态加速的场景分别有游戏、实时音视频、直播推流;
·模式可选择多发选收模式(双发)、实时模式(RTC)、聚合模式;
·动态加速策略包括探测启动策略、快启动策略、动态回源策略和建议关闭策略。
四、2. 场景与模式的推荐搭配
以下是经过验证的推荐搭配(非强制),一般按推荐模式搭配效果最佳:
| 场景 | 推荐模式 | 原因 | 典型客户 |
| 游戏(FPS/MOBA) | 多发选收(双发) | 小包业务,追求极低延迟 | 对战类手游 |
| 实时音视频 | 实时模式(RTC) | 音视频流对连续性要求高 | 语音通话视频会议 |
| 直播推流 | 聚合模式 | 大带宽需求,聚合多通道 | 游戏户外直播 |
五、三、策略详解
四个策略覆盖了动态加速从开启到关闭的完整判断链路:
| 策略 | 解决什么问题 | 触发后行为 |
| 探测启动策略 | 网络持续变差,需要开加速 | 回调客户端后由客户决定 |
| 快启动策略 | 网络突然恶化,紧急需要加速 | 回调客户端后由客户决定 |
| 动态回源策略 | 加速链路比直连还差 | SDK 自动回退到直连 |
| 建议关闭策略 | 网络恢复,加速不再必要 | 回调客户端后由客户决定 |
注意:策略配置独立于模式。不同场景和模式的区别主要体现在策略参数的推荐值不同,策略逻辑本身是通用的。
六、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 | 设置逃生附件选项。 |
20、4. 建议关闭策略
该策略一般不需要修改配置,采用默认值。如需修改在 StopAccRemind 进行修改。
21、4.1 Android SDK
| API | 描述 |
| StopAccRemind | 加速链路【detectWindowTime】内平均时延大于主链路【rttDiffThreshold】%,且抖动大于主链路【jitterDiffThreshold】%,建议关闭加速(触发 onStopMpAcc)。 |
| setDisableSlaveLossDetect | 设置禁用从路丢包检测。 |
setDisableSlaveLossDetect
设置禁用从路检测,针对快切模式,默认不禁用。如果在测量窗口内,从路时延出现100%丢包现象,将会回调 onStopMpAcc 提醒关闭加速。
public MeasureConfig setDisableSlaveLossDetect(boolean disableSlaveLossDetect)
参数说明:
| 参数 | 类型 | 描述 |
| disableSlaveLossDetect | boolean | true:禁用 false:不禁用 |
22、4.2 iOS SDK
| 属性 | 描述 |
| stopAccRemind | 加速链路【detectWindowTime】内平均时延大于主链路【rttDiffRate】%,且抖动大于主链路【jitterRate】%,建议关闭加速。 |
| disableSlaveLossDetect | 设置禁用从路丢包检测。true:禁用 false:不禁用 |
23、五、示例代码
详情请参见 动态加速。