rx-player 3.29.0-dev.2022110200 → 3.29.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 (106) hide show
  1. package/CHANGELOG.md +2 -2
  2. package/VERSION +1 -1
  3. package/dist/_esm5.processed/compat/browser_compatibility_types.d.ts +1 -1
  4. package/dist/_esm5.processed/compat/browser_detection.js +10 -5
  5. package/dist/_esm5.processed/compat/eme/close_session.js +1 -1
  6. package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +1 -1
  7. package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys_constructor.d.ts +1 -1
  8. package/dist/_esm5.processed/compat/eme/load_session.js +1 -1
  9. package/dist/_esm5.processed/compat/event_listeners.d.ts +1 -1
  10. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.d.ts +3 -3
  11. package/dist/_esm5.processed/core/adaptive/network_analyzer.d.ts +1 -1
  12. package/dist/_esm5.processed/core/api/option_utils.d.ts +2 -2
  13. package/dist/_esm5.processed/core/api/playback_observer.d.ts +1 -1
  14. package/dist/_esm5.processed/core/api/public_api.js +2 -2
  15. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +1 -1
  16. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +21 -18
  17. package/dist/_esm5.processed/core/decrypt/create_or_load_session.d.ts +1 -1
  18. package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +1 -1
  19. package/dist/_esm5.processed/core/decrypt/create_session.d.ts +1 -1
  20. package/dist/_esm5.processed/core/decrypt/create_session.js +1 -1
  21. package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +1 -1
  22. package/dist/_esm5.processed/core/decrypt/find_key_system.d.ts +1 -1
  23. package/dist/_esm5.processed/core/decrypt/find_key_system.js +1 -1
  24. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +1 -1
  25. package/dist/_esm5.processed/core/decrypt/init_media_keys.js +1 -1
  26. package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +1 -1
  27. package/dist/_esm5.processed/core/decrypt/types.d.ts +1 -1
  28. package/dist/_esm5.processed/core/decrypt/utils/check_key_statuses.d.ts +1 -1
  29. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +1 -1
  30. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +1 -1
  31. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +1 -1
  32. package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.d.ts +1 -1
  33. package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.js +2 -1
  34. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +1 -1
  35. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +1 -1
  36. package/dist/_esm5.processed/core/fetchers/segment/task_prioritizer.d.ts +1 -1
  37. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +1 -1
  38. package/dist/_esm5.processed/core/init/content_time_boundaries_observer.d.ts +1 -1
  39. package/dist/_esm5.processed/core/init/initial_seek_and_play.d.ts +1 -1
  40. package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +1 -1
  41. package/dist/_esm5.processed/core/init/load_on_media_source.js +5 -7
  42. package/dist/_esm5.processed/core/init/manifest_update_scheduler.d.ts +2 -2
  43. package/dist/_esm5.processed/core/init/stream_events_emitter/types.d.ts +1 -1
  44. package/dist/_esm5.processed/core/init/types.d.ts +4 -4
  45. package/dist/_esm5.processed/core/segment_buffers/garbage_collector.js +1 -1
  46. package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +2 -2
  47. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.d.ts +3 -3
  48. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +2 -2
  49. package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.d.ts +1 -1
  50. package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +1 -1
  51. package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.js +1 -1
  52. package/dist/_esm5.processed/core/stream/representation/downloading_queue.d.ts +3 -3
  53. package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +2 -5
  54. package/dist/_esm5.processed/core/stream/types.d.ts +5 -5
  55. package/dist/_esm5.processed/default_config.d.ts +1 -1
  56. package/dist/_esm5.processed/errors/error_codes.d.ts +7 -7
  57. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/remove_buffer_around_time.js +5 -5
  58. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/types.d.ts +2 -2
  59. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +1 -1
  60. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +1 -1
  61. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/capabilities.d.ts +1 -1
  62. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.d.ts +1 -1
  63. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/index.d.ts +1 -1
  64. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.d.ts +1 -1
  65. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.d.ts +1 -1
  66. package/dist/_esm5.processed/features/types.d.ts +10 -10
  67. package/dist/_esm5.processed/manifest/period.d.ts +1 -1
  68. package/dist/_esm5.processed/manifest/types.d.ts +1 -1
  69. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +1 -1
  70. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +1 -1
  71. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +1 -1
  72. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +2 -2
  73. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +1 -1
  74. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +1 -1
  75. package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +2 -2
  76. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -1
  77. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.js +2 -4
  78. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/parsers_stack.d.ts +2 -2
  79. package/dist/_esm5.processed/parsers/manifest/local/types.d.ts +2 -2
  80. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.d.ts +1 -1
  81. package/dist/_esm5.processed/parsers/manifest/types.d.ts +2 -2
  82. package/dist/_esm5.processed/parsers/texttracks/ttml/get_styling.d.ts +1 -1
  83. package/dist/_esm5.processed/parsers/texttracks/types.d.ts +2 -2
  84. package/dist/_esm5.processed/public_types.d.ts +14 -14
  85. package/dist/_esm5.processed/transports/dash/image_pipelines.js +1 -1
  86. package/dist/_esm5.processed/transports/smooth/isobmff/create_init_segment.d.ts +1 -1
  87. package/dist/_esm5.processed/transports/smooth/pipelines.js +1 -1
  88. package/dist/_esm5.processed/transports/types.d.ts +11 -11
  89. package/dist/_esm5.processed/utils/assert.d.ts +1 -1
  90. package/dist/_esm5.processed/utils/deep_merge.d.ts +2 -2
  91. package/dist/_esm5.processed/utils/event_emitter.d.ts +2 -2
  92. package/dist/_esm5.processed/utils/logger.d.ts +2 -2
  93. package/dist/_esm5.processed/utils/request/fetch.js +1 -1
  94. package/dist/_esm5.processed/utils/task_canceller.d.ts +1 -1
  95. package/dist/rx-player.js +69 -70
  96. package/dist/rx-player.min.js +1 -1
  97. package/package.json +20 -20
  98. package/sonar-project.properties +1 -1
  99. package/src/compat/browser_detection.ts +15 -5
  100. package/src/core/api/public_api.ts +2 -2
  101. package/src/core/decrypt/content_decryptor.ts +13 -15
  102. package/src/core/fetchers/segment/prioritized_segment_fetcher.ts +3 -1
  103. package/src/core/init/load_on_media_source.ts +5 -7
  104. package/src/core/stream/representation/force_garbage_collection.ts +1 -4
  105. package/src/experimental/tools/VideoThumbnailLoader/remove_buffer_around_time.ts +6 -5
  106. package/src/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.ts +2 -4
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "rx-player",
3
3
  "author": "Canal+",
