Skip to content

Commit 3a85217

Browse files
authored
feat: Create segmentIndex when there is only one variant (#7868)
Related to #6383
1 parent 11afdc8 commit 3a85217

File tree

4 files changed

+24
-19
lines changed

4 files changed

+24
-19
lines changed

lib/hls/hls_parser.js

-13
Original file line numberDiff line numberDiff line change
@@ -1061,19 +1061,6 @@ shaka.hls.HlsParser = class {
10611061
}
10621062

10631063
this.playerInterface_.makeTextStreamsForClosedCaptions(this.manifest_);
1064-
1065-
if (variants.length == 1) {
1066-
const createSegmentIndexPromises = [];
1067-
const variant = variants[0];
1068-
for (const stream of [variant.video, variant.audio]) {
1069-
if (stream && !stream.segmentIndex) {
1070-
createSegmentIndexPromises.push(stream.createSegmentIndex());
1071-
}
1072-
}
1073-
if (createSegmentIndexPromises.length > 0) {
1074-
await Promise.all(createSegmentIndexPromises);
1075-
}
1076-
}
10771064
}
10781065

10791066
/**

lib/media/preload_manager.js

+16-1
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,19 @@ shaka.media.PreloadManager = class extends shaka.util.FakeEventTarget {
512512
if (!this.manifest_) {
513513
this.manifest_ = await this.parser_.start(
514514
this.assetUri_, this.manifestPlayerInterface_);
515+
516+
if (this.manifest_.variants.length == 1) {
517+
const createSegmentIndexPromises = [];
518+
const variant = this.manifest_.variants[0];
519+
for (const stream of [variant.video, variant.audio]) {
520+
if (stream && !stream.segmentIndex) {
521+
createSegmentIndexPromises.push(stream.createSegmentIndex());
522+
}
523+
}
524+
if (createSegmentIndexPromises.length > 0) {
525+
await Promise.all(createSegmentIndexPromises);
526+
}
527+
}
515528
}
516529

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

700713
// Start prefetching a bit.
701-
await stream.createSegmentIndex();
714+
if (!stream.segmentIndex) {
715+
await stream.createSegmentIndex();
716+
}
702717
const startTime = this.startTime_ || 0;
703718
const prefetchSegmentIterator =
704719
stream.segmentIndex.getIteratorForTime(startTime);

lib/player.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -6716,7 +6716,9 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
67166716
return null;
67176717
}
67186718

6719-
await stream.createSegmentIndex();
6719+
if (!stream.segmentIndex) {
6720+
await stream.createSegmentIndex();
6721+
}
67206722
const iter = stream.segmentIndex.getIteratorForTime(time);
67216723
const ref = iter ? iter.next().value : null;
67226724
if (!ref) {

test/hls/hls_parser_unit.js

+5-4
Original file line numberDiff line numberDiff line change
@@ -3703,7 +3703,8 @@ describe('HlsParser', () => {
37033703
shaka.util.Error.Severity.CRITICAL,
37043704
shaka.util.Error.Category.MANIFEST,
37053705
shaka.util.Error.Code.NO_WEB_CRYPTO_API));
3706-
await expectAsync(parser.start('test:/master', playerInterface))
3706+
const actual = await parser.start('test:/master', playerInterface);
3707+
await expectAsync(loadAllStreamsFor(actual))
37073708
.toBeRejectedWith(expectedError);
37083709
} finally {
37093710
Object.defineProperty(window, 'crypto', {
@@ -4575,7 +4576,7 @@ describe('HlsParser', () => {
45754576
shaka.util.Error.Category.MANIFEST,
45764577
Code.HLS_MSE_ENCRYPTED_MP2T_NOT_SUPPORTED);
45774578

4578-
await verifyError(master, media, error);
4579+
await verifyError(master, media, error, true);
45794580
});
45804581

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

4605-
await verifyError(master, media, error);
4606+
await verifyError(master, media, error, true);
46064607
});
46074608

46084609

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

4622-
await verifyError(master, media, error);
4623+
await verifyError(master, media, error, true);
46234624
}
46244625

46254626
it('EXTINF', async () => {

0 commit comments

Comments
 (0)