Skip to content

rtpgccbwe: Support linear regression based delay estimation

This MR introduces an abstraction that enables different estimators in rtpgccbwe. With this abstraction, we make it easier both to test different estimators and to implement new ones.

A new linear regression based estimator is introduced. The existing Kalman based estimator is refactored into its own entity, but remains the default estimator. Applications can select estimator at runtime through a property. By allowing the estimator to be selected at runtime, we open the door to A/B testing of different estimators in real world networks and scenarios.

In my experience, the Kalman based estimator is too sensitive to spikes in inter-group delay measurements. The linear regression based estimator is less sensitive to spikes due to its usage of

  • smoothing, and
  • the slope from a linear regression on a history of smoothed samples.

A linear regression based estimator is used in the GCC implementation in Chromium. This can partly be explained by reports of oversensitivity to spikes in inter-group delay measurements when using the Kalman filter. This sounds similiar to the problems we observe. In fact, the Kalman based estimator was removed in 2017 and only a linear regression based estimator remains in use (although there are traces of the Kalman algorithm elsewhere in the codebase). In the diff, notice how kalman_estimator_ is removed and how only trendline_estimator_ remains.

Long term we might want to go back to using only one estimator to not burden users of rtpgccbwe with making a choice on staying with the default or using something else. But before we reach that point I think it will be very helpful to make it easy to evaluate different estimators.

Edited by Martin Nordholts

Merge request reports