4
- "version": "3.29.0-dev.2022110200",
4
+ "version": "3.29.0",
5
5
  "description": "Canal+ HTML5 Video Player",
6
6
  "main": "./dist/rx-player.js",
7
7
  "keywords": [
@@ -81,34 +81,34 @@
81
81
  "rxjs": "7.5.7"
82
82
  },
83
83
  "devDependencies": {
84
- "@babel/core": "7.19.6",
84
+ "@babel/core": "7.20.2",
85
85
  "@babel/plugin-transform-runtime": "7.19.6",
86
- "@babel/preset-env": "7.19.4",
86
+ "@babel/preset-env": "7.20.2",
87
87
  "@babel/preset-react": "7.18.6",
88
- "@types/chai": "4.3.3",
89
- "@types/jest": "29.2.0",
88
+ "@types/chai": "4.3.4",
89
+ "@types/jest": "29.2.3",
90
90
  "@types/mocha": "10.0.0",
91
- "@types/node": "18.11.8",
91
+ "@types/node": "18.11.9",
92
92
  "@types/sinon": "10.0.13",
93
- "@typescript-eslint/eslint-plugin": "5.41.0",
94
- "@typescript-eslint/eslint-plugin-tslint": "5.41.0",
95
- "@typescript-eslint/parser": "5.41.0",
93
+ "@typescript-eslint/eslint-plugin": "5.43.0",
94
+ "@typescript-eslint/eslint-plugin-tslint": "5.43.0",
95
+ "@typescript-eslint/parser": "5.43.0",
96
96
  "arraybuffer-loader": "1.0.8",
97
- "babel-loader": "9.0.0",
98
- "chai": "4.3.6",
97
+ "babel-loader": "9.1.0",
98
+ "chai": "4.3.7",
99
99
  "cheerio": "1.0.0-rc.12",
100
- "core-js": "3.26.0",
101
- "esbuild": "0.15.12",
102
- "eslint": "8.26.0",
100
+ "core-js": "3.26.1",
101
+ "esbuild": "0.15.14",
102
+ "eslint": "8.27.0",
103
103
  "eslint-plugin-import": "2.26.0",
104
- "eslint-plugin-jsdoc": "39.4.0",
104
+ "eslint-plugin-jsdoc": "39.6.2",
105
105
  "eslint-plugin-react": "7.31.10",
106
106
  "esm": "3.2.25",
107
107
  "express": "4.18.2",
108
108
  "highlight.js": "11.6.0",
109
109
  "html-entities": "2.3.3",
110
- "jest": "29.2.2",
111
- "jest-environment-jsdom": "29.2.2",
110
+ "jest": "29.3.1",
111
+ "jest-environment-jsdom": "29.3.1",
112
112
  "karma": "6.4.1",
113
113
  "karma-chrome-launcher": "3.1.1",
114
114
  "karma-firefox-launcher": "2.1.2",
@@ -123,13 +123,13 @@
123
123
  "regenerator-runtime": "0.13.10",
124
124
  "rimraf": "3.0.2",
125
125
  "semver": "7.3.8",
126
- "sinon": "14.0.1",
126
+ "sinon": "14.0.2",
127
127
  "terser-webpack-plugin": "5.3.6",
128
128
  "ts-jest": "29.0.3",
129
129
  "ts-loader": "9.4.1",
130
130
  "tslint": "6.1.3",
131
- "typescript": "4.8.4",
132
- "webpack": "5.74.0",
131
+ "typescript": "4.9.3",
132
+ "webpack": "5.75.0",
133
133
  "webpack-bundle-analyzer": "4.7.0",
134
134
  "webpack-cli": "4.10.0"
135
135
  },
