From fe84e0282e79adb3a06e30a11326508c0a51701c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?A=CC=81lvaro=20Velad=20Galva=CC=81n?= Date: Fri, 24 Nov 2023 10:46:23 +0100 Subject: [PATCH] feat: Set baseDelay to 100 by default for low latency streaming --- docs/tutorials/config.md | 30 +++++++++++++++++++++++------- lib/player.js | 31 ++++++++++++++++++++++++++++--- test/player_unit.js | 25 +++++++++++++++++++++++++ 3 files changed, 76 insertions(+), 10 deletions(-) diff --git a/docs/tutorials/config.md b/docs/tutorials/config.md index 3d94cc5392..3ca652c2a9 100644 --- a/docs/tutorials/config.md +++ b/docs/tutorials/config.md @@ -123,12 +123,15 @@ buffering settings) while some will not have any effect until the next call to With `.streaming.lowLatencyMode` set to true, `.streaming.inaccurateManifestTolerance` is set to 0 by default, -`.streaming.rebufferingGoal` is set to 0.01 by default, and -`.streaming.segmentPrefetchLimit` is set to 2 by default. - -To customize the values of inaccurateManifestTolerance, rebufferingGoal and -segmentPrefetchLimit with low latency mode, you can set the fields in the same -or subsequent call to configure(). +`.streaming.rebufferingGoal` is set to 0.01 by default, +`.streaming.segmentPrefetchLimit` is set to 2 by default, +`.streaming.retryParameters.baseDelay` is set to 100 by default, +`.manifest.retryParameters.baseDelay` is set to 100 by default, and +`.drm.retryParameters.baseDelay` is set to 100 by default. + +To customize the values of inaccurateManifestTolerance, rebufferingGoal, +segmentPrefetchLimit and baseDelay with low latency mode, you can set the +fields in the same or subsequent call to configure(). ```js player.configure({ streaming: { @@ -136,7 +139,20 @@ player.configure({ inaccurateManifestTolerance: 0, rebufferingGoal: 0.01, segmentPrefetchLimit: 2, - } + retryParameters: { + baseDelay: 100, + }, + }, + manifest: { + retryParameters: { + baseDelay: 100, + }, + }, + drm: { + retryParameters: { + baseDelay: 100, + }, + }, }); ``` diff --git a/lib/player.js b/lib/player.js index f6bd067093..2af50f0187 100644 --- a/lib/player.js +++ b/lib/player.js @@ -2980,9 +2980,10 @@ shaka.Player = class extends shaka.util.FakeEventTarget { } // If lowLatencyMode is enabled, and inaccurateManifestTolerance and - // rebufferingGoal and segmentPrefetchLimit are not specified, set - // inaccurateManifestTolerance to 0 and rebufferingGoal to 0.01 and - // segmentPrefetchLimit to 2 by default for low latency streaming. + // rebufferingGoal and segmentPrefetchLimit and baseDelay are not + // specified, set inaccurateManifestTolerance to 0 and rebufferingGoal + // to 0.01 and segmentPrefetchLimit to 2 and baseDelay to 100 by default + // for low latency streaming. if (config['streaming'] && config['streaming']['lowLatencyMode']) { if (config['streaming']['inaccurateManifestTolerance'] == undefined) { config['streaming']['inaccurateManifestTolerance'] = 0; @@ -2993,6 +2994,30 @@ shaka.Player = class extends shaka.util.FakeEventTarget { if (config['streaming']['segmentPrefetchLimit'] == undefined) { config['streaming']['segmentPrefetchLimit'] = 2; } + if (config['streaming']['retryParameters'] == undefined) { + config['streaming']['retryParameters'] = {}; + } + if (config['streaming']['retryParameters']['baseDelay'] == undefined) { + config['streaming']['retryParameters']['baseDelay'] = 100; + } + if (config['manifest'] == undefined) { + config['manifest'] = {}; + } + if (config['manifest']['retryParameters'] == undefined) { + config['manifest']['retryParameters'] = {}; + } + if (config['manifest']['retryParameters']['baseDelay'] == undefined) { + config['manifest']['retryParameters']['baseDelay'] = 100; + } + if (config['drm'] == undefined) { + config['drm'] = {}; + } + if (config['drm']['retryParameters'] == undefined) { + config['drm']['retryParameters'] = {}; + } + if (config['drm']['retryParameters']['baseDelay'] == undefined) { + config['drm']['retryParameters']['baseDelay'] = 100; + } } const ret = shaka.util.PlayerConfiguration.mergeConfigObjects( this.config_, config, this.defaultConfig_()); diff --git a/test/player_unit.js b/test/player_unit.js index 11d686937a..d5a785acc6 100644 --- a/test/player_unit.js +++ b/test/player_unit.js @@ -1178,12 +1178,31 @@ describe('Player', () => { rebufferingGoal: 1, inaccurateManifestTolerance: 1, segmentPrefetchLimit: 1, + retryParameters: { + baseDelay: 2000, + }, + }, + manifest: { + retryParameters: { + baseDelay: 2000, + }, + }, + drm: { + retryParameters: { + baseDelay: 2000, + }, }, }); expect(player.getConfiguration().streaming.rebufferingGoal).toBe(1); expect(player.getConfiguration().streaming.inaccurateManifestTolerance) .toBe(1); expect(player.getConfiguration().streaming.segmentPrefetchLimit).toBe(1); + expect(player.getConfiguration().streaming.retryParameters.baseDelay) + .toBe(2000); + expect(player.getConfiguration().manifest.retryParameters.baseDelay) + .toBe(2000); + expect(player.getConfiguration().drm.retryParameters.baseDelay) + .toBe(2000); // When low latency streaming gets enabled, rebufferingGoal will default // to 0.01 if unless specified, inaccurateManifestTolerance will @@ -1194,6 +1213,12 @@ describe('Player', () => { expect(player.getConfiguration().streaming.inaccurateManifestTolerance) .toBe(0); expect(player.getConfiguration().streaming.segmentPrefetchLimit).toBe(2); + expect(player.getConfiguration().streaming.retryParameters.baseDelay) + .toBe(100); + expect(player.getConfiguration().manifest.retryParameters.baseDelay) + .toBe(100); + expect(player.getConfiguration().drm.retryParameters.baseDelay) + .toBe(100); }); });