在 RTCOutboundRtpStreamStats 的 WebRTC 统计数据中,我们有指标qualityLimitationReason。
该指标指示流质量下降的原因,可以是以下之一:“none”、“bandwidth”、“cpu”、“other”。
如果我们想了解我们的应用程序过度使用了哪些资源,这非常有用。
Chromium WebRTC 计算原因的逻辑是什么?
如规范中所述,qualityLimitationReason报告“最限制因素”(如果存在多个因素,则定义优先级顺序):
实施报告了最大的限制因素。如果由于可能存在多个因素而导致实现无法确定最大限制因素,则必须按以下优先级顺序报告原因:“带宽”、“cpu”、“其他”。
此外,该规范还包括注释:
CPU和带宽资源的消耗是相互依赖且难以估计的,因此很难确定“最限制因素”是什么。这里提出的优先级顺序是基于这样的启发:“带宽”通常变化更大,因此是比“cpu”更可能和更有用的信号。
该值在WebRTC Native Code包中qualityLimitationReason设置:
bool is_cpu_limited = cpu_counts.resolution_adaptations > 0 ||
cpu_counts.num_framerate_reductions > 0;
bool is_bandwidth_limited = quality_counts.resolution_adaptations > 0 ||
quality_counts.num_framerate_reductions > 0 ||
bw_limited_layers_ || internal_encoder_scaler_;
if (is_bandwidth_limited) {
// We may be both CPU limited and bandwidth limited at the same time but
// there is no way to express this in standardized stats. Heuristically,
// bandwidth is more likely to be a limiting factor than CPU, and more
// likely to vary over time, so only when we aren't bandwidth limited do we
// want to know about our CPU being the bottleneck.
quality_limitation_reason_tracker_.SetReason(
QualityLimitationReason::kBandwidth);
} else if (is_cpu_limited) {
quality_limitation_reason_tracker_.SetReason(QualityLimitationReason::kCpu);
} else {
quality_limitation_reason_tracker_.SetReason(
QualityLimitationReason::kNone);
}
Run Code Online (Sandbox Code Playgroud)
从上面可以看出,如果计数器或 resolution_adaptations大于num_framerate_reductions零,则认为流受到 CPU ( cpu) 或带宽 ( bandwidth) 的限制。
每当分辨率降低 或帧速率降低时,相应的计数器就会递增,如果分辨率/帧速率增加,则反之亦然(递减)。
这些适应被触发OnResourceUsageStateMeasured()。说明ResourceUsageState是否观察到资源过度使用或未充分使用。
此事件可能因多种不同原因而触发,例如热限制(请参阅此处)或框架使用不足/过度使用(请参阅此处)。
上述适应计数器(分辨率和帧率)被认为是 CPU 适应,但是如果质量缩放器资源或带宽缩放器资源启动,那么它们也被认为是与带宽相关的(请参阅此处)。由于“带宽”的优先级较高,这意味着在本例中原因将被列为“带宽”。
有关这些定标器功能的更多信息,请参阅QualityScaler和BandwidthQualityScaler类描述。
此外,如果设置了bw_limited_layers_或 ,internal_encoder_scaler_那么原因也被认为是“带宽”。
否则,原因设置为“无”。
总结一下,在WebRTC Native Code包中,qualityLimitationReason可以设置为以下值之一:
造成限制的根本原因可能是多种因素,例如热限制、带宽限制、CPU 使用率或内部编码器缩放。
| 归档时间: |
|
| 查看次数: |
691 次 |
| 最近记录: |