Skip to content

Commit a50bb7e

Browse files
dzianis-dashkevichrobwalch
authored andcommitted
add loader context types
1 parent 12802cd commit a50bb7e

18 files changed

Lines changed: 122 additions & 75 deletions

api-extractor/report/hls.js.api.md

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1994,6 +1994,8 @@ export interface FragmentLoaderContext extends LoaderContext {
19941994
part: Part | null;
19951995
// (undocumented)
19961996
resetIV?: boolean;
1997+
// (undocumented)
1998+
type: LoaderContextType.MEDIA_FRAGMENT;
19971999
}
19982000

19992001
// Warning: (ae-missing-release-tag) "FragmentLoadProgressCallback" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
@@ -3113,6 +3115,8 @@ export interface KeyLoaderContext extends LoaderContext {
31133115
frag: Fragment;
31143116
// (undocumented)
31153117
keyInfo: KeyLoaderInfo;
3118+
// (undocumented)
3119+
type: LoaderContextType.KEY;
31163120
}
31173121

31183122
// Warning: (ae-missing-release-tag) "KeyLoaderInfo" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
@@ -3772,9 +3776,35 @@ export interface LoaderContext {
37723776
// (undocumented)
37733777
responseType: string;
37743778
// (undocumented)
3779+
type: LoaderContextType;
3780+
// (undocumented)
37753781
url: string;
37763782
}
37773783