@@ -1,7 +1,7 @@
1
1
  sonar.projectKey=rx-player
2
2
  sonar.organization=rx-player
3
3
  sonar.projectName=rx-player
4
- sonar.projectVersion=3.29.0-dev.2022110200
4
+ sonar.projectVersion=3.29.0
5
5
  sonar.sources=./src,./demo,./tests
6
6
  sonar.exclusions=demo/full/bundle.js,demo/standalone/lib.js,demo/bundle.js
7
7
  sonar.host.url=https://sonarcloud.io
@@ -51,11 +51,21 @@ const isTizen : boolean = !isNode &&
51
51
  /Tizen/.test(navigator.userAgent);
52
52
 
53
53
  const isWebOs : boolean = !isNode &&
54
- /Web0S/.test(navigator.userAgent);
55
- const isWebOs2021 : boolean = !isNode &&
56
- /WebOS.TV-2021/.test(navigator.userAgent);
57
- const isWebOs2022 : boolean = !isNode &&
58
- /WebOS.TV-2022/.test(navigator.userAgent);
54
+ navigator.userAgent.indexOf("Web0S") >= 0;
55
+
56
+ // Inspired form: http://webostv.developer.lge.com/discover/specifications/web-engine/
57
+ // Note: even that page doesn't correspond to what we've actually seen in the
58
+ // wild
59
+ const isWebOs2021 : boolean = isWebOs &&
60
+ (
61
+ /[Ww]eb[O0]S.TV-2021/.test(navigator.userAgent) ||
62
+ /[Cc]hr[o0]me\/79/.test(navigator.userAgent)
63
+ );
64
+ const isWebOs2022 : boolean = isWebOs &&
65
+ (
66
+ /[Ww]eb[O0]S.TV-2022/.test(navigator.userAgent) ||
67
+ /[Cc]hr[o0]me\/87/.test(navigator.userAgent)
68
+ );
59
69
 
