rx-player 4.5.0-dev.2026033100 → 4.5.0-dev.2026041501

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 (251) hide show
  1. package/CHANGELOG.md +22 -5
  2. package/VERSION +1 -1
  3. package/dist/commonjs/__GENERATED_CODE/embedded_dash_wasm.d.ts.map +1 -1
  4. package/dist/commonjs/__GENERATED_CODE/embedded_dash_wasm.js +1 -1
  5. package/dist/commonjs/__GENERATED_CODE/embedded_worker.d.ts.map +1 -1
  6. package/dist/commonjs/__GENERATED_CODE/embedded_worker.js +1 -1
  7. package/dist/commonjs/compat/can_patch_out_pssh.d.ts +42 -0
  8. package/dist/commonjs/compat/can_patch_out_pssh.d.ts.map +1 -0
  9. package/dist/commonjs/compat/can_patch_out_pssh.js +53 -0
  10. package/dist/commonjs/compat/env_detector.d.ts +2 -0
  11. package/dist/commonjs/compat/env_detector.d.ts.map +1 -1
  12. package/dist/commonjs/compat/env_detector.js +5 -0
  13. package/dist/commonjs/core/adaptive/network_analyzer.d.ts +1 -2
  14. package/dist/commonjs/core/adaptive/network_analyzer.d.ts.map +1 -1
  15. package/dist/commonjs/core/adaptive/network_analyzer.js +3 -3
  16. package/dist/commonjs/core/adaptive/utils/representation_score_calculator.js +2 -2
  17. package/dist/commonjs/core/cmcd/cmcd_data_builder.d.ts.map +1 -1
  18. package/dist/commonjs/core/cmcd/cmcd_data_builder.js +9 -3
  19. package/dist/commonjs/core/entry/content_preparer.d.ts.map +1 -1
  20. package/dist/commonjs/core/entry/content_preparer.js +5 -7
  21. package/dist/commonjs/core/entry/core_entry.d.ts.map +1 -1
  22. package/dist/commonjs/core/entry/core_entry.js +6 -2
  23. package/dist/commonjs/core/entry/core_text_displayer_interface.js +3 -3
  24. package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.d.ts.map +1 -1
  25. package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.js +12 -0
  26. package/dist/commonjs/core/fetchers/thumbnails/thumbnail_fetcher.js +1 -1
  27. package/dist/commonjs/core/fetchers/utils/schedule_request.d.ts.map +1 -1
  28. package/dist/commonjs/core/fetchers/utils/schedule_request.js +4 -3
  29. package/dist/commonjs/core/segment_sinks/garbage_collector.d.ts +0 -2
  30. package/dist/commonjs/core/segment_sinks/garbage_collector.d.ts.map +1 -1
  31. package/dist/commonjs/core/segment_sinks/garbage_collector.js +0 -3
  32. package/dist/commonjs/core/segment_sinks/implementations/text/text_segment_sink.d.ts +1 -1
  33. package/dist/commonjs/core/segment_sinks/implementations/text/text_segment_sink.d.ts.map +1 -1
  34. package/dist/commonjs/core/segment_sinks/implementations/text/text_segment_sink.js +2 -2
  35. package/dist/commonjs/core/stream/adaptation/adaptation_stream.d.ts.map +1 -1
  36. package/dist/commonjs/core/stream/adaptation/adaptation_stream.js +6 -6
  37. package/dist/commonjs/core/stream/orchestrator/stream_orchestrator.d.ts.map +1 -1
  38. package/dist/commonjs/core/stream/orchestrator/stream_orchestrator.js +37 -40
  39. package/dist/commonjs/default_config.d.ts +5 -0
  40. package/dist/commonjs/default_config.d.ts.map +1 -1
  41. package/dist/commonjs/default_config.js +5 -0
  42. package/dist/commonjs/main_thread/api/public_api.d.ts.map +1 -1
  43. package/dist/commonjs/main_thread/api/public_api.js +23 -16
  44. package/dist/commonjs/main_thread/decrypt/content_decryptor.d.ts.map +1 -1
  45. package/dist/commonjs/main_thread/decrypt/content_decryptor.js +4 -1
  46. package/dist/commonjs/main_thread/decrypt/session_events_listener.js +1 -1
  47. package/dist/commonjs/main_thread/decrypt/set_server_certificate.d.ts +2 -0
  48. package/dist/commonjs/main_thread/decrypt/set_server_certificate.d.ts.map +1 -1
  49. package/dist/commonjs/main_thread/decrypt/set_server_certificate.js +4 -0
  50. package/dist/commonjs/main_thread/init/media_source_content_initializer.d.ts +0 -8
  51. package/dist/commonjs/main_thread/init/media_source_content_initializer.d.ts.map +1 -1
  52. package/dist/commonjs/main_thread/init/media_source_content_initializer.js +58 -50
  53. package/dist/commonjs/main_thread/init/utils/stream_events_emitter/stream_events_emitter.d.ts +35 -5
  54. package/dist/commonjs/main_thread/init/utils/stream_events_emitter/stream_events_emitter.d.ts.map +1 -1
  55. package/dist/commonjs/main_thread/init/utils/stream_events_emitter/stream_events_emitter.js +60 -19
  56. package/dist/commonjs/main_thread/render_thumbnail.d.ts.map +1 -1
  57. package/dist/commonjs/main_thread/render_thumbnail.js +4 -0
  58. package/dist/commonjs/main_thread/tracks_store/media_element_tracks_store.d.ts.map +1 -1
  59. package/dist/commonjs/main_thread/tracks_store/media_element_tracks_store.js +1 -0
  60. package/dist/commonjs/main_thread/tracks_store/tracks_store.d.ts +1 -1
  61. package/dist/commonjs/main_thread/tracks_store/tracks_store.js +1 -1
  62. package/dist/{es2017/parsers/containers/isobmff/take_pssh_out.d.ts → commonjs/parsers/containers/isobmff/extract_pssh.d.ts} +6 -4
  63. package/dist/commonjs/parsers/containers/isobmff/extract_pssh.d.ts.map +1 -0
  64. package/dist/commonjs/parsers/containers/isobmff/{take_pssh_out.js → extract_pssh.js} +22 -17
  65. package/dist/commonjs/parsers/containers/isobmff/index.d.ts +2 -2
  66. package/dist/commonjs/parsers/containers/isobmff/index.d.ts.map +1 -1
  67. package/dist/commonjs/parsers/containers/isobmff/index.js +4 -4
  68. package/dist/commonjs/playback_observer/core_playback_observer.d.ts +4 -4
  69. package/dist/commonjs/playback_observer/core_playback_observer.d.ts.map +1 -1
  70. package/dist/commonjs/playback_observer/media_element_playback_observer.d.ts +1 -2
  71. package/dist/commonjs/playback_observer/media_element_playback_observer.d.ts.map +1 -1
  72. package/dist/commonjs/transports/dash/segment_parser.js +1 -1
  73. package/dist/commonjs/transports/local/segment_parser.js +1 -1
  74. package/dist/commonjs/utils/test-utils.d.ts +30 -0
  75. package/dist/commonjs/utils/test-utils.d.ts.map +1 -0
  76. package/dist/commonjs/utils/test-utils.js +79 -0
  77. package/dist/es2017/__GENERATED_CODE/embedded_dash_wasm.d.ts.map +1 -1
  78. package/dist/es2017/__GENERATED_CODE/embedded_dash_wasm.js +1 -1
  79. package/dist/es2017/__GENERATED_CODE/embedded_worker.d.ts.map +1 -1
  80. package/dist/es2017/__GENERATED_CODE/embedded_worker.js +1 -1
  81. package/dist/es2017/compat/can_patch_out_pssh.d.ts +42 -0
  82. package/dist/es2017/compat/can_patch_out_pssh.d.ts.map +1 -0
  83. package/dist/es2017/compat/can_patch_out_pssh.js +50 -0
  84. package/dist/es2017/compat/env_detector.d.ts +2 -0
  85. package/dist/es2017/compat/env_detector.d.ts.map +1 -1
  86. package/dist/es2017/compat/env_detector.js +5 -0
  87. package/dist/es2017/core/adaptive/network_analyzer.d.ts +1 -2
  88. package/dist/es2017/core/adaptive/network_analyzer.d.ts.map +1 -1
  89. package/dist/es2017/core/adaptive/network_analyzer.js +3 -3
  90. package/dist/es2017/core/adaptive/utils/representation_score_calculator.js +2 -2
  91. package/dist/es2017/core/cmcd/cmcd_data_builder.d.ts.map +1 -1
  92. package/dist/es2017/core/cmcd/cmcd_data_builder.js +9 -3
  93. package/dist/es2017/core/entry/content_preparer.d.ts.map +1 -1
  94. package/dist/es2017/core/entry/content_preparer.js +3 -5
  95. package/dist/es2017/core/entry/core_entry.d.ts.map +1 -1
  96. package/dist/es2017/core/entry/core_entry.js +6 -2
  97. package/dist/es2017/core/entry/core_text_displayer_interface.js +3 -3
  98. package/dist/es2017/core/fetchers/manifest/manifest_fetcher.d.ts.map +1 -1
  99. package/dist/es2017/core/fetchers/manifest/manifest_fetcher.js +12 -0
  100. package/dist/es2017/core/fetchers/thumbnails/thumbnail_fetcher.js +1 -1
  101. package/dist/es2017/core/fetchers/utils/schedule_request.d.ts.map +1 -1
  102. package/dist/es2017/core/fetchers/utils/schedule_request.js +2 -3
  103. package/dist/es2017/core/segment_sinks/garbage_collector.d.ts +0 -2
  104. package/dist/es2017/core/segment_sinks/garbage_collector.d.ts.map +1 -1
  105. package/dist/es2017/core/segment_sinks/garbage_collector.js +0 -3
  106. package/dist/es2017/core/segment_sinks/implementations/text/text_segment_sink.d.ts +1 -1
  107. package/dist/es2017/core/segment_sinks/implementations/text/text_segment_sink.d.ts.map +1 -1
  108. package/dist/es2017/core/segment_sinks/implementations/text/text_segment_sink.js +2 -2
  109. package/dist/es2017/core/stream/adaptation/adaptation_stream.d.ts.map +1 -1
  110. package/dist/es2017/core/stream/adaptation/adaptation_stream.js +6 -6
  111. package/dist/es2017/core/stream/orchestrator/stream_orchestrator.d.ts.map +1 -1
  112. package/dist/es2017/core/stream/orchestrator/stream_orchestrator.js +40 -39
  113. package/dist/es2017/default_config.d.ts +5 -0
  114. package/dist/es2017/default_config.d.ts.map +1 -1
  115. package/dist/es2017/default_config.js +5 -0
  116. package/dist/es2017/main_thread/api/public_api.d.ts.map +1 -1
  117. package/dist/es2017/main_thread/api/public_api.js +20 -13
  118. package/dist/es2017/main_thread/decrypt/content_decryptor.d.ts.map +1 -1
  119. package/dist/es2017/main_thread/decrypt/content_decryptor.js +4 -1
  120. package/dist/es2017/main_thread/decrypt/session_events_listener.js +1 -1
  121. package/dist/es2017/main_thread/decrypt/set_server_certificate.d.ts +2 -0
  122. package/dist/es2017/main_thread/decrypt/set_server_certificate.d.ts.map +1 -1
  123. package/dist/es2017/main_thread/decrypt/set_server_certificate.js +4 -0
  124. package/dist/es2017/main_thread/init/media_source_content_initializer.d.ts +0 -8
  125. package/dist/es2017/main_thread/init/media_source_content_initializer.d.ts.map +1 -1
  126. package/dist/es2017/main_thread/init/media_source_content_initializer.js +58 -50
  127. package/dist/es2017/main_thread/init/utils/stream_events_emitter/stream_events_emitter.d.ts +35 -5
  128. package/dist/es2017/main_thread/init/utils/stream_events_emitter/stream_events_emitter.d.ts.map +1 -1
  129. package/dist/es2017/main_thread/init/utils/stream_events_emitter/stream_events_emitter.js +60 -19
  130. package/dist/es2017/main_thread/render_thumbnail.d.ts.map +1 -1
  131. package/dist/es2017/main_thread/render_thumbnail.js +4 -0
  132. package/dist/es2017/main_thread/tracks_store/media_element_tracks_store.d.ts.map +1 -1
  133. package/dist/es2017/main_thread/tracks_store/media_element_tracks_store.js +1 -0
  134. package/dist/es2017/main_thread/tracks_store/tracks_store.d.ts +1 -1
  135. package/dist/es2017/main_thread/tracks_store/tracks_store.js +1 -1
  136. package/dist/{commonjs/parsers/containers/isobmff/take_pssh_out.d.ts → es2017/parsers/containers/isobmff/extract_pssh.d.ts} +6 -4
  137. package/dist/es2017/parsers/containers/isobmff/extract_pssh.d.ts.map +1 -0
  138. package/dist/es2017/parsers/containers/isobmff/{take_pssh_out.js → extract_pssh.js} +21 -16
  139. package/dist/es2017/parsers/containers/isobmff/index.d.ts +2 -2
  140. package/dist/es2017/parsers/containers/isobmff/index.d.ts.map +1 -1
  141. package/dist/es2017/parsers/containers/isobmff/index.js +2 -2
  142. package/dist/es2017/playback_observer/core_playback_observer.d.ts +4 -4
  143. package/dist/es2017/playback_observer/core_playback_observer.d.ts.map +1 -1
  144. package/dist/es2017/playback_observer/media_element_playback_observer.d.ts +1 -2
  145. package/dist/es2017/playback_observer/media_element_playback_observer.d.ts.map +1 -1
  146. package/dist/es2017/transports/dash/segment_parser.js +2 -2
  147. package/dist/es2017/transports/local/segment_parser.js +2 -2
  148. package/dist/es2017/utils/test-utils.d.ts +30 -0
  149. package/dist/es2017/utils/test-utils.d.ts.map +1 -0
  150. package/dist/es2017/utils/test-utils.js +36 -0
  151. package/dist/mpd-parser.wasm +0 -0
  152. package/dist/worker.js +6 -6
  153. package/package.json +4 -2
  154. package/src/README.md +7 -7
  155. package/src/__GENERATED_CODE/embedded_dash_wasm.ts +1 -1
  156. package/src/__GENERATED_CODE/embedded_worker.ts +1 -1
  157. package/src/compat/__tests__/can_patch_out_pssh.test.ts +40 -0
  158. package/src/compat/can_patch_out_pssh.ts +53 -0
  159. package/src/compat/env_detector.ts +4 -0
  160. package/src/core/README.md +1 -1
  161. package/src/core/adaptive/README.md +3 -3
  162. package/src/core/adaptive/__tests__/adaptive_representation_selector.test.ts +181 -110
  163. package/src/core/adaptive/__tests__/guess_based_chooser.test.ts +229 -123
  164. package/src/core/adaptive/__tests__/mocks.ts +100 -0
  165. package/src/core/adaptive/__tests__/network_analyzer.test.ts +152 -59
  166. package/src/core/adaptive/network_analyzer.ts +4 -4
  167. package/src/core/adaptive/utils/__tests__/filter_by_bitrate.test.ts +11 -19
  168. package/src/core/adaptive/utils/__tests__/filter_by_resolution.test.ts +12 -12
  169. package/src/core/adaptive/utils/__tests__/last_estimate_storage.test.ts +25 -12
  170. package/src/core/adaptive/utils/__tests__/pending_requests_store.test.ts +13 -9
  171. package/src/core/adaptive/utils/__tests__/representation_score_calculator.test.ts +11 -11
  172. package/src/core/adaptive/utils/__tests__/select_optimal_representation.test.ts +13 -23
  173. package/src/core/adaptive/utils/representation_score_calculator.ts +2 -2
  174. package/src/core/cmcd/__tests__/cmcd_data_builder.test.ts +60 -15
  175. package/src/core/cmcd/cmcd_data_builder.ts +9 -3
  176. package/src/core/entry/README.md +2 -2
  177. package/src/core/entry/__tests__/core_text_displayer_interface.test.ts +20 -0
  178. package/src/core/entry/content_preparer.ts +2 -5
  179. package/src/core/entry/core_entry.ts +6 -2
  180. package/src/core/entry/core_text_displayer_interface.ts +3 -3
  181. package/src/core/fetchers/manifest/__tests__/manifest_fetcher.test.ts +52 -3
  182. package/src/core/fetchers/manifest/manifest_fetcher.ts +12 -0
  183. package/src/core/fetchers/thumbnails/__tests__/thumbnail_fetcher.test.ts +70 -0
  184. package/src/core/fetchers/thumbnails/thumbnail_fetcher.ts +1 -1
  185. package/src/core/fetchers/utils/schedule_request.ts +5 -3
  186. package/src/core/segment_sinks/__tests__/garbage_collector.test.ts +434 -0
  187. package/src/core/segment_sinks/__tests__/mocks.ts +49 -0
  188. package/src/core/segment_sinks/garbage_collector.ts +0 -3
  189. package/src/core/segment_sinks/implementations/text/__tests__/text_segment_sink.test.ts +177 -0
  190. package/src/core/segment_sinks/implementations/text/text_segment_sink.ts +2 -2
  191. package/src/core/segment_sinks/inventory/__tests__/buffered_history.test.ts +215 -0
  192. package/src/core/segment_sinks/inventory/__tests__/segment_inventory.test.ts +448 -0
  193. package/src/core/stream/adaptation/__tests__/adaptation_stream.test.ts +973 -0
  194. package/src/core/stream/adaptation/__tests__/get_representations_switch_strategy.test.ts +283 -374
  195. package/src/core/stream/adaptation/adaptation_stream.ts +6 -8
  196. package/src/core/stream/orchestrator/README.md +4 -4
  197. package/src/core/stream/orchestrator/__tests__/stream_orchestrator.test.ts +707 -0
  198. package/src/core/stream/orchestrator/stream_orchestrator.ts +41 -46
  199. package/src/core/stream/period/utils/__tests__/get_adaptation_switch_strategy.test.ts +290 -220
  200. package/src/core/stream/representation/__tests__/encryption_data_notifier.test.ts +93 -63
  201. package/src/core/stream/representation/utils/__tests__/append_segment_to_buffer.test.ts +106 -63
  202. package/src/core/stream/representation/utils/__tests__/check_for_discontinuity.test.ts +179 -204
  203. package/src/core/stream/representation/utils/__tests__/get_segment_priority.test.ts +7 -7
  204. package/src/core/stream/representation/utils/__tests__/push_init_segment.test.ts +103 -60
  205. package/src/core/stream/representation/utils/__tests__/push_media_segment.test.ts +231 -165
  206. package/src/default_config.ts +6 -0
  207. package/src/experimental/README.md +1 -1
  208. package/src/features/README.md +3 -3
  209. package/src/main_thread/api/README.md +6 -7
  210. package/src/main_thread/api/public_api.ts +16 -10
  211. package/src/main_thread/decrypt/README.md +4 -4
  212. package/src/main_thread/decrypt/__tests__/__global__/content_decryptor.test.ts +135 -0
  213. package/src/main_thread/decrypt/__tests__/__global__/get_license.test.ts +70 -0
  214. package/src/main_thread/decrypt/__tests__/__global__/server_certificate.test.ts +44 -0
  215. package/src/main_thread/decrypt/__tests__/__global__/utils.ts +2 -2
  216. package/src/main_thread/decrypt/content_decryptor.ts +6 -1
  217. package/src/main_thread/decrypt/session_events_listener.ts +1 -1
  218. package/src/main_thread/decrypt/set_server_certificate.ts +5 -0
  219. package/src/main_thread/init/media_source_content_initializer.ts +69 -55
  220. package/src/main_thread/init/utils/__tests__/stream_events_emitter.test.ts +175 -0
  221. package/src/main_thread/init/utils/stream_events_emitter/stream_events_emitter.ts +90 -26
  222. package/src/main_thread/render_thumbnail.ts +4 -0
  223. package/src/main_thread/tracks_store/README.md +12 -0
  224. package/src/main_thread/tracks_store/__tests__/media_element_tracks_store.test.ts +25 -18
  225. package/src/main_thread/tracks_store/media_element_tracks_store.ts +1 -0
  226. package/src/main_thread/tracks_store/tracks_store.ts +1 -1
  227. package/src/manifest/classes/__tests__/mocks.ts +202 -0
  228. package/src/parsers/containers/isobmff/__tests__/extract_pssh.test.ts +199 -0
  229. package/src/parsers/containers/isobmff/{take_pssh_out.ts → extract_pssh.ts} +21 -17
  230. package/src/parsers/containers/isobmff/index.ts +2 -2
  231. package/src/parsers/manifest/dash/wasm-parser/README.md +9 -9
  232. package/src/playback_observer/__tests__/mocks.ts +152 -0
  233. package/src/playback_observer/core_playback_observer.ts +4 -4
  234. package/src/playback_observer/media_element_playback_observer.ts +1 -1
  235. package/src/tools/README.md +2 -2
  236. package/src/transports/README.md +5 -5
  237. package/src/transports/dash/segment_parser.ts +2 -2
  238. package/src/transports/local/segment_parser.ts +2 -2
  239. package/src/transports/metaplaylist/README.md +4 -4
  240. package/src/utils/README.md +3 -3
  241. package/src/utils/test-utils.ts +50 -0
  242. package/dist/commonjs/core/entry/synchronize_sinks_on_observation.d.ts +0 -11
  243. package/dist/commonjs/core/entry/synchronize_sinks_on_observation.d.ts.map +0 -1
  244. package/dist/commonjs/core/entry/synchronize_sinks_on_observation.js +0 -20
  245. package/dist/commonjs/parsers/containers/isobmff/take_pssh_out.d.ts.map +0 -1
  246. package/dist/es2017/core/entry/synchronize_sinks_on_observation.d.ts +0 -11
  247. package/dist/es2017/core/entry/synchronize_sinks_on_observation.d.ts.map +0 -1
  248. package/dist/es2017/core/entry/synchronize_sinks_on_observation.js +0 -17
  249. package/dist/es2017/parsers/containers/isobmff/take_pssh_out.d.ts.map +0 -1
  250. package/src/core/adaptive/utils/__tests__/bandwith_estimator.test.ts +0 -117
  251. package/src/core/entry/synchronize_sinks_on_observation.ts +0 -22
