@gcorevideo/player 2.28.28 → 2.28.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core.js +128 -62
- package/dist/index.css +300 -300
- package/dist/index.embed.js +212 -137
- package/dist/index.js +184 -116
- package/lib/playback/BasePlayback.d.ts.map +1 -1
- package/lib/playback/dash-playback/DashPlayback.d.ts +22 -3
- package/lib/playback/dash-playback/DashPlayback.d.ts.map +1 -1
- package/lib/playback/dash-playback/DashPlayback.js +50 -5
- package/lib/playback/hls-playback/HlsPlayback.d.ts +32 -6
- package/lib/playback/hls-playback/HlsPlayback.d.ts.map +1 -1
- package/lib/playback/hls-playback/HlsPlayback.js +78 -57
- package/lib/playback.types.d.ts +6 -0
- package/lib/playback.types.d.ts.map +1 -1
- package/lib/plugins/subtitles/ClosedCaptions.d.ts +5 -0
- package/lib/plugins/subtitles/ClosedCaptions.d.ts.map +1 -1
- package/lib/plugins/subtitles/ClosedCaptions.js +56 -54
- package/lib/testUtils.d.ts +2 -0
- package/lib/testUtils.d.ts.map +1 -1
- package/lib/testUtils.js +2 -0
- package/package.json +1 -1
- package/src/playback/BasePlayback.ts +2 -1
- package/src/playback/dash-playback/DashPlayback.ts +68 -13
- package/src/playback/hls-playback/HlsPlayback.ts +89 -80
- package/src/playback.types.ts +7 -0
- package/src/plugins/multi-camera/MultiCamera.ts +5 -5
- package/src/plugins/subtitles/ClosedCaptions.ts +64 -57
- package/src/plugins/subtitles/__tests__/ClosedCaptions.test.ts +195 -196
- package/src/plugins/subtitles/__tests__/__snapshots__/ClosedCaptions.test.ts.snap +13 -1
- package/src/testUtils.ts +2 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashPlayback.d.ts","sourceRoot":"","sources":["../../../src/playback/dash-playback/DashPlayback.ts"],"names":[],"mappings":"AAKA,OAAO,EAAe,QAAQ,EAAyB,MAAM,cAAc,CAAA;AAG3E,OAAO,
|
|
1
|
+
{"version":3,"file":"DashPlayback.d.ts","sourceRoot":"","sources":["../../../src/playback/dash-playback/DashPlayback.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,6 +49,8 @@ export default class DashPlayback extends BasePlayback {
|
|
|
49
49
|
startChangeQuality = false;
|
|
50
50
|
manifestInfo = null;
|
|
51
51
|
_timeUpdateTimer = null;
|
|
52
|
+
oncueenter = null;
|
|
53
|
+
oncueexit = null;
|
|
52
54
|
get name() {
|
|
53
55
|
return 'dash';
|
|
54
56
|
}
|
|
@@ -91,6 +93,7 @@ export default class DashPlayback extends BasePlayback {
|
|
|
91
93
|
}
|
|
92
94
|
}
|
|
93
95
|
get _startTime() {
|
|
96
|
+
// TODO review
|
|
94
97
|
if (this._playbackType === Playback.LIVE &&
|
|
95
98
|
this._playlistType !== 'EVENT') {
|
|
96
99
|
return this._extrapolatedStartTime;
|
|
@@ -145,12 +148,12 @@ export default class DashPlayback extends BasePlayback {
|
|
|
145
148
|
streaming: {
|
|
146
149
|
text: {
|
|
147
150
|
defaultEnabled: false,
|
|
151
|
+
dispatchForManualRendering: true,
|
|
148
152
|
},
|
|
149
153
|
},
|
|
150
154
|
}, this.options.dash);
|
|
151
155
|
this._dash.updateSettings(settings);
|
|
152
156
|
}
|
|
153
|
-
assert.ok(this.el instanceof HTMLMediaElement, 'el must be an HTMLMediaElement');
|
|
154
157
|
this._dash.attachView(this.el);
|
|
155
158
|
this._dash.setAutoPlay(false);
|
|
156
159
|
this._dash.attachSource(this.options.src);
|
|
@@ -194,6 +197,19 @@ export default class DashPlayback extends BasePlayback {
|
|
|
194
197
|
this.trigger(Events.PLAYBACK_AUDIO_CHANGED, toClapprTrack(e.newMediaInfo));
|
|
195
198
|
}
|
|
196
199
|
});
|
|
200
|
+
this._dash.on(MediaPlayer.events.CUE_ENTER, (e) => {
|
|
201
|
+
this.oncueenter?.({
|
|
202
|
+
end: e.end,
|
|
203
|
+
id: e.id,
|
|
204
|
+
start: e.start,
|
|
205
|
+
text: e.text,
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
this._dash.on(MediaPlayer.events.CUE_EXIT, (e) => {
|
|
209
|
+
this.oncueexit?.({
|
|
210
|
+
id: e.id,
|
|
211
|
+
});
|
|
212
|
+
});
|
|
197
213
|
}
|
|
198
214
|
render() {
|
|
199
215
|
this._ready();
|
|
@@ -282,8 +298,7 @@ export default class DashPlayback extends BasePlayback {
|
|
|
282
298
|
this.trigger(Events.PLAYBACK_SETTINGSUPDATE);
|
|
283
299
|
}
|
|
284
300
|
_onPlaybackError = (event) => {
|
|
285
|
-
|
|
286
|
-
trace(`${T} _onPlaybackError`, { event });
|
|
301
|
+
trace(`${T} _onPlaybackError`, { type: event.type, code: event.error.code, message: event.error.message });
|
|
287
302
|
};
|
|
288
303
|
_onDASHJSSError = (event) => {
|
|
289
304
|
this._stopTimeUpdateTimer();
|
|
@@ -402,7 +417,14 @@ export default class DashPlayback extends BasePlayback {
|
|
|
402
417
|
this._dash.off(MediaPlayer.events.ERROR, this._onDASHJSSError);
|
|
403
418
|
this._dash.off(MediaPlayer.events.PLAYBACK_ERROR, this._onPlaybackError);
|
|
404
419
|
this._dash.off(MediaPlayer.events.MANIFEST_LOADED, this.getDuration);
|
|
420
|
+
const tracks = this._dash.getTracksFor('text');
|
|
421
|
+
tracks.forEach(track => {
|
|
422
|
+
if (track.id) {
|
|
423
|
+
this._dash.removeExternalSubtitleById(track.id);
|
|
424
|
+
}
|
|
425
|
+
});
|
|
405
426
|
this._dash.reset();
|
|
427
|
+
this._dash.destroy();
|
|
406
428
|
this._dash = null;
|
|
407
429
|
}
|
|
408
430
|
}
|
|
@@ -420,8 +442,6 @@ export default class DashPlayback extends BasePlayback {
|
|
|
420
442
|
}
|
|
421
443
|
}
|
|
422
444
|
_fillLevels(levels) {
|
|
423
|
-
// TOOD check that levels[i].index === i
|
|
424
|
-
trace(`${T} _fillLevels`, { levels });
|
|
425
445
|
this._levels = levels.map((level) => {
|
|
426
446
|
return {
|
|
427
447
|
level: level.index,
|
|
@@ -498,6 +518,31 @@ export default class DashPlayback extends BasePlayback {
|
|
|
498
518
|
super._handleTextTrackChange();
|
|
499
519
|
this._dash?.setTextTrack(this.closedCaptionsTrackId);
|
|
500
520
|
}
|
|
521
|
+
setTextTrack(id) {
|
|
522
|
+
this._dash?.setTextTrack(id);
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* @override
|
|
526
|
+
*/
|
|
527
|
+
get closedCaptionsTracks() {
|
|
528
|
+
const tt = this.getTextTracks();
|
|
529
|
+
return tt;
|
|
530
|
+
}
|
|
531
|
+
getTextTracks() {
|
|
532
|
+
return this._dash?.getTracksFor('text').map((t, index) => ({
|
|
533
|
+
id: index,
|
|
534
|
+
name: getTextTrackLabel(t) || "",
|
|
535
|
+
track: {
|
|
536
|
+
id: index,
|
|
537
|
+
label: getTextTrackLabel(t) || "",
|
|
538
|
+
language: t.lang,
|
|
539
|
+
mode: "hidden",
|
|
540
|
+
},
|
|
541
|
+
})) || [];
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
function getTextTrackLabel(t) {
|
|
545
|
+
return t.labels.find((l) => !l.lang || l.lang === t.lang)?.text;
|
|
501
546
|
}
|
|
502
547
|
DashPlayback.canPlay = function (resource, mimeType) {
|
|
503
548
|
if (!isDashSource(resource, mimeType)) {
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import HLSJS, { Events as HlsEvents, type
|
|
2
|
-
import { QualityLevel } from '../../playback.types.js';
|
|
1
|
+
import HLSJS, { Events as HlsEvents, type LevelSwitchingData } from 'hls.js';
|
|
2
|
+
import { QualityLevel, VTTCueInfo } from '../../playback.types.js';
|
|
3
3
|
import { PlaybackType } from '../../types.js';
|
|
4
4
|
import { BasePlayback } from '../BasePlayback.js';
|
|
5
5
|
import { AudioTrack } from '@clappr/core/types/base/playback/playback.js';
|
|
6
6
|
export default class HlsPlayback extends BasePlayback {
|
|
7
|
-
private _ccIsSetup;
|
|
8
7
|
private _ccTracksUpdated;
|
|
9
8
|
private _currentFragment;
|
|
10
9
|
private _currentLevel;
|
|
@@ -28,6 +27,12 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
28
27
|
private _recoveredDecodingError;
|
|
29
28
|
private _segmentTargetDuration;
|
|
30
29
|
private _timeUpdateTimer;
|
|
30
|
+
oncueenter: ((e: VTTCueInfo) => void) | null;
|
|
31
|
+
oncueexit: ((e: {
|
|
32
|
+
id: string;
|
|
33
|
+
}) => void) | null;
|
|
34
|
+
private cues;
|
|
35
|
+
private currentCueId;
|
|
31
36
|
/**
|
|
32
37
|
* @internal
|
|
33
38
|
*/
|
|
@@ -66,7 +71,6 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
66
71
|
private _listenHLSEvents;
|
|
67
72
|
private bindCustomListeners;
|
|
68
73
|
private unbindCustomListeners;
|
|
69
|
-
private _onFragmentParsingMetadata;
|
|
70
74
|
protected render(): this;
|
|
71
75
|
protected _ready(): void;
|
|
72
76
|
private _recover;
|
|
@@ -83,10 +87,12 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
83
87
|
private _updateDvr;
|
|
84
88
|
private _updateSettings;
|
|
85
89
|
private _onHLSJSError;
|
|
90
|
+
private reload;
|
|
86
91
|
private _keyIsDenied;
|
|
87
92
|
_onTimeUpdate(): void;
|
|
88
93
|
_onDurationChange(): void;
|
|
89
94
|
_onProgress(): void;
|
|
95
|
+
private triggerCues;
|
|
90
96
|
load(url: string): void;
|
|
91
97
|
play(): void;
|
|
92
98
|
pause(): void;
|
|
@@ -95,8 +101,6 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
95
101
|
private _updatePlaybackType;
|
|
96
102
|
private _fillLevels;
|
|
97
103
|
private _onLevelUpdated;
|
|
98
|
-
_onFragmentChanged(evt: HlsEvents.FRAG_CHANGED, data: FragChangedData): void;
|
|
99
|
-
_onFragmentLoaded(evt: HlsEvents.FRAG_LOADED, data: FragLoadedData): void;
|
|
100
104
|
_onLevelSwitch(evt: HlsEvents.LEVEL_SWITCHING, data: LevelSwitchingData): void;
|
|
101
105
|
_onLevelSwitched(evt: HlsEvents.LEVEL_SWITCHED, data: {
|
|
102
106
|
level: number;
|
|
@@ -110,5 +114,27 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
110
114
|
switchAudioTrack(id: string): void;
|
|
111
115
|
private _onAudioTracksUpdated;
|
|
112
116
|
private _onAudioTrackSwitched;
|
|
117
|
+
setTextTrack(id: number): void;
|
|
118
|
+
/**
|
|
119
|
+
* @override
|
|
120
|
+
*/
|
|
121
|
+
get closedCaptionsTracks(): {
|
|
122
|
+
id: number;
|
|
123
|
+
name: string;
|
|
124
|
+
track: {
|
|
125
|
+
id: number;
|
|
126
|
+
label: string;
|
|
127
|
+
language: string | undefined;
|
|
128
|
+
};
|
|
129
|
+
}[];
|
|
130
|
+
getTextTracks(): {
|
|
131
|
+
id: number;
|
|
132
|
+
name: string;
|
|
133
|
+
track: {
|
|
134
|
+
id: number;
|
|
135
|
+
label: string;
|
|
136
|
+
language: string | undefined;
|
|
137
|
+
};
|
|
138
|
+
}[];
|
|
113
139
|
}
|
|
114
140
|
//# sourceMappingURL=HlsPlayback.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HlsPlayback.d.ts","sourceRoot":"","sources":["../../../src/playback/hls-playback/HlsPlayback.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,EACZ,MAAM,IAAI,SAAS,
|
|
1
|
+
{"version":3,"file":"HlsPlayback.d.ts","sourceRoot":"","sources":["../../../src/playback/hls-playback/HlsPlayback.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { Events, Log, Playback, PlayerError, Utils, $ } from '@clappr/core';
|
|
5
5
|
import { trace } from '@gcorevideo/utils';
|
|
6
6
|
import assert from 'assert';
|
|
7
|
-
import HLSJS, { Events as HlsEvents, } from 'hls.js';
|
|
7
|
+
import HLSJS, { Events as HlsEvents, ErrorDetails, ErrorTypes, } from 'hls.js';
|
|
8
8
|
import { PlaybackErrorCode, } from '../../playback.types.js';
|
|
9
9
|
import { isHlsSource } from '../../utils/mediaSources.js';
|
|
10
10
|
import { BasePlayback } from '../BasePlayback.js';
|
|
@@ -12,11 +12,9 @@ import { CLAPPR_VERSION } from '../../build.js';
|
|
|
12
12
|
const { now } = Utils;
|
|
13
13
|
const AUTO = -1;
|
|
14
14
|
const DEFAULT_RECOVER_ATTEMPTS = 16;
|
|
15
|
-
Events.register('PLAYBACK_FRAGMENT_CHANGED');
|
|
16
15
|
Events.register('PLAYBACK_FRAGMENT_PARSING_METADATA');
|
|
17
16
|
const T = 'playback.hls';
|
|
18
17
|
export default class HlsPlayback extends BasePlayback {
|
|
19
|
-
_ccIsSetup = false;
|
|
20
18
|
_ccTracksUpdated = false;
|
|
21
19
|
_currentFragment = null;
|
|
22
20
|
_currentLevel = null;
|
|
@@ -40,6 +38,10 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
40
38
|
_recoveredDecodingError = false;
|
|
41
39
|
_segmentTargetDuration = null;
|
|
42
40
|
_timeUpdateTimer = null;
|
|
41
|
+
oncueenter = null;
|
|
42
|
+
oncueexit = null;
|
|
43
|
+
cues = []; // TODO check the list size and use BST if needed
|
|
44
|
+
currentCueId = null;
|
|
43
45
|
/**
|
|
44
46
|
* @internal
|
|
45
47
|
*/
|
|
@@ -234,7 +236,7 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
234
236
|
return;
|
|
235
237
|
}
|
|
236
238
|
this._manifestParsed = false;
|
|
237
|
-
this._ccIsSetup = false
|
|
239
|
+
// this._ccIsSetup = false
|
|
238
240
|
this._ccTracksUpdated = false;
|
|
239
241
|
this._setInitialState();
|
|
240
242
|
this._hls.destroy();
|
|
@@ -245,6 +247,7 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
245
247
|
maxBufferLength: 2,
|
|
246
248
|
maxMaxBufferLength: 4,
|
|
247
249
|
autoStartLoad: false,
|
|
250
|
+
renderTextTracksNatively: false,
|
|
248
251
|
}, this.options.playback.hlsjsConfig);
|
|
249
252
|
this._hls = new HLSJS(config);
|
|
250
253
|
}
|
|
@@ -258,7 +261,7 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
258
261
|
if (!this._hls) {
|
|
259
262
|
return;
|
|
260
263
|
}
|
|
261
|
-
this._hls.once(
|
|
264
|
+
this._hls.once(HlsEvents.MEDIA_ATTACHED, () => {
|
|
262
265
|
assert.ok(this._hls, 'HLS.js is not initialized');
|
|
263
266
|
this.options.hlsPlayback.preload && this._hls.loadSource(this.options.src);
|
|
264
267
|
});
|
|
@@ -273,25 +276,29 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
273
276
|
this.el.removeEventListener('playing', onPlaying);
|
|
274
277
|
};
|
|
275
278
|
this.el.addEventListener('playing', onPlaying);
|
|
276
|
-
this._hls.on(
|
|
279
|
+
this._hls.on(HlsEvents.MANIFEST_PARSED, () => {
|
|
277
280
|
this._manifestParsed = true;
|
|
278
|
-
this.
|
|
281
|
+
this.reload();
|
|
279
282
|
});
|
|
280
|
-
this._hls.on(
|
|
283
|
+
this._hls.on(HlsEvents.LEVEL_LOADED, (evt, data) => {
|
|
281
284
|
this._updatePlaybackType(evt, data);
|
|
282
285
|
});
|
|
283
|
-
this._hls.on(
|
|
284
|
-
this._hls.on(
|
|
285
|
-
this._hls.on(
|
|
286
|
-
this._hls.on(
|
|
287
|
-
this._hls.on(HLSJS.Events.FRAG_LOADED, (evt, data) => this._onFragmentLoaded(evt, data));
|
|
288
|
-
this._hls.on(HLSJS.Events.FRAG_PARSING_METADATA, (evt, data) => this._onFragmentParsingMetadata(evt, data));
|
|
289
|
-
this._hls.on(HLSJS.Events.ERROR, (evt, data) => this._onHLSJSError(evt, data));
|
|
290
|
-
// this._hls.on(HLSJS.Events.SUBTITLE_TRACK_LOADED, () =>
|
|
291
|
-
// this._onSubtitleLoaded(),
|
|
292
|
-
// )
|
|
286
|
+
this._hls.on(HlsEvents.LEVEL_UPDATED, (evt, data) => this._onLevelUpdated(evt, data));
|
|
287
|
+
this._hls.on(HlsEvents.LEVEL_SWITCHING, (evt, data) => this._onLevelSwitch(evt, data));
|
|
288
|
+
this._hls.on(HlsEvents.LEVEL_SWITCHED, (evt, data) => this._onLevelSwitched(evt, data));
|
|
289
|
+
this._hls.on(HlsEvents.ERROR, (evt, data) => this._onHLSJSError(evt, data));
|
|
293
290
|
this._hls.on(HlsEvents.AUDIO_TRACKS_UPDATED, (evt, data) => this._onAudioTracksUpdated(evt, data));
|
|
294
291
|
this._hls.on(HlsEvents.AUDIO_TRACK_SWITCHED, (evt, data) => this._onAudioTrackSwitched(evt, data));
|
|
292
|
+
this._hls.on(HlsEvents.CUES_PARSED, (evt, data) => {
|
|
293
|
+
data.cues?.forEach((cue) => {
|
|
294
|
+
this.cues.push({
|
|
295
|
+
id: cue.id,
|
|
296
|
+
start: cue.startTime,
|
|
297
|
+
end: cue.endTime,
|
|
298
|
+
text: cue.text,
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
});
|
|
295
302
|
this.bindCustomListeners();
|
|
296
303
|
}
|
|
297
304
|
bindCustomListeners() {
|
|
@@ -310,13 +317,6 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
310
317
|
requestedEventName && this._hls.off(requestedEventName, item.callback);
|
|
311
318
|
});
|
|
312
319
|
}
|
|
313
|
-
_onFragmentParsingMetadata(evt, data) {
|
|
314
|
-
// @ts-ignore
|
|
315
|
-
this.trigger(Events.Custom.PLAYBACK_FRAGMENT_PARSING_METADATA, {
|
|
316
|
-
evt,
|
|
317
|
-
data,
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
320
|
render() {
|
|
321
321
|
this._ready();
|
|
322
322
|
return super.render();
|
|
@@ -398,6 +398,7 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
398
398
|
this.dvrEnabled && this._updateDvr(time < this.getDuration() - 3);
|
|
399
399
|
time += this._startTime;
|
|
400
400
|
this.el.currentTime = time;
|
|
401
|
+
this.triggerCues();
|
|
401
402
|
}
|
|
402
403
|
seekToLivePoint() {
|
|
403
404
|
this.seek(this.getDuration());
|
|
@@ -446,20 +447,20 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
446
447
|
if (this._recoverAttemptsRemaining > 0) {
|
|
447
448
|
this._recoverAttemptsRemaining -= 1;
|
|
448
449
|
switch (data.type) {
|
|
449
|
-
case
|
|
450
|
+
case ErrorTypes.NETWORK_ERROR:
|
|
450
451
|
switch (data.details) {
|
|
451
452
|
// The following network errors cannot be recovered with HLS.startLoad()
|
|
452
453
|
// For more details, see https://github.com/video-dev/hls.js/blob/master/doc/design.md#error-detection-and-handling
|
|
453
454
|
// For "level load" fatal errors, see https://github.com/video-dev/hls.js/issues/1138
|
|
454
455
|
// TODO test handling of these errors
|
|
455
|
-
case
|
|
456
|
-
case
|
|
457
|
-
case
|
|
456
|
+
case ErrorDetails.MANIFEST_LOAD_ERROR:
|
|
457
|
+
case ErrorDetails.MANIFEST_LOAD_TIMEOUT:
|
|
458
|
+
case ErrorDetails.MANIFEST_PARSING_ERROR:
|
|
458
459
|
// TODO sort out the errors below, perhaps some of them are recoverable
|
|
459
|
-
case
|
|
460
|
-
case
|
|
461
|
-
case
|
|
462
|
-
case
|
|
460
|
+
case ErrorDetails.LEVEL_LOAD_ERROR:
|
|
461
|
+
case ErrorDetails.LEVEL_LOAD_TIMEOUT:
|
|
462
|
+
case ErrorDetails.FRAG_LOAD_ERROR:
|
|
463
|
+
case ErrorDetails.FRAG_LOAD_TIMEOUT:
|
|
463
464
|
Log.error('hlsjs: unrecoverable network fatal error.', {
|
|
464
465
|
evt,
|
|
465
466
|
data,
|
|
@@ -476,11 +477,11 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
476
477
|
details: data.details,
|
|
477
478
|
});
|
|
478
479
|
error.level = PlayerError.Levels.WARN;
|
|
479
|
-
this.
|
|
480
|
+
this.reload();
|
|
480
481
|
break;
|
|
481
482
|
}
|
|
482
483
|
break;
|
|
483
|
-
case
|
|
484
|
+
case ErrorTypes.MEDIA_ERROR:
|
|
484
485
|
Log.warn('hlsjs: trying to recover from media error.', {
|
|
485
486
|
evt,
|
|
486
487
|
data,
|
|
@@ -521,9 +522,14 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
521
522
|
});
|
|
522
523
|
}
|
|
523
524
|
}
|
|
525
|
+
reload() {
|
|
526
|
+
this.cues = [];
|
|
527
|
+
this.currentCueId = null;
|
|
528
|
+
this._hls?.startLoad(-1);
|
|
529
|
+
}
|
|
524
530
|
_keyIsDenied(data) {
|
|
525
|
-
return (data.type ===
|
|
526
|
-
data.details ===
|
|
531
|
+
return (data.type === ErrorTypes.NETWORK_ERROR &&
|
|
532
|
+
data.details === ErrorDetails.KEY_LOAD_ERROR &&
|
|
527
533
|
data.response &&
|
|
528
534
|
data.response.code &&
|
|
529
535
|
data.response.code >= 400);
|
|
@@ -541,6 +547,7 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
541
547
|
}
|
|
542
548
|
this._lastTimeUpdate = update;
|
|
543
549
|
this.trigger(Events.PLAYBACK_TIMEUPDATE, update, this.name);
|
|
550
|
+
this.triggerCues();
|
|
544
551
|
}
|
|
545
552
|
_onDurationChange() {
|
|
546
553
|
const duration = this.getDuration();
|
|
@@ -579,6 +586,20 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
579
586
|
};
|
|
580
587
|
this.trigger(Events.PLAYBACK_PROGRESS, progress, buffered);
|
|
581
588
|
}
|
|
589
|
+
triggerCues() {
|
|
590
|
+
const currentTime = this.getCurrentTime();
|
|
591
|
+
// const cues = Object.values(this.cues)
|
|
592
|
+
// TODO build a search tree
|
|
593
|
+
const cue = this.cues.find((cue) => currentTime >= cue.start && currentTime <= cue.end);
|
|
594
|
+
if (cue) {
|
|
595
|
+
this.currentCueId = cue.id;
|
|
596
|
+
this.oncueenter?.(cue);
|
|
597
|
+
}
|
|
598
|
+
else if (this.currentCueId) {
|
|
599
|
+
this.oncueexit?.({ id: this.currentCueId });
|
|
600
|
+
this.currentCueId = null;
|
|
601
|
+
}
|
|
602
|
+
}
|
|
582
603
|
load(url) {
|
|
583
604
|
this._stopTimeUpdateTimer();
|
|
584
605
|
this.options.src = url;
|
|
@@ -771,26 +792,6 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
771
792
|
durationChanged && this._onDurationChange();
|
|
772
793
|
startTimeChanged && this._onProgress();
|
|
773
794
|
}
|
|
774
|
-
_onFragmentChanged(evt, data) {
|
|
775
|
-
this._currentFragment = data.frag;
|
|
776
|
-
// @ts-ignore
|
|
777
|
-
this.trigger(Events.Custom.PLAYBACK_FRAGMENT_CHANGED, data);
|
|
778
|
-
}
|
|
779
|
-
_onFragmentLoaded(evt, data) {
|
|
780
|
-
this.trigger(Events.PLAYBACK_FRAGMENT_LOADED, data);
|
|
781
|
-
}
|
|
782
|
-
// _onSubtitleLoaded() {
|
|
783
|
-
// trace(`${T} _onSubtitleLoaded`)
|
|
784
|
-
// // This event may be triggered multiple times
|
|
785
|
-
// // Setup CC only once (disable CC by default)
|
|
786
|
-
// if (!this._ccIsSetup) {
|
|
787
|
-
// this.trigger(Events.PLAYBACK_SUBTITLE_AVAILABLE)
|
|
788
|
-
// const trackId =
|
|
789
|
-
// this._playbackType === Playback.LIVE ? -1 : this.closedCaptionsTrackId
|
|
790
|
-
// this.closedCaptionsTrackId = trackId
|
|
791
|
-
// this._ccIsSetup = true
|
|
792
|
-
// }
|
|
793
|
-
// }
|
|
794
795
|
_onLevelSwitch(evt, data) {
|
|
795
796
|
if (!this.levels.length) {
|
|
796
797
|
this._fillLevels();
|
|
@@ -862,6 +863,26 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
862
863
|
const track = this._hls.audioTracks[data.id];
|
|
863
864
|
this.trigger(Events.PLAYBACK_AUDIO_CHANGED, toClapprTrack(track));
|
|
864
865
|
}
|
|
866
|
+
setTextTrack(id) {
|
|
867
|
+
this._hls.subtitleTrack = id;
|
|
868
|
+
}
|
|
869
|
+
/**
|
|
870
|
+
* @override
|
|
871
|
+
*/
|
|
872
|
+
get closedCaptionsTracks() {
|
|
873
|
+
return this.getTextTracks();
|
|
874
|
+
}
|
|
875
|
+
getTextTracks() {
|
|
876
|
+
return this._hls?.subtitleTracks.map((t) => ({
|
|
877
|
+
id: t.id,
|
|
878
|
+
name: t.name,
|
|
879
|
+
track: {
|
|
880
|
+
id: t.id,
|
|
881
|
+
label: t.name,
|
|
882
|
+
language: t.lang,
|
|
883
|
+
},
|
|
884
|
+
})) || [];
|
|
885
|
+
}
|
|
865
886
|
}
|
|
866
887
|
HlsPlayback.canPlay = function (resource, mimeType) {
|
|
867
888
|
if (!isHlsSource(resource, mimeType)) {
|
package/lib/playback.types.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playback.types.d.ts","sourceRoot":"","sources":["../src/playback.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAE9B;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,OAAO,EAAE,SAAS,CAAA;IAClB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAA;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAA;IAChB;;OAEG;IACH,OAAO,EAAE,SAAS,CAAA;IAClB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,CAAA;AAErC;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,oBAAY,iBAAiB;IAC3B;;OAEG;IACH,OAAO,kBAAkB;IACzB;;OAEG;IACH,sBAAsB,6BAA6B;IACnD;;OAEG;IACH,uBAAuB,+BAA+B;CACvD;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;AAElD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,CAAA;AAEnE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,IAAI,EAAE,iBAAiB,CAAA;IACvB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,KAAK,EAAE,UAAU,CAAA;IACjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,KAAK,EAAE,mBAAmB,CAAA;IAE1B;;OAEG;IACH,EAAE,CAAC,EAAE;QACH,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF"}
|
|
1
|
+
{"version":3,"file":"playback.types.d.ts","sourceRoot":"","sources":["../src/playback.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAE9B;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,OAAO,EAAE,SAAS,CAAA;IAClB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAA;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAA;IAChB;;OAEG;IACH,OAAO,EAAE,SAAS,CAAA;IAClB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,CAAA;AAErC;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,oBAAY,iBAAiB;IAC3B;;OAEG;IACH,OAAO,kBAAkB;IACzB;;OAEG;IACH,sBAAsB,6BAA6B;IACnD;;OAEG;IACH,uBAAuB,+BAA+B;CACvD;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;AAElD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,CAAA;AAEnE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,IAAI,EAAE,iBAAiB,CAAA;IACvB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,KAAK,EAAE,UAAU,CAAA;IACjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,KAAK,EAAE,mBAAmB,CAAA;IAE1B;;OAEG;IACH,EAAE,CAAC,EAAE;QACH,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACb,CAAA"}
|
|
@@ -93,6 +93,7 @@ export declare class ClosedCaptions extends UICorePlugin {
|
|
|
93
93
|
bindEvents(): void;
|
|
94
94
|
private onCoreReady;
|
|
95
95
|
private onContainerChanged;
|
|
96
|
+
private onPlaybackReady;
|
|
96
97
|
private onSubtitleAvailable;
|
|
97
98
|
private onSubtitleChanged;
|
|
98
99
|
private activateTrack;
|
|
@@ -131,6 +132,10 @@ export declare class ClosedCaptions extends UICorePlugin {
|
|
|
131
132
|
private clampPopup;
|
|
132
133
|
private mount;
|
|
133
134
|
private get useNativeSubtitles();
|
|
135
|
+
private get currentTracks();
|
|
136
|
+
private get currentTrack();
|
|
137
|
+
private set currentTrack(value);
|
|
138
|
+
private set currentTracks(value);
|
|
134
139
|
private clickaway;
|
|
135
140
|
}
|
|
136
141
|
//# sourceMappingURL=ClosedCaptions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClosedCaptions.d.ts","sourceRoot":"","sources":["../../../src/plugins/subtitles/ClosedCaptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAwB,MAAM,cAAc,CAAA;AAOzE,OAAO,sCAAsC,CAAA;
|
|
1
|
+
{"version":3,"file":"ClosedCaptions.d.ts","sourceRoot":"","sources":["../../../src/plugins/subtitles/ClosedCaptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAwB,MAAM,cAAc,CAAA;AAOzE,OAAO,sCAAsC,CAAA;AAkB7C;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAC3B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,oBAAoB,CAAQ;IAEpC,OAAO,CAAC,MAAM,CAAQ;IAEtB,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,KAAK,CAA6B;IAE1C,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,KAAK,CAA2B;IAExC;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAyB;IAEhE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAuB;IAE3D;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;;MAKlB;IAED,OAAO,KAAK,mBAAmB,GAI9B;IAED,OAAO,CAAC,qBAAqB;IAO7B;;OAEG;IACM,UAAU;IAWnB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,kBAAkB;IAiD1B,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,aAAa;IAmCrB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,IAAI;IAYJ;;OAEG;IACH,IAAI;IAiBJ,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACM,MAAM;IA+Bf,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,yBAAyB;IAejC,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,yBAAyB;IAiBjC,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,KAAK;IAOb,OAAO,KAAK,kBAAkB,GAO7B;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,YAAY,QAEvB;IAED,OAAO,KAAK,aAAa,QAMxB;IAED,OAAO,CAAC,SAAS,CAA+C;CACjE"}
|