rx-player 3.30.0-dev.2023020100 → 3.30.0-dev.2023022200

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 (167) hide show
  1. package/CHANGELOG.md +2 -1
  2. package/VERSION +1 -1
  3. package/dist/_esm5.processed/compat/eme/close_session.js +2 -2
  4. package/dist/_esm5.processed/compat/event_listeners.js +1 -1
  5. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +4 -2
  6. package/dist/_esm5.processed/core/api/debug/buffer_graph.d.ts +28 -0
  7. package/dist/_esm5.processed/core/api/debug/buffer_graph.js +175 -0
  8. package/dist/_esm5.processed/core/api/debug/buffer_size_graph.d.ts +10 -0
  9. package/dist/_esm5.processed/core/api/debug/buffer_size_graph.js +105 -0
  10. package/dist/_esm5.processed/core/api/debug/constants.d.ts +2 -0
  11. package/dist/_esm5.processed/core/api/debug/constants.js +2 -0
  12. package/dist/_esm5.processed/core/api/debug/index.d.ts +2 -0
  13. package/dist/_esm5.processed/core/api/debug/index.js +2 -0
  14. package/dist/_esm5.processed/core/api/debug/modules/general_info.d.ts +3 -0
  15. package/dist/_esm5.processed/core/api/debug/modules/general_info.js +199 -0
  16. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.d.ts +4 -0
  17. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +121 -0
  18. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.d.ts +3 -0
  19. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +35 -0
  20. package/dist/_esm5.processed/core/api/debug/render.d.ts +3 -0
  21. package/dist/_esm5.processed/core/api/debug/render.js +32 -0
  22. package/dist/_esm5.processed/core/api/debug/utils.d.ts +39 -0
  23. package/dist/_esm5.processed/core/api/debug/utils.js +57 -0
  24. package/dist/_esm5.processed/core/api/playback_observer.js +3 -2
  25. package/dist/_esm5.processed/core/api/public_api.d.ts +3 -0
  26. package/dist/_esm5.processed/core/api/public_api.js +24 -13
  27. package/dist/_esm5.processed/core/api/utils.js +3 -3
  28. package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.d.ts +5 -5
  29. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +1 -1
  30. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +1 -1
  31. package/dist/_esm5.processed/core/decrypt/session_events_listener.js +37 -47
  32. package/dist/_esm5.processed/core/decrypt/utils/check_key_statuses.js +4 -0
  33. package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.d.ts +17 -8
  34. package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.js +10 -6
  35. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +5 -4
  36. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +22 -5
  37. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +37 -21
  38. package/dist/_esm5.processed/core/fetchers/segment/task_prioritizer.js +21 -23
  39. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +6 -5
  40. package/dist/_esm5.processed/core/init/directfile_content_initializer.js +1 -1
  41. package/dist/_esm5.processed/core/init/media_source_content_initializer.js +27 -31
  42. package/dist/_esm5.processed/core/init/utils/content_time_boundaries_observer.js +2 -2
  43. package/dist/_esm5.processed/core/init/utils/create_media_source.js +3 -12
  44. package/dist/_esm5.processed/core/init/utils/end_of_stream.js +6 -3
  45. package/dist/_esm5.processed/core/init/utils/get_loaded_reference.js +2 -1
  46. package/dist/_esm5.processed/core/init/utils/initial_seek_and_play.js +9 -5
  47. package/dist/_esm5.processed/core/init/utils/initialize_content_decryption.js +2 -1
  48. package/dist/_esm5.processed/core/init/utils/media_duration_updater.js +23 -19
  49. package/dist/_esm5.processed/core/init/utils/stream_events_emitter/stream_events_emitter.js +6 -4
  50. package/dist/_esm5.processed/core/init/utils/throw_on_media_error.js +1 -1
  51. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +7 -10
  52. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +4 -2
  53. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +13 -9
  54. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +10 -11
  55. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +26 -12
  56. package/dist/_esm5.processed/core/stream/period/period_stream.js +11 -10
  57. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +15 -15
  58. package/dist/_esm5.processed/core/stream/representation/utils/append_segment_to_buffer.js +1 -1
  59. package/dist/_esm5.processed/core/stream/representation/utils/downloading_queue.js +16 -6
  60. package/dist/_esm5.processed/experimental/features/debug_element.d.ts +8 -0
  61. package/dist/_esm5.processed/experimental/features/debug_element.js +10 -0
  62. package/dist/_esm5.processed/experimental/features/index.d.ts +1 -0
  63. package/dist/_esm5.processed/experimental/features/index.js +1 -0
  64. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +7 -4
  65. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +5 -4
  66. package/dist/_esm5.processed/features/features_object.js +1 -0
  67. package/dist/_esm5.processed/features/initialize_features.js +13 -10
  68. package/dist/_esm5.processed/features/types.d.ts +3 -0
  69. package/dist/_esm5.processed/manifest/adaptation.js +4 -0
  70. package/dist/_esm5.processed/manifest/manifest.js +2 -0
  71. package/dist/_esm5.processed/manifest/representation.js +11 -4
  72. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +105 -137
  73. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +25 -5
  74. package/dist/_esm5.processed/public_types.d.ts +1 -0
  75. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +13 -12
  76. package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.js +2 -2
  77. package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
  78. package/dist/_esm5.processed/transports/dash/segment_loader.js +4 -4
  79. package/dist/_esm5.processed/transports/local/segment_loader.js +13 -26
  80. package/dist/_esm5.processed/transports/smooth/segment_loader.js +4 -4
  81. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
  82. package/dist/_esm5.processed/utils/cancellable_sleep.js +4 -10
  83. package/dist/_esm5.processed/utils/create_cancellable_promise.d.ts +26 -0
  84. package/dist/_esm5.processed/utils/create_cancellable_promise.js +52 -0
  85. package/dist/_esm5.processed/utils/reference.js +6 -0
  86. package/dist/_esm5.processed/utils/request/xhr.js +1 -1
  87. package/dist/_esm5.processed/utils/task_canceller.d.ts +34 -15
  88. package/dist/_esm5.processed/utils/task_canceller.js +55 -22
  89. package/dist/rx-player.js +739 -626
  90. package/dist/rx-player.min.js +1 -1
  91. package/jest.config.js +1 -0
  92. package/package.json +18 -18
  93. package/scripts/build/constants.d.ts +1 -0
  94. package/scripts/report_build_sizes +4 -0
  95. package/sonar-project.properties +1 -1
  96. package/src/compat/eme/close_session.ts +2 -2
  97. package/src/compat/event_listeners.ts +1 -1
  98. package/src/core/adaptive/adaptive_representation_selector.ts +4 -2
  99. package/src/core/api/debug/buffer_graph.ts +247 -0
  100. package/src/core/api/debug/buffer_size_graph.ts +131 -0
  101. package/src/core/api/debug/constants.ts +2 -0
  102. package/src/core/api/debug/index.ts +3 -0
  103. package/src/core/api/debug/modules/general_info.ts +204 -0
  104. package/src/core/api/debug/modules/segment_buffer_content.ts +155 -0
  105. package/src/core/api/debug/modules/segment_buffer_size.ts +48 -0
  106. package/src/core/api/debug/render.ts +40 -0
  107. package/src/core/api/debug/utils.ts +103 -0
  108. package/src/core/api/playback_observer.ts +4 -2
  109. package/src/core/api/public_api.ts +27 -13
  110. package/src/core/api/utils.ts +3 -3
  111. package/src/core/decrypt/attach_media_keys.ts +1 -1
  112. package/src/core/decrypt/content_decryptor.ts +1 -1
  113. package/src/core/decrypt/session_events_listener.ts +37 -49
  114. package/src/core/decrypt/utils/check_key_statuses.ts +6 -0
  115. package/src/core/fetchers/cdn_prioritizer.ts +18 -9
  116. package/src/core/fetchers/manifest/manifest_fetcher.ts +5 -4
  117. package/src/core/fetchers/segment/segment_fetcher.ts +36 -14
  118. package/src/core/fetchers/segment/task_prioritizer.ts +25 -30
  119. package/src/core/fetchers/utils/schedule_request.ts +6 -5
  120. package/src/core/init/directfile_content_initializer.ts +1 -1
  121. package/src/core/init/media_source_content_initializer.ts +37 -41
  122. package/src/core/init/utils/content_time_boundaries_observer.ts +2 -2
  123. package/src/core/init/utils/create_media_source.ts +4 -16
  124. package/src/core/init/utils/end_of_stream.ts +6 -3
  125. package/src/core/init/utils/get_loaded_reference.ts +2 -1
  126. package/src/core/init/utils/initial_seek_and_play.ts +9 -5
  127. package/src/core/init/utils/initialize_content_decryption.ts +2 -1
  128. package/src/core/init/utils/media_duration_updater.ts +25 -20
  129. package/src/core/init/utils/stream_events_emitter/stream_events_emitter.ts +6 -4
  130. package/src/core/init/utils/throw_on_media_error.ts +1 -1
  131. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +7 -11
  132. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +4 -2
  133. package/src/core/segment_buffers/segment_buffers_store.ts +16 -13
  134. package/src/core/stream/adaptation/adaptation_stream.ts +10 -11
  135. package/src/core/stream/orchestrator/stream_orchestrator.ts +26 -12
  136. package/src/core/stream/period/period_stream.ts +11 -10
  137. package/src/core/stream/representation/representation_stream.ts +15 -15
  138. package/src/core/stream/representation/utils/append_segment_to_buffer.ts +1 -1
  139. package/src/core/stream/representation/utils/downloading_queue.ts +16 -4
  140. package/src/experimental/features/__tests__/debug_element.test.ts +26 -0
  141. package/src/experimental/features/debug_element.ts +13 -0
  142. package/src/experimental/features/index.ts +1 -0
  143. package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +7 -4
  144. package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +5 -4
  145. package/src/features/__tests__/initialize_features.test.ts +11 -0
  146. package/src/features/features_object.ts +1 -0
  147. package/src/features/initialize_features.ts +15 -10
  148. package/src/features/types.ts +9 -0
  149. package/src/manifest/adaptation.ts +7 -0
  150. package/src/manifest/manifest.ts +4 -0
  151. package/src/manifest/representation.ts +10 -4
  152. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +116 -151
  153. package/src/parsers/manifest/dash/common/parse_representations.ts +21 -4
  154. package/src/public_types.ts +1 -0
  155. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +30 -24
  156. package/src/transports/dash/low_latency_segment_loader.ts +2 -2
  157. package/src/transports/dash/manifest_parser.ts +1 -1
  158. package/src/transports/dash/segment_loader.ts +4 -4
  159. package/src/transports/local/segment_loader.ts +14 -30
  160. package/src/transports/smooth/segment_loader.ts +4 -4
  161. package/src/transports/utils/call_custom_manifest_loader.ts +3 -3
  162. package/src/typings/globals.d.ts +2 -0
  163. package/src/utils/cancellable_sleep.ts +5 -14
  164. package/src/utils/create_cancellable_promise.ts +69 -0
  165. package/src/utils/reference.ts +6 -0
  166. package/src/utils/request/xhr.ts +1 -1
  167. package/src/utils/task_canceller.ts +63 -34
@@ -0,0 +1,121 @@
1
+ import isNullOrUndefined from "../../../../utils/is_null_or_undefined";
2
+ import SegmentBufferGraph from "../buffer_graph";
3
+ import { DEFAULT_REFRESH_INTERVAL } from "../constants";
4
+ import { createElement, createGraphCanvas, createMetricTitle, isExtendedMode, } from "../utils";
5
+ export default function createSegmentBufferGraph(instance, bufferType, title, parentElt, cancelSignal) {
6
+ var bufferGraphWrapper = createElement("div");
7
+ var bufferTitle = createMetricTitle(title);
8
+ var canvasElt = createGraphCanvas();
9
+ var currentRangeRepInfoElt = createElement("div");
10
+ var loadingRangeRepInfoElt = createElement("div");
11
+ var bufferGraph = new SegmentBufferGraph(canvasElt);
12
+ var intervalId = setInterval(update, DEFAULT_REFRESH_INTERVAL);
13
+ cancelSignal.register(function () {
14
+ clearInterval(intervalId);
15
+ });
16
+ bufferGraphWrapper.appendChild(bufferTitle);
17
+ bufferGraphWrapper.appendChild(canvasElt);
18
+ bufferGraphWrapper.appendChild(currentRangeRepInfoElt);
19
+ bufferGraphWrapper.appendChild(loadingRangeRepInfoElt);
20
+ bufferGraphWrapper.style.padding = "5px 0px";
21
+ update();
22
+ return bufferGraphWrapper;
23
+ function update() {
24
+ var _a, _b, _c, _d;
25
+ if (instance.getVideoElement() === null) {
26
+ // disposed player. Clean-up everything
27
+ bufferGraphWrapper.style.display = "none";
28
+ bufferGraphWrapper.innerHTML = "";
29
+ clearInterval(intervalId);
30
+ return;
31
+ }
32
+ var showAllInfo = isExtendedMode(parentElt);
33
+ var inventory = instance.__priv_getSegmentBufferContent(bufferType);
34
+ if (inventory === null) {
35
+ bufferGraphWrapper.style.display = "none";
36
+ currentRangeRepInfoElt.innerHTML = "";
37
+ loadingRangeRepInfoElt.innerHTML = "";
38
+ }
39
+ else {
40
+ bufferGraphWrapper.style.display = "block";
41
+ var currentTime = instance.getPosition();
42
+ var width = Math.min(parentElt.clientWidth - 150, 600);
43
+ bufferGraph.update({
44
+ currentTime: currentTime,
45
+ minimumPosition: (_a = instance.getMinimumPosition()) !== null && _a !== void 0 ? _a : undefined,
46
+ maximumPosition: (_b = instance.getMaximumPosition()) !== null && _b !== void 0 ? _b : undefined,
47
+ inventory: inventory,
48
+ width: width,
49
+ height: 10,
50
+ });
51
+ if (!showAllInfo) {
52
+ currentRangeRepInfoElt.innerHTML = "";
53
+ loadingRangeRepInfoElt.innerHTML = "";
54
+ return;
55
+ }
56
+ currentRangeRepInfoElt.innerHTML = "";
57
+ for (var i = 0; i < inventory.length; i++) {
58
+ var rangeInfo = inventory[i];
59
+ var bufferedStart = rangeInfo.bufferedStart, bufferedEnd = rangeInfo.bufferedEnd, infos = rangeInfo.infos;
60
+ if (bufferedStart !== undefined && bufferedEnd !== undefined &&
61
+ currentTime >= bufferedStart && currentTime < bufferedEnd) {
62
+ currentRangeRepInfoElt.appendChild(createMetricTitle("play"));
63
+ currentRangeRepInfoElt.appendChild(createElement("span", {
64
+ textContent: constructRepresentationInfo(infos),
65
+ }));
66
+ break;
67
+ }
68
+ }
69
+ loadingRangeRepInfoElt.innerHTML = "";
70
+ var rep = (_c = instance.getCurrentRepresentations()) === null || _c === void 0 ? void 0 : _c[bufferType];
71
+ var adap = (_d = instance.getCurrentAdaptations()) === null || _d === void 0 ? void 0 : _d[bufferType];
72
+ var manifest = instance.getManifest();
73
+ if (manifest !== null && !isNullOrUndefined(rep) && !isNullOrUndefined(adap)) {
74
+ var period = manifest.getPeriodForTime(currentTime);
75
+ if (period !== undefined) {
76
+ loadingRangeRepInfoElt.appendChild(createMetricTitle("load"));
77
+ loadingRangeRepInfoElt.appendChild(createElement("span", {
78
+ textContent: constructRepresentationInfo({
79
+ period: period,
80
+ adaptation: adap,
81
+ representation: rep,
82
+ }),
83
+ }));
84
+ }
85
+ }
86
+ }
87
+ }
88
+ }
89
+ function constructRepresentationInfo(content) {
90
+ var _a;
91
+ var period = content.period;
92
+ var _b = content.adaptation, language = _b.language, isAudioDescription = _b.isAudioDescription, isClosedCaption = _b.isClosedCaption, isTrickModeTrack = _b.isTrickModeTrack, isSignInterpreted = _b.isSignInterpreted, bufferType = _b.type;
93
+ var _c = content.representation, id = _c.id, height = _c.height, width = _c.width, bitrate = _c.bitrate, codec = _c.codec;
94
+ var representationInfo = "\"".concat(id, "\" ");
95
+ if (height !== undefined && width !== undefined) {
96
+ representationInfo += "".concat(width, "x").concat(height, " ");
97
+ }
98
+ if (bitrate !== undefined) {
99
+ representationInfo += "(".concat((bitrate / 1000).toFixed(0), "kbps) ");
100
+ }
101
+ if (codec !== undefined) {
102
+ representationInfo += "c:\"".concat(codec, "\" ");
103
+ }
104
+ if (language !== undefined) {
105
+ representationInfo += "l:\"".concat(language, "\" ");
106
+ }
107
+ if (bufferType === "video" && typeof isSignInterpreted === "boolean") {
108
+ representationInfo += "si:".concat(isSignInterpreted ? 1 : 0, " ");
109
+ }
110
+ if (bufferType === "video" && typeof isTrickModeTrack === "boolean") {
111
+ representationInfo += "tm:".concat(isTrickModeTrack ? 1 : 0, " ");
112
+ }
113
+ if (bufferType === "audio" && typeof isAudioDescription === "boolean") {
114
+ representationInfo += "ad:".concat(isAudioDescription ? 1 : 0, " ");
115
+ }
116
+ if (bufferType === "text" && typeof isClosedCaption === "boolean") {
117
+ representationInfo += "cc:".concat(isClosedCaption ? 1 : 0, " ");
118
+ }
119
+ representationInfo += "p:".concat(period.start, "-").concat((_a = period.end) !== null && _a !== void 0 ? _a : "?");
120
+ return representationInfo;
121
+ }
@@ -0,0 +1,3 @@
1
+ import { CancellationSignal } from "../../../../utils/task_canceller";
2
+ import RxPlayer from "../../public_api";
3
+ export default function createSegmentBufferSizeGraph(instance: RxPlayer, parentElt: HTMLElement, cancelSignal: CancellationSignal): HTMLElement;
@@ -0,0 +1,35 @@
1
+ import BufferSizeGraph from "../buffer_size_graph";
2
+ import { DEFAULT_REFRESH_INTERVAL } from "../constants";
3
+ import { createElement, createGraphCanvas, createMetricTitle, } from "../utils";
4
+ export default function createSegmentBufferSizeGraph(instance, parentElt, cancelSignal) {
5
+ var bufferSizeGraphWrapperElt = createElement("div");
6
+ var bufferSizeTitle = createMetricTitle("bgap");
7
+ var canvasElt = createGraphCanvas();
8
+ var bufferSizeGraph = new BufferSizeGraph(canvasElt);
9
+ var intervalId = setInterval(addBufferSize, DEFAULT_REFRESH_INTERVAL);
10
+ cancelSignal.register(function () {
11
+ clearInterval(intervalId);
12
+ });
13
+ bufferSizeGraphWrapperElt.appendChild(bufferSizeTitle);
14
+ bufferSizeGraphWrapperElt.appendChild(canvasElt);
15
+ bufferSizeGraphWrapperElt.style.padding = "7px 0px";
16
+ addBufferSize();
17
+ return bufferSizeGraphWrapperElt;
18
+ function addBufferSize() {
19
+ if (instance.getVideoElement() === null) {
20
+ // disposed player. Clean-up everything
21
+ bufferSizeGraphWrapperElt.innerHTML = "";
22
+ clearInterval(intervalId);
23
+ return;
24
+ }
25
+ var bufferGap = instance.getVideoBufferGap();
26
+ if (bufferGap === Infinity) {
27
+ bufferSizeGraph.pushBufferSize(0);
28
+ }
29
+ else {
30
+ bufferSizeGraph.pushBufferSize(bufferGap);
31
+ }
32
+ var width = Math.min(parentElt.clientWidth - 150, 600);
33
+ bufferSizeGraph.reRender(width, 10);
34
+ }
35
+ }
@@ -0,0 +1,3 @@
1
+ import { CancellationSignal } from "../../../utils/task_canceller";
2
+ import RxPlayer from "../public_api";
3
+ export default function renderDebugElement(parentElt: HTMLElement, instance: RxPlayer, cancelSignal: CancellationSignal): void;
@@ -0,0 +1,32 @@
1
+ import constructDebugGeneralInfo from "./modules/general_info";
2
+ import createSegmentBufferGraph from "./modules/segment_buffer_content";
3
+ import createSegmentBufferSizeGraph from "./modules/segment_buffer_size";
4
+ import { createCompositeElement, createElement } from "./utils";
5
+ export default function renderDebugElement(parentElt, instance, cancelSignal) {
6
+ var debugElementTitleElt = createElement("div", {
7
+ textContent: "RxPlayer Debug Information",
8
+ });
9
+ debugElementTitleElt.style.fontWeight = "bold";
10
+ debugElementTitleElt.style.borderBottom = "1px solid white";
11
+ debugElementTitleElt.style.marginBottom = "5px";
12
+ debugElementTitleElt.style.fontStyle = "italic";
13
+ var debugWrapperElt = createCompositeElement("div", [
14
+ debugElementTitleElt,
15
+ constructDebugGeneralInfo(instance, parentElt, cancelSignal),
16
+ createSegmentBufferGraph(instance, "video", "vbuf", parentElt, cancelSignal),
17
+ createSegmentBufferGraph(instance, "audio", "abuf", parentElt, cancelSignal),
18
+ createSegmentBufferGraph(instance, "text", "tbuf", parentElt, cancelSignal),
19
+ createSegmentBufferSizeGraph(instance, parentElt, cancelSignal),
20
+ ]);
21
+ debugWrapperElt.style.backgroundColor = "#00000099";
22
+ debugWrapperElt.style.padding = "7px";
23
+ debugWrapperElt.style.fontSize = "13px";
24
+ debugWrapperElt.style.fontFamily = "mono";
25
+ debugWrapperElt.style.color = "white";
26
+ debugWrapperElt.style.display = "inline-block";
27
+ debugWrapperElt.style.bottom = "0px";
28
+ parentElt.appendChild(debugWrapperElt);
29
+ cancelSignal.register(function () {
30
+ parentElt.removeChild(debugWrapperElt);
31
+ });
32
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Create an HTML element.
3
+ * @param {string} elementName - The element's name, like `"div"` for example.
4
+ * @param {Object} [options={}] - Optional attributes for the element.
5
+ * @param {string} [options.textContent] - Inner text for that element.
6
+ * @param {string} [options.className] - Value for a `class` attribute
7
+ * associated to this element.
8
+ * @param {string} [options.href] - Value for a `href` attribute
9
+ * associated to this element.
10
+ * @returns {HTMLElement}
11
+ */
12
+ export declare function createElement(elementName: "input", opts?: CreateElementOptions | undefined): HTMLInputElement;
13
+ export declare function createElement(elementName: "button", opts?: CreateElementOptions | undefined): HTMLButtonElement;
14
+ export declare function createElement(elementName: "a", opts?: CreateElementOptions | undefined): HTMLLinkElement;
15
+ export declare function createElement(elementName: "canvas", opts?: CreateElementOptions | undefined): HTMLCanvasElement;
16
+ export declare function createElement(elementName: string, opts?: CreateElementOptions | undefined): HTMLElement;
17
+ interface CreateElementOptions {
18
+ textContent?: string | undefined;
19
+ className?: string | undefined;
20
+ }
21
+ /**
22
+ * Create an HTML element which may contain mutiple HTML sub-elements.
23
+ * @param {string} rootElementName - The element's name, like `"div"` for
24
+ * example.
25
+ * @param {Array.<string|HTMLElement>} parts - The HTML sub-elements, in order.
26
+ * Those can also just be strings, in which case only text nodes (and no actual
27
+ * HTMLElement) will be added at this place.
28
+ * @param {Object} [options={}] - Optional attributes for the element.
29
+ * @param {string} [options.className] - Value for a `class` attribute
30
+ * associated to this element.
31
+ * @returns {HTMLElement}
32
+ */
33
+ export declare function createCompositeElement(rootElementName: string, parts: Array<HTMLElement | string>, { className }?: {
34
+ className?: string;
35
+ } | undefined): HTMLElement;
36
+ export declare function isExtendedMode(parentElt: HTMLElement): boolean;
37
+ export declare function createMetricTitle(title: string): HTMLElement;
38
+ export declare function createGraphCanvas(): HTMLCanvasElement;
39
+ export {};
@@ -0,0 +1,57 @@
1
+ export function createElement(elementName, _a) {
2
+ var _b = _a === void 0 ? {} : _a, textContent = _b.textContent, className = _b.className;
3
+ var elt = document.createElement(elementName);
4
+ if (className !== undefined) {
5
+ elt.className = className;
6
+ }
7
+ if (textContent !== undefined) {
8
+ elt.textContent = textContent;
9
+ }
10
+ return elt;
11
+ }
12
+ /**
13
+ * Create an HTML element which may contain mutiple HTML sub-elements.
14
+ * @param {string} rootElementName - The element's name, like `"div"` for
15
+ * example.
16
+ * @param {Array.<string|HTMLElement>} parts - The HTML sub-elements, in order.
17
+ * Those can also just be strings, in which case only text nodes (and no actual
18
+ * HTMLElement) will be added at this place.
19
+ * @param {Object} [options={}] - Optional attributes for the element.
20
+ * @param {string} [options.className] - Value for a `class` attribute
21
+ * associated to this element.
22
+ * @returns {HTMLElement}
23
+ */
24
+ export function createCompositeElement(rootElementName, parts, _a) {
25
+ var _b = _a === void 0 ? {} : _a, className = _b.className;
26
+ var elt = document.createElement(rootElementName);
27
+ if (className !== undefined) {
28
+ elt.className = className;
29
+ }
30
+ for (var _i = 0, parts_1 = parts; _i < parts_1.length; _i++) {
31
+ var subElt = parts_1[_i];
32
+ if (typeof subElt === "string") {
33
+ elt.appendChild(document.createTextNode(subElt));
34
+ }
35
+ else {
36
+ elt.appendChild(subElt);
37
+ }
38
+ }
39
+ return elt;
40
+ }
41
+ export function isExtendedMode(parentElt) {
42
+ return parentElt.clientHeight > 400;
43
+ }
44
+ export function createMetricTitle(title) {
45
+ var elt = createElement("span", {
46
+ textContent: title + "/",
47
+ });
48
+ elt.style.fontWeight = "bold";
49
+ return elt;
50
+ }
51
+ export function createGraphCanvas() {
52
+ var canvasElt = createElement("canvas");
53
+ canvasElt.style.border = "1px solid white";
54
+ canvasElt.style.height = "15px";
55
+ canvasElt.style.marginLeft = "2px";
56
+ return canvasElt;
57
+ }
@@ -154,7 +154,7 @@ var PlaybackObserver = /** @class */ (function () {
154
154
  */
155
155
  PlaybackObserver.prototype.listen = function (cb, options) {
156
156
  var _a;
157
- if (this._canceller.isUsed || ((_a = options === null || options === void 0 ? void 0 : options.clearSignal) === null || _a === void 0 ? void 0 : _a.isCancelled) === true) {
157
+ if (this._canceller.isUsed() || ((_a = options === null || options === void 0 ? void 0 : options.clearSignal) === null || _a === void 0 ? void 0 : _a.isCancelled()) === true) {
158
158
  return noop;
159
159
  }
160
160
  this._observationRef.onUpdate(cb, {
@@ -565,7 +565,8 @@ function generateReadOnlyObserver(src, transform, cancellationSignal) {
565
565
  },
566
566
  listen: function (cb, options) {
567
567
  var _a;
568
- if (cancellationSignal.isCancelled || ((_a = options === null || options === void 0 ? void 0 : options.clearSignal) === null || _a === void 0 ? void 0 : _a.isCancelled) === true) {
568
+ if (cancellationSignal.isCancelled() ||
569
+ ((_a = options === null || options === void 0 ? void 0 : options.clearSignal) === null || _a === void 0 ? void 0 : _a.isCancelled()) === true) {
569
570
  return;
570
571
  }
571
572
  mappedRef.onUpdate(cb, {
@@ -161,6 +161,9 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
161
161
  };
162
162
  autoPlay?: boolean;
163
163
  }): void;
164
+ createDebugElement(element: HTMLElement): {
165
+ dispose(): void;
166
+ };
164
167
  /**
165
168
  * From given options, initialize content playback.
166
169
  * @param {Object} options
@@ -89,7 +89,7 @@ var Player = /** @class */ (function (_super) {
89
89
  // Workaround to support Firefox autoplay on FF 42.
90
90
  // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
91
91
  videoElement.preload = "auto";
92
- _this.version = /* PLAYER_VERSION */ "3.30.0-dev.2023020100";
92
+ _this.version = /* PLAYER_VERSION */ "3.30.0-dev.2023022200";
93
93
  _this.log = log;
94
94
  _this.state = "STOPPED";
95
95
  _this.videoElement = videoElement;
@@ -312,6 +312,18 @@ var Player = /** @class */ (function (_super) {
312
312
  }
313
313
  this._priv_initializeContentPlayback(newOptions);
314
314
  };
315
+ Player.prototype.createDebugElement = function (element) {
316
+ if (features.createDebugElement === null) {
317
+ throw new Error("Feature `DEBUG_ELEMENT` not added to the RxPlayer");
318
+ }
319
+ var canceller = new TaskCanceller();
320
+ features.createDebugElement(element, this, canceller.signal);
321
+ return {
322
+ dispose: function () {
323
+ canceller.cancel();
324
+ },
325
+ };
326
+ };
315
327
  /**
316
328
  * From given options, initialize content playback.
317
329
  * @param {Object} options
@@ -422,7 +434,7 @@ var Player = /** @class */ (function (_super) {
422
434
  }
423
435
  mediaElementTrackChoiceManager =
424
436
  this._priv_initializeMediaElementTrackChoiceManager(defaultAudioTrack, defaultTextTrack, currentContentCanceller.signal);
425
- if (currentContentCanceller.isUsed) {
437
+ if (currentContentCanceller.isUsed()) {
426
438
  return;
427
439
  }
428
440
  initializer = new features.directfile.initDirectFile({ autoPlay: autoPlay, keySystems: keySystems, speed: this._priv_speed, startAt: startAt, url: url });
@@ -589,7 +601,7 @@ var Player = /** @class */ (function (_super) {
589
601
  playerStateRef.onUpdate(function (newState) {
590
602
  updateReloadingMetadata(newState);
591
603
  _this._priv_setPlayerState(newState);
592
- if (currentContentCanceller.isUsed) {
604
+ if (currentContentCanceller.isUsed()) {
593
605
  return;
594
606
  }
595
607
  if (seekEventsCanceller !== null) {
@@ -599,9 +611,8 @@ var Player = /** @class */ (function (_super) {
599
611
  }
600
612
  }
601
613
  else if (isLoadedState(_this.state)) {
602
- seekEventsCanceller = new TaskCanceller({
603
- cancelOn: currentContentCanceller.signal,
604
- });
614
+ seekEventsCanceller = new TaskCanceller();
615
+ seekEventsCanceller.linkToSignal(currentContentCanceller.signal);
605
616
  emitSeekEvents(videoElement, playbackObserver, function () { return _this.trigger("seeking", null); }, function () { return _this.trigger("seeked", null); }, seekEventsCanceller.signal);
606
617
  }
607
618
  // Previous call could have performed all kind of side-effects, thus,
@@ -1933,16 +1944,16 @@ var Player = /** @class */ (function (_super) {
1933
1944
  this._priv_triggerEventIfNotStopped("videoTrackChange", null, cancelSignal);
1934
1945
  }
1935
1946
  this._priv_triggerAvailableBitratesChangeEvent("availableAudioBitratesChange", this.getAvailableAudioBitrates(), cancelSignal);
1936
- if (contentInfos.currentContentCanceller.isUsed) {
1947
+ if (contentInfos.currentContentCanceller.isUsed()) {
1937
1948
  return;
1938
1949
  }
1939
1950
  this._priv_triggerAvailableBitratesChangeEvent("availableVideoBitratesChange", this.getAvailableVideoBitrates(), cancelSignal);
1940
- if (contentInfos.currentContentCanceller.isUsed) {
1951
+ if (contentInfos.currentContentCanceller.isUsed()) {
1941
1952
  return;
1942
1953
  }
1943
1954
  var audioBitrate = (_f = (_e = (_d = this._priv_getCurrentRepresentations()) === null || _d === void 0 ? void 0 : _d.audio) === null || _e === void 0 ? void 0 : _e.bitrate) !== null && _f !== void 0 ? _f : -1;
1944
1955
  this._priv_triggerCurrentBitrateChangeEvent("audioBitrateChange", audioBitrate, cancelSignal);
1945
- if (contentInfos.currentContentCanceller.isUsed) {
1956
+ if (contentInfos.currentContentCanceller.isUsed()) {
1946
1957
  return;
1947
1958
  }
1948
1959
  var videoBitrate = (_j = (_h = (_g = this._priv_getCurrentRepresentations()) === null || _g === void 0 ? void 0 : _g.video) === null || _h === void 0 ? void 0 : _h.bitrate) !== null && _j !== void 0 ? _j : -1;
@@ -2230,7 +2241,7 @@ var Player = /** @class */ (function (_super) {
2230
2241
  */
2231
2242
  Player.prototype._priv_triggerAvailableBitratesChangeEvent = function (event, newVal, currentContentCancelSignal) {
2232
2243
  var prevVal = this._priv_contentEventsMemory[event];
2233
- if (!currentContentCancelSignal.isCancelled &&
2244
+ if (!currentContentCancelSignal.isCancelled() &&
2234
2245
  (prevVal === undefined || !areArraysOfNumbersEqual(newVal, prevVal))) {
2235
2246
  this._priv_contentEventsMemory[event] = newVal;
2236
2247
  this.trigger(event, newVal);
@@ -2244,7 +2255,7 @@ var Player = /** @class */ (function (_super) {
2244
2255
  * @param {Object} currentContentCancelSignal
2245
2256
  */
2246
2257
  Player.prototype._priv_triggerCurrentBitrateChangeEvent = function (event, newVal, currentContentCancelSignal) {
2247
- if (!currentContentCancelSignal.isCancelled &&
2258
+ if (!currentContentCancelSignal.isCancelled() &&
2248
2259
  newVal !== this._priv_contentEventsMemory[event]) {
2249
2260
  this._priv_contentEventsMemory[event] = newVal;
2250
2261
  this.trigger(event, newVal);
@@ -2268,7 +2279,7 @@ var Player = /** @class */ (function (_super) {
2268
2279
  * @param {Object} currentContentCancelSignal
2269
2280
  */
2270
2281
  Player.prototype._priv_triggerEventIfNotStopped = function (evt, arg, currentContentCancelSignal) {
2271
- if (!currentContentCancelSignal.isCancelled) {
2282
+ if (!currentContentCancelSignal.isCancelled()) {
2272
2283
  this.trigger(evt, arg);
2273
2284
  }
2274
2285
  };
@@ -2328,5 +2339,5 @@ var Player = /** @class */ (function (_super) {
2328
2339
  };
2329
2340
  return Player;
2330
2341
  }(EventEmitter));
2331
- Player.version = /* PLAYER_VERSION */ "3.30.0-dev.2023020100";
2342
+ Player.version = /* PLAYER_VERSION */ "3.30.0-dev.2023022200";
2332
2343
  export default Player;
@@ -28,13 +28,13 @@ import createSharedReference from "../../utils/reference";
28
28
  * remove all listeners this function has registered.
29
29
  */
30
30
  export function emitSeekEvents(mediaElement, playbackObserver, onSeeking, onSeeked, cancelSignal) {
31
- if (cancelSignal.isCancelled || mediaElement === null) {
31
+ if (cancelSignal.isCancelled() || mediaElement === null) {
32
32
  return;
33
33
  }
34
34
  var wasSeeking = playbackObserver.getReference().getValue().seeking;
35
35
  if (wasSeeking) {
36
36
  onSeeking();
37
- if (cancelSignal.isCancelled) {
37
+ if (cancelSignal.isCancelled()) {
38
38
  return;
39
39
  }
40
40
  }
@@ -54,7 +54,7 @@ export function constructPlayerStateReference(initializer, mediaElement, playbac
54
54
  initializer.addEventListener("loaded", function () {
55
55
  if (playerStateRef.getValue() === "LOADING" /* PLAYER_STATES.LOADING */) {
56
56
  playerStateRef.setValue("LOADED" /* PLAYER_STATES.LOADED */);
57
- if (!cancelSignal.isCancelled) {
57
+ if (!cancelSignal.isCancelled()) {
58
58
  var newState = getLoadedContentState(mediaElement, null);
59
59
  if (newState !== "PAUSED" /* PLAYER_STATES.PAUSED */) {
60
60
  playerStateRef.setValue(newState);
@@ -119,17 +119,17 @@ export declare function requestMediaKeySystemAccessImpl(keySystem: string, confi
119
119
  * Mock functions coming from the compat directory.
120
120
  */
121
121
  export declare function mockCompat(exportedFunctions?: {}): {
122
- mockEvents: Record<string, jest.Mock<any, any>>;
122
+ mockEvents: Record<string, jest.Mock<any, any, any>>;
123
123
  eventTriggers: {
124
124
  triggerEncrypted(elt: HTMLMediaElement, value: unknown): void;
125
125
  triggerKeyMessage(session: MediaKeySessionImpl, value: unknown): void;
126
126
  triggerKeyError(session: MediaKeySessionImpl, value: unknown): void;
127
127
  triggerKeyStatusesChange(session: MediaKeySessionImpl, value: unknown): void;
128
128
  };
129
- mockRequestMediaKeySystemAccess: jest.Mock<Promise<MediaKeySystemAccessImpl>, [keySystem: string, config: MediaKeySystemConfiguration[]]>;
130
- mockGetInitData: jest.Mock<IEncryptedEventData, [encryptedEvent: IEncryptedEventData]>;
131
- mockSetMediaKeys: jest.Mock<any, any>;
132
- mockGenerateKeyRequest: jest.Mock<Promise<void>, [mks: MediaKeySessionImpl, initializationDataType: any, initializationData: any]>;
129
+ mockRequestMediaKeySystemAccess: jest.Mock<Promise<MediaKeySystemAccessImpl>, [keySystem: string, config: MediaKeySystemConfiguration[]], any>;
130
+ mockGetInitData: jest.Mock<IEncryptedEventData, [encryptedEvent: IEncryptedEventData], any>;
131
+ mockSetMediaKeys: jest.Mock<any, any, any>;
132
+ mockGenerateKeyRequest: jest.Mock<Promise<void>, [mks: MediaKeySessionImpl, initializationDataType: any, initializationData: any], any>;
133
133
  };
134
134
  /**
135
135
  * Check that the ContentDecryptor, when called with those arguments, throws.
@@ -87,7 +87,7 @@ export default function attachMediaKeys(mediaElement, _a, cancelSignal) {
87
87
  _b.sent();
88
88
  // If this task has been cancelled while we were closing previous sessions,
89
89
  // stop now (and thus avoid setting the new media keys);
90
- if (cancelSignal.isCancelled) {
90
+ if (cancelSignal.isCancelled()) {
91
91
  throw cancelSignal.cancellationError;
92
92
  }
93
93
  MediaKeysInfosStore.setState(mediaElement, { keySystemOptions: keySystemOptions, mediaKeySystemAccess: mediaKeySystemAccess, mediaKeys: mediaKeys, loadedSessionsStore: loadedSessionsStore });
@@ -614,7 +614,7 @@ var ContentDecryptor = /** @class */ (function (_super) {
614
614
  * formatted and sent in an "error" event.
615
615
  */
616
616
  ContentDecryptor.prototype._onFatalError = function (err) {
617
- if (this._canceller.isUsed) {
617
+ if (this._canceller.isUsed()) {
618
618
  return;
619
619
  }
620
620
  var formattedErr = err instanceof Error ?