@@ -1,17 +1,14 @@
1
1
  import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
+ import configHandler from "../../../../../config";
2
3
  import getSegmentPriority from "../get_segment_priority";
3
4
 
4
- const mockGetCurrentConfig = vi.hoisted(() => vi.fn());
5
- vi.mock("../../../../../config", () => ({
6
- default: {
7
- getCurrent: mockGetCurrentConfig,
8
- },
9
- }));
10
-
11
5
  describe("getSegmentPriority", () => {
6
+ const originalConfig = configHandler.getCurrent();
7
+ const mockGetCurrentConfig = vi.spyOn(configHandler, "getCurrent");
12
8
  beforeEach(() => {
13
9
  // Default configuration for most tests
14
10
  mockGetCurrentConfig.mockReturnValue({
11
+ ...originalConfig,
15
12
  SEGMENT_PRIORITIES_STEPS: [1, 5, 10, 20],
16
13
  });
17
14
  });
@@ -88,6 +85,7 @@ describe("getSegmentPriority", () => {
88
85
  describe("different config values", () => {
89
86
  it("should work with empty priority steps array", () => {
90
87
  mockGetCurrentConfig.mockReturnValue({
88
+ ...originalConfig,
91
89
  SEGMENT_PRIORITIES_STEPS: [],
92
90
  });
93
91
 
@@ -97,6 +95,7 @@ describe("getSegmentPriority", () => {
97
95
 
98
96
  it("should work with single priority step", () => {
99
97
  mockGetCurrentConfig.mockReturnValue({
98
+ ...originalConfig,
100
99
  SEGMENT_PRIORITIES_STEPS: [10],
101
100
  });
102
101
 
@@ -106,6 +105,7 @@ describe("getSegmentPriority", () => {
106
105
 
107
106
  it("should work with different step values", () => {
108
107
  mockGetCurrentConfig.mockReturnValue({
108
+ ...originalConfig,
109
109
  SEGMENT_PRIORITIES_STEPS: [2, 10, 30, 60],
110
110
  });
111
111
 
@@ -1,70 +1,109 @@
1
- import { describe, it, expect, vi, beforeEach } from "vitest";
1
+ import type { Mock } from "vitest";
2
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
3
+ import type Manifest from "../../../../../manifest/classes";
4
+ import {
5
+ type Adaptation,
6
+ type Period,
7
+ type Representation,
8
+ type ISegment,
9
+ } from "../../../../../manifest/classes";
10
+ import {
11
+ DummyAdaptation,
12
+ DummyPeriod,
13
+ DummyManifest,
14
+ DummyRepresentation,
15
+ createSegment,
16
+ } from "../../../../../manifest/classes/__tests__/mocks";
17
+ import {
18
+ makeReadyOnlyPlaybackObserver,
19
+ DummyObservationPosition,
20
+ } from "../../../../../playback_observer/__tests__/mocks";
21
+ import type { IRange } from "../../../../../utils/ranges";
22
+ import SharedReference from "../../../../../utils/reference";
23
+ import TaskCanceller from "../../../../../utils/task_canceller";
24
+ import { type SegmentSink } from "../../../../segment_sinks";
25
+ import { DummySegmentSink } from "../../../../segment_sinks/__tests__/mocks";
26
+ import type { IRepresentationStreamPlaybackObservation } from "../../types";
27
+ import type appendSegmentToBuffer from "../append_segment_to_buffer";
2
28
  import pushInitSegment from "../push_init_segment";
3
29
 
4
- /* eslint-disable @typescript-eslint/no-explicit-any */
5
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
6
- /* eslint-disable @typescript-eslint/no-unsafe-argument */
7
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
8
-
9
- const mockAppendSegmentToBuffer = vi.hoisted(() => vi.fn());
10
-
30
+ const mockAppendSegmentToBuffer = vi.hoisted(
31
+ (): Mock<typeof appendSegmentToBuffer> =>
32
+ vi.fn((): Promise<IRange[]> => Promise.resolve([])),
33
+ );
11
34
  vi.mock("../append_segment_to_buffer", () => ({
12
35
  default: mockAppendSegmentToBuffer,
13
36
  }));
14
37
 
15
38
  describe("pushInitSegment", () => {
16
- let mockPlaybackObserver: any;
17
- let mockSegmentSink: any;
18
- let mockBufferGoal: any;
19
- let mockCancelSignal: any;
20
- let mockContent: any;
21
- let mockSegment: any;
39
+ const mockedPlaybackObserver =
40
+ makeReadyOnlyPlaybackObserver<IRepresentationStreamPlaybackObservation>({
41
+ position: new DummyObservationPosition({
42
+ getWanted: vi.fn(() => 10),
43
+ }),
44
+ paused: {
45
+ last: false,
46
+ pending: undefined,
47
+ },
48
+ speed: 1,
49
+ canStream: true,
50
+ });
51
+ let mockSegmentSink: SegmentSink;
52
+ let mockBufferGoal: SharedReference<number>;
53
+ let mockCanceller: TaskCanceller;
54
+ let mockContent: {
55
+ adaptation: Adaptation;
56
+ manifest: Manifest;
57
+ period: Period;
58
+ representation: Representation;
59
+ };
60
+ let mockSegment: ISegment;
22
61
 
23
62
  beforeEach(() => {
24
63
  vi.resetAllMocks();
25
64
 
26
- mockPlaybackObserver = {};
27
-
28
- mockSegmentSink = {};
29
-
30
- mockBufferGoal = {
31
- getValue: vi.fn().mockReturnValue(30),
32
- };
33
-
34
- mockCancelSignal = {
35
- signal: { aborted: false },
36
- cancellationError: null,
37
- };
38
-
65
+ mockSegmentSink = new DummySegmentSink();
66
+ mockBufferGoal = new SharedReference<number>(30);
67
+ mockCanceller = new TaskCanceller("pushInitSegment tests");
39
68
  mockContent = {
40
- adaptation: { id: "adaptation-1" },
41
- manifest: { id: "manifest-1" },
42
- period: { id: "period-1" },
43
- representation: {
69
+ adaptation: new DummyAdaptation({ id: "adaptation-1" }),
70
+ manifest: new DummyManifest({ id: "manifest-1" }),
71
+ period: new DummyPeriod({ id: "period-1" }),
72
+ representation: new DummyRepresentation({
44
73
  id: "rep-1",
45
- getMimeTypeString: vi.fn().mockReturnValue('video/mp4; codecs="avc1.42E01E"'),
46
- },
74
+ }),
47
75
  };
48
-
49
- mockSegment = {
76
+ mockContent.representation.getMimeTypeString = vi
77
+ .fn()
78
+ .mockReturnValue('video/mp4; codecs="avc1.42E01E"');
79
+ mockSegment = createSegment({
50
80
  id: "init-segment",
51
81
  isInit: true,
52
82
  time: 0,
53
83
  duration: 0,
54
- };
84
+ });
85
+ });
86
+
87
+ afterEach(() => {
88
+ mockBufferGoal.finish();
89
+ mockCanceller.cancel("test end");
90
+ mockedPlaybackObserver.reset();
91
+ vi.resetModules();
55
92
  });
56
93
 
57
94
  it("should call appendSegmentToBuffer with correct data structure", async () => {
58
- mockAppendSegmentToBuffer.mockResolvedValue({
59
- start: 0,
60
- end: 10,
61
- });
95
+ mockAppendSegmentToBuffer.mockResolvedValue([
96
+ {
97
+ start: 0,
98
+ end: 10,
99
+ },
100
+ ]);
62
101
 
63
102
  const initSegmentUniqueId = "unique-init-123";
64
103
 
65
104
  await pushInitSegment(
66
105
  {
67
- playbackObserver: mockPlaybackObserver,
106
+ playbackObserver: mockedPlaybackObserver.observer,
68
107
  content: mockContent,
69
108
  initSegmentUniqueId,
70
109
  segmentData: null,
@@ -72,16 +111,16 @@ describe("pushInitSegment", () => {
72
111
  segmentSink: mockSegmentSink,
73
112
  bufferGoal: mockBufferGoal,
74
113
  },
75
- mockCancelSignal,
114
+ mockCanceller.signal,
76
115
  );
77
116
 
78
117
  expect(mockAppendSegmentToBuffer).toHaveBeenCalledTimes(1);
79
118
 
80
119
  const callArgs = mockAppendSegmentToBuffer.mock.calls[0];
81
- expect(callArgs[0]).toBe(mockPlaybackObserver);
120
+ expect(callArgs[0]).toBe(mockedPlaybackObserver.observer);
82
121
  expect(callArgs[1]).toBe(mockSegmentSink);
83
122
  expect(callArgs[3]).toBe(mockBufferGoal);
84
- expect(callArgs[4]).toBe(mockCancelSignal);
123
+ expect(callArgs[4]).toBe(mockCanceller.signal);
85
124
 
86
125
  const { data, inventoryInfos } = callArgs[2];
87
126
  expect(data).toEqual({
@@ -105,12 +144,12 @@ describe("pushInitSegment", () => {
105
144
  });
106
145
 
107
146
  it("should return correct payload with buffered result", async () => {
108
- const mockBuffered = { start: 0, end: 10 };
147
+ const mockBuffered = [{ start: 0, end: 10 }];
109
148
  mockAppendSegmentToBuffer.mockResolvedValue(mockBuffered);
110
149
 
111
150
  const result = await pushInitSegment(
112
151
  {
113
- playbackObserver: mockPlaybackObserver,
152
+ playbackObserver: mockedPlaybackObserver.observer,
114
153
  content: mockContent,
115
154
  initSegmentUniqueId: "init-456",
116
155
  segmentData: null,
@@ -118,7 +157,7 @@ describe("pushInitSegment", () => {
118
157
  segmentSink: mockSegmentSink,
119
158
  bufferGoal: mockBufferGoal,
120
159
  },
121
- mockCancelSignal,
160
+ mockCanceller.signal,
122
161
  );
123
162
 
124
163
  expect(result).toEqual({
@@ -129,11 +168,15 @@ describe("pushInitSegment", () => {
129
168
  });
130
169
 
131
170
  it("should call getMimeTypeString on representation", async () => {
132
- mockAppendSegmentToBuffer.mockResolvedValue({ start: 0, end: 0 });
171
+ const mockGetMimeTypeString = vi.spyOn(
172
+ mockContent.representation,
173
+ "getMimeTypeString",
174
+ );
175
+ mockAppendSegmentToBuffer.mockResolvedValue([{ start: 0, end: 0 }]);
133
176
 
134
177
  await pushInitSegment(
135
178
  {
136
- playbackObserver: mockPlaybackObserver,
179
+ playbackObserver: mockedPlaybackObserver.observer,
137
180
  content: mockContent,
138
181
  initSegmentUniqueId: "init-789",
139
182
  segmentData: null,
@@ -141,18 +184,18 @@ describe("pushInitSegment", () => {
141
184
  segmentSink: mockSegmentSink,
142
185
  bufferGoal: mockBufferGoal,
143
186
  },
144
- mockCancelSignal,
187
+ mockCanceller.signal,
145
188
  );
146
189
 
147
- expect(mockContent.representation.getMimeTypeString).toHaveBeenCalledTimes(1);
190
+ expect(mockGetMimeTypeString).toHaveBeenCalledTimes(1);
148
191
  });
149
192
 
150
193
  it("should set chunk to null for init segments", async () => {
151
- mockAppendSegmentToBuffer.mockResolvedValue({});
194
+ mockAppendSegmentToBuffer.mockResolvedValue([]);
152
195
 
153
196
  await pushInitSegment(
154
197
  {
155
- playbackObserver: mockPlaybackObserver,
198
+ playbackObserver: mockedPlaybackObserver.observer,
156
199
  content: mockContent,
157
200
  initSegmentUniqueId: "init-abc",
158
201
  segmentData: { someData: "value" },
@@ -160,7 +203,7 @@ describe("pushInitSegment", () => {
160
203
  segmentSink: mockSegmentSink,
161
204
  bufferGoal: mockBufferGoal,
162
205
  },
163
- mockCancelSignal,
206
+ mockCanceller.signal,
164
207
  );
165
208
 
166
209
  const { data } = mockAppendSegmentToBuffer.mock.calls[0][2];
@@ -168,11 +211,11 @@ describe("pushInitSegment", () => {
168
211
  });
169
212
 
170
213
  it("should set timestampOffset to 0", async () => {
171
- mockAppendSegmentToBuffer.mockResolvedValue({});
214
+ mockAppendSegmentToBuffer.mockResolvedValue([]);
172
215
 
173
216
  await pushInitSegment(
174
217
  {
175
- playbackObserver: mockPlaybackObserver,
218
+ playbackObserver: mockedPlaybackObserver.observer,
176
219
  content: mockContent,
177
220
  initSegmentUniqueId: "init-def",
178
221
  segmentData: null,
@@ -180,7 +223,7 @@ describe("pushInitSegment", () => {
180
223
  segmentSink: mockSegmentSink,
181
224
  bufferGoal: mockBufferGoal,
182
225
  },
183
- mockCancelSignal,
226
+ mockCanceller.signal,
184
227
  );
185
228
 
186
229
  const { data } = mockAppendSegmentToBuffer.mock.calls[0][2];
@@ -188,11 +231,11 @@ describe("pushInitSegment", () => {
188
231
  });
189
232
 
190
233
  it("should set appendWindow to [undefined, undefined]", async () => {
191
- mockAppendSegmentToBuffer.mockResolvedValue({});
234
+ mockAppendSegmentToBuffer.mockResolvedValue([]);
192
235
 
193
236
  await pushInitSegment(
194
237
  {
195
- playbackObserver: mockPlaybackObserver,
238
+ playbackObserver: mockedPlaybackObserver.observer,
196
239
  content: mockContent,
197
240
  initSegmentUniqueId: "init-ghi",
198
241
  segmentData: null,
@@ -200,7 +243,7 @@ describe("pushInitSegment", () => {
200
243
  segmentSink: mockSegmentSink,
201
244
  bufferGoal: mockBufferGoal,
202
245
  },
203
- mockCancelSignal,
246
+ mockCanceller.signal,
204
247
  );
205
248
 
206
249
  const { data } = mockAppendSegmentToBuffer.mock.calls[0][2];