@gcorevideo/player 2.12.2 → 2.14.0

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.
Files changed (42) hide show
  1. package/dist/index.js +63 -6
  2. package/dist/player.d.ts +71 -11
  3. package/docs/api/player.errorlevel.md +15 -0
  4. package/docs/api/player.md +77 -0
  5. package/docs/api/player.mediatransport.md +1 -1
  6. package/docs/api/player.playbackerror.code.md +14 -0
  7. package/docs/api/player.playbackerror.description.md +14 -0
  8. package/docs/api/player.playbackerror.level.md +14 -0
  9. package/docs/api/player.playbackerror.md +116 -0
  10. package/docs/api/player.playbackerror.message.md +14 -0
  11. package/docs/api/player.playbackerrorcode.md +83 -0
  12. package/docs/api/player.playbackmodule.md +1 -1
  13. package/docs/api/player.playerconfig.md +2 -2
  14. package/docs/api/player.playerconfig.strings.md +1 -1
  15. package/docs/api/player.playerplugin.md +1 -1
  16. package/docs/api/player.timeposition.md +21 -0
  17. package/docs/api/player.timeprogress.md +20 -0
  18. package/docs/api/player.timeupdate.md +20 -0
  19. package/docs/api/player.timevalue.md +16 -0
  20. package/docs/api/player.transportpreference.md +1 -1
  21. package/lib/index.d.ts +1 -0
  22. package/lib/index.d.ts.map +1 -1
  23. package/lib/index.js +1 -0
  24. package/lib/playback.types.d.ts +7 -4
  25. package/lib/playback.types.d.ts.map +1 -1
  26. package/lib/testUtils.d.ts +34 -0
  27. package/lib/testUtils.d.ts.map +1 -0
  28. package/lib/testUtils.js +58 -0
  29. package/lib/types.d.ts +2 -2
  30. package/lib/types.d.ts.map +1 -1
  31. package/lib/utils/mediaSources.d.ts.map +1 -1
  32. package/lib/utils/mediaSources.js +2 -3
  33. package/package.json +1 -1
  34. package/src/__tests__/Player.test.ts +0 -122
  35. package/src/index.ts +1 -0
  36. package/src/playback.types.ts +7 -4
  37. package/src/testUtils.ts +80 -0
  38. package/src/types.ts +2 -2
  39. package/src/utils/__tests__/mediaSources.test.ts +0 -41
  40. package/src/utils/mediaSources.ts +3 -4
  41. package/temp/player.api.json +373 -11
  42. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,21 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@gcorevideo/player](./player.md) &gt; [TimePosition](./player.timeposition.md)
4
+
5
+ ## TimePosition type
6
+
7
+ > This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
8
+ >
9
+
10
+ For the plugin development
11
+
12
+ **Signature:**
13
+
14
+ ```typescript
15
+ export type TimePosition = {
16
+ current: TimeValue;
17
+ total: TimeValue;
18
+ };
19
+ ```
20
+ **References:** [TimeValue](./player.timevalue.md)
21
+
@@ -0,0 +1,20 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@gcorevideo/player](./player.md) &gt; [TimeProgress](./player.timeprogress.md)
4
+
5
+ ## TimeProgress type
6
+
7
+ > This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
8
+ >
9
+
10
+ For the plugin development
11
+
12
+ **Signature:**
13
+
14
+ ```typescript
15
+ export type TimeProgress = TimePosition & {
16
+ start: number;
17
+ };
18
+ ```
19
+ **References:** [TimePosition](./player.timeposition.md)
20
+
@@ -0,0 +1,20 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@gcorevideo/player](./player.md) &gt; [TimeUpdate](./player.timeupdate.md)
4
+
5
+ ## TimeUpdate type
6
+
7
+ > This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
8
+ >
9
+
10
+ For the plugin development
11
+
12
+ **Signature:**
13
+
14
+ ```typescript
15
+ export type TimeUpdate = TimePosition & {
16
+ firstFragDateTime: number;
17
+ };
18
+ ```
19
+ **References:** [TimePosition](./player.timeposition.md)
20
+
@@ -0,0 +1,16 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@gcorevideo/player](./player.md) &gt; [TimeValue](./player.timevalue.md)
4
+
5
+ ## TimeValue type
6
+
7
+ > This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
8
+ >
9
+
10
+ Playback time in seconds since the beginning of the stream (or a segment for the live streams) For the plugin development
11
+
12
+ **Signature:**
13
+
14
+ ```typescript
15
+ export type TimeValue = number;
16
+ ```
@@ -11,7 +11,7 @@
11
11
  **Signature:**
