一、核心功能
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
满足条件时通知监听器执行质量提升操作