一、核心功能
QualityRampUpExperimentHelper
用于管理 质量提升实验(Quality Rampup Experiment),核心目标是在带宽充足时自动提升视频质量(如分辨率)。主要功能包括:
-
实验条件检测:监测带宽、编码器码率、QP值等关键指标
-
动态质量提升 :满足条件时触发
OnQualityRampUp
回调 -
状态管理:跟踪 CPU/分辨率适配历史
-
实验参数配置:支持运行时更新像素数/最大码率参数
二、核心算法原理
质量提升触发逻辑 (PerformQualityRampupExperiment
):

-
带宽检测 :当前带宽 > 实验阈值 (
BwHigh
) -
编码状态验证:
-
编码器目标码率 == 最大码率
-
QP值持续低位 (
QpFastFilterLow
)
-
-
历史适配检查:
-
发生过 QP 分辨率降级(
qp_resolution_adaptations_ > 0
) -
未发生 CPU 降级 (
!cpu_adapted_
)
-
三、关键数据结构
成员变量 | 类型 | 说明 |
---|---|---|
quality_rampup_experiment_ |
QualityRampupExperiment |
存储实验参数和状态 |
cpu_adapted_ |
bool |
标记是否发生过 CPU 降级 |
qp_resolution_adaptations_ |
int |
QP 分辨率降级次数 |
experiment_listener_ |
QualityRampUpExperimentListener* |
质量提升回调接口 |
clock_ |
Clock* |
时间管理 |
四、核心方法详解
(1) 工厂方法 CreateIfEnabled
// 仅在实验启用时创建实例
std::unique_ptr<QualityRampUpExperimentHelper> CreateIfEnabled(
QualityRampUpExperimentListener* listener,
Clock* clock) {
QualityRampupExperiment experiment = QualityRampupExperiment::ParseSettings();
return experiment.Enabled() ?
std::make_unique<QualityRampUpExperimentHelper>(listener, clock, experiment)
: nullptr;
}
(2) 实验配置 ConfigureQualityRampupExperiment
void ConfigureQualityRampupExperiment(
bool reset,
absl::optional<uint32_t> pixels,
absl::optional<DataRate> max_bitrate) {
if (reset) quality_rampup_experiment_.Reset(); // 重置实验状态
if (pixels && max_bitrate)
quality_rampup_experiment_.SetMaxBitrate(*pixels, max_bitrate->kbps());
}
(3) 核心逻辑 PerformQualityRampupExperiment
void PerformQualityRampupExperiment(
rtc::scoped_refptr<QualityScalerResource> quality_scaler_resource,
DataRate bandwidth,
DataRate encoder_target_bitrate,
absl::optional<DataRate> max_bitrate) {
// 检查前置条件
if (!quality_scaler_resource->is_started() || !max_bitrate) return;
const int64_t now_ms = clock_->TimeInMilliseconds();
bool try_quality_rampup = false;
// 条件1: 带宽充足
if (quality_rampup_experiment_.BwHigh(now_ms, bandwidth.kbps())) {
// 条件2: 码率最大且QP低位
if (encoder_target_bitrate == *max_bitrate &&
quality_scaler_resource->QpFastFilterLow()) {
try_quality_rampup = true;
}
}
// 条件3: 有QP降级历史且无CPU降级
if (try_quality_rampup && qp_resolution_adaptations_ > 0 && !cpu_adapted_) {
experiment_listener_->OnQualityRampUp(); // 触发质量提升
}
}
五、设计亮点
-
条件解耦设计:
-
带宽检测 (
BwHigh
) 封装在独立模块 -
QP 检测委托给
QualityScalerResource
-
降级历史通过 setter 注入
-
-
运行时动态配置:
ConfigureQualityRampupExperiment(true, 1280*720, DataRate::kbps(2000));
-
安全触发机制:
-
必须存在 QP 降级记录才触发提升(防误触发)
-
排除 CPU 降级场景(保证系统稳定性)
-
-
零开销禁用:
-
工厂方法在实验关闭时返回
nullptr
-
避免不必要的资源占用
-
六、典型工作流程

关键交互:
-
视频引擎在分辨率变化时调用
ConfigureQualityRampupExperiment
-
适配模块在降级时更新
cpu_adapted_
/qp_resolution_adaptations_
-
带宽估计模块定期触发
PerformQualityRampupExperiment
-
满足条件时通知监听器执行质量提升操作