60
70
  interface ISafariWindowObject extends Window {
61
71
  safari? : { pushNotification? : { toString() : string } };
@@ -460,7 +460,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
460
460
  // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
461
461
  videoElement.preload = "auto";
462
462
 
463
- this.version = /* PLAYER_VERSION */"3.29.0-dev.2022110200";
463
+ this.version = /* PLAYER_VERSION */"3.29.0";
464
464
  this.log = log;
465
465
  this.state = "STOPPED";
466
466
  this.videoElement = videoElement;
@@ -3002,7 +3002,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
3002
3002
  return activeRepresentations[currentPeriod.id];
3003
3003
  }
3004
3004
  }
3005
- Player.version = /* PLAYER_VERSION */"3.29.0-dev.2022110200";
3005
+ Player.version = /* PLAYER_VERSION */"3.29.0";
3006
3006
 
3007
3007
  /** Every events sent by the RxPlayer's public API. */
3008
3008
  interface IPublicAPIEvent {
@@ -487,10 +487,9 @@ export default class ContentDecryptor extends EventEmitter<IContentDecryptorEven
487
487
  .subscribe({
488
488
 
489
489
  next: (evt) : void => {
490
- switch (evt.type) {
491
- case "warning":
492
- this.trigger("warning", evt.value);
493
- return;
490
+ if (evt.type === "warning") {
491
+ this.trigger("warning", evt.value);
492
+ return;
494
493
  }
495
494
 
496
495
  const linkedKeys = getKeyIdsLinkedToSession(
@@ -853,20 +852,19 @@ function updateDecipherability(
853
852
  }
854
853
  const contentKIDs = representation.contentProtections.keyIds;
855
854
  if (contentKIDs !== undefined) {
856
- for (let i = 0; i < contentKIDs.length; i++) {
857
- const elt = contentKIDs[i];
858
- for (let j = 0; j < blacklistedKeyIds.length; j++) {
859
- if (areKeyIdsEqual(blacklistedKeyIds[j], elt.keyId)) {
855
+ for (const elt of contentKIDs) {
856
+ for (const blacklistedKeyId of blacklistedKeyIds) {
857
+ if (areKeyIdsEqual(blacklistedKeyId, elt.keyId)) {
860
858
  return false;
861
859
  }
862
860
  }
863
- for (let j = 0; j < whitelistedKeyIds.length; j++) {
864
- if (areKeyIdsEqual(whitelistedKeyIds[j], elt.keyId)) {
861
+ for (const whitelistedKeyId of whitelistedKeyIds) {
862
+ if (areKeyIdsEqual(whitelistedKeyId, elt.keyId)) {
865
863
  return true;
866
864
  }
867
865
  }
868
- for (let j = 0; j < delistedKeyIds.length; j++) {
869
- if (areKeyIdsEqual(delistedKeyIds[j], elt.keyId)) {
866
+ for (const delistedKeyId of delistedKeyIds) {
867
+ if (areKeyIdsEqual(delistedKeyId, elt.keyId)) {
870
868
  return undefined;
871
869
  }
872
870
  }
@@ -891,13 +889,13 @@ function blackListProtectionData(
891
889
  return false;
892
890
  }
893
891
  const segmentProtections = representation.contentProtections?.initData ?? [];
894
- for (let i = 0; i < segmentProtections.length; i++) {
892
+ for (const protection of segmentProtections) {
895
893
  if (initData.type === undefined ||
896
- segmentProtections[i].type === initData.type)
894
+ protection.type === initData.type)
897
895
  {
898
896
  const containedInitData = initData.values.getFormattedValues()
899
897
  .every(undecipherableVal => {
900
- return segmentProtections[i].values.some(currVal => {
898
+ return protection.values.some(currVal => {
901
899
  return (undecipherableVal.systemId === undefined ||
902
900
  currVal.systemId === undecipherableVal.systemId) &&
903
901
  areArraysOfNumbersEqual(currVal.data,
@@ -53,11 +53,13 @@ export default function applyPrioritizerToSegmentFetcher<TSegmentDataType>(
53
53
  * @param {Object} content - content to request
54
54
  * @param {Number} priority - priority at which the content should be requested.
55
55
  * Lower number == higher priority.
56
+ * @param {Object} callbacks
57
+ * @param {Object} cancelSignal
56
58
  * @returns {Promise}
57
59
  */
58
60
  createRequest(
59
61
  content : ISegmentLoaderContent,
60
- priority : number = 0,
62
+ priority : number,
61
63
  callbacks : IPrioritizedSegmentFetcherCallbacks<TSegmentDataType>,
62
64
  cancelSignal : CancellationSignal
63
65
  ) : Promise<void> {
@@ -195,14 +195,12 @@ export default function createMediaSourceLoader(
195
195
  streamObserver)
196
196
  .pipe(
197
197
  mergeMap((evt) => {
198
- switch (evt.type) {
199
- case "contentDurationUpdate":
200
- log.debug("Init: Duration has to be updated.", evt.value);
201
- mediaDurationUpdater.updateKnownDuration(evt.value);
202
- return EMPTY;
203
- default:
204
- return observableOf(evt);
198
+ if (evt.type === "contentDurationUpdate") {
199
+ log.debug("Init: Duration has to be updated.", evt.value);
200
+ mediaDurationUpdater.updateKnownDuration(evt.value);
201
+ return EMPTY;
205
202
  }
203
+ return observableOf(evt);
206
204
  }));
207
205
 
208
206
  /**
@@ -59,7 +59,6 @@ export default async function forceGarbageCollection(
59
59
  await bufferingQueue.removeBuffer(start, end, cancellationSignal);
60
60
  }
61
61
  }
62
- return;
63
62
  }
64
63
 
65
64
  /**
@@ -89,9 +88,7 @@ function selectGCedRanges(
89
88
  // current time and respect the gcGap
90
89
  for (let i = 0; i < outerRanges.length; i++) {
91
90
  const outerRange = outerRanges[i];
92
- if (position - gcGap > outerRange.end) {
93
- cleanedupRanges.push(outerRange);
94
- } else if (position + gcGap < outerRange.start) {
91
+ if ((position - gcGap > outerRange.end) || (position + gcGap < outerRange.start)) {
95
92
  cleanedupRanges.push(outerRange);
96
93
  }
97
94
  }
@@ -33,19 +33,20 @@ export default function removeBufferAroundTime(
33
33
  videoElement: HTMLMediaElement,
34
34
  sourceBuffer: AudioVideoSegmentBuffer,
35
35
  time: number,
36
- margin: number = 10 * 60,
36
+ margin: number | undefined,
37
37
  cancelSignal: CancellationSignal
38
38
  ): Promise<unknown> {
39
+ const removalMargin = margin ?? 10 * 60;
39
40
  if (videoElement.buffered.length === 0) {
40
41
  return Promise.resolve();
41
42
  }
42
43
  const bufferRemovals = [];
43
- if ((time - margin) > 0) {
44
+ if ((time - removalMargin) > 0) {
44
45
  bufferRemovals.push(
45
- sourceBuffer.removeBuffer(0, time - margin, cancelSignal));
46
+ sourceBuffer.removeBuffer(0, time - removalMargin, cancelSignal));
46
47
  }
47
- if ((time + margin) < videoElement.duration) {
48
- bufferRemovals.push(sourceBuffer.removeBuffer(time + margin,
48
+ if ((time + removalMargin) < videoElement.duration) {
49
+ bufferRemovals.push(sourceBuffer.removeBuffer(time + removalMargin,
49
50
  videoElement.duration,
50
51
  cancelSignal));
51
52
  }
@@ -31,10 +31,8 @@ export function generateBaseUrlAttrParser(
31
31
  ) : IAttributeParser {
32
32
  const textDecoder = new TextDecoder();
33
33
  return function onMPDAttribute(attr : number, ptr : number, len : number) {
34
- switch (attr) {
35
- case AttributeName.Text:
36
- baseUrlAttrs.value = parseString(textDecoder, linearMemory.buffer, ptr, len);
37
- break;
34
+ if (attr === AttributeName.Text) {
35
+ baseUrlAttrs.value = parseString(textDecoder, linearMemory.buffer, ptr, len);
38
36
  }
39
37
  };
40
38
  }