Skip to content

Commit

Permalink
feat: Create segmentIndex when there is only one variant (#7868)
Browse files Browse the repository at this point in the history
Related to #6383
  • Loading branch information
avelad authored Jan 10, 2025
1 parent 11afdc8 commit 3a85217
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 19 deletions.
13 changes: 0 additions & 13 deletions lib/hls/hls_parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -1061,19 +1061,6 @@ shaka.hls.HlsParser = class {
}

this.playerInterface_.makeTextStreamsForClosedCaptions(this.manifest_);

if (variants.length == 1) {
const createSegmentIndexPromises = [];
const variant = variants[0];
for (const stream of [variant.video, variant.audio]) {
if (stream && !stream.segmentIndex) {
createSegmentIndexPromises.push(stream.createSegmentIndex());
}
}
if (createSegmentIndexPromises.length > 0) {
await Promise.all(createSegmentIndexPromises);
}
}
}

/**
Expand Down
17 changes: 16 additions & 1 deletion lib/media/preload_manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,19 @@ shaka.media.PreloadManager = class extends shaka.util.FakeEventTarget {
if (!this.manifest_) {
this.manifest_ = await this.parser_.start(
this.assetUri_, this.manifestPlayerInterface_);

if (this.manifest_.variants.length == 1) {
const createSegmentIndexPromises = [];
const variant = this.manifest_.variants[0];
for (const stream of [variant.video, variant.audio]) {
if (stream && !stream.segmentIndex) {
createSegmentIndexPromises.push(stream.createSegmentIndex());
}
}
if (createSegmentIndexPromises.length > 0) {
await Promise.all(createSegmentIndexPromises);
}
}
}

this.manifestPromise_.resolve();
Expand Down Expand Up @@ -698,7 +711,9 @@ shaka.media.PreloadManager = class extends shaka.util.FakeEventTarget {
this.segmentPrefetchById_.set(stream.id, prefetch);

// Start prefetching a bit.
await stream.createSegmentIndex();
if (!stream.segmentIndex) {
await stream.createSegmentIndex();
}
const startTime = this.startTime_ || 0;
const prefetchSegmentIterator =
stream.segmentIndex.getIteratorForTime(startTime);
Expand Down
4 changes: 3 additions & 1 deletion lib/player.js
Original file line number Diff line number Diff line change
Expand Up @@ -6716,7 +6716,9 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
return null;
}

await stream.createSegmentIndex();
if (!stream.segmentIndex) {
await stream.createSegmentIndex();
}
const iter = stream.segmentIndex.getIteratorForTime(time);
const ref = iter ? iter.next().value : null;
if (!ref) {
Expand Down
9 changes: 5 additions & 4 deletions test/hls/hls_parser_unit.js
Original file line number Diff line number Diff line change
Expand Up @@ -3703,7 +3703,8 @@ describe('HlsParser', () => {
shaka.util.Error.Severity.CRITICAL,
shaka.util.Error.Category.MANIFEST,
shaka.util.Error.Code.NO_WEB_CRYPTO_API));
await expectAsync(parser.start('test:/master', playerInterface))
const actual = await parser.start('test:/master', playerInterface);
await expectAsync(loadAllStreamsFor(actual))
.toBeRejectedWith(expectedError);
} finally {
Object.defineProperty(window, 'crypto', {
Expand Down Expand Up @@ -4575,7 +4576,7 @@ describe('HlsParser', () => {
shaka.util.Error.Category.MANIFEST,
Code.HLS_MSE_ENCRYPTED_MP2T_NOT_SUPPORTED);

await verifyError(master, media, error);
await verifyError(master, media, error, true);
});

it('if SAMPLE-AES encryption with MSE and mp2t content', async () => {
Expand All @@ -4602,7 +4603,7 @@ describe('HlsParser', () => {
shaka.util.Error.Category.MANIFEST,
Code.HLS_MSE_ENCRYPTED_MP2T_NOT_SUPPORTED);

await verifyError(master, media, error);
await verifyError(master, media, error, true);
});


Expand All @@ -4619,7 +4620,7 @@ describe('HlsParser', () => {
Code.HLS_REQUIRED_TAG_MISSING,
tagName);

await verifyError(master, media, error);
await verifyError(master, media, error, true);
}

it('EXTINF', async () => {
Expand Down

0 comments on commit 3a85217

Please sign in to comment.