diff --git a/jitsi-media-transform/src/main/java/org/jitsi_modified/impl/neomedia/rtp/remotebitrateestimator/BandwidthUsage.java b/jitsi-media-transform/src/main/java/org/jitsi_modified/impl/neomedia/rtp/remotebitrateestimator/BandwidthUsage.java index 32ad8aa4c1..16a5cf1118 100644 --- a/jitsi-media-transform/src/main/java/org/jitsi_modified/impl/neomedia/rtp/remotebitrateestimator/BandwidthUsage.java +++ b/jitsi-media-transform/src/main/java/org/jitsi_modified/impl/neomedia/rtp/remotebitrateestimator/BandwidthUsage.java @@ -20,7 +20,7 @@ * * @author Lyubomir Marinov */ -enum BandwidthUsage +public enum BandwidthUsage { kBwNormal(0), kBwUnderusing(-1), kBwOverusing(1); diff --git a/jitsi-media-transform/src/main/java/org/jitsi_modified/impl/neomedia/rtp/remotebitrateestimator/OveruseDetector.java b/jitsi-media-transform/src/main/java/org/jitsi_modified/impl/neomedia/rtp/remotebitrateestimator/OveruseDetector.java index 223e0120d2..150f7ed6ce 100644 --- a/jitsi-media-transform/src/main/java/org/jitsi_modified/impl/neomedia/rtp/remotebitrateestimator/OveruseDetector.java +++ b/jitsi-media-transform/src/main/java/org/jitsi_modified/impl/neomedia/rtp/remotebitrateestimator/OveruseDetector.java @@ -195,4 +195,9 @@ private void updateThreshold(double modifiedOffset, long nowMs) lastUpdateMs = nowMs; } + + public double getThreshold() + { + return threshold; + } } diff --git a/jitsi-media-transform/src/main/java/org/jitsi_modified/impl/neomedia/rtp/remotebitrateestimator/RemoteBitrateEstimatorAbsSendTime.java b/jitsi-media-transform/src/main/java/org/jitsi_modified/impl/neomedia/rtp/remotebitrateestimator/RemoteBitrateEstimatorAbsSendTime.java index 906988a60d..071e9649a9 100644 --- a/jitsi-media-transform/src/main/java/org/jitsi_modified/impl/neomedia/rtp/remotebitrateestimator/RemoteBitrateEstimatorAbsSendTime.java +++ b/jitsi-media-transform/src/main/java/org/jitsi_modified/impl/neomedia/rtp/remotebitrateestimator/RemoteBitrateEstimatorAbsSendTime.java @@ -389,6 +389,22 @@ public synchronized void setMinBitrate(int minBitrateBps) remoteRate.setMinBitrate(minBitrateBps); } + /** + * Get various statistics about the estimation process. [Local addition, not in original C++.] + */ + public synchronized @Nullable Statistics getStatistics() + { + if (detector == null) + { + return null; + } + return new Statistics( + detector.estimator.getOffset(), + detector.detector.getThreshold(), + detector.detector.getState() + ); + } + /** * Holds the {@link InterArrival}, {@link OveruseEstimator} and * {@link OveruseDetector} instances that estimate the remote bitrate of a @@ -439,4 +455,20 @@ public static long convertMsTo24Bits(long timeMs) { return (((timeMs << kAbsSendTimeFraction) + 500) / 1000) & 0x00FFFFFF; } + + /** + * Various statistics about the estimation process. [Local addition, not in original C++.] + */ + public static class Statistics { + public double offset; + public double threshold; + public BandwidthUsage hypothesis; + + public Statistics(double o, double t, BandwidthUsage h) + { + offset = o; + threshold = t; + hypothesis = h; + } + } } diff --git a/jitsi-media-transform/src/main/kotlin/org/jitsi/nlj/rtp/bandwidthestimation/GoogleCcEstimator.kt b/jitsi-media-transform/src/main/kotlin/org/jitsi/nlj/rtp/bandwidthestimation/GoogleCcEstimator.kt index 82af123036..c5ccc64f86 100644 --- a/jitsi-media-transform/src/main/kotlin/org/jitsi/nlj/rtp/bandwidthestimation/GoogleCcEstimator.kt +++ b/jitsi-media-transform/src/main/kotlin/org/jitsi/nlj/rtp/bandwidthestimation/GoogleCcEstimator.kt @@ -111,7 +111,12 @@ class GoogleCcEstimator(diagnosticContext: DiagnosticContext, parentLogger: Logg getCurrentBw(now) ).apply { addNumber("incomingEstimateExpirations", bitrateEstimatorAbsSendTime.incomingEstimateExpirations) - addNumber("latestDelayEstimate", sendSideBandwidthEstimation.latestREMB) + bitrateEstimatorAbsSendTime.statistics?.run { + addNumber("delayBasedEstimatorOffset", offset) + addNumber("delayBasedEstimatorThreshold", threshold) + addNumber("delayBasedEstimatorHypothesis", hypothesis.value) + } + addNumber("latestDelayBasedEstimate", sendSideBandwidthEstimation.latestREMB) addNumber("latestLossFraction", sendSideBandwidthEstimation.latestFractionLoss / 256.0) with(sendSideBandwidthEstimation.statistics) { update(now.toEpochMilli())