3784+
// Warning: (ae-missing-release-tag) "LoaderContextType" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
3785+
//
3786+
// @public (undocumented)
3787+
export const enum LoaderContextType {
3788+
// (undocumented)
3789+
AUDIO_TRACK = "audioTrack",
3790+
// (undocumented)
3791+
INTERSTITIAL_ASSET_LIST = "interstitial-asset-list",
3792+
// (undocumented)
3793+
KEY = "key",
3794+
// (undocumented)
3795+
LEVEL = "level",
3796+
// (undocumented)
3797+
MANIFEST = "manifest",
3798+
// (undocumented)
3799+
MEDIA_FRAGMENT = "media-fragment",
3800+
// (undocumented)
3801+
SERVER_CERTIFICATE = "server-certificate",
3802+
// (undocumented)
3803+
STEERING_MANIFEST = "steering-manifest",
3804+
// (undocumented)
3805+
SUBTITLE_TRACK = "subtitleTrack"
3806+
}
3807+
37783808
// Warning: (ae-missing-release-tag) "LoaderOnAbort" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
37793809
//
37803810
// @public (undocumented)
@@ -4406,16 +4436,7 @@ export type PlayheadTimes = {
44064436
// Warning: (ae-missing-release-tag) "PlaylistContextType" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
44074437
//
44084438
// @public (undocumented)
4409-
export const enum PlaylistContextType {
4410-
// (undocumented)
4411-
AUDIO_TRACK = "audioTrack",
4412-
// (undocumented)
4413-
LEVEL = "level",
4414-
// (undocumented)
4415-
MANIFEST = "manifest",
4416-
// (undocumented)
4417-
SUBTITLE_TRACK = "subtitleTrack"
4418-
}
4439+
export type PlaylistContextType = LoaderContextType.MANIFEST | LoaderContextType.LEVEL | LoaderContextType.AUDIO_TRACK | LoaderContextType.SUBTITLE_TRACK;
44194440

44204441
// Warning: (ae-missing-release-tag) "PlaylistControllerConfig" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
44214442
//

src/controller/audio-stream-controller.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { ErrorDetails } from '../errors';
77
import { Events } from '../events';
88
import { ElementaryStreamTypes, isMediaFragment } from '../loader/fragment';
99
import { Level } from '../types/level';
10-
import { PlaylistContextType, PlaylistLevelType } from '../types/loader';
10+
import { LoaderContextType, PlaylistLevelType } from '../types/loader';
1111
import { ChunkMetadata } from '../types/transmuxer';
1212
import { alignStream } from '../utils/discontinuities';
1313
import {
@@ -817,7 +817,7 @@ class AudioStreamController
817817
if (
818818
!data.levelRetry &&
819819
this.state === State.WAITING_TRACK &&
820-
data.context?.type === PlaylistContextType.AUDIO_TRACK
820+
data.context?.type === LoaderContextType.AUDIO_TRACK
821821
) {
822822
this.state = State.IDLE;
823823
}

src/controller/audio-track-controller.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import BasePlaylistController from './base-playlist-controller';
22
import { ErrorDetails, ErrorTypes } from '../errors';
33
import { Events } from '../events';
4-
import { PlaylistContextType } from '../types/loader';
4+
import { LoaderContextType } from '../types/loader';
55
import { mediaAttributesIdentical } from '../utils/media-option-attributes';
66
import {
77
audioMatchPredicate,
@@ -221,7 +221,7 @@ class AudioTrackController extends BasePlaylistController {
221221
}
222222

223223
if (
224-
data.context.type === PlaylistContextType.AUDIO_TRACK &&
224+
data.context.type === LoaderContextType.AUDIO_TRACK &&
225225
data.context.id === this.trackId &&
226226
inGroupOrNone(data.context.groupId, this.groupIds)
227227
) {

src/controller/content-steering-controller.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ import {
77
type LoaderCallbacks,
88
type LoaderConfiguration,
99
type LoaderContext,
10+
LoaderContextType,
1011
type LoaderResponse,
1112
type LoaderStats,
12-
PlaylistContextType,
13+
type PlaylistContextType,
1314
} from '../types/loader';
1415
import { AttrList } from '../utils/attr-list';
1516
import { reassignFragmentLevelIndexes } from '../utils/level-helper';
@@ -320,9 +321,9 @@ export default class ContentSteeringController
320321
);
321322
for (let i = 0; i < levels.length; i++) {
322323
if (
323-
(type === PlaylistContextType.AUDIO_TRACK &&
324+
(type === LoaderContextType.AUDIO_TRACK &&
324325
levels[i].hasAudioGroup(groupId)) ||
325-
(type === PlaylistContextType.SUBTITLE_TRACK &&
326+
(type === LoaderContextType.SUBTITLE_TRACK &&
326327
levels[i].hasSubtitleGroup(groupId))
327328
) {
328329
return levels[i].pathwayId;
@@ -437,6 +438,7 @@ export default class ContentSteeringController
437438
url.searchParams.set('_HLS_throughput', '' + throughput);
438439
}
439440
const context: LoaderContext = {
441+
type: LoaderContextType.STEERING_MANIFEST,
440442
responseType: 'json',
441443
url: url.href,
442444
};

src/controller/eme-controller.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@ import {
77
isMediaFragment,
88
} from '../loader/fragment';
99
import { LevelKey } from '../loader/level-key';
10+
import {
11+
type Loader,
12+
type LoaderCallbacks,
13+
type LoaderConfiguration,
14+
type LoaderContext,
15+
LoaderContextType,
16+
type PlaylistLevelType,
17+
} from '../types/loader';
1018
import { arrayValuesMatch } from '../utils/arrays';
1119
import {
1220
addEventListener,
@@ -39,13 +47,6 @@ import type {
3947
ManifestLoadedData,
4048
MediaAttachedData,
4149
} from '../types/events';
42-
import type {
43-
Loader,
44-
LoaderCallbacks,
45-
LoaderConfiguration,
46-
LoaderContext,
47-
PlaylistLevelType,
48-
} from '../types/loader';
4950

5051
type KeySystemAccessPromises = {
5152
keySystemAccess: Promise<MediaKeySystemAccess>;
@@ -1226,6 +1227,7 @@ class EMEController extends Logger implements ComponentAPI {
12261227
this.log(`Fetching server certificate for "${keySystem}"`);
12271228
return new Promise((resolve, reject) => {
12281229
const loaderContext: LoaderContext = {
1230+
type: LoaderContextType.SERVER_CERTIFICATE,
12291231
responseType: 'arraybuffer',
12301232
url,
12311233
};

src/controller/error-controller.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { findFragmentByPTS } from './fragment-finders';
22
import { ErrorDetails, ErrorTypes } from '../errors';
33
import { Events } from '../events';
44
import { HdcpLevels } from '../types/level';
5-
import { PlaylistContextType, PlaylistLevelType } from '../types/loader';
5+
import { LoaderContextType, PlaylistLevelType } from '../types/loader';
66
import { getCodecsForMimeType } from '../utils/codecs';
77
import {
88
getRetryConfig,
@@ -203,9 +203,9 @@ export default class ErrorController
203203
const level = hls.loadLevelObj;
204204
if (
205205
level &&
206-
((context.type === PlaylistContextType.AUDIO_TRACK &&
206+
((context.type === LoaderContextType.AUDIO_TRACK &&
207207
level.hasAudioGroup(context.groupId)) ||
208-
(context.type === PlaylistContextType.SUBTITLE_TRACK &&
208+
(context.type === LoaderContextType.SUBTITLE_TRACK &&
209209
level.hasSubtitleGroup(context.groupId)))
210210
) {
211211
// Perform Pathway switch or Redundant failover if possible for fastest recovery
@@ -419,9 +419,9 @@ export default class ErrorController
419419
}
420420
}
421421
} else if (
422-
(playlistErrorType === PlaylistContextType.AUDIO_TRACK &&
422+
(playlistErrorType === LoaderContextType.AUDIO_TRACK &&
423423
levelCandidate.hasAudioGroup(playlistErrorGroupId)) ||
424-
(playlistErrorType === PlaylistContextType.SUBTITLE_TRACK &&
424+
(playlistErrorType === LoaderContextType.SUBTITLE_TRACK &&
425425
levelCandidate.hasSubtitleGroup(playlistErrorGroupId))
426426
) {
427427
// For audio/subs playlist errors find another group ID or fallthrough to redundant fail-over

src/controller/level-controller.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import BasePlaylistController from './base-playlist-controller';
22
import { ErrorDetails, ErrorTypes } from '../errors';
33
import { Events } from '../events';
44
import { isVideoRange, Level, VideoRangeValues } from '../types/level';
5-
import { PlaylistContextType, PlaylistLevelType } from '../types/loader';
5+
import { LoaderContextType, PlaylistLevelType } from '../types/loader';
66
import {
77
areCodecsMediaSourceSupported,
88
codecsSetSelectionPreferenceValue,
@@ -578,7 +578,7 @@ export default class LevelController extends BasePlaylistController {
578578
}
579579

580580
if (
581-
data.context.type === PlaylistContextType.LEVEL &&
581+
data.context.type === LoaderContextType.LEVEL &&
582582
data.context.level === this.level
583583
) {
584584
this.checkRetry(data);

src/controller/stream-controller.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { ErrorDetails } from '../errors';
77
import { Events } from '../events';
88
import { changeTypeSupported } from '../is-supported';
99
import { ElementaryStreamTypes, isMediaFragment } from '../loader/fragment';
10-
import { PlaylistContextType, PlaylistLevelType } from '../types/loader';
10+
import { LoaderContextType, PlaylistLevelType } from '../types/loader';
1111
import { ChunkMetadata } from '../types/transmuxer';
1212
import { BufferHelper } from '../utils/buffer-helper';
1313
import { pickMostCompleteCodecName } from '../utils/codecs';
@@ -986,7 +986,7 @@ export default class StreamController
986986
if (
987987
!data.levelRetry &&
988988
this.state === State.WAITING_LEVEL &&
989-
data.context?.type === PlaylistContextType.LEVEL
989+
data.context?.type === LoaderContextType.LEVEL
990990
) {
991991
this.state = State.IDLE;
992992
}

src/controller/subtitle-track-controller.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import BasePlaylistController from './base-playlist-controller';
22
import { Events } from '../events';
3-
import { PlaylistContextType } from '../types/loader';
3+
import { LoaderContextType } from '../types/loader';
44
import { IMSC1_CODEC } from '../utils/imsc1-ttml-parser';
55
import { mediaAttributesIdentical } from '../utils/media-option-attributes';
66
import {
@@ -385,7 +385,7 @@ class SubtitleTrackController extends BasePlaylistController {
385385
}
386386

387387
if (
388-
data.context.type === PlaylistContextType.SUBTITLE_TRACK &&
388+
data.context.type === LoaderContextType.SUBTITLE_TRACK &&
389389
data.context.id === this.trackId &&
390390
inGroupOrNone(data.context.groupId, this.groupIds)
391391
) {

src/exports-named.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export { LevelKey } from './loader/level-key';
5858
export { LevelDetails } from './loader/level-details';
5959
export { MetadataSchema } from './types/demuxer';
6060
export { HlsSkip, HlsUrlParameters } from './types/level';
61-
export { PlaylistLevelType } from './types/loader';
61+
export { LoaderContextType, PlaylistLevelType } from './types/loader';
6262
export { ChunkMetadata } from './types/transmuxer';
6363
export { BaseSegment, Fragment, Part } from './loader/fragment';
6464
export {

0 commit comments

Comments
 (0)