Skip to content

Commit

Permalink
fix(HLS): Prioritize AVERAGE-BANDWIDTH over BANDWIDTH (shaka-project#…
Browse files Browse the repository at this point in the history
…3428)

Related to conversation in shaka-project#3422
  • Loading branch information
Álvaro Velad Galván committed Jun 7, 2021
1 parent 795860f commit 76480f9
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 1 deletion.
3 changes: 2 additions & 1 deletion lib/hls/hls_parser.js
Expand Up @@ -732,7 +732,8 @@ shaka.hls.HlsParser = class {
// Create variants for each variant tag.
const variantsPromises = tags.map(async (tag) => {
const frameRate = tag.getAttributeValue('FRAME-RATE');
const bandwidth = Number(tag.getRequiredAttrValue('BANDWIDTH'));
const bandwidth = Number(tag.getAttributeValue('AVERAGE-BANDWIDTH')) ||
Number(tag.getRequiredAttrValue('BANDWIDTH'));

const resolution = tag.getAttributeValue('RESOLUTION');
const [width, height] = resolution ? resolution.split('x') : [null, null];
Expand Down
40 changes: 40 additions & 0 deletions test/hls/hls_parser_unit.js
Expand Up @@ -209,6 +209,46 @@ describe('HlsParser', () => {
expect(actual).toEqual(manifest);
});

it('prioritize AVERAGE-BANDWIDTH to BANDWIDTH', async () => {
const master = [
'#EXTM3U\n',
'#EXT-X-STREAM-INF:BANDWIDTH=200,CODECS="avc1",',
'RESOLUTION=960x540,FRAME-RATE=60,',
'AVERAGE-BANDWIDTH=100\n',
'video\n',
].join('');

const media = [
'#EXTM3U\n',
'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'main.mp4',
].join('');

const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
manifest.anyTimeline();
manifest.addPartialVariant((variant) => {
variant.bandwidth = 100;
variant.addPartialStream(ContentType.VIDEO, (stream) => {
stream.frameRate = 60;
stream.mime('video/mp4', 'avc1');
stream.size(960, 540);
});
});
});

fakeNetEngine
.setResponseText('test:/master', master)
.setResponseText('test:/video', media)
.setResponseValue('test:/init.mp4', initSegmentData)
.setResponseValue('test:/main.mp4', segmentData);

const actual = await parser.start('test:/master', playerInterface);
expect(actual).toEqual(manifest);
});

it('ignores duplicate CODECS', async () => {
const master = [
'#EXTM3U\n',
Expand Down

0 comments on commit 76480f9

Please sign in to comment.