12
12
 
13
13
  ```typescript
14
- export type TransportPreference = MediaTransport | 'auto';
14
+ export type TransportPreference = MediaTransport;
15
15
  ```
16
16
  **References:** [MediaTransport](./player.mediatransport.md)
17
17
 
package/lib/index.d.ts CHANGED
@@ -10,6 +10,7 @@
10
10
  export { setTracer } from '@gcorevideo/utils';
11
11
  export * from './Player.js';
12
12
  export * from './playback.types.js';
13
+ export * from './testUtils.js';
13
14
  export * from './types.js';
14
15
  export * from './version.js';
15
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA"}
package/lib/index.js CHANGED
@@ -10,5 +10,6 @@
10
10
  export { setTracer } from '@gcorevideo/utils';
11
11
  export * from './Player.js';
12
12
  export * from './playback.types.js';
13
+ export * from './testUtils.js';
13
14
  export * from './types.js';
14
15
  export * from './version.js';
@@ -1,12 +1,12 @@
1
1
  /**
2
2
  * Playback time in seconds since the beginning of the stream (or a segment for the live streams)
3
3
  * For the plugin development
4
- * @internal
4
+ * @beta
5
5
  */
6
6
  export type TimeValue = number;
7
7
  /**
8
8
  * For the plugin development
9
- * @internal
9
+ * @beta
10
10
  */
11
11
  export type TimePosition = {
12
12
  current: TimeValue;
@@ -14,14 +14,14 @@ export type TimePosition = {
14
14
  };
15
15
  /**
16
16
  * For the plugin development
17
- * @internal
17
+ * @beta
18
18
  */
19
19
  export type TimeProgress = TimePosition & {
20
20
  start: number;
21
21
  };
22
22
  /**
23
23
  * For the plugin development
24
- * @internal
24
+ * @beta
25
25
  */
26
26
  export type TimeUpdate = TimePosition & {
27
27
  firstFragDateTime: number;
@@ -43,6 +43,9 @@ export declare enum PlaybackErrorCode {
43
43
  MediaSourceUnavailable = 1,
44
44
  QualityLevelUnavailable = 2
45
45
  }
46
+ /**
47
+ * @beta
48
+ */
46
49
  export type ErrorLevel = 'FATAL' | 'WARN' | 'INFO';
47
50
  /**
48
51
  * @beta
@@ -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,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,SAAS,CAAA;IAClB,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3D;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;GAEG;AACH,oBAAY,iBAAiB;IAC3B,OAAO,IAAI;IACX,sBAAsB,IAAI;IAC1B,uBAAuB,IAAI;CAC5B;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;AAElD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,iBAAiB,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,UAAU,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB"}
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,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,SAAS,CAAA;IAClB,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3D;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;GAEG;AACH,oBAAY,iBAAiB;IAC3B,OAAO,IAAI;IACX,sBAAsB,IAAI;IAC1B,uBAAuB,IAAI;CAC5B;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;AAElD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,iBAAiB,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,UAAU,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB"}
@@ -0,0 +1,34 @@
1
+ import EventLite from 'event-lite';
2
+ /**
3
+ * @internal
4
+ */
5
+ export declare class _MockPlayback extends EventLite {
6
+ protected options: any;
7
+ readonly i18n: any;
8
+ protected playerError?: any | undefined;
9
+ constructor(options: any, i18n: any, playerError?: any | undefined);
10
+ get name(): string;
11
+ consent(): void;
12
+ play(): void;
13
+ pause(): void;
14
+ stop(): void;
15
+ destroy(): void;
16
+ seek(): void;
17
+ seekPercentage(): void;
18
+ getDuration(): number;
19
+ enterPiP(): void;
20
+ exitPiP(): void;
21
+ getPlaybackType(): string;
22
+ getStartTimeOffset(): number;
23
+ getCurrentTime(): number;
24
+ isHighDefinitionInUse(): boolean;
25
+ mute(): void;
26
+ unmute(): void;
27
+ volume(): void;
28
+ configure(): void;
29
+ attemptAutoPlay(): boolean;
30
+ canAutoPlay(): boolean;
31
+ onResize(): boolean;
32
+ trigger(event: string, ...args: any[]): void;
33
+ }
34
+ //# sourceMappingURL=testUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAA;AAElC;;GAEG;AACH,qBAAa,aAAc,SAAQ,SAAS;IAExC,SAAS,CAAC,OAAO,EAAE,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,GAAG;IAClB,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG;gBAFjB,OAAO,EAAE,GAAG,EACb,IAAI,EAAE,GAAG,EACR,WAAW,CAAC,EAAE,GAAG,YAAA;IAK7B,IAAI,IAAI,WAEP;IAED,OAAO;IAEP,IAAI;IAEJ,KAAK;IAEL,IAAI;IAEJ,OAAO;IAEP,IAAI;IAEJ,cAAc;IAEd,WAAW;IAIX,QAAQ;IAER,OAAO;IAEP,eAAe;IAIf,kBAAkB;IAIlB,cAAc;IAId,qBAAqB;IAIrB,IAAI;IAEJ,MAAM;IAEN,MAAM;IAEN,SAAS;IAET,eAAe;IAIf,WAAW;IAIX,QAAQ;IAIR,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;CAGtC"}
@@ -0,0 +1,58 @@
1
+ import EventLite from 'event-lite';
2
+ /**
3
+ * @internal
4
+ */
5
+ export class _MockPlayback extends EventLite {
6
+ options;
7
+ i18n;
8
+ playerError;
9
+ constructor(options, i18n, playerError) {
10
+ super();
11
+ this.options = options;
12
+ this.i18n = i18n;
13
+ this.playerError = playerError;
14
+ }
15
+ get name() {
16
+ return 'mock';
17
+ }
18
+ consent() { }
19
+ play() { }
20
+ pause() { }
21
+ stop() { }
22
+ destroy() { }
23
+ seek() { }
24
+ seekPercentage() { }
25
+ getDuration() {
26
+ return 100;
27
+ }
28
+ enterPiP() { }
29
+ exitPiP() { }
30
+ getPlaybackType() {
31
+ return 'live';
32
+ }
33
+ getStartTimeOffset() {
34
+ return 0;
35
+ }
36
+ getCurrentTime() {
37
+ return 0;
38
+ }
39
+ isHighDefinitionInUse() {
40
+ return false;
41
+ }
42
+ mute() { }
43
+ unmute() { }
44
+ volume() { }
45
+ configure() { }
46
+ attemptAutoPlay() {
47
+ return true;
48
+ }
49
+ canAutoPlay() {
50
+ return true;
51
+ }
52
+ onResize() {
53
+ return true;
54
+ }
55
+ trigger(event, ...args) {
56
+ this.emit(event, ...args);
57
+ }
58
+ }
package/lib/types.d.ts CHANGED
@@ -42,7 +42,7 @@ export type MediaTransport = 'dash' | 'hls';
42
42
  /**
43
43
  * @beta
44
44
  */
45
- export type TransportPreference = MediaTransport | 'auto';
45
+ export type TransportPreference = MediaTransport;
46
46
  /**
47
47
  * @beta
48
48
  * @see {@link https://clappr.github.io/classes/UIContainerPlugin.html}, {@link https://clappr.github.io/classes/ContainerPlugin.html}
@@ -133,7 +133,7 @@ export interface PlayerConfig extends Record<string, unknown> {
133
133
  playbackType?: PlaybackType;
134
134
  /**
135
135
  * Preferred transport protocol when multiple sources are available.
136
- * @defaultValue 'auto'
136
+ * @defaultValue 'dash'
137
137
  */
138
138
  priorityTransport?: TransportPreference;
139
139
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,qBAAqB,CAAA;AAE9D;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;AAEvE;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,OAAO,CAAA;AAE1D;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,CAAA;AAEzC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,CAAA;AAE3C;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,MAAM,CAAA;AAEzD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAM,WAAW,YAAa,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3D;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;;OAIG;IACH,IAAI,CAAC,EAAE,YAAY,CAAA;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,mBAAmB,CAAA;IAE3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;;OAIG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAE3B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,mBAAmB,CAAA;IAEvC;;OAEG;IACH,OAAO,EAAE,iBAAiB,EAAE,CAAA;IAE5B;;OAEG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAC9B;AAED;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAA;AAE5B;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAA;AAEnC;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAElD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,CACvC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAChD,CAAA;AAED;;;GAGG;AACH,oBAAY,WAAW;IACrB;;OAEG;IACH,KAAK,UAAU;IACf;;OAEG;IACH,IAAI,SAAS;IACb;;OAEG;IACH,KAAK,UAAU;IACf;;OAEG;IACH,IAAI,SAAS;IACb;;OAEG;IACH,KAAK,UAAU;CAChB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,qBAAqB,CAAA;AAE9D;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;AAEvE;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,OAAO,CAAA;AAE1D;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,CAAA;AAEzC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,CAAA;AAE3C;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAA;AAEhD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAM,WAAW,YAAa,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3D;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;;OAIG;IACH,IAAI,CAAC,EAAE,YAAY,CAAA;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,mBAAmB,CAAA;IAE3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;;OAIG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAE3B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,mBAAmB,CAAA;IAEvC;;OAEG;IACH,OAAO,EAAE,iBAAiB,EAAE,CAAA;IAE5B;;OAEG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAC9B;AAED;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAA;AAE5B;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAA;AAEnC;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAElD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,CACvC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAChD,CAAA;AAED;;;GAGG;AACH,oBAAY,WAAW;IACrB;;OAEG;IACH,KAAK,UAAU;IACf;;OAEG;IACH,IAAI,SAAS;IACb;;OAEG;IACH,KAAK,UAAU;IACf;;OAEG;IACH,IAAI,SAAS;IACb;;OAEG;IACH,KAAK,UAAU;CAChB"}
@@ -1 +1 @@
1
- {"version":3,"file":"mediaSources.d.ts","sourceRoot":"","sources":["../../src/utils/mediaSources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,UAAU,CAAA;AAGjB,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAAA;IAClC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACjC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAA;CACrC,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,cAAc,CAiB5E;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,qBAAqB,EAAE,EAChC,iBAAiB,GAAE,mBAA4B,GAC9C,qBAAqB,EAAE,CA4BzB;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAEzD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,iBAAiB,GAAG,qBAAqB,CAEtE;AAYD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,WAK7D;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,WAO5D"}
1
+ {"version":3,"file":"mediaSources.d.ts","sourceRoot":"","sources":["../../src/utils/mediaSources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,UAAU,CAAA;AAGjB,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAAA;IAClC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACjC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAA;CACrC,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,cAAc,CAiB5E;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,qBAAqB,EAAE,EAChC,iBAAiB,GAAE,mBAA4B,GAC9C,qBAAqB,EAAE,CA4BzB;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAEzD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,iBAAiB,GAAG,qBAAqB,CAEtE;AAWD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,WAK7D;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,WAO5D"}
@@ -25,8 +25,8 @@ export function buildSourcesSet(sources) {
25
25
  });
26
26
  return sv;
27
27
  }
28
- export function buildMediaSourcesList(sources, priorityTransport = 'auto') {
29
- const [preferred, rest] = sources.reduce(priorityTransport === 'dash' || priorityTransport === 'auto'
28
+ export function buildMediaSourcesList(sources, priorityTransport = 'dash') {
29
+ const [preferred, rest] = sources.reduce(priorityTransport === 'dash'
30
30
  ? (acc, item) => {
31
31
  if (canPlayDash(item.source, item.mimeType)) {
32
32
  acc[0].push(item);
@@ -60,7 +60,6 @@ function guessMimeType(s) {
60
60
  if (s.endsWith('.m3u8')) {
61
61
  return 'application/vnd.apple.mpegurl';
62
62
  }
63
- throw new Error('Unrecognized media source type');
64
63
  }
65
64
  export function isDashSource(source, mimeType) {
66
65
  if (mimeType) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gcorevideo/player",
3
- "version": "2.12.2",
3
+ "version": "2.14.0",
4
4
  "description": "Gcore JavaScript video player",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -87,17 +87,12 @@ describe('Player', () => {
87
87
  })
88
88
  describe('selecting media source', () => {
89
89
  describe.each([
90
- [undefined, true, true, 'http://0eab.cdn.globo.com/1932-1447.mpd'],
91
90
  ['dash', true, true, 'http://0eab.cdn.globo.com/1932-1447.mpd'],
92
91
  ['dash', false, true, 'http://0eab.cdn.globo.com/1932-1447.m3u8'],
93
92
  ['dash', false, false, undefined],
94
93
  ['hls', true, true, 'http://0eab.cdn.globo.com/1932-1447.m3u8'],
95
94
  ['hls', true, false, 'http://0eab.cdn.globo.com/1932-1447.mpd'],
96
95
  ['hls', false, false, undefined],
97
- ['auto', true, true, 'http://0eab.cdn.globo.com/1932-1447.mpd'],
98
- ['auto', true, false, 'http://0eab.cdn.globo.com/1932-1447.mpd'],
99
- ['auto', false, true, 'http://0eab.cdn.globo.com/1932-1447.m3u8'],
100
- ['auto', false, false, undefined],
101
96
  ])(
102
97
  ' according to the preference (%s) and capabilities (dash=%s, hls=%s)',
103
98
  (priority, dash, hls, source: string | undefined) => {
@@ -143,123 +138,6 @@ describe('Player', () => {
143
138
  },
144
139
  )
145
140
  })
146
- describe('on media source failure', () => {
147
- let player: Player
148
- let clappr: any
149
- let clock: ReturnType<typeof FakeTimers.install>
150
- beforeEach(async () => {
151
- Logger.enable('*')
152
- clock = FakeTimers.install()
153
- vi.mocked(Loader).registeredPlaybacks = [
154
- MockDashPlayback,
155
- MockHlsPlayback,
156
- MockHTML5VideoPlayback,
157
- ]
158
- clappr = createMockClapprPlayer() as any
159
- const playback = new MockDashPlayback({} as any, {} as any)
160
- clappr.core.activePlayback = playback
161
- vi.mocked(PlayerClappr).mockReturnValue(clappr as any)
162
- player = new Player({
163
- sources: [
164
- {
165
- source: 'http://0eab.cdn.globo.com/1932-1447.mpd',
166
- mimeType: 'application/dash+xml',
167
- },
168
- {
169
- source: 'http://0eab.cdn.globo.com/1932-1447.m3u8',
170
- mimeType: 'application/vnd.apple.mpegurl',
171
- },
172
- // TODO configure as a separate fallback source
173
- // {
174
- // source: 'http://0eab.cdn.globo.com/1932-1447_mpegts.m3u8',
175
- // mimeType: 'application/mpegts',
176
- // },
177
- ],
178
- })
179
- const node = document.createElement('div')
180
- player.attachTo(node)
181
- await clock.tickAsync(4000)
182
- playback.trigger('playback:error', {
183
- code: PlaybackErrorCode.MediaSourceUnavailable, // TODO rename to MediaSourceUnavailable
184
- message: 'Failed to download http://0eab.cdn.globo.com/1932-1447.mpd',
185
- })
186
- })
187
- afterEach(() => {
188
- clock.uninstall()
189
- Logger.enable('')
190
- })
191
- it('should try the next sources with a short delay', async () => {
192
- await clock.tickAsync(400) // 250 initial + random jitter up to 150
193
- expect(clappr.core.load).toHaveBeenCalledWith(
194
- 'http://0eab.cdn.globo.com/1932-1447.m3u8',
195
- 'application/vnd.apple.mpegurl',
196
- )
197
-
198
- // const playback = new MockHlsPlayback({} as any, {} as any)
199
- // clappr.core.activePlayback = playback
200
- // clappr.core.trigger('core:active:container:changed', {})
201
- // await clock.tickAsync(300)
202
- // clappr.core.load.mockClear()
203
- // playback.trigger('playback:error', {
204
- // code: PlaybackErrorCode.MediaSourceUnavailable,
205
- // message: 'Failed to download http://0eab.cdn.globo.com/1932-1447.m3u8',
206
- // })
207
- // await clock.tickAsync(400)
208
- // expect(clappr.core.load).toHaveBeenCalledWith(
209
- // 'http://0eab.cdn.globo.com/1932-1447_mpegts.m3u8',
210
- // 'application/mpegts',
211
- // )
212
- })
213
- describe('when rolled over to the first source', () => {
214
- beforeEach(async () => {
215
- await clock.tickAsync(400) // initial retry has passed
216
- clappr.core.load.mockClear()
217
- const playback = new MockHlsPlayback({} as any, {} as any)
218
- clappr.core.activePlayback = playback
219
- clappr.core.trigger('core:active:container:changed', {})
220
- await clock.tickAsync(300)
221
- playback.trigger('playback:error', {
222
- code: PlaybackErrorCode.MediaSourceUnavailable,
223
- message:
224
- 'Failed to download http://0eab.cdn.globo.com/1932-1447.m3u8',
225
- })
226
- await clock.tickAsync(400)
227
- clappr.core.load.mockClear()
228
- })
229
- afterEach(() => {
230
- // Logger.enable('')
231
- })
232
- it('should start increasing the delay exponentially per source', async () => {
233
- expect(clappr.core.load).not.toHaveBeenCalled()
234
- await clock.tickAsync(250)
235
- expect(clappr.core.load).toHaveBeenCalledWith(
236
- 'http://0eab.cdn.globo.com/1932-1447.mpd',
237
- 'application/dash+xml',
238
- )
239
- // )
240
- // // TODO
241
- // clappr.core.load.mockClear()
242
- // const p2 = new MockDashPlayback({} as any, {} as any)
243
- // clappr.core.activePlayback = p2
244
- // clappr.core.trigger('core:active:container:changed', {})
245
- // await clock.tickAsync(300)
246
- // p2.trigger('playback:error', {
247
- // code: PlaybackErrorCode.MediaSourceUnavailable,
248
- // message: 'Failed to download http://0eab.cdn.globo.com/1932-1447.mpd',
249
- // })
250
- // await clock.tickAsync(400)
251
- // expect(clappr.core.load).not.toHaveBeenCalledWith(
252
- // 'http://0eab.cdn.globo.com/1932-1447.m3u8',
253
- // 'application/vnd.apple.mpegurl',
254
- // )
255
- // await clock.tickAsync(250)
256
- // expect(clappr.core.load).toHaveBeenCalledWith(
257
- // 'http://0eab.cdn.globo.com/1932-1447.m3u8',
258
- // 'application/vnd.apple.mpegurl',
259
- // )
260
- })
261
- })
262
- })
263
141
  })
264
142
 
265
143
  class MockPlayback extends EventLite {
package/src/index.ts CHANGED
@@ -11,5 +11,6 @@
11
11
  export { setTracer } from '@gcorevideo/utils'
12
12
  export * from './Player.js'
13
13
  export * from './playback.types.js'
14
+ export * from './testUtils.js'
14
15
  export * from './types.js'
15
16
  export * from './version.js'
@@ -1,13 +1,13 @@
1
1
  /**
2
2
  * Playback time in seconds since the beginning of the stream (or a segment for the live streams)
3
3
  * For the plugin development
4
- * @internal
4
+ * @beta
5
5
  */
6
6
  export type TimeValue = number
7
7
 
8
8
  /**
9
9
  * For the plugin development
10
- * @internal
10
+ * @beta
11
11
  */
12
12
  export type TimePosition = {
13
13
  current: TimeValue
@@ -16,13 +16,13 @@ export type TimePosition = {
16
16
 
17
17
  /**
18
18
  * For the plugin development
19
- * @internal
19
+ * @beta
20
20
  */
21
21
  export type TimeProgress = TimePosition & { start: number }
22
22
 
23
23
  /**
24
24
  * For the plugin development
25
- * @internal
25
+ * @beta
26
26
  */
27
27
  export type TimeUpdate = TimePosition & {
28
28
  firstFragDateTime: number
@@ -47,6 +47,9 @@ export enum PlaybackErrorCode {
47
47
  QualityLevelUnavailable = 2,
48
48
  }
49
49
 
50
+ /**
51
+ * @beta
52
+ */
50
53
  export type ErrorLevel = 'FATAL' | 'WARN' | 'INFO'
51
54
 
52
55
  /**
@@ -0,0 +1,80 @@
1
+ import EventLite from 'event-lite'
2
+
3
+ /**
4
+ * @internal
5
+ */
6
+ export class _MockPlayback extends EventLite {
7
+ constructor(
8
+ protected options: any,
9
+ readonly i18n: any,
10
+ protected playerError?: any,
11
+ ) {
12
+ super()
13
+ }
14
+
15
+ get name() {
16
+ return 'mock'
17
+ }
18
+
19
+ consent() {}
20
+
21
+ play() {}
22
+
23
+ pause() {}
24
+
25
+ stop() {}
26
+
27
+ destroy() {}
28
+
29
+ seek() {}
30
+
31
+ seekPercentage() {}
32
+
33
+ getDuration() {
34
+ return 100
35
+ }
36
+
37
+ enterPiP() {}
38
+
39
+ exitPiP() {}
40
+
41
+ getPlaybackType() {
42
+ return 'live'
43
+ }
44
+
45
+ getStartTimeOffset() {
46
+ return 0
47
+ }
48
+
49
+ getCurrentTime() {
50
+ return 0
51
+ }
52
+
53
+ isHighDefinitionInUse() {
54
+ return false
55
+ }
56
+
57
+ mute() {}
58
+
59
+ unmute() {}
60
+
61
+ volume() {}
62
+
63
+ configure() {}
64
+
65
+ attemptAutoPlay() {
66
+ return true
67
+ }
68
+
69
+ canAutoPlay() {
70
+ return true
71
+ }
72
+
73
+ onResize() {
74
+ return true
75
+ }
76
+
77
+ trigger(event: string, ...args: any[]) {
78
+ this.emit(event, ...args)
79
+ }
80
+ }
package/src/types.ts CHANGED
@@ -51,7 +51,7 @@ export type MediaTransport = 'dash' | 'hls'
51
51
  /**
52
52
  * @beta
53
53
  */
54
- export type TransportPreference = MediaTransport | 'auto'
54
+ export type TransportPreference = MediaTransport
55
55
 
56
56
  /**
57
57
  * @beta
@@ -151,7 +151,7 @@ export interface PlayerConfig extends Record<string, unknown> {
151
151
 
152
152
  /**
153
153
  * Preferred transport protocol when multiple sources are available.
154
- * @defaultValue 'auto'
154
+ * @defaultValue 'dash'
155
155
  */
156
156
  priorityTransport?: TransportPreference
157
157
 
@@ -58,47 +58,6 @@ describe('mediaSources', () => {
58
58
  },
59
59
  ],
60
60
  ],
61
- [
62
- 'auto',
63
- true,
64
- true,
65
- [
66
- {
67
- source: 'http://example.com/video.m3u8',
68
- mimeType: 'application/vnd.apple.mpegurl',
69
- },
70
- {
71
- source: 'http://example.com/video.mpd',
72
- mimeType: 'application/dash+xml',
73
- },
74
- {
75
- source: 'http://example.com/video2.mpd',
76
- mimeType: 'application/dash+xml',
77
- },
78
- {
79
- source: 'http://example.com/video3.m3u8',
80
- mimeType: 'application/vnd.apple.mpegurl',
81
- },
82
- ],
83
- [
84
- {
85
- source: 'http://example.com/video.mpd',
86
- mimeType: 'application/dash+xml',
87
- },
88
- {
89
- source: 'http://example.com/video2.mpd',
90
- mimeType: 'application/dash+xml',
91
- },
92
- {
93
- source: 'http://example.com/video.m3u8',
94
- mimeType: 'application/vnd.apple.mpegurl',
95
- },
96
- {
97
- source: 'http://example.com/video3.m3u8',
98
- mimeType: 'application/vnd.apple.mpegurl',
99
- },
100
- ],
101
- ],
102
61
  [
103
62
  'hls',
104
63
  true,