@gcorevideo/player 2.28.30 → 2.28.36
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/README.md +22 -1
- package/assets/{subtitles → cc}/style.scss +5 -0
- package/dist/core.js +17 -23
- package/dist/index.css +241 -237
- package/dist/index.embed.js +79 -59
- package/dist/index.js +137 -119
- package/docs/api/player.closedcaptionspluginsettings.md +1 -0
- package/docs/api/player.md +9 -0
- package/docs/api/player.mediacontrol.md +16 -0
- package/docs/api/player.thumbnails.md +1 -1
- package/lib/Player.d.ts.map +1 -1
- package/lib/playback/BasePlayback.d.ts +1 -0
- package/lib/playback/BasePlayback.d.ts.map +1 -1
- package/lib/playback/BasePlayback.js +3 -0
- package/lib/playback/dash-playback/DashPlayback.d.ts +1 -0
- package/lib/playback/dash-playback/DashPlayback.d.ts.map +1 -1
- package/lib/playback/dash-playback/DashPlayback.js +9 -22
- package/lib/playback/hls-playback/HlsPlayback.d.ts.map +1 -1
- package/lib/playback/hls-playback/HlsPlayback.js +4 -0
- package/lib/plugins/subtitles/ClosedCaptions.d.ts +7 -3
- package/lib/plugins/subtitles/ClosedCaptions.d.ts.map +1 -1
- package/lib/plugins/subtitles/ClosedCaptions.js +66 -42
- package/lib/testUtils.d.ts +1 -0
- package/lib/testUtils.d.ts.map +1 -1
- package/lib/testUtils.js +3 -0
- package/package.json +4 -1
- package/src/Player.ts +12 -12
- package/src/playback/BasePlayback.ts +4 -0
- package/src/playback/dash-playback/DashPlayback.ts +10 -27
- package/src/playback/hls-playback/HlsPlayback.ts +4 -0
- package/src/plugins/subtitles/ClosedCaptions.ts +75 -47
- package/src/plugins/subtitles/__tests__/ClosedCaptions.test.ts +277 -29
- package/src/plugins/subtitles/__tests__/__snapshots__/ClosedCaptions.test.ts.snap +3 -3
- package/src/testUtils.ts +3 -0
- package/tsconfig.tsbuildinfo +1 -1
- /package/assets/{subtitles → cc}/combobox.ejs +0 -0
- /package/assets/{subtitles → cc}/string.ejs +0 -0
package/docs/api/player.md
CHANGED
|
@@ -274,6 +274,22 @@ Mounts a media control element at a specific location
|
|
|
274
274
|
Set the initial volume, which is preserved when playback is interrupted by an advertisement
|
|
275
275
|
|
|
276
276
|
|
|
277
|
+
</td></tr>
|
|
278
|
+
<tr><td>
|
|
279
|
+
|
|
280
|
+
[setKeepVisible(keepVisible)](./player.mediacontrol.setkeepvisible.md)
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
</td><td>
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
</td><td>
|
|
287
|
+
|
|
288
|
+
Set or reset the keep visibility state
|
|
289
|
+
|
|
290
|
+
Keep visibility state controls whether the media control is hidden automatically after a delay, which is a default behaviour.
|
|
291
|
+
|
|
292
|
+
|
|
277
293
|
</td></tr>
|
|
278
294
|
<tr><td>
|
|
279
295
|
|
|
@@ -15,7 +15,7 @@ export declare class Thumbnails extends UICorePlugin
|
|
|
15
15
|
|
|
16
16
|
## Remarks
|
|
17
17
|
|
|
18
|
-
The plugin needs specially crafted VTT file with a thumbnail sprite sheet to work. The VTT
|
|
18
|
+
The plugin needs specially crafted VTT file with a thumbnail sprite sheet to work. The VTT cues refer to a thumbnail, an area within the sprite sheet, to associate with a time span.
|
|
19
19
|
|
|
20
20
|
Configuration options - [ThumbnailsPluginSettings](./player.thumbnailspluginsettings.md)
|
|
21
21
|
|
package/lib/Player.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../src/Player.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EAEjB,uBAAuB,EACxB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGtD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAGjE;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,IACjD,CAAC,SAAS,WAAW,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../src/Player.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EAEjB,uBAAuB,EACxB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGtD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAGjE;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,IACjD,CAAC,SAAS,WAAW,CAAC,IAAI,GACxB,CAAC,MAAM,CAAC,GACR,CAAC,SAAS,WAAW,CAAC,YAAY,GAClC,CAAC,MAAM,CAAC,GACR,CAAC,SAAS,WAAW,CAAC,UAAU,GAChC,CAAC,YAAY,CAAC,GACd,CAAC,SAAS,WAAW,CAAC,MAAM,GAC5B,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GACnC,CAAC,SAAS,WAAW,CAAC,UAAU,GAChC,CAAC,OAAO,CAAC,GACT,CAAC,SAAS,WAAW,CAAC,KAAK,GAC3B,CAAC,aAAa,CAAC,GACf,EAAE,CAAA;AAEN;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,WAAW,IAAI,CACtD,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAC1B,IAAI,CAAA;AAeT;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,aAAa,CAAA;AAI3D;;;;;;;GAOG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAgC;IAE9C,OAAO,CAAC,OAAO,CAAqB;IAEpC,OAAO,CAAC,MAAM,CAA4B;IAE1C,OAAO,CAAC,KAAK,CAAQ;IAErB,OAAO,CAAC,QAAQ,CAA2B;gBAE/B,MAAM,EAAE,YAAY;IAOhC;;;;OAIG;IACH,EAAE,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAIlE;;;;OAIG;IACH,GAAG,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAInE;;;;;;;;;OASG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC;IAIvC;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,QAAQ,CAAC,aAAa,EAAE,WAAW,GAAG,IAAI;IAgB1C;;OAEG;IACH,OAAO;IAQP;;;;;;OAMG;IACH,cAAc,IAAI,MAAM;IAOxB;;;;;;OAMG;IACH,WAAW,IAAI,MAAM;IAOrB;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;;;OAIG;IACH,UAAU,IAAI,OAAO;IAIrB;;;;;OAKG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;;;OAIG;IACH,IAAI,CAAC,YAAY,EAAE,iBAAiB,EAAE;IAyBtC;;OAEG;IACH,IAAI;IAIJ;;OAEG;IACH,MAAM;IAIN;;OAEG;IACH,KAAK;IAIL;;OAEG;IACH,IAAI;IAIJ;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,EAAE,aAAa;IAI7B;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM;IAIjB;;;OAGG;IACH,SAAS,IAAI,MAAM;IAMnB;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM;IAMxB;;OAEG;IACH,IAAI;IAIJ;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,uBAAuB;IAgBrD;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM;IAOpC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAUnC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAgC;IAE1D,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,UAAU;YAMJ,MAAM;IAkBpB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,MAAM,CAgCb;IAED,OAAO,CAAC,gBAAgB;IAyCxB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,2BAA2B;IAsBnC,OAAO,CAAC,iBAAiB;CA+B1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasePlayback.d.ts","sourceRoot":"","sources":["../../src/playback/BasePlayback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAU,UAAU,EAAe,MAAM,cAAc,CAAA;AAK5E;;;GAGG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,IAAI,YAAY,YAEf;IAED,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY;IA0BlD;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM;IAInB,UAAU;
|
|
1
|
+
{"version":3,"file":"BasePlayback.d.ts","sourceRoot":"","sources":["../../src/playback/BasePlayback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAU,UAAU,EAAe,MAAM,cAAc,CAAA;AAK5E;;;GAGG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,IAAI,YAAY,YAEf;IAED,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY;IA0BlD;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM;IAInB,UAAU;IAKnB,YAAY,CAAC,EAAE,EAAE,MAAM;CAGxB"}
|
|
@@ -12,6 +12,7 @@ type LocalTimeCorrelation = {
|
|
|
12
12
|
export default class DashPlayback extends BasePlayback {
|
|
13
13
|
_levels: QualityLevel[];
|
|
14
14
|
_currentLevel: number;
|
|
15
|
+
_currentTextTrackId: number;
|
|
15
16
|
_durationExcludesAfterLiveSyncPoint: boolean;
|
|
16
17
|
_isReadyState: boolean;
|
|
17
18
|
_playableRegionDuration: number;
|
|
@@ -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,EAGL,gBAAgB,EAKhB,aAAa,EAQd,MAAM,QAAQ,CAAA;AAEf,OAAO,EAGL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,UAAU,EACX,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAA;AAMzE,KAAK,YAAY,GACb,OAAO,QAAQ,CAAC,GAAG,GACnB,OAAO,QAAQ,CAAC,IAAI,GACpB,OAAO,QAAQ,CAAC,GAAG,GACnB,OAAO,QAAQ,CAAC,KAAK,CAAA;AAEzB,KAAK,YAAY,GAAG,MAAM,CAAA;AAE1B,KAAK,oBAAoB,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAID,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,YAAY;IACpD,OAAO,EAAE,YAAY,EAAE,CAAK;IAE5B,aAAa,EAAE,MAAM,CAAO;
|
|
1
|
+
{"version":3,"file":"DashPlayback.d.ts","sourceRoot":"","sources":["../../../src/playback/dash-playback/DashPlayback.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@ const T = 'playback.dash';
|
|
|
16
16
|
export default class DashPlayback extends BasePlayback {
|
|
17
17
|
_levels = [];
|
|
18
18
|
_currentLevel = AUTO;
|
|
19
|
+
_currentTextTrackId = -1;
|
|
19
20
|
// true when the actual duration is longer than hlsjs's live sync point
|
|
20
21
|
// when this is false playableRegionDuration will be the actual duration
|
|
21
22
|
// when this is true playableRegionDuration will exclude the time after the sync point
|
|
@@ -148,7 +149,11 @@ export default class DashPlayback extends BasePlayback {
|
|
|
148
149
|
streaming: {
|
|
149
150
|
text: {
|
|
150
151
|
defaultEnabled: false,
|
|
151
|
-
|
|
152
|
+
// NOTE: dispatchForManualRendering is not correctly implemented in DASH.js;
|
|
153
|
+
// it does not work when there are multiple text tracks.
|
|
154
|
+
// CUE_ENTER and CUE_EXIT events might be dispatched additionally
|
|
155
|
+
// for a track, other than the currently active one.
|
|
156
|
+
// dispatchForManualRendering: true, // TODO only when useNativeSubtitles is not true?
|
|
152
157
|
},
|
|
153
158
|
},
|
|
154
159
|
}, this.options.dash);
|
|
@@ -192,24 +197,6 @@ export default class DashPlayback extends BasePlayback {
|
|
|
192
197
|
this._dash.on(MediaPlayer.events.PLAYBACK_RATE_CHANGED, (e) => {
|
|
193
198
|
this.trigger(PlaybackEvents.PLAYBACK_RATE_CHANGED, e.playbackRate);
|
|
194
199
|
});
|
|
195
|
-
this._dash.on(MediaPlayer.events.TRACK_CHANGE_RENDERED, (e) => {
|
|
196
|
-
if (e.mediaType === 'audio') {
|
|
197
|
-
this.trigger(Events.PLAYBACK_AUDIO_CHANGED, toClapprTrack(e.newMediaInfo));
|
|
198
|
-
}
|
|
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
|
-
});
|
|
213
200
|
}
|
|
214
201
|
render() {
|
|
215
202
|
this._ready();
|
|
@@ -519,14 +506,14 @@ export default class DashPlayback extends BasePlayback {
|
|
|
519
506
|
this._dash?.setTextTrack(this.closedCaptionsTrackId);
|
|
520
507
|
}
|
|
521
508
|
setTextTrack(id) {
|
|
509
|
+
this._currentTextTrackId = id;
|
|
522
510
|
this._dash?.setTextTrack(id);
|
|
523
511
|
}
|
|
524
512
|
/**
|
|
525
513
|
* @override
|
|
526
514
|
*/
|
|
527
515
|
get closedCaptionsTracks() {
|
|
528
|
-
|
|
529
|
-
return tt;
|
|
516
|
+
return this.getTextTracks();
|
|
530
517
|
}
|
|
531
518
|
getTextTracks() {
|
|
532
519
|
return this._dash?.getTracksFor('text').map((t, index) => ({
|
|
@@ -536,7 +523,7 @@ export default class DashPlayback extends BasePlayback {
|
|
|
536
523
|
id: index,
|
|
537
524
|
label: getTextTrackLabel(t) || "",
|
|
538
525
|
language: t.lang,
|
|
539
|
-
mode: "hidden",
|
|
526
|
+
mode: this._currentTextTrackId === index ? "showing" : "hidden",
|
|
540
527
|
},
|
|
541
528
|
})) || [];
|
|
542
529
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HlsPlayback.d.ts","sourceRoot":"","sources":["../../../src/playback/hls-playback/HlsPlayback.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"HlsPlayback.d.ts","sourceRoot":"","sources":["../../../src/playback/hls-playback/HlsPlayback.ts"],"names":[],"mappings":"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"}
|
|
@@ -864,7 +864,11 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
864
864
|
this.trigger(Events.PLAYBACK_AUDIO_CHANGED, toClapprTrack(track));
|
|
865
865
|
}
|
|
866
866
|
setTextTrack(id) {
|
|
867
|
+
if (id === this._hls.subtitleTrack) {
|
|
868
|
+
return;
|
|
869
|
+
}
|
|
867
870
|
this._hls.subtitleTrack = id;
|
|
871
|
+
this.cues = [];
|
|
868
872
|
}
|
|
869
873
|
/**
|
|
870
874
|
* @override
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { UICorePlugin } from '@clappr/core';
|
|
2
|
-
import '../../../assets/
|
|
2
|
+
import '../../../assets/cc/style.scss';
|
|
3
3
|
/**
|
|
4
4
|
* Configuration options for the {@link ClosedCaptions} plugin.
|
|
5
5
|
* @public
|
|
@@ -11,6 +11,9 @@ export type ClosedCaptionsPluginSettings = {
|
|
|
11
11
|
language?: string;
|
|
12
12
|
/**
|
|
13
13
|
* Whether to use builtin subtitles.
|
|
14
|
+
*
|
|
15
|
+
* native: video player element renders the subtitles
|
|
16
|
+
* custom: plugin manages the subtitles rendition
|
|
14
17
|
*/
|
|
15
18
|
mode?: 'native' | 'custom';
|
|
16
19
|
};
|
|
@@ -50,9 +53,10 @@ export type ClosedCaptionsPluginSettings = {
|
|
|
50
53
|
* ```
|
|
51
54
|
*/
|
|
52
55
|
export declare class ClosedCaptions extends UICorePlugin {
|
|
53
|
-
private
|
|
56
|
+
private isSelectedApplied;
|
|
54
57
|
private active;
|
|
55
58
|
private open;
|
|
59
|
+
private userSelectedItemId;
|
|
56
60
|
private track;
|
|
57
61
|
private tracks;
|
|
58
62
|
private $line;
|
|
@@ -116,7 +120,7 @@ export declare class ClosedCaptions extends UICorePlugin {
|
|
|
116
120
|
private findById;
|
|
117
121
|
private selectItem;
|
|
118
122
|
private onItemSelect;
|
|
119
|
-
private
|
|
123
|
+
private applySelectedSubtitles;
|
|
120
124
|
private hideMenu;
|
|
121
125
|
private toggleMenu;
|
|
122
126
|
private setKeepVisible;
|
|
@@ -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,
|
|
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,+BAA+B,CAAA;AAmBtC;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAC3B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,iBAAiB,CAAQ;IAEjC,OAAO,CAAC,MAAM,CAAQ;IAEtB,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,kBAAkB,CAAa;IAEvC,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;IAuBnB,OAAO,CAAC,kBAAkB;IAiD1B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,aAAa;IAuCrB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,IAAI;IAcJ;;OAEG;IACH,IAAI;IAgBJ,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACM,MAAM;IAmCf,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,sBAAsB;IAwB9B,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,eAAe;IAMvB,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"}
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
import { Events, UICorePlugin, Browser, template, $ } from '@clappr/core';
|
|
2
|
-
import { reportError
|
|
2
|
+
import { reportError } from '@gcorevideo/utils';
|
|
3
3
|
import assert from 'assert';
|
|
4
4
|
import { CLAPPR_VERSION } from '../../build.js';
|
|
5
|
-
import '../../../assets/
|
|
5
|
+
import '../../../assets/cc/style.scss';
|
|
6
6
|
import subtitlesOffIcon from '../../../assets/icons/new/subtitles-off.svg';
|
|
7
7
|
import subtitlesOnIcon from '../../../assets/icons/new/subtitles-on.svg';
|
|
8
|
-
import comboboxHTML from '../../../assets/
|
|
9
|
-
import stringHTML from '../../../assets/
|
|
8
|
+
import comboboxHTML from '../../../assets/cc/combobox.ejs';
|
|
9
|
+
import stringHTML from '../../../assets/cc/string.ejs';
|
|
10
10
|
import { isFullscreen } from '../utils/fullscreen.js';
|
|
11
11
|
import { ExtendedEvents } from '../media-control/MediaControl.js';
|
|
12
12
|
import { mediaControlClickaway } from '../../utils/clickaway.js';
|
|
13
13
|
const VERSION = '2.19.14';
|
|
14
|
-
const LOCAL_STORAGE_CC_ID = 'gplayer.plugins.cc.selected';
|
|
15
|
-
const T = 'plugins.cc';
|
|
16
14
|
/**
|
|
17
15
|
* `PLUGIN` that provides a UI to select the subtitles when available.
|
|
18
16
|
* @public
|
|
@@ -49,9 +47,10 @@ const T = 'plugins.cc';
|
|
|
49
47
|
* ```
|
|
50
48
|
*/
|
|
51
49
|
export class ClosedCaptions extends UICorePlugin {
|
|
52
|
-
|
|
50
|
+
isSelectedApplied = false;
|
|
53
51
|
active = false;
|
|
54
52
|
open = false;
|
|
53
|
+
userSelectedItemId = -1;
|
|
55
54
|
track = null;
|
|
56
55
|
tracks = [];
|
|
57
56
|
$line = null;
|
|
@@ -113,8 +112,12 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
113
112
|
const mediaControl = this.core.getPlugin('media_control');
|
|
114
113
|
assert(mediaControl, 'media_control plugin is required');
|
|
115
114
|
this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.mount);
|
|
115
|
+
this.listenTo(mediaControl, Events.MEDIACONTROL_SHOW, () => {
|
|
116
|
+
this.$line?.removeClass('media-control-cc-pulled');
|
|
117
|
+
});
|
|
116
118
|
this.listenTo(mediaControl, Events.MEDIACONTROL_HIDE, () => {
|
|
117
119
|
this.hideMenu();
|
|
120
|
+
this.$line?.addClass('media-control-cc-pulled');
|
|
118
121
|
});
|
|
119
122
|
this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_MENU_COLLAPSE, (from) => {
|
|
120
123
|
if (from !== this.name) {
|
|
@@ -149,10 +152,9 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
149
152
|
video.classList.remove('ios-fullscreen');
|
|
150
153
|
}
|
|
151
154
|
});
|
|
152
|
-
this.
|
|
155
|
+
this.isSelectedApplied = false;
|
|
153
156
|
}
|
|
154
157
|
onPlaybackReady() {
|
|
155
|
-
trace(`${T} onPlaybackReady`);
|
|
156
158
|
this.core.activePlayback.oncueenter = (e) => {
|
|
157
159
|
this.setSubtitleText(e.text);
|
|
158
160
|
};
|
|
@@ -173,23 +175,27 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
173
175
|
this.activateTrack(id);
|
|
174
176
|
}
|
|
175
177
|
activateTrack(id) {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
+
const isManaged = this.core.activePlayback?.name === 'hls';
|
|
179
|
+
this.core.activePlayback.setTextTrack(id);
|
|
180
|
+
if (isManaged) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (!this.core.activePlayback?.el.textTracks) {
|
|
178
184
|
return;
|
|
179
185
|
}
|
|
180
|
-
for (const track of this.
|
|
181
|
-
if (
|
|
186
|
+
for (const [index, track] of Array.from(this.core.activePlayback?.el.textTracks ?? []).entries()) {
|
|
187
|
+
if (index === id) {
|
|
182
188
|
if (this.useNativeSubtitles) {
|
|
183
|
-
track.
|
|
189
|
+
track.mode = 'showing';
|
|
184
190
|
}
|
|
185
191
|
else {
|
|
186
|
-
track.
|
|
192
|
+
track.mode = 'hidden';
|
|
187
193
|
}
|
|
188
|
-
this.setSubtitleText(this.getSubtitleText(track
|
|
189
|
-
track.
|
|
194
|
+
this.setSubtitleText(this.getSubtitleText(track));
|
|
195
|
+
track.oncuechange = () => {
|
|
190
196
|
try {
|
|
191
|
-
if (track.
|
|
192
|
-
const html = track.
|
|
197
|
+
if (track.activeCues?.length) {
|
|
198
|
+
const html = track.activeCues[0].getCueAsHTML();
|
|
193
199
|
this.setSubtitleText(html);
|
|
194
200
|
}
|
|
195
201
|
else {
|
|
@@ -202,8 +208,8 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
202
208
|
};
|
|
203
209
|
}
|
|
204
210
|
else {
|
|
205
|
-
track.
|
|
206
|
-
track.
|
|
211
|
+
track.oncuechange = () => { };
|
|
212
|
+
track.mode = 'disabled';
|
|
207
213
|
}
|
|
208
214
|
}
|
|
209
215
|
}
|
|
@@ -211,7 +217,7 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
211
217
|
try {
|
|
212
218
|
// TODO ensure to apply only once
|
|
213
219
|
this.currentTracks = this.core.activePlayback.closedCaptionsTracks;
|
|
214
|
-
this.
|
|
220
|
+
this.applySelectedSubtitles();
|
|
215
221
|
this.render();
|
|
216
222
|
}
|
|
217
223
|
catch (error) {
|
|
@@ -246,8 +252,10 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
246
252
|
this.$el.find('#gplayer-cc-menu').hide();
|
|
247
253
|
this.$el.find('#gplayer-cc-button').attr('aria-expanded', 'false');
|
|
248
254
|
this.$line.hide();
|
|
249
|
-
for (const track of this.
|
|
250
|
-
track.
|
|
255
|
+
for (const track of this.core.activePlayback.el.textTracks) {
|
|
256
|
+
if (track.mode === 'showing') {
|
|
257
|
+
track.mode = 'hidden';
|
|
258
|
+
}
|
|
251
259
|
}
|
|
252
260
|
}
|
|
253
261
|
/**
|
|
@@ -259,7 +267,6 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
259
267
|
if (this.core.activeContainer &&
|
|
260
268
|
isFullscreen(this.core.activeContainer.el) &&
|
|
261
269
|
this.currentTrack &&
|
|
262
|
-
// this.currentTrack.track.mode &&
|
|
263
270
|
(Browser.isiOS || this.useNativeSubtitles)) {
|
|
264
271
|
this.$line.hide();
|
|
265
272
|
this.currentTrack.track.mode = 'showing';
|
|
@@ -301,6 +308,10 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
301
308
|
this.resizeFont();
|
|
302
309
|
this.clampPopup();
|
|
303
310
|
this.core.activeContainer.$el.append(this.$line);
|
|
311
|
+
const mc = this.core.getPlugin('media_control');
|
|
312
|
+
if (!mc?.isVisible()) {
|
|
313
|
+
this.$line?.addClass('media-control-cc-pulled');
|
|
314
|
+
}
|
|
304
315
|
this.updateSelection();
|
|
305
316
|
this.renderIcon();
|
|
306
317
|
return this;
|
|
@@ -318,22 +329,36 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
318
329
|
}
|
|
319
330
|
onItemSelect(event) {
|
|
320
331
|
// event.target does not exist for some reason in tests
|
|
321
|
-
const id = (event.target ?? event.currentTarget).dataset?.item ??
|
|
322
|
-
'-1';
|
|
323
|
-
|
|
324
|
-
|
|
332
|
+
const id = Number((event.target ?? event.currentTarget).dataset?.item ??
|
|
333
|
+
'-1');
|
|
334
|
+
// TODO review, make configurable, and emit event in addition
|
|
335
|
+
// localStorage.setItem(LOCAL_STORAGE_CC_ID, id) // TODO store language instead?
|
|
336
|
+
this.userSelectedItemId = id;
|
|
337
|
+
this.selectItem(this.findById(id));
|
|
325
338
|
this.hideMenu();
|
|
326
339
|
return false;
|
|
327
340
|
}
|
|
328
|
-
|
|
329
|
-
if (
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
341
|
+
applySelectedSubtitles() {
|
|
342
|
+
if (this.isSelectedApplied) {
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
this.isSelectedApplied = true;
|
|
346
|
+
// If user selected a language, activate that
|
|
347
|
+
// Otherwise, if there is no configured language, then let the engine decide
|
|
348
|
+
// To hide the subtitles initially forcefully, set the language to 'none'
|
|
349
|
+
let matcher;
|
|
350
|
+
if (this.userSelectedItemId !== -1) {
|
|
351
|
+
matcher = (track) => track.id === this.userSelectedItemId;
|
|
336
352
|
}
|
|
353
|
+
else if (this.preselectedLanguage) {
|
|
354
|
+
matcher = (track) => this.isPreselectedLanguage(track.track.language);
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
setTimeout(() => {
|
|
360
|
+
this.selectItem(this.tracks.find(matcher) ?? null);
|
|
361
|
+
}, 0);
|
|
337
362
|
}
|
|
338
363
|
hideMenu() {
|
|
339
364
|
this.open = false;
|
|
@@ -367,10 +392,9 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
367
392
|
return this.$el.find('#gplayer-cc-menu li'); // TODO fix semantically
|
|
368
393
|
}
|
|
369
394
|
selectSubtitles() {
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
// this.core.activePlayback.closedCaptionsTrackId = -1
|
|
395
|
+
if (this.currentTrack) {
|
|
396
|
+
this.core.activePlayback.closedCaptionsTrackId = this.currentTrack.id;
|
|
397
|
+
}
|
|
374
398
|
}
|
|
375
399
|
getSubtitleText(track) {
|
|
376
400
|
const currentTime = this.core.activePlayback?.getCurrentTime() ?? 0;
|
|
@@ -393,7 +417,7 @@ export class ClosedCaptions extends UICorePlugin {
|
|
|
393
417
|
this.setSubtitleText('');
|
|
394
418
|
}
|
|
395
419
|
updateSelection() {
|
|
396
|
-
if (
|
|
420
|
+
if (this.core.activePlayback.closedCaptionsTrackId === -1) {
|
|
397
421
|
this.hide();
|
|
398
422
|
}
|
|
399
423
|
else {
|
package/lib/testUtils.d.ts
CHANGED
|
@@ -65,6 +65,7 @@ export declare function createMockPlayback(name?: string, options?: Record<strin
|
|
|
65
65
|
canAutoPlay: import("vitest").Mock<(...args: any[]) => any>;
|
|
66
66
|
onResize: import("vitest").Mock<(...args: any[]) => any>;
|
|
67
67
|
setPlaybackRate: import("vitest").Mock<(...args: any[]) => any>;
|
|
68
|
+
setTextTrack: import("vitest").Mock<(...args: any[]) => any>;
|
|
68
69
|
switchAudioTrack: import("vitest").Mock<(...args: any[]) => any>;
|
|
69
70
|
trigger: <T extends string | symbol>(event: T, ...args: any[]) => boolean;
|
|
70
71
|
};
|
package/lib/testUtils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,MAAM,MAAM,eAAe,CAAA;AAGlC,wBAAgB,cAAc,CAC5B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,SAAS,GAAE,GAAkC;;;;;;;;;;;;;;;;;;EAuB9C;AAED,wBAAgB,gBAAgB;;;EAK/B;AAED,wBAAgB,mBAAmB;;;;;;EAKlC;AAED,wBAAgB,kBAAkB,CAChC,IAAI,SAAS,EACb,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM
|
|
1
|
+
{"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,MAAM,MAAM,eAAe,CAAA;AAGlC,wBAAgB,cAAc,CAC5B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,SAAS,GAAE,GAAkC;;;;;;;;;;;;;;;;;;EAuB9C;AAED,wBAAgB,gBAAgB;;;EAK/B;AAED,wBAAgB,mBAAmB;;;;;;EAKlC;AAED,wBAAgB,kBAAkB,CAChC,IAAI,SAAS,EACb,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwCtC;AAED,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,QAAQ,GAAE,GAAgD;;;;;;;;;;;;;;;;;;;;;;;;;EA8B3D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,gBA2B/C;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,OAe7C"}
|
package/lib/testUtils.js
CHANGED
|
@@ -71,6 +71,7 @@ export function createMockPlayback(name = 'mock', options = {}) {
|
|
|
71
71
|
canAutoPlay: vi.fn().mockImplementation(() => true),
|
|
72
72
|
onResize: vi.fn().mockImplementation(() => true),
|
|
73
73
|
setPlaybackRate: vi.fn(),
|
|
74
|
+
setTextTrack: vi.fn(),
|
|
74
75
|
switchAudioTrack: vi.fn(),
|
|
75
76
|
trigger: emitter.emit,
|
|
76
77
|
});
|
|
@@ -122,6 +123,8 @@ export function createMockMediaControl(core) {
|
|
|
122
123
|
// @ts-ignore
|
|
123
124
|
mediaControl.getAvailablePopupHeight = vi.fn().mockReturnValue(286);
|
|
124
125
|
// @ts-ignore
|
|
126
|
+
mediaControl.isVisible = vi.fn().mockReturnValue(true);
|
|
127
|
+
// @ts-ignore
|
|
125
128
|
mediaControl.toggleElement = vi.fn();
|
|
126
129
|
// @ts-ignore
|
|
127
130
|
mediaControl.setKeepVisible = vi.fn();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gcorevideo/player",
|
|
3
|
-
"version": "2.28.
|
|
3
|
+
"version": "2.28.36",
|
|
4
4
|
"description": "Gcore JavaScript video player",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -66,5 +66,8 @@
|
|
|
66
66
|
"human-format": "^1.2.1",
|
|
67
67
|
"mousetrap": "^1.6.5",
|
|
68
68
|
"videojs-vtt.js": "^0.15.5"
|
|
69
|
+
},
|
|
70
|
+
"overrides": {
|
|
71
|
+
"ua-parser-js": "^1.0.0"
|
|
69
72
|
}
|
|
70
73
|
}
|
package/src/Player.ts
CHANGED
|
@@ -32,18 +32,18 @@ import { SourceController } from './plugins/source-controller/SourceController.j
|
|
|
32
32
|
*/
|
|
33
33
|
export type PlayerEventParams<E extends PlayerEvent> =
|
|
34
34
|
E extends PlayerEvent.Seek
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
35
|
+
? [number]
|
|
36
|
+
: E extends PlayerEvent.VolumeUpdate
|
|
37
|
+
? [number]
|
|
38
|
+
: E extends PlayerEvent.TimeUpdate
|
|
39
|
+
? [TimePosition]
|
|
40
|
+
: E extends PlayerEvent.Resize
|
|
41
|
+
? [{ width: number; height: number }]
|
|
42
|
+
: E extends PlayerEvent.Fullscreen
|
|
43
|
+
? [boolean]
|
|
44
|
+
: E extends PlayerEvent.Error
|
|
45
|
+
? [PlaybackError]
|
|
46
|
+
: []
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
49
|
* Type of a listener callback function for a player event.
|