Skip to content

Commit

Permalink
Change precedence of ServiceDescription elements (#3923)
Browse files Browse the repository at this point in the history
* Change precedence of ServiceDescription elements

* Correct case for checking ServiceDescription applies to all clients
  • Loading branch information
mattjuggins authored Apr 20, 2022
1 parent 3d42188 commit 81e506f
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 18 deletions.
36 changes: 18 additions & 18 deletions src/streaming/controllers/ServiceDescriptionController.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,27 +98,27 @@ function ServiceDescriptionController() {
return;
}

for (let i = 0; i < manifestInfo.serviceDescriptions.length; i++) {
const sd = manifestInfo.serviceDescriptions[i];

if (!sd.schemeIdUri || SUPPORTED_SCHEMES.includes(sd.schemeIdUri)) {

if (sd.latency && sd.latency.target > 0) {
_applyServiceDescriptionLatency(sd);
}
const supportedServiceDescriptions = manifestInfo.serviceDescriptions.filter(sd => SUPPORTED_SCHEMES.includes(sd.schemeIdUri));
const allClientsServiceDescriptions = manifestInfo.serviceDescriptions.filter(sd => sd.schemeIdUri == null);
let sd = (supportedServiceDescriptions.length > 0)
? supportedServiceDescriptions[supportedServiceDescriptions.length - 1]
: allClientsServiceDescriptions[allClientsServiceDescriptions.length - 1];
if (!sd) return;

if (sd.latency && sd.latency.target > 0) {
_applyServiceDescriptionLatency(sd);
}

if (sd.playbackRate && sd.playbackRate.max > 1.0) {
_applyServiceDescriptionPlaybackRate(sd);
}
if (sd.playbackRate && sd.playbackRate.max > 1.0) {
_applyServiceDescriptionPlaybackRate(sd);
}

if (sd.operatingQuality) {
_applyServiceDescriptionOperatingQuality(sd);
}
if (sd.operatingQuality) {
_applyServiceDescriptionOperatingQuality(sd);
}

if (sd.operatingBandwidth) {
_applyServiceDescriptionOperatingBandwidth(sd);
}
}
if (sd.operatingBandwidth) {
_applyServiceDescriptionOperatingBandwidth(sd);
}
}

Expand Down
29 changes: 29 additions & 0 deletions test/unit/streaming.controllers.ServiceDescriptionController.js
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,35 @@ describe('ServiceDescriptionController', () => {
expect(currentSettings.initialBitrate).to.be.empty;
})

it('Should use supported scheme in preference of no provided schemeIdUri', () => {
dummyManifestInfo.serviceDescriptions.push({
latency: {
target: 10000,
}
});
serviceDescriptionController.applyServiceDescription(dummyManifestInfo);
const currentSettings = serviceDescriptionController.getServiceDescriptionSettings();
expect(currentSettings.liveDelay).to.be.equal(5);
})

it('Should use ServiceDescription that appears last if multiple applicable ServiceDescriptions', () => {
// Also ensures only parameters from a single ServiceDescription element are used
dummyManifestInfo.serviceDescriptions.push({
schemeIdUri: 'urn:dvb:dash:lowlatency:scope:2019',
latency: {
target: 10000,
}
});
serviceDescriptionController.applyServiceDescription(dummyManifestInfo);
const currentSettings = serviceDescriptionController.getServiceDescriptionSettings();
expect(currentSettings.liveDelay).to.be.equal(10);
expect(currentSettings.liveCatchup.maxDrift).to.be.NaN;
expect(currentSettings.liveCatchup.playbackRate).to.be.NaN;
expect(currentSettings.minBitrate).to.be.empty;
expect(currentSettings.maxBitrate).to.be.empty;
expect(currentSettings.initialBitrate).to.be.empty;
});

it('Should not update the latency if target latency is equal to 0', () => {
dummyManifestInfo.serviceDescriptions[0].latency.target = 0;
delete dummyManifestInfo.serviceDescriptions[0].playbackRate;
Expand Down

0 comments on commit 81e506f

Please sign in to comment.