Skip to content

Commit

Permalink
feat: Add a new setting to allow remove based on channels count (#6600)
Browse files Browse the repository at this point in the history
Close #6491
  • Loading branch information
avelad committed May 14, 2024
1 parent ceb3985 commit 0206e5a
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 3 deletions.
4 changes: 3 additions & 1 deletion demo/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,9 @@ shakaDemo.Config = class {
.addNumberInput_('Min Framerate', prefix + 'minFrameRate')
.addNumberInput_('Max Framerate', prefix + 'maxFrameRate')
.addNumberInput_('Min Bandwidth', prefix + 'minBandwidth')
.addNumberInput_('Max Bandwidth', prefix + 'maxBandwidth');
.addNumberInput_('Max Bandwidth', prefix + 'maxBandwidth')
.addNumberInput_('Min Channels Count', prefix + 'minChannelsCount')
.addNumberInput_('Max Channels Count', prefix + 'maxChannelsCount');
}

/**
Expand Down
10 changes: 9 additions & 1 deletion externs/shaka/player.js
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,10 @@ shaka.extern.TrackList;
* maxFrameRate: number,
*
* minBandwidth: number,
* maxBandwidth: number
* maxBandwidth: number,
*
* minChannelsCount: number,
* maxChannelsCount: number
* }}
*
* @description
Expand Down Expand Up @@ -429,6 +432,11 @@ shaka.extern.TrackList;
* The minimum bandwidth of a variant track, in bit/sec.
* @property {number} maxBandwidth
* The maximum bandwidth of a variant track, in bit/sec.
*
* @property {number} minChannelsCount
* The minimum channels count of a variant track.
* @property {number} maxChannelsCount
* The maximum channels count of a variant track.
* @exportDoc
*/
shaka.extern.Restrictions;
Expand Down
4 changes: 4 additions & 0 deletions lib/util/player_configuration.js
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,8 @@ shaka.util.PlayerConfiguration = class {
maxFrameRate: Infinity,
minBandwidth: 0,
maxBandwidth: Infinity,
minChannelsCount: 0,
maxChannelsCount: Infinity,
},
advanced: {
minTotalBytes: 128e3,
Expand Down Expand Up @@ -426,6 +428,8 @@ shaka.util.PlayerConfiguration = class {
maxFrameRate: Infinity,
minBandwidth: 0,
maxBandwidth: Infinity,
minChannelsCount: 0,
maxChannelsCount: Infinity,
},
playRangeStart: 0,
playRangeEnd: Infinity,
Expand Down
12 changes: 11 additions & 1 deletion lib/util/stream_utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ shaka.util.StreamUtils = class {
}
}

// |variant.frameRate| can be undefined, which breaks
// |variant.video.frameRate| can be undefined, which breaks
// the math, so make sure they are there first.
if (variant && variant.video && variant.video.frameRate) {
if (!inRange(variant.video.frameRate,
Expand All @@ -299,6 +299,16 @@ shaka.util.StreamUtils = class {
}
}

// |variant.audio.channelsCount| can be undefined, which breaks
// the math, so make sure they are there first.
if (variant && variant.audio && variant.audio.channelsCount) {
if (!inRange(variant.audio.channelsCount,
restrictions.minChannelsCount,
restrictions.maxChannelsCount)) {
return false;
}
}

if (!inRange(variant.bandwidth,
restrictions.minBandwidth,
restrictions.maxBandwidth)) {
Expand Down
32 changes: 32 additions & 0 deletions test/player_unit.js
Original file line number Diff line number Diff line change
Expand Up @@ -3616,6 +3616,38 @@ describe('Player', () => {
expect(tracks[0].id).toBe(1);
});

it('removes based on channelsCount', async () => {
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
manifest.addVariant(0, (variant) => {
variant.addAudio(1, (stream) => {
stream.channelsCount = 1;
});
});

manifest.addVariant(1, (variant) => {
variant.addAudio(2, (stream) => {
stream.channelsCount = 2;
});
});

manifest.addVariant(2, (variant) => {
variant.addAudio(3, (stream) => {
stream.channelsCount = 6;
});
});
});

await player.load(fakeManifestUri, 0, fakeMimeType);
expect(player.getVariantTracks().length).toBe(3);

player.configure({restrictions:
{minChannelsCount: 2, maxChannelsCount: 4}});

const tracks = player.getVariantTracks();
expect(tracks.length).toBe(1);
expect(tracks[0].id).toBe(1);
});

it('removes the whole variant if one stream is restricted', async () => {
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
manifest.addVariant(0, (variant) => {
Expand Down

0 comments on commit 0206e5a

Please sign in to comment.