rx-player 3.33.0 → 3.33.1

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 (819) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/VERSION +1 -1
  3. package/dist/_esm5.processed/core/api/public_api.js +2 -2
  4. package/dist/_esm5.processed/manifest/manifest.js +1 -0
  5. package/dist/_esm5.processed/utils/retry_promise_with_backoff.d.ts +11 -0
  6. package/dist/_esm5.processed/utils/retry_promise_with_backoff.js +18 -4
  7. package/dist/mpd-parser.wasm +0 -0
  8. package/dist/rx-player.d.ts +1 -1
  9. package/dist/rx-player.js +24 -9
  10. package/dist/rx-player.min.d.ts +1 -1
  11. package/dist/rx-player.min.js +1 -1
  12. package/package.json +6 -6
  13. package/.editorconfig +0 -22
  14. package/.eslintrc.js +0 -406
  15. package/.github/workflows/checks.yml +0 -101
  16. package/.github/workflows/perfs.yml +0 -22
  17. package/.github/workflows/sonarcloud_analysis.yml +0 -20
  18. package/CONTRIBUTING.md +0 -272
  19. package/FILES.md +0 -283
  20. package/jest.config.js +0 -73
  21. package/manifest.mpd +0 -149
  22. package/scripts/README.md +0 -11
  23. package/scripts/build/constants.d.ts +0 -53
  24. package/scripts/build/generate_build.js +0 -190
  25. package/scripts/build/templates/experimental/features/index.d.ts +0 -16
  26. package/scripts/build/templates/experimental/features/index.js +0 -16
  27. package/scripts/build/templates/experimental/index.d.ts +0 -16
  28. package/scripts/build/templates/experimental/index.js +0 -16
  29. package/scripts/build/templates/experimental/tools/VideoThumbnailLoader/index.d.ts +0 -18
  30. package/scripts/build/templates/experimental/tools/VideoThumbnailLoader/index.js +0 -18
  31. package/scripts/build/templates/experimental/tools/index.d.ts +0 -16
  32. package/scripts/build/templates/experimental/tools/index.js +0 -16
  33. package/scripts/build/templates/features/index.d.ts +0 -16
  34. package/scripts/build/templates/features/index.js +0 -16
  35. package/scripts/build/templates/logger/index.d.ts +0 -17
  36. package/scripts/build/templates/logger/index.js +0 -17
  37. package/scripts/build/templates/minimal/index.d.ts +0 -17
  38. package/scripts/build/templates/minimal/index.js +0 -17
  39. package/scripts/build/templates/tools/TextTrackRenderer.d.ts +0 -18
  40. package/scripts/build/templates/tools/TextTrackRenderer.js +0 -18
  41. package/scripts/build/templates/tools/index.d.ts +0 -16
  42. package/scripts/build/templates/tools/index.js +0 -16
  43. package/scripts/build/templates/tools/string-utils.d.ts +0 -18
  44. package/scripts/build/templates/tools/string-utils.js +0 -18
  45. package/scripts/build/templates/types/index.d.ts +0 -16
  46. package/scripts/build/templates/types/index.js +0 -15
  47. package/scripts/canal-release.patch +0 -316
  48. package/scripts/check_nodejs_import_compatibility.js +0 -60
  49. package/scripts/deploy_new_demo +0 -123
  50. package/scripts/fast_demo_build.js +0 -129
  51. package/scripts/generate_certificate +0 -19
  52. package/scripts/generate_demo_list.js +0 -105
  53. package/scripts/generate_documentation_list.js +0 -109
  54. package/scripts/generate_full_demo.js +0 -201
  55. package/scripts/generate_standalone_demo.js +0 -82
  56. package/scripts/launch_static_server.js +0 -163
  57. package/scripts/list-npm-scripts.js +0 -207
  58. package/scripts/make-dev-releases +0 -90
  59. package/scripts/report_build_sizes +0 -96
  60. package/scripts/run_standalone_demo.js +0 -27
  61. package/scripts/start_demo_web_server.js +0 -44
  62. package/scripts/update-version +0 -48
  63. package/scripts/update_gh-pages_demo +0 -132
  64. package/scripts/update_gh-pages_doc +0 -106
  65. package/scripts/utils/display_webpack_errors.js +0 -33
  66. package/scripts/utils/get_human_readable_hours.js +0 -14
  67. package/scripts/wasm-strip.js +0 -359
  68. package/sonar-project.properties +0 -7
  69. package/src/README.md +0 -136
  70. package/src/compat/README.md +0 -29
  71. package/src/compat/__tests__/add_text_track.test.ts +0 -176
  72. package/src/compat/__tests__/browser_compatibility_types.test.ts +0 -152
  73. package/src/compat/__tests__/browser_version.test.ts +0 -84
  74. package/src/compat/__tests__/can_patch_isobmff.test.ts +0 -50
  75. package/src/compat/__tests__/can_rely_on_video_visibility_and_size.test.ts +0 -78
  76. package/src/compat/__tests__/can_reuse_media_keys.test.ts +0 -31
  77. package/src/compat/__tests__/change_source_buffer_type.test.ts +0 -60
  78. package/src/compat/__tests__/clear_element_src.test.ts +0 -252
  79. package/src/compat/__tests__/enable_audio_track.test.ts +0 -341
  80. package/src/compat/__tests__/fullscreen.test.ts +0 -286
  81. package/src/compat/__tests__/is_codec_supported.test.ts +0 -78
  82. package/src/compat/__tests__/is_offline.test.ts +0 -65
  83. package/src/compat/__tests__/is_seeking_approximate.test.ts +0 -48
  84. package/src/compat/__tests__/is_vtt_cue.test.ts +0 -71
  85. package/src/compat/__tests__/make_vtt_cue.test.ts +0 -97
  86. package/src/compat/__tests__/patch_webkit_source_buffer.test.ts +0 -144
  87. package/src/compat/__tests__/remove_cue.test.ts +0 -229
  88. package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +0 -128
  89. package/src/compat/__tests__/should_reload_media_source_on_decipherability_update.test.ts +0 -50
  90. package/src/compat/__tests__/should_renew_media_key_system_access.test.ts +0 -55
  91. package/src/compat/__tests__/should_unset_media_keys.test.ts +0 -53
  92. package/src/compat/__tests__/should_validate_metadata.test.ts +0 -53
  93. package/src/compat/__tests__/should_wait_for_data_before_loaded.test.ts +0 -121
  94. package/src/compat/__tests__/should_wait_for_have_enough_data.test.ts +0 -36
  95. package/src/compat/add_class_name.ts +0 -41
  96. package/src/compat/add_text_track.ts +0 -58
  97. package/src/compat/browser_compatibility_types.ts +0 -222
  98. package/src/compat/browser_detection.ts +0 -172
  99. package/src/compat/browser_version.ts +0 -44
  100. package/src/compat/can_patch_isobmff.ts +0 -30
  101. package/src/compat/can_rely_on_video_visibility_and_size.ts +0 -52
  102. package/src/compat/can_reuse_media_keys.ts +0 -20
  103. package/src/compat/change_source_buffer_type.ts +0 -66
  104. package/src/compat/clear_element_src.ts +0 -55
  105. package/src/compat/eme/close_session.ts +0 -111
  106. package/src/compat/eme/constants.ts +0 -21
  107. package/src/compat/eme/custom_key_system_access.ts +0 -67
  108. package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +0 -186
  109. package/src/compat/eme/custom_media_keys/index.ts +0 -28
  110. package/src/compat/eme/custom_media_keys/moz_media_keys_constructor.ts +0 -88
  111. package/src/compat/eme/custom_media_keys/ms_media_keys_constructor.ts +0 -69
  112. package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +0 -235
  113. package/src/compat/eme/custom_media_keys/types.ts +0 -67
  114. package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +0 -308
  115. package/src/compat/eme/custom_media_keys/webkit_media_keys_constructor.ts +0 -50
  116. package/src/compat/eme/eme-api-implementation.ts +0 -318
  117. package/src/compat/eme/generate_key_request.ts +0 -162
  118. package/src/compat/eme/get_init_data.ts +0 -159
  119. package/src/compat/eme/get_uuid_kid_from_keystatus_kid.ts +0 -37
  120. package/src/compat/eme/get_webkit_fairplay_initdata.ts +0 -75
  121. package/src/compat/eme/index.ts +0 -47
  122. package/src/compat/eme/load_session.ts +0 -67
  123. package/src/compat/enable_audio_track.ts +0 -33
  124. package/src/compat/event_listeners.ts +0 -566
  125. package/src/compat/fullscreen.ts +0 -87
  126. package/src/compat/get_start_date.ts +0 -48
  127. package/src/compat/has_issues_with_high_media_source_duration.ts +0 -27
  128. package/src/compat/index.ts +0 -87
  129. package/src/compat/is_codec_supported.ts +0 -40
  130. package/src/compat/is_debug_mode_enabled.ts +0 -12
  131. package/src/compat/is_node.ts +0 -18
  132. package/src/compat/is_offline.ts +0 -44
  133. package/src/compat/is_seeking_approximate.ts +0 -32
  134. package/src/compat/is_vtt_cue.ts +0 -30
  135. package/src/compat/make_vtt_cue.ts +0 -51
  136. package/src/compat/on_height_width_change.ts +0 -119
  137. package/src/compat/patch_webkit_source_buffer.ts +0 -89
  138. package/src/compat/remove_cue.ts +0 -64
  139. package/src/compat/should_favour_custom_safari_EME.ts +0 -34
  140. package/src/compat/should_prevent_seeking_at_0_initially.ts +0 -19
  141. package/src/compat/should_reload_media_source_on_decipherability_update.ts +0 -32
  142. package/src/compat/should_renew_media_key_system_access.ts +0 -26
  143. package/src/compat/should_unset_media_keys.ts +0 -27
  144. package/src/compat/should_validate_metadata.ts +0 -27
  145. package/src/compat/should_wait_for_data_before_loaded.ts +0 -35
  146. package/src/compat/should_wait_for_have_enough_data.ts +0 -17
  147. package/src/config.ts +0 -32
  148. package/src/core/README.md +0 -56
  149. package/src/core/adaptive/README.md +0 -147
  150. package/src/core/adaptive/__tests__/buffer_based_chooser.test.ts +0 -548
  151. package/src/core/adaptive/adaptive_representation_selector.ts +0 -916
  152. package/src/core/adaptive/buffer_based_chooser.ts +0 -264
  153. package/src/core/adaptive/guess_based_chooser.ts +0 -309
  154. package/src/core/adaptive/index.ts +0 -45
  155. package/src/core/adaptive/network_analyzer.ts +0 -419
  156. package/src/core/adaptive/utils/__tests__/bandwith_estimator.test.ts +0 -134
  157. package/src/core/adaptive/utils/__tests__/ewma.test.ts +0 -79
  158. package/src/core/adaptive/utils/__tests__/filter_by_bitrate.test.ts +0 -56
  159. package/src/core/adaptive/utils/__tests__/filter_by_width.test.ts +0 -60
  160. package/src/core/adaptive/utils/__tests__/get_buffer_levels.test.ts +0 -48
  161. package/src/core/adaptive/utils/__tests__/select_optimal_representation.test.ts +0 -243
  162. package/src/core/adaptive/utils/bandwidth_estimator.ts +0 -88
  163. package/src/core/adaptive/utils/ewma.ts +0 -59
  164. package/src/core/adaptive/utils/filter_by_bitrate.ts +0 -46
  165. package/src/core/adaptive/utils/filter_by_width.ts +0 -49
  166. package/src/core/adaptive/utils/get_buffer_levels.ts +0 -50
  167. package/src/core/adaptive/utils/last_estimate_storage.ts +0 -79
  168. package/src/core/adaptive/utils/pending_requests_store.ts +0 -147
  169. package/src/core/adaptive/utils/representation_score_calculator.ts +0 -168
  170. package/src/core/adaptive/utils/select_optimal_representation.ts +0 -54
  171. package/src/core/api/README.md +0 -36
  172. package/src/core/api/__tests__/option_utils.test.ts +0 -1668
  173. package/src/core/api/__tests__/public_api.test.ts +0 -857
  174. package/src/core/api/__tests__/utils.test.ts +0 -195
  175. package/src/core/api/debug/buffer_graph.ts +0 -244
  176. package/src/core/api/debug/buffer_size_graph.ts +0 -130
  177. package/src/core/api/debug/constants.ts +0 -2
  178. package/src/core/api/debug/index.ts +0 -3
  179. package/src/core/api/debug/modules/general_info.ts +0 -213
  180. package/src/core/api/debug/modules/segment_buffer_content.ts +0 -155
  181. package/src/core/api/debug/modules/segment_buffer_size.ts +0 -48
  182. package/src/core/api/debug/render.ts +0 -40
  183. package/src/core/api/debug/utils.ts +0 -103
  184. package/src/core/api/index.ts +0 -27
  185. package/src/core/api/option_utils.ts +0 -700
  186. package/src/core/api/playback_observer.ts +0 -994
  187. package/src/core/api/public_api.ts +0 -3247
  188. package/src/core/api/tracks_management/__tests__/media_element_track_choice_manager.test.ts +0 -184
  189. package/src/core/api/tracks_management/media_element_track_choice_manager.ts +0 -975
  190. package/src/core/api/tracks_management/track_choice_manager.ts +0 -1280
  191. package/src/core/api/utils.ts +0 -216
  192. package/src/core/decrypt/README.md +0 -22
  193. package/src/core/decrypt/__tests__/__global__/get_license.test.ts +0 -422
  194. package/src/core/decrypt/__tests__/__global__/init_data.test.ts +0 -677
  195. package/src/core/decrypt/__tests__/__global__/media_key_system_access.test.ts +0 -528
  196. package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +0 -343
  197. package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +0 -264
  198. package/src/core/decrypt/__tests__/__global__/utils.ts +0 -491
  199. package/src/core/decrypt/attach_media_keys.ts +0 -121
  200. package/src/core/decrypt/clear_on_stop.ts +0 -47
  201. package/src/core/decrypt/content_decryptor.ts +0 -1246
  202. package/src/core/decrypt/create_or_load_session.ts +0 -133
  203. package/src/core/decrypt/create_session.ts +0 -214
  204. package/src/core/decrypt/dispose_decryption_resources.ts +0 -54
  205. package/src/core/decrypt/find_key_system.ts +0 -376
  206. package/src/core/decrypt/get_key_system_configuration.ts +0 -51
  207. package/src/core/decrypt/get_media_keys.ts +0 -147
  208. package/src/core/decrypt/index.ts +0 -36
  209. package/src/core/decrypt/init_media_keys.ts +0 -60
  210. package/src/core/decrypt/session_events_listener.ts +0 -386
  211. package/src/core/decrypt/set_server_certificate.ts +0 -105
  212. package/src/core/decrypt/types.ts +0 -404
  213. package/src/core/decrypt/utils/__tests__/are_init_values_compatible.test.ts +0 -261
  214. package/src/core/decrypt/utils/__tests__/clean_old_loaded_sessions.test.ts +0 -158
  215. package/src/core/decrypt/utils/__tests__/clean_old_stored_persistent_info.test.ts +0 -133
  216. package/src/core/decrypt/utils/are_init_values_compatible.ts +0 -140
  217. package/src/core/decrypt/utils/check_key_statuses.ts +0 -193
  218. package/src/core/decrypt/utils/clean_old_loaded_sessions.ts +0 -45
  219. package/src/core/decrypt/utils/clean_old_stored_persistent_info.ts +0 -48
  220. package/src/core/decrypt/utils/get_drm_system_id.ts +0 -42
  221. package/src/core/decrypt/utils/init_data_values_container.ts +0 -119
  222. package/src/core/decrypt/utils/is_session_usable.ts +0 -62
  223. package/src/core/decrypt/utils/key_id_comparison.ts +0 -57
  224. package/src/core/decrypt/utils/key_session_record.ts +0 -174
  225. package/src/core/decrypt/utils/loaded_sessions_store.ts +0 -505
  226. package/src/core/decrypt/utils/media_keys_infos_store.ts +0 -85
  227. package/src/core/decrypt/utils/persistent_sessions_store.ts +0 -358
  228. package/src/core/decrypt/utils/serializable_bytes.ts +0 -59
  229. package/src/core/decrypt/utils/server_certificate_store.ts +0 -133
  230. package/src/core/fetchers/README.md +0 -84
  231. package/src/core/fetchers/cdn_prioritizer.ts +0 -207
  232. package/src/core/fetchers/index.ts +0 -38
  233. package/src/core/fetchers/manifest/index.ts +0 -28
  234. package/src/core/fetchers/manifest/manifest_fetcher.ts +0 -798
  235. package/src/core/fetchers/segment/__tests__/task_prioritizer.test.ts +0 -763
  236. package/src/core/fetchers/segment/index.ts +0 -28
  237. package/src/core/fetchers/segment/prioritized_segment_fetcher.ts +0 -113
  238. package/src/core/fetchers/segment/segment_fetcher.ts +0 -482
  239. package/src/core/fetchers/segment/segment_fetcher_creator.ts +0 -129
  240. package/src/core/fetchers/segment/task_prioritizer.ts +0 -455
  241. package/src/core/fetchers/utils/error_selector.ts +0 -38
  242. package/src/core/fetchers/utils/schedule_request.ts +0 -493
  243. package/src/core/init/README.md +0 -81
  244. package/src/core/init/directfile_content_initializer.ts +0 -310
  245. package/src/core/init/index.ts +0 -22
  246. package/src/core/init/media_source_content_initializer.ts +0 -878
  247. package/src/core/init/types.ts +0 -266
  248. package/src/core/init/utils/__tests__/are_same_stream_events.test.ts +0 -84
  249. package/src/core/init/utils/__tests__/refresh_scheduled_events_list.test.ts +0 -94
  250. package/src/core/init/utils/content_time_boundaries_observer.ts +0 -646
  251. package/src/core/init/utils/create_media_source.ts +0 -139
  252. package/src/core/init/utils/create_stream_playback_observer.ts +0 -132
  253. package/src/core/init/utils/end_of_stream.ts +0 -108
  254. package/src/core/init/utils/get_initial_time.ts +0 -165
  255. package/src/core/init/utils/get_loaded_reference.ts +0 -82
  256. package/src/core/init/utils/initial_seek_and_play.ts +0 -237
  257. package/src/core/init/utils/initialize_content_decryption.ts +0 -172
  258. package/src/core/init/utils/media_source_duration_updater.ts +0 -349
  259. package/src/core/init/utils/rebuffering_controller.ts +0 -642
  260. package/src/core/init/utils/stream_events_emitter/are_same_stream_events.ts +0 -42
  261. package/src/core/init/utils/stream_events_emitter/index.ts +0 -22
  262. package/src/core/init/utils/stream_events_emitter/refresh_scheduled_events_list.ts +0 -74
  263. package/src/core/init/utils/stream_events_emitter/stream_events_emitter.ts +0 -252
  264. package/src/core/init/utils/stream_events_emitter/types.ts +0 -46
  265. package/src/core/init/utils/throw_on_media_error.ts +0 -74
  266. package/src/core/segment_buffers/README.md +0 -219
  267. package/src/core/segment_buffers/garbage_collector.ts +0 -177
  268. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +0 -650
  269. package/src/core/segment_buffers/implementations/audio_video/index.ts +0 -18
  270. package/src/core/segment_buffers/implementations/image/image_segment_buffer.ts +0 -152
  271. package/src/core/segment_buffers/implementations/image/index.ts +0 -18
  272. package/src/core/segment_buffers/implementations/index.ts +0 -20
  273. package/src/core/segment_buffers/implementations/text/html/__tests__/utils.test.ts +0 -343
  274. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +0 -527
  275. package/src/core/segment_buffers/implementations/text/html/index.ts +0 -24
  276. package/src/core/segment_buffers/implementations/text/html/parsers.ts +0 -49
  277. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +0 -391
  278. package/src/core/segment_buffers/implementations/text/html/types.ts +0 -23
  279. package/src/core/segment_buffers/implementations/text/html/update_proportional_elements.ts +0 -93
  280. package/src/core/segment_buffers/implementations/text/html/utils.ts +0 -139
  281. package/src/core/segment_buffers/implementations/text/native/index.ts +0 -19
  282. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +0 -340
  283. package/src/core/segment_buffers/implementations/text/native/parsers.ts +0 -47
  284. package/src/core/segment_buffers/implementations/types.ts +0 -386
  285. package/src/core/segment_buffers/implementations/utils/manual_time_ranges.ts +0 -80
  286. package/src/core/segment_buffers/index.ts +0 -67
  287. package/src/core/segment_buffers/inventory/buffered_history.ts +0 -131
  288. package/src/core/segment_buffers/inventory/index.ts +0 -30
  289. package/src/core/segment_buffers/inventory/segment_inventory.ts +0 -1111
  290. package/src/core/segment_buffers/inventory/types.ts +0 -35
  291. package/src/core/segment_buffers/segment_buffers_store.ts +0 -383
  292. package/src/core/stream/README.md +0 -59
  293. package/src/core/stream/adaptation/adaptation_stream.ts +0 -378
  294. package/src/core/stream/adaptation/index.ts +0 -20
  295. package/src/core/stream/adaptation/types.ts +0 -199
  296. package/src/core/stream/adaptation/utils/create_representation_estimator.ts +0 -114
  297. package/src/core/stream/index.ts +0 -38
  298. package/src/core/stream/orchestrator/README.md +0 -349
  299. package/src/core/stream/orchestrator/get_time_ranges_for_content.ts +0 -70
  300. package/src/core/stream/orchestrator/index.ts +0 -30
  301. package/src/core/stream/orchestrator/stream_orchestrator.ts +0 -664
  302. package/src/core/stream/period/index.ts +0 -20
  303. package/src/core/stream/period/period_stream.ts +0 -469
  304. package/src/core/stream/period/types.ts +0 -132
  305. package/src/core/stream/period/utils/get_adaptation_switch_strategy.ts +0 -287
  306. package/src/core/stream/representation/README.md +0 -16
  307. package/src/core/stream/representation/index.ts +0 -20
  308. package/src/core/stream/representation/representation_stream.ts +0 -474
  309. package/src/core/stream/representation/types.ts +0 -292
  310. package/src/core/stream/representation/utils/append_segment_to_buffer.ts +0 -77
  311. package/src/core/stream/representation/utils/check_for_discontinuity.ts +0 -305
  312. package/src/core/stream/representation/utils/downloading_queue.ts +0 -603
  313. package/src/core/stream/representation/utils/force_garbage_collection.ts +0 -113
  314. package/src/core/stream/representation/utils/get_buffer_status.ts +0 -322
  315. package/src/core/stream/representation/utils/get_needed_segments.ts +0 -617
  316. package/src/core/stream/representation/utils/get_segment_priority.ts +0 -43
  317. package/src/core/stream/representation/utils/push_init_segment.ts +0 -85
  318. package/src/core/stream/representation/utils/push_media_segment.ts +0 -113
  319. package/src/default_config.ts +0 -1293
  320. package/src/errors/README.md +0 -6
  321. package/src/errors/__tests__/assertion_error.test.ts +0 -26
  322. package/src/errors/__tests__/encrypted_media_error.test.ts +0 -45
  323. package/src/errors/__tests__/error_message.test.ts +0 -23
  324. package/src/errors/__tests__/format_error.test.ts +0 -62
  325. package/src/errors/__tests__/is_known_error.test.ts +0 -65
  326. package/src/errors/__tests__/media_error.test.ts +0 -55
  327. package/src/errors/__tests__/network_error.test.ts +0 -84
  328. package/src/errors/__tests__/other_error.test.ts +0 -53
  329. package/src/errors/__tests__/request_error.test.ts +0 -45
  330. package/src/errors/assertion_error.ts +0 -40
  331. package/src/errors/custom_loader_error.ts +0 -57
  332. package/src/errors/encrypted_media_error.ts +0 -71
  333. package/src/errors/error_codes.ts +0 -149
  334. package/src/errors/error_message.ts +0 -30
  335. package/src/errors/format_error.ts +0 -39
  336. package/src/errors/index.ts +0 -52
  337. package/src/errors/is_known_error.ts +0 -35
  338. package/src/errors/media_error.ts +0 -118
  339. package/src/errors/network_error.ts +0 -74
  340. package/src/errors/other_error.ts +0 -50
  341. package/src/errors/request_error.ts +0 -76
  342. package/src/experimental/README.md +0 -16
  343. package/src/experimental/features/__tests__/dash_wasm.test.ts +0 -44
  344. package/src/experimental/features/__tests__/debug_element.test.ts +0 -12
  345. package/src/experimental/features/__tests__/index.test.ts +0 -19
  346. package/src/experimental/features/__tests__/local.test.ts +0 -35
  347. package/src/experimental/features/__tests__/metaplaylist.test.ts +0 -35
  348. package/src/experimental/features/dash_wasm.ts +0 -41
  349. package/src/experimental/features/debug_element.ts +0 -13
  350. package/src/experimental/features/index.ts +0 -20
  351. package/src/experimental/features/local.ts +0 -28
  352. package/src/experimental/features/metaplaylist.ts +0 -28
  353. package/src/experimental/index.ts +0 -5
  354. package/src/experimental/tools/VideoThumbnailLoader/features/dash.ts +0 -23
  355. package/src/experimental/tools/VideoThumbnailLoader/features/metaplaylist.ts +0 -23
  356. package/src/experimental/tools/VideoThumbnailLoader/index.ts +0 -25
  357. package/src/experimental/tools/VideoThumbnailLoader/load_and_push_segment.ts +0 -77
  358. package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +0 -75
  359. package/src/experimental/tools/VideoThumbnailLoader/remove_buffer_around_time.ts +0 -54
  360. package/src/experimental/tools/VideoThumbnailLoader/types.ts +0 -39
  361. package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +0 -423
  362. package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader_error.ts +0 -34
  363. package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +0 -141
  364. package/src/experimental/tools/createMetaplaylist/index.ts +0 -72
  365. package/src/experimental/tools/index.ts +0 -27
  366. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/capabilities.test.ts +0 -37
  367. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +0 -140
  368. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +0 -153
  369. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/decodingInfos.test.ts +0 -405
  370. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/defaultCodecFinder.test.ts +0 -136
  371. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaContentType.test.ts +0 -294
  372. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaDisplayInfos.test.ts +0 -189
  373. package/src/experimental/tools/mediaCapabilitiesProber/__tests__/utils.test.ts +0 -361
  374. package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +0 -184
  375. package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +0 -136
  376. package/src/experimental/tools/mediaCapabilitiesProber/capabilities.ts +0 -169
  377. package/src/experimental/tools/mediaCapabilitiesProber/index.ts +0 -18
  378. package/src/experimental/tools/mediaCapabilitiesProber/log.ts +0 -21
  379. package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +0 -67
  380. package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +0 -89
  381. package/src/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.ts +0 -100
  382. package/src/experimental/tools/mediaCapabilitiesProber/probers/defaultCodecsFinder.ts +0 -66
  383. package/src/experimental/tools/mediaCapabilitiesProber/probers/index.ts +0 -44
  384. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.ts +0 -66
  385. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/format.ts +0 -100
  386. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.ts +0 -105
  387. package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.ts +0 -54
  388. package/src/experimental/tools/mediaCapabilitiesProber/types.ts +0 -75
  389. package/src/experimental/tools/mediaCapabilitiesProber/utils.ts +0 -107
  390. package/src/experimental/tools/parseBIFThumbnails.ts +0 -39
  391. package/src/features/README.md +0 -11
  392. package/src/features/__tests__/add_features.test.ts +0 -69
  393. package/src/features/__tests__/initialize_features.test.ts +0 -674
  394. package/src/features/add_features.ts +0 -37
  395. package/src/features/features_object.ts +0 -37
  396. package/src/features/index.ts +0 -40
  397. package/src/features/initialize_features.ts +0 -136
  398. package/src/features/list/__tests__/bif_parser.test.ts +0 -30
  399. package/src/features/list/__tests__/dash.test.ts +0 -41
  400. package/src/features/list/__tests__/directfile.test.ts +0 -35
  401. package/src/features/list/__tests__/eme.test.ts +0 -28
  402. package/src/features/list/__tests__/html_sami_parser.test.ts +0 -33
  403. package/src/features/list/__tests__/html_srt_parser.test.ts +0 -33
  404. package/src/features/list/__tests__/html_text_buffer.test.ts +0 -29
  405. package/src/features/list/__tests__/html_ttml_parser.test.ts +0 -33
  406. package/src/features/list/__tests__/html_vtt_parser.test.ts +0 -33
  407. package/src/features/list/__tests__/image_buffer.test.ts +0 -28
  408. package/src/features/list/__tests__/index.test.ts +0 -55
  409. package/src/features/list/__tests__/native_sami_parser.test.ts +0 -33
  410. package/src/features/list/__tests__/native_srt_parser.test.ts +0 -33
  411. package/src/features/list/__tests__/native_text_buffer.test.ts +0 -29
  412. package/src/features/list/__tests__/native_ttml_parser.test.ts +0 -33
  413. package/src/features/list/__tests__/native_vtt_parser.test.ts +0 -33
  414. package/src/features/list/__tests__/smooth.test.ts +0 -36
  415. package/src/features/list/bif_parser.ts +0 -31
  416. package/src/features/list/dash.ts +0 -36
  417. package/src/features/list/directfile.ts +0 -35
  418. package/src/features/list/eme.ts +0 -29
  419. package/src/features/list/html_sami_parser.ts +0 -31
  420. package/src/features/list/html_srt_parser.ts +0 -31
  421. package/src/features/list/html_text_buffer.ts +0 -29
  422. package/src/features/list/html_ttml_parser.ts +0 -31
  423. package/src/features/list/html_vtt_parser.ts +0 -31
  424. package/src/features/list/image_buffer.ts +0 -29
  425. package/src/features/list/index.ts +0 -32
  426. package/src/features/list/native_sami_parser.ts +0 -32
  427. package/src/features/list/native_srt_parser.ts +0 -32
  428. package/src/features/list/native_text_buffer.ts +0 -30
  429. package/src/features/list/native_ttml_parser.ts +0 -32
  430. package/src/features/list/native_vtt_parser.ts +0 -32
  431. package/src/features/list/smooth.ts +0 -32
  432. package/src/features/types.ts +0 -183
  433. package/src/index.ts +0 -38
  434. package/src/log.ts +0 -22
  435. package/src/manifest/README.md +0 -55
  436. package/src/manifest/__tests__/adaptation.test.ts +0 -485
  437. package/src/manifest/__tests__/manifest.test.ts +0 -428
  438. package/src/manifest/__tests__/period.test.ts +0 -769
  439. package/src/manifest/__tests__/representation.test.ts +0 -297
  440. package/src/manifest/__tests__/update_period_in_place.test.ts +0 -1074
  441. package/src/manifest/__tests__/update_periods.test.ts +0 -845
  442. package/src/manifest/adaptation.ts +0 -294
  443. package/src/manifest/index.ts +0 -67
  444. package/src/manifest/manifest.ts +0 -811
  445. package/src/manifest/period.ts +0 -211
  446. package/src/manifest/representation.ts +0 -451
  447. package/src/manifest/representation_index/__tests__/static.test.ts +0 -74
  448. package/src/manifest/representation_index/index.ts +0 -31
  449. package/src/manifest/representation_index/static.ts +0 -158
  450. package/src/manifest/representation_index/types.ts +0 -433
  451. package/src/manifest/types.ts +0 -33
  452. package/src/manifest/update_period_in_place.ts +0 -142
  453. package/src/manifest/update_periods.ts +0 -201
  454. package/src/manifest/utils.ts +0 -60
  455. package/src/minimal.ts +0 -34
  456. package/src/parsers/README.md +0 -12
  457. package/src/parsers/containers/isobmff/constants.ts +0 -24
  458. package/src/parsers/containers/isobmff/create_box.ts +0 -81
  459. package/src/parsers/containers/isobmff/drm/index.ts +0 -17
  460. package/src/parsers/containers/isobmff/drm/playready.ts +0 -45
  461. package/src/parsers/containers/isobmff/get_box.ts +0 -278
  462. package/src/parsers/containers/isobmff/index.ts +0 -51
  463. package/src/parsers/containers/isobmff/read.ts +0 -105
  464. package/src/parsers/containers/isobmff/take_pssh_out.ts +0 -101
  465. package/src/parsers/containers/isobmff/utils.ts +0 -555
  466. package/src/parsers/containers/matroska/index.ts +0 -21
  467. package/src/parsers/containers/matroska/utils.ts +0 -313
  468. package/src/parsers/images/bif.ts +0 -128
  469. package/src/parsers/manifest/dash/common/__tests__/attach_trickmode_track.test.ts +0 -65
  470. package/src/parsers/manifest/dash/common/__tests__/convert_supplemental_codecs.test.ts +0 -37
  471. package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +0 -162
  472. package/src/parsers/manifest/dash/common/__tests__/get_clock_offset.test.ts +0 -65
  473. package/src/parsers/manifest/dash/common/__tests__/get_http_utc-timing_url.test.ts +0 -165
  474. package/src/parsers/manifest/dash/common/__tests__/get_periods_time_infos.test.ts +0 -118
  475. package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +0 -290
  476. package/src/parsers/manifest/dash/common/__tests__/parse_availability_start_time.test.ts +0 -63
  477. package/src/parsers/manifest/dash/common/attach_trickmode_track.ts +0 -55
  478. package/src/parsers/manifest/dash/common/convert_supplemental_codecs.ts +0 -32
  479. package/src/parsers/manifest/dash/common/flatten_overlapping_periods.ts +0 -87
  480. package/src/parsers/manifest/dash/common/get_clock_offset.ts +0 -41
  481. package/src/parsers/manifest/dash/common/get_hdr_information.ts +0 -94
  482. package/src/parsers/manifest/dash/common/get_http_utc-timing_url.ts +0 -46
  483. package/src/parsers/manifest/dash/common/get_minimum_and_maximum_positions.ts +0 -39
  484. package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +0 -91
  485. package/src/parsers/manifest/dash/common/index.ts +0 -40
  486. package/src/parsers/manifest/dash/common/indexes/__tests__/tokens.test.ts +0 -60
  487. package/src/parsers/manifest/dash/common/indexes/base.ts +0 -444
  488. package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +0 -55
  489. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +0 -148
  490. package/src/parsers/manifest/dash/common/indexes/index.ts +0 -39
  491. package/src/parsers/manifest/dash/common/indexes/list.ts +0 -338
  492. package/src/parsers/manifest/dash/common/indexes/template.ts +0 -652
  493. package/src/parsers/manifest/dash/common/indexes/timeline/__tests__/parse_s_element.test.ts +0 -115
  494. package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +0 -54
  495. package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_previous_timeline.ts +0 -102
  496. package/src/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.ts +0 -66
  497. package/src/parsers/manifest/dash/common/indexes/timeline/find_first_common_start_time.ts +0 -153
  498. package/src/parsers/manifest/dash/common/indexes/timeline/index.ts +0 -21
  499. package/src/parsers/manifest/dash/common/indexes/timeline/parse_s_element.ts +0 -72
  500. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +0 -1049
  501. package/src/parsers/manifest/dash/common/indexes/tokens.ts +0 -127
  502. package/src/parsers/manifest/dash/common/indexes/utils.ts +0 -32
  503. package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +0 -142
  504. package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +0 -165
  505. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +0 -569
  506. package/src/parsers/manifest/dash/common/parse_availability_start_time.ts +0 -35
  507. package/src/parsers/manifest/dash/common/parse_mpd.ts +0 -399
  508. package/src/parsers/manifest/dash/common/parse_periods.ts +0 -363
  509. package/src/parsers/manifest/dash/common/parse_representation_index.ts +0 -199
  510. package/src/parsers/manifest/dash/common/parse_representations.ts +0 -352
  511. package/src/parsers/manifest/dash/common/resolve_base_urls.ts +0 -58
  512. package/src/parsers/manifest/dash/index.ts +0 -22
  513. package/src/parsers/manifest/dash/js-parser/__tests__/parse_from_document.test.ts +0 -45
  514. package/src/parsers/manifest/dash/js-parser/index.ts +0 -18
  515. package/src/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.ts +0 -381
  516. package/src/parsers/manifest/dash/js-parser/node_parsers/BaseURL.ts +0 -35
  517. package/src/parsers/manifest/dash/js-parser/node_parsers/ContentComponent.ts +0 -49
  518. package/src/parsers/manifest/dash/js-parser/node_parsers/ContentProtection.ts +0 -94
  519. package/src/parsers/manifest/dash/js-parser/node_parsers/EventStream.ts +0 -117
  520. package/src/parsers/manifest/dash/js-parser/node_parsers/Initialization.ts +0 -48
  521. package/src/parsers/manifest/dash/js-parser/node_parsers/MPD.ts +0 -180
  522. package/src/parsers/manifest/dash/js-parser/node_parsers/Period.ts +0 -152
  523. package/src/parsers/manifest/dash/js-parser/node_parsers/Representation.ts +0 -234
  524. package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentBase.ts +0 -112
  525. package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentList.ts +0 -50
  526. package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.ts +0 -98
  527. package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentTimeline.ts +0 -35
  528. package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentURL.ts +0 -63
  529. package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/AdaptationSet.test.ts +0 -407
  530. package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/ContentComponent.test.ts +0 -67
  531. package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/ContentProtection.test.ts +0 -223
  532. package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/Initialization.test.ts +0 -139
  533. package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/SegmentTimeline.test.ts +0 -119
  534. package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/SegmentURL.test.ts +0 -205
  535. package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/utils.test.ts +0 -218
  536. package/src/parsers/manifest/dash/js-parser/node_parsers/utils.ts +0 -384
  537. package/src/parsers/manifest/dash/js-parser/parse_from_document.ts +0 -129
  538. package/src/parsers/manifest/dash/node_parser_types.ts +0 -431
  539. package/src/parsers/manifest/dash/parsers_types.ts +0 -91
  540. package/src/parsers/manifest/dash/wasm-parser/Cargo.lock +0 -25
  541. package/src/parsers/manifest/dash/wasm-parser/Cargo.toml +0 -16
  542. package/src/parsers/manifest/dash/wasm-parser/README.md +0 -267
  543. package/src/parsers/manifest/dash/wasm-parser/index.ts +0 -21
  544. package/src/parsers/manifest/dash/wasm-parser/rs/errors.rs +0 -28
  545. package/src/parsers/manifest/dash/wasm-parser/rs/events.rs +0 -373
  546. package/src/parsers/manifest/dash/wasm-parser/rs/lib.rs +0 -85
  547. package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +0 -414
  548. package/src/parsers/manifest/dash/wasm-parser/rs/processor/mod.rs +0 -472
  549. package/src/parsers/manifest/dash/wasm-parser/rs/processor/s_element.rs +0 -72
  550. package/src/parsers/manifest/dash/wasm-parser/rs/reader.rs +0 -17
  551. package/src/parsers/manifest/dash/wasm-parser/rs/reportable.rs +0 -147
  552. package/src/parsers/manifest/dash/wasm-parser/rs/utils.rs +0 -217
  553. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +0 -477
  554. package/src/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.ts +0 -343
  555. package/src/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.ts +0 -38
  556. package/src/parsers/manifest/dash/wasm-parser/ts/generators/ContentComponent.ts +0 -53
  557. package/src/parsers/manifest/dash/wasm-parser/ts/generators/ContentProtection.ts +0 -62
  558. package/src/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.ts +0 -144
  559. package/src/parsers/manifest/dash/wasm-parser/ts/generators/MPD.ts +0 -183
  560. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Period.ts +0 -180
  561. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Representation.ts +0 -215
  562. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Scheme.ts +0 -44
  563. package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentBase.ts +0 -115
  564. package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.ts +0 -61
  565. package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentTemplate.ts +0 -133
  566. package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentUrl.ts +0 -70
  567. package/src/parsers/manifest/dash/wasm-parser/ts/generators/XLink.ts +0 -66
  568. package/src/parsers/manifest/dash/wasm-parser/ts/generators/index.ts +0 -17
  569. package/src/parsers/manifest/dash/wasm-parser/ts/generators/root.ts +0 -66
  570. package/src/parsers/manifest/dash/wasm-parser/ts/parsers_stack.ts +0 -80
  571. package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +0 -298
  572. package/src/parsers/manifest/dash/wasm-parser/ts/utils.ts +0 -47
  573. package/src/parsers/manifest/index.ts +0 -17
  574. package/src/parsers/manifest/local/index.ts +0 -25
  575. package/src/parsers/manifest/local/parse_local_manifest.ts +0 -164
  576. package/src/parsers/manifest/local/representation_index.ts +0 -246
  577. package/src/parsers/manifest/local/types.ts +0 -291
  578. package/src/parsers/manifest/metaplaylist/index.ts +0 -28
  579. package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +0 -335
  580. package/src/parsers/manifest/metaplaylist/representation_index.ts +0 -251
  581. package/src/parsers/manifest/smooth/create_parser.ts +0 -699
  582. package/src/parsers/manifest/smooth/get_codecs.ts +0 -55
  583. package/src/parsers/manifest/smooth/index.ts +0 -26
  584. package/src/parsers/manifest/smooth/parse_C_nodes.ts +0 -69
  585. package/src/parsers/manifest/smooth/parse_protection_node.ts +0 -72
  586. package/src/parsers/manifest/smooth/representation_index.ts +0 -704
  587. package/src/parsers/manifest/smooth/utils/add_segment_infos.ts +0 -77
  588. package/src/parsers/manifest/smooth/utils/parseBoolean.ts +0 -31
  589. package/src/parsers/manifest/smooth/utils/reduceChildren.ts +0 -36
  590. package/src/parsers/manifest/smooth/utils/tokens.ts +0 -46
  591. package/src/parsers/manifest/types.ts +0 -395
  592. package/src/parsers/manifest/utils/__tests__/get_first_time_from_adaptations.test.ts +0 -161
  593. package/src/parsers/manifest/utils/__tests__/get_last_time_from_adaptation.test.ts +0 -161
  594. package/src/parsers/manifest/utils/__tests__/index_helpers.test.ts +0 -55
  595. package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +0 -546
  596. package/src/parsers/manifest/utils/check_manifest_ids.ts +0 -83
  597. package/src/parsers/manifest/utils/clear_timeline_from_position.ts +0 -74
  598. package/src/parsers/manifest/utils/get_first_time_from_adaptation.ts +0 -48
  599. package/src/parsers/manifest/utils/get_last_time_from_adaptation.ts +0 -50
  600. package/src/parsers/manifest/utils/get_maximum_positions.ts +0 -87
  601. package/src/parsers/manifest/utils/get_minimum_position.ts +0 -80
  602. package/src/parsers/manifest/utils/index_helpers.ts +0 -204
  603. package/src/parsers/manifest/utils/update_segment_timeline.ts +0 -141
  604. package/src/parsers/texttracks/index.ts +0 -21
  605. package/src/parsers/texttracks/sami/html.ts +0 -219
  606. package/src/parsers/texttracks/sami/native.ts +0 -192
  607. package/src/parsers/texttracks/srt/__tests__/find_end_of_cue_block.test.ts +0 -99
  608. package/src/parsers/texttracks/srt/__tests__/get_cue_blocks.test.ts +0 -119
  609. package/src/parsers/texttracks/srt/__tests__/parse_cue.test.ts +0 -123
  610. package/src/parsers/texttracks/srt/__tests__/parse_timestamp.test.ts +0 -36
  611. package/src/parsers/texttracks/srt/find_end_of_cue_block.ts +0 -46
  612. package/src/parsers/texttracks/srt/get_cue_blocks.ts +0 -49
  613. package/src/parsers/texttracks/srt/html.ts +0 -182
  614. package/src/parsers/texttracks/srt/native.ts +0 -74
  615. package/src/parsers/texttracks/srt/parse_cue.ts +0 -76
  616. package/src/parsers/texttracks/srt/parse_timestamp.ts +0 -37
  617. package/src/parsers/texttracks/ttml/__tests__/resolve_styles_inheritance.test.ts +0 -248
  618. package/src/parsers/texttracks/ttml/get_parameters.ts +0 -106
  619. package/src/parsers/texttracks/ttml/get_styling.ts +0 -146
  620. package/src/parsers/texttracks/ttml/get_time_delimiters.ts +0 -49
  621. package/src/parsers/texttracks/ttml/html/__tests__/__global__/html_ttml_parser.test.test.ts +0 -190
  622. package/src/parsers/texttracks/ttml/html/__tests__/generate_css_test_outline.test.ts +0 -32
  623. package/src/parsers/texttracks/ttml/html/__tests__/ttml_color_to_css_color.test.ts +0 -62
  624. package/src/parsers/texttracks/ttml/html/apply_default_ttml_paragraph_style.ts +0 -67
  625. package/src/parsers/texttracks/ttml/html/apply_extent.ts +0 -65
  626. package/src/parsers/texttracks/ttml/html/apply_font_size.ts +0 -62
  627. package/src/parsers/texttracks/ttml/html/apply_line_height.ts +0 -50
  628. package/src/parsers/texttracks/ttml/html/apply_origin.ts +0 -64
  629. package/src/parsers/texttracks/ttml/html/apply_padding.ts +0 -141
  630. package/src/parsers/texttracks/ttml/html/create_element.ts +0 -549
  631. package/src/parsers/texttracks/ttml/html/generate_css_test_outline.ts +0 -46
  632. package/src/parsers/texttracks/ttml/html/index.ts +0 -23
  633. package/src/parsers/texttracks/ttml/html/parse_cue.ts +0 -65
  634. package/src/parsers/texttracks/ttml/html/parse_ttml_to_div.ts +0 -58
  635. package/src/parsers/texttracks/ttml/html/ttml_color_to_css_color.ts +0 -68
  636. package/src/parsers/texttracks/ttml/native/index.ts +0 -23
  637. package/src/parsers/texttracks/ttml/native/parse_cue.ts +0 -245
  638. package/src/parsers/texttracks/ttml/native/parse_ttml_to_vtt.ts +0 -39
  639. package/src/parsers/texttracks/ttml/parse_ttml.ts +0 -206
  640. package/src/parsers/texttracks/ttml/regexps.ts +0 -65
  641. package/src/parsers/texttracks/ttml/resolve_styles_inheritance.ts +0 -84
  642. package/src/parsers/texttracks/ttml/time_parsing.ts +0 -156
  643. package/src/parsers/texttracks/ttml/xml_utils.ts +0 -166
  644. package/src/parsers/texttracks/types.ts +0 -34
  645. package/src/parsers/texttracks/webvtt/__tests__/get_cue_blocks.test.ts +0 -218
  646. package/src/parsers/texttracks/webvtt/__tests__/get_style_blocks.test.ts +0 -65
  647. package/src/parsers/texttracks/webvtt/__tests__/parse_cue_block.test.ts +0 -249
  648. package/src/parsers/texttracks/webvtt/__tests__/parse_timestamp.test.ts +0 -39
  649. package/src/parsers/texttracks/webvtt/__tests__/utils.test.ts +0 -401
  650. package/src/parsers/texttracks/webvtt/get_cue_blocks.ts +0 -51
  651. package/src/parsers/texttracks/webvtt/get_style_blocks.ts +0 -56
  652. package/src/parsers/texttracks/webvtt/html/__tests__/convert_payload_to_html.test.ts +0 -106
  653. package/src/parsers/texttracks/webvtt/html/__tests__/create_default_style_elements.test.ts +0 -44
  654. package/src/parsers/texttracks/webvtt/html/__tests__/create_style_attribute.test.ts +0 -139
  655. package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +0 -140
  656. package/src/parsers/texttracks/webvtt/html/__tests__/parse_style_block.test.ts +0 -345
  657. package/src/parsers/texttracks/webvtt/html/__tests__/parse_webvtt_to_div.test.ts +0 -181
  658. package/src/parsers/texttracks/webvtt/html/__tests__/to_html.test.ts +0 -234
  659. package/src/parsers/texttracks/webvtt/html/convert_payload_to_html.ts +0 -46
  660. package/src/parsers/texttracks/webvtt/html/create_default_style_elements.ts +0 -26
  661. package/src/parsers/texttracks/webvtt/html/create_style_attribute.ts +0 -222
  662. package/src/parsers/texttracks/webvtt/html/create_styled_element.ts +0 -95
  663. package/src/parsers/texttracks/webvtt/html/index.ts +0 -25
  664. package/src/parsers/texttracks/webvtt/html/parse_style_block.ts +0 -76
  665. package/src/parsers/texttracks/webvtt/html/parse_webvtt_to_div.ts +0 -67
  666. package/src/parsers/texttracks/webvtt/html/to_html.ts +0 -96
  667. package/src/parsers/texttracks/webvtt/native/index.ts +0 -23
  668. package/src/parsers/texttracks/webvtt/native/parse_vtt_to_cues.ts +0 -70
  669. package/src/parsers/texttracks/webvtt/native/set_settings_on_cue.ts +0 -95
  670. package/src/parsers/texttracks/webvtt/native/to_native_cue.ts +0 -34
  671. package/src/parsers/texttracks/webvtt/parse_cue_block.ts +0 -128
  672. package/src/parsers/texttracks/webvtt/parse_timestamp.ts +0 -40
  673. package/src/parsers/texttracks/webvtt/utils.ts +0 -135
  674. package/src/public_types.ts +0 -846
  675. package/src/tools/README.md +0 -4
  676. package/src/tools/TextTrackRenderer/index.ts +0 -28
  677. package/src/tools/TextTrackRenderer/text_track_renderer.ts +0 -107
  678. package/src/tools/index.ts +0 -20
  679. package/src/tools/string_utils.ts +0 -24
  680. package/src/transports/README.md +0 -276
  681. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +0 -98
  682. package/src/transports/dash/construct_segment_url.ts +0 -28
  683. package/src/transports/dash/extract_complete_chunks.ts +0 -66
  684. package/src/transports/dash/get_events_out_of_emsgs.ts +0 -105
  685. package/src/transports/dash/image_pipelines.ts +0 -122
  686. package/src/transports/dash/index.ts +0 -23
  687. package/src/transports/dash/init_segment_loader.ts +0 -114
  688. package/src/transports/dash/low_latency_segment_loader.ts +0 -87
  689. package/src/transports/dash/manifest_parser.ts +0 -325
  690. package/src/transports/dash/pipelines.ts +0 -72
  691. package/src/transports/dash/segment_loader.ts +0 -249
  692. package/src/transports/dash/segment_parser.ts +0 -194
  693. package/src/transports/dash/text_loader.ts +0 -120
  694. package/src/transports/dash/text_parser.ts +0 -234
  695. package/src/transports/index.ts +0 -17
  696. package/src/transports/local/index.ts +0 -18
  697. package/src/transports/local/pipelines.ts +0 -100
  698. package/src/transports/local/segment_loader.ts +0 -198
  699. package/src/transports/local/segment_parser.ts +0 -101
  700. package/src/transports/local/text_parser.ts +0 -185
  701. package/src/transports/metaplaylist/README.md +0 -94
  702. package/src/transports/metaplaylist/index.ts +0 -23
  703. package/src/transports/metaplaylist/manifest_loader.ts +0 -62
  704. package/src/transports/metaplaylist/pipelines.ts +0 -425
  705. package/src/transports/smooth/extract_timings_infos.ts +0 -142
  706. package/src/transports/smooth/index.ts +0 -23
  707. package/src/transports/smooth/isobmff/__tests__/create_boxes.test.ts +0 -231
  708. package/src/transports/smooth/isobmff/create_audio_init_segment.ts +0 -84
  709. package/src/transports/smooth/isobmff/create_boxes.ts +0 -481
  710. package/src/transports/smooth/isobmff/create_init_segment.ts +0 -100
  711. package/src/transports/smooth/isobmff/create_traf_box.ts +0 -40
  712. package/src/transports/smooth/isobmff/create_video_init_segment.ts +0 -78
  713. package/src/transports/smooth/isobmff/get_aaces_header.ts +0 -62
  714. package/src/transports/smooth/isobmff/index.ts +0 -32
  715. package/src/transports/smooth/isobmff/parse_tfrf.ts +0 -57
  716. package/src/transports/smooth/isobmff/parse_tfxd.ts +0 -38
  717. package/src/transports/smooth/isobmff/patch_segment.ts +0 -171
  718. package/src/transports/smooth/pipelines.ts +0 -533
  719. package/src/transports/smooth/segment_loader.ts +0 -288
  720. package/src/transports/smooth/utils.ts +0 -106
  721. package/src/transports/types.ts +0 -809
  722. package/src/transports/utils/__tests__/byte_range.test.ts +0 -35
  723. package/src/transports/utils/__tests__/check_isobmff_integrity.test.ts +0 -148
  724. package/src/transports/utils/__tests__/find_complete_box.test.ts +0 -138
  725. package/src/transports/utils/__tests__/infer_segment_container.test.ts +0 -227
  726. package/src/transports/utils/byte_range.ts +0 -25
  727. package/src/transports/utils/call_custom_manifest_loader.ts +0 -147
  728. package/src/transports/utils/check_isobmff_integrity.ts +0 -50
  729. package/src/transports/utils/find_complete_box.ts +0 -63
  730. package/src/transports/utils/generate_manifest_loader.ts +0 -97
  731. package/src/transports/utils/get_isobmff_timing_infos.ts +0 -86
  732. package/src/transports/utils/infer_segment_container.ts +0 -56
  733. package/src/transports/utils/parse_text_track.ts +0 -176
  734. package/src/typings/README.md +0 -7
  735. package/src/typings/globals.d.ts +0 -83
  736. package/src/typings/next-tick.d.ts +0 -23
  737. package/src/utils/README.md +0 -5
  738. package/src/utils/__tests__/are_arrays_of_numbers_equal.test.ts +0 -86
  739. package/src/utils/__tests__/are_codecs_compatible.test.ts +0 -88
  740. package/src/utils/__tests__/array_find.test.ts +0 -113
  741. package/src/utils/__tests__/array_find_index.test.ts +0 -113
  742. package/src/utils/__tests__/array_includes.test.ts +0 -151
  743. package/src/utils/__tests__/assert.test.ts +0 -237
  744. package/src/utils/__tests__/assert_unreachable.test.ts +0 -40
  745. package/src/utils/__tests__/base64.test.ts +0 -147
  746. package/src/utils/__tests__/byte_parsing.test.ts +0 -267
  747. package/src/utils/__tests__/deep_merge.test.ts +0 -48
  748. package/src/utils/__tests__/event_emitter.test.ts +0 -579
  749. package/src/utils/__tests__/flat_map.test.ts +0 -71
  750. package/src/utils/__tests__/get_fuzzed_delay.test.ts +0 -32
  751. package/src/utils/__tests__/hash_buffer.test.ts +0 -105
  752. package/src/utils/__tests__/id_generator.test.ts +0 -80
  753. package/src/utils/__tests__/initialization_segment_cache.test.ts +0 -245
  754. package/src/utils/__tests__/is_non_empty_string.test.ts +0 -41
  755. package/src/utils/__tests__/is_null_or_undefined.test.ts +0 -33
  756. package/src/utils/__tests__/list_to_map.test.ts +0 -46
  757. package/src/utils/__tests__/logger.test.ts +0 -214
  758. package/src/utils/__tests__/noop.test.ts +0 -23
  759. package/src/utils/__tests__/object_assign.test.ts +0 -56
  760. package/src/utils/__tests__/object_values.test.ts +0 -26
  761. package/src/utils/__tests__/ranges.test.ts +0 -907
  762. package/src/utils/__tests__/resolve_url.test.ts +0 -100
  763. package/src/utils/__tests__/simple_set.test.ts +0 -57
  764. package/src/utils/__tests__/sorted_list.test.ts +0 -335
  765. package/src/utils/__tests__/starts_with.test.ts +0 -65
  766. package/src/utils/__tests__/string_parsing.test.ts +0 -267
  767. package/src/utils/__tests__/uniq.test.ts +0 -134
  768. package/src/utils/__tests__/warn_once.test.ts +0 -38
  769. package/src/utils/__tests__/weak_map_memory.test.ts +0 -188
  770. package/src/utils/are_arrays_of_numbers_equal.ts +0 -39
  771. package/src/utils/are_codecs_compatible.ts +0 -51
  772. package/src/utils/array_find.ts +0 -55
  773. package/src/utils/array_find_index.ts +0 -54
  774. package/src/utils/array_includes.ts +0 -93
  775. package/src/utils/assert.ts +0 -65
  776. package/src/utils/assert_unreachable.ts +0 -45
  777. package/src/utils/base64.ts +0 -153
  778. package/src/utils/byte_parsing.ts +0 -256
  779. package/src/utils/cancellable_sleep.ts +0 -41
  780. package/src/utils/create_cancellable_promise.ts +0 -69
  781. package/src/utils/deep_merge.ts +0 -49
  782. package/src/utils/event_emitter.ts +0 -147
  783. package/src/utils/flat_map.ts +0 -50
  784. package/src/utils/get_fuzzed_delay.ts +0 -27
  785. package/src/utils/hash_buffer.ts +0 -42
  786. package/src/utils/id_generator.ts +0 -35
  787. package/src/utils/initialization_segment_cache.ts +0 -68
  788. package/src/utils/is_non_empty_string.ts +0 -23
  789. package/src/utils/is_null_or_undefined.ts +0 -27
  790. package/src/utils/languages/ISO_639-1_to_ISO_639-3.ts +0 -207
  791. package/src/utils/languages/ISO_639-2_to_ISO_639-3.ts +0 -43
  792. package/src/utils/languages/__tests__/normalize.test.ts +0 -290
  793. package/src/utils/languages/index.ts +0 -29
  794. package/src/utils/languages/normalize.ts +0 -152
  795. package/src/utils/list_to_map.ts +0 -32
  796. package/src/utils/logger.ts +0 -100
  797. package/src/utils/noop.ts +0 -26
  798. package/src/utils/object_assign.ts +0 -60
  799. package/src/utils/object_values.ts +0 -31
  800. package/src/utils/ranges.ts +0 -499
  801. package/src/utils/reference.ts +0 -390
  802. package/src/utils/request/fetch.ts +0 -250
  803. package/src/utils/request/index.ts +0 -38
  804. package/src/utils/request/xhr.ts +0 -287
  805. package/src/utils/resolve_url.ts +0 -126
  806. package/src/utils/retry_promise_with_backoff.ts +0 -95
  807. package/src/utils/simple_set.ts +0 -67
  808. package/src/utils/sleep.ts +0 -14
  809. package/src/utils/slice_uint8array.ts +0 -53
  810. package/src/utils/sorted_list.ts +0 -240
  811. package/src/utils/starts_with.ts +0 -42
  812. package/src/utils/string_parsing.ts +0 -414
  813. package/src/utils/task_canceller.ts +0 -367
  814. package/src/utils/uniq.ts +0 -49
  815. package/src/utils/warn_once.ts +0 -34
  816. package/src/utils/weak_map_memory.ts +0 -89
  817. package/src/utils/wrapInPromise.ts +0 -24
  818. package/tsconfig.json +0 -28
  819. package/tsconfig.modules.json +0 -36
@@ -1,1246 +0,0 @@
1
- /**
2
- * Copyright 2015 CANAL+ Group
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
- import eme, {
18
- getInitData,
19
- ICustomMediaKeys,
20
- ICustomMediaKeySystemAccess,
21
- } from "../../compat/eme";
22
- import config from "../../config";
23
- import {
24
- EncryptedMediaError,
25
- OtherError,
26
- } from "../../errors";
27
- import log from "../../log";
28
- import Manifest, {
29
- Period,
30
- } from "../../manifest";
31
- import {
32
- IKeySystemOption,
33
- IPlayerError,
34
- } from "../../public_types";
35
- import areArraysOfNumbersEqual from "../../utils/are_arrays_of_numbers_equal";
36
- import arrayFind from "../../utils/array_find";
37
- import arrayIncludes from "../../utils/array_includes";
38
- import EventEmitter from "../../utils/event_emitter";
39
- import isNullOrUndefined from "../../utils/is_null_or_undefined";
40
- import { bytesToHex } from "../../utils/string_parsing";
41
- import TaskCanceller from "../../utils/task_canceller";
42
- import attachMediaKeys from "./attach_media_keys";
43
- import createOrLoadSession from "./create_or_load_session";
44
- import { IMediaKeysInfos } from "./get_media_keys";
45
- import initMediaKeys from "./init_media_keys";
46
- import SessionEventsListener, {
47
- BlacklistedSessionError, IKeyUpdateValue,
48
- } from "./session_events_listener";
49
- import setServerCertificate from "./set_server_certificate";
50
- import {
51
- IProtectionData,
52
- IMediaKeySessionStores,
53
- MediaKeySessionLoadingType,
54
- IProcessedProtectionData,
55
- ContentDecryptorState,
56
- IContentDecryptorEvent,
57
- } from "./types";
58
- import { DecommissionedSessionError } from "./utils/check_key_statuses";
59
- import cleanOldStoredPersistentInfo from "./utils/clean_old_stored_persistent_info";
60
- import getDrmSystemId from "./utils/get_drm_system_id";
61
- import InitDataValuesContainer from "./utils/init_data_values_container";
62
- import {
63
- areAllKeyIdsContainedIn,
64
- areSomeKeyIdsContainedIn,
65
- } from "./utils/key_id_comparison";
66
- import KeySessionRecord from "./utils/key_session_record";
67
-
68
- /**
69
- * Module communicating with the Content Decryption Module (or CDM) to be able
70
- * to decrypt contents.
71
- *
72
- * The `ContentDecryptor` starts communicating with the CDM, to initialize the
73
- * key system, as soon as it is created.
74
- *
75
- * You can be notified of various events, such as fatal errors, by registering
76
- * to one of its multiple events (@see IContentDecryptorEvent).
77
- *
78
- * @class ContentDecryptor
79
- */
80
- export default class ContentDecryptor extends EventEmitter<IContentDecryptorEvent> {
81
- /**
82
- * Hexadecimal id identifying the currently-chosen key system.
83
- * `undefined` if not known or if the key system hasn't been initialized yet.
84
- *
85
- * When providing protection initialization data to the ContentDecryptor, you
86
- * may only provide those linked to that system id. You can also provide all
87
- * available protection initialization data, in which case it will be
88
- * automatically filtered.
89
- *
90
- * This `systemId` may only be known once the `ReadyForContent` state (@see
91
- * ContentDecryptorState) is reached, and even then, it may still be unknown,
92
- * in which case it will stay to `undefined`.
93
- */
94
- public systemId : string | undefined;
95
-
96
- /**
97
- * Set only if the `ContentDecryptor` failed on an error.
98
- * The corresponding Error.
99
- */
100
- public error : Error | null;
101
-
102
- /**
103
- * State of the ContentDecryptor (@see ContentDecryptorState) and associated
104
- * data.
105
- *
106
- * The ContentDecryptor goes into a series of steps as it is initializing.
107
- * This private property stores the current state and the potentially linked
108
- * data.
109
- */
110
- private _stateData : IContentDecryptorStateData;
111
-
112
- /**
113
- * Contains information about all key sessions loaded for this current
114
- * content.
115
- * This object is most notably used to check which keys are already obtained,
116
- * thus avoiding to perform new unnecessary license requests and CDM interactions.
117
- */
118
- private _currentSessions : IActiveSessionInfo[];
119
-
120
- /**
121
- * Allows to dispose the resources taken by the current instance of the
122
- * ContentDecryptor.
123
- */
124
- private _canceller : TaskCanceller;
125
-
126
- /**
127
- * This queue stores initialization data which hasn't been processed yet,
128
- * probably because the "queue is locked" for now. (@see _stateData private
129
- * property).
130
- *
131
- * For example, this queue stores initialization data communicated while
132
- * initializing so it can be processed when the initialization is done.
133
- */
134
- private _initDataQueue : IProtectionData[];
135
-
136
- /**
137
- * `true` if the EME API are available on the current platform according to
138
- * the default EME implementation used.
139
- * `false` otherwise.
140
- * @returns {boolean}
141
- */
142
- public static hasEmeApis() : boolean {
143
- return !isNullOrUndefined(eme.requestMediaKeySystemAccess);
144
- }
145
-
146
- /**
147
- * Create a new `ContentDecryptor`, and initialize its decryption capabilities
148
- * right away.
149
- * Goes into the `WaitingForAttachment` state once that initialization is
150
- * done, after which you should call the `attach` method when you're ready for
151
- * those decryption capabilities to be attached to the HTMLMediaElement.
152
- *
153
- * @param {HTMLMediaElement} mediaElement - The MediaElement which will be
154
- * associated to a MediaKeys object
155
- * @param {Array.<Object>} ksOptions - key system configuration.
156
- * The `ContentDecryptor` can be given one or multiple key system
157
- * configurations. It will choose the appropriate one depending on user
158
- * settings and browser support.
159
- */
160
- constructor(mediaElement : HTMLMediaElement, ksOptions : IKeySystemOption[]) {
161
- super();
162
-
163
- log.debug("DRM: Starting ContentDecryptor logic.");
164
-
165
- const canceller = new TaskCanceller();
166
- this._currentSessions = [];
167
- this._canceller = canceller;
168
- this._initDataQueue = [];
169
- this._stateData = { state: ContentDecryptorState.Initializing,
170
- isMediaKeysAttached: MediaKeyAttachmentStatus.NotAttached,
171
- isInitDataQueueLocked: true,
172
- data: null };
173
- this.error = null;
174
-
175
- eme.onEncrypted(mediaElement, evt => {
176
- log.debug("DRM: Encrypted event received from media element.");
177
- const initData = getInitData(evt as MediaEncryptedEvent);
178
- if (initData !== null) {
179
- this.onInitializationData(initData);
180
- }
181
- }, canceller.signal);
182
-
183
- initMediaKeys(mediaElement, ksOptions, canceller.signal)
184
- .then((mediaKeysInfo) => {
185
- const { options, mediaKeySystemAccess } = mediaKeysInfo;
186
-
187
- /**
188
- * String identifying the key system, allowing the rest of the code to
189
- * only advertise the required initialization data for license requests.
190
- *
191
- * Note that we only set this value if retro-compatibility to older
192
- * persistent logic in the RxPlayer is not important, as the
193
- * optimizations this property unlocks can break the loading of
194
- * MediaKeySessions persisted in older RxPlayer's versions.
195
- */
196
- let systemId : string | undefined;
197
- if (isNullOrUndefined(options.licenseStorage) ||
198
- options.licenseStorage.disableRetroCompatibility === true)
199
- {
200
- systemId = getDrmSystemId(mediaKeySystemAccess.keySystem);
201
- }
202
-
203
- this.systemId = systemId;
204
- if (this._stateData.state === ContentDecryptorState.Initializing) {
205
- this._stateData = { state: ContentDecryptorState.WaitingForAttachment,
206
- isInitDataQueueLocked: true,
207
- isMediaKeysAttached: MediaKeyAttachmentStatus.NotAttached,
208
- data: { mediaKeysInfo,
209
- mediaElement } };
210
-
211
- this.trigger("stateChange", this._stateData.state);
212
- }
213
- })
214
-
215
- .catch((err) => {
216
- this._onFatalError(err);
217
- });
218
- }
219
-
220
- /**
221
- * Returns the current state of the ContentDecryptor.
222
- * @see ContentDecryptorState
223
- * @returns {Object}
224
- */
225
- public getState() : ContentDecryptorState {
226
- return this._stateData.state;
227
- }
228
-
229
- /**
230
- * Attach the current decryption capabilities to the HTMLMediaElement.
231
- * This method should only be called once the `ContentDecryptor` is in the
232
- * `WaitingForAttachment` state.
233
- *
234
- * You might want to first set the HTMLMediaElement's `src` attribute before
235
- * calling this method, and only push data to it once the `ReadyForContent`
236
- * state is reached, for compatibility reasons.
237
- */
238
- public attach() : void {
239
- if (this._stateData.state !== ContentDecryptorState.WaitingForAttachment) {
240
- throw new Error("`attach` should only be called when " +
241
- "in the WaitingForAttachment state");
242
- } else if (
243
- this._stateData.isMediaKeysAttached !== MediaKeyAttachmentStatus.NotAttached
244
- ) {
245
- log.warn("DRM: ContentDecryptor's `attach` method called more than once.");
246
- return;
247
- }
248
-
249
- const { mediaElement, mediaKeysInfo } = this._stateData.data;
250
- const { options, mediaKeys, mediaKeySystemAccess, stores } = mediaKeysInfo;
251
- const shouldDisableLock = options.disableMediaKeysAttachmentLock === true;
252
-
253
- if (shouldDisableLock) {
254
- this._stateData = { state: ContentDecryptorState.ReadyForContent,
255
- isInitDataQueueLocked: true,
256
- isMediaKeysAttached: MediaKeyAttachmentStatus.Pending,
257
- data: { mediaKeysInfo, mediaElement } };
258
- this.trigger("stateChange", this._stateData.state);
259
-
260
- // previous trigger might have lead to disposal
261
- if (this._isStopped()) {
262
- return ;
263
- }
264
- }
265
-
266
- this._stateData.isMediaKeysAttached = MediaKeyAttachmentStatus.Pending;
267
- const stateToAttach = { emeImplementation: eme,
268
- loadedSessionsStore: stores.loadedSessionsStore,
269
- mediaKeySystemAccess,
270
- mediaKeys,
271
- keySystemOptions: options };
272
-
273
- log.debug("DRM: Attaching current MediaKeys");
274
- attachMediaKeys(mediaElement, stateToAttach, this._canceller.signal)
275
- .then(async () => {
276
- this._stateData.isMediaKeysAttached = MediaKeyAttachmentStatus.Attached;
277
-
278
- const { serverCertificate } = options;
279
- if (!isNullOrUndefined(serverCertificate)) {
280
- const resSsc = await setServerCertificate(mediaKeys, serverCertificate);
281
- if (resSsc.type === "error") {
282
- this.trigger("warning", resSsc.value);
283
- }
284
- }
285
-
286
- if (this._isStopped()) { // We might be stopped since then
287
- return;
288
- }
289
-
290
- const prevState = this._stateData.state;
291
- this._stateData = { state: ContentDecryptorState.ReadyForContent,
292
- isMediaKeysAttached: MediaKeyAttachmentStatus.Attached,
293
- isInitDataQueueLocked: false,
294
- data: { mediaKeysData: mediaKeysInfo } };
295
- if (prevState !== ContentDecryptorState.ReadyForContent) {
296
- this.trigger("stateChange", ContentDecryptorState.ReadyForContent);
297
- }
298
- if (!this._isStopped()) {
299
- this._processCurrentInitDataQueue();
300
- }
301
- })
302
-
303
- .catch((err) => {
304
- this._onFatalError(err);
305
- });
306
- }
307
-
308
- /**
309
- * Stop this `ContentDecryptor` instance:
310
- * - stop listening and reacting to the various event listeners
311
- * - abort all operations.
312
- *
313
- * Once disposed, a `ContentDecryptor` cannot be used anymore.
314
- */
315
- public dispose() {
316
- this.removeEventListener();
317
- this._stateData = { state: ContentDecryptorState.Disposed,
318
- isMediaKeysAttached: undefined,
319
- isInitDataQueueLocked: undefined,
320
- data: null };
321
- this._canceller.cancel();
322
- this.trigger("stateChange", this._stateData.state);
323
- }
324
-
325
- /**
326
- * Method to call when new protection initialization data is encounted on the
327
- * content.
328
- *
329
- * When called, the `ContentDecryptor` will try to obtain the decryption key
330
- * if not already obtained.
331
- *
332
- * @param {Object} initializationData
333
- */
334
- public onInitializationData(
335
- initializationData : IProtectionData
336
- ) : void {
337
- if (this._stateData.isInitDataQueueLocked !== false) {
338
- if (this._isStopped()) {
339
- throw new Error("ContentDecryptor either disposed or stopped.");
340
- }
341
- this._initDataQueue.push(initializationData);
342
- return;
343
- }
344
-
345
- const { mediaKeysData } = this._stateData.data;
346
- const processedInitializationData = {
347
- ...initializationData,
348
- values: new InitDataValuesContainer(initializationData.values),
349
- };
350
- this._processInitializationData(processedInitializationData, mediaKeysData)
351
- .catch(err => { this._onFatalError(err); });
352
- }
353
-
354
- /**
355
- * Async logic run each time new initialization data has to be processed.
356
- * The promise return may reject, in which case a fatal error should be linked
357
- * the current `ContentDecryptor`.
358
- *
359
- * The Promise's resolution however provides no semantic value.
360
- * @param {Object} initializationData
361
- * @returns {Promise.<void>}
362
- */
363
- private async _processInitializationData(
364
- initializationData: IProcessedProtectionData,
365
- mediaKeysData: IAttachedMediaKeysData
366
- ) : Promise<void> {
367
- const { mediaKeySystemAccess, stores, options } = mediaKeysData;
368
-
369
- if (this._tryToUseAlreadyCreatedSession(initializationData, mediaKeysData) ||
370
- this._isStopped()) // _isStopped is voluntarly checked after here
371
- {
372
- return;
373
- }
374
-
375
- if (options.singleLicensePer === "content") {
376
- const firstCreatedSession = arrayFind(this._currentSessions, (x) =>
377
- x.source === MediaKeySessionLoadingType.Created);
378
-
379
- if (firstCreatedSession !== undefined) {
380
- // We already fetched a `singleLicensePer: "content"` license, yet we
381
- // could not use the already-created MediaKeySession with it.
382
- // It means that we'll never handle it and we should thus blacklist it.
383
- const keyIds = initializationData.keyIds;
384
- if (keyIds === undefined) {
385
- if (initializationData.content === undefined) {
386
- log.warn("DRM: Unable to fallback from a non-decipherable quality.");
387
- } else {
388
- blackListProtectionData(initializationData.content.manifest,
389
- initializationData);
390
- }
391
- return ;
392
- }
393
-
394
- firstCreatedSession.record.associateKeyIds(keyIds);
395
- if (initializationData.content !== undefined) {
396
- if (log.hasLevel("DEBUG")) {
397
- const hexKids = keyIds
398
- .reduce((acc, kid) => `${acc}, ${bytesToHex(kid)}`, "");
399
- log.debug("DRM: Blacklisting new key ids", hexKids);
400
- }
401
- updateDecipherability(initializationData.content.manifest, [], keyIds, []);
402
- }
403
- return ;
404
- }
405
- } else if (options.singleLicensePer === "periods" &&
406
- initializationData.content !== undefined)
407
- {
408
- const { period } = initializationData.content;
409
- const createdSessions = this._currentSessions
410
- .filter(x => x.source === MediaKeySessionLoadingType.Created);
411
- const periodKeys = new Set<Uint8Array>();
412
- addKeyIdsFromPeriod(periodKeys, period);
413
- for (const createdSess of createdSessions) {
414
- const periodKeysArr = Array.from(periodKeys);
415
- for (const kid of periodKeysArr) {
416
- if (createdSess.record.isAssociatedWithKeyId(kid)) {
417
- createdSess.record.associateKeyIds(periodKeys.values());
418
-
419
- // Re-loop through the Period's key ids to blacklist ones that are missing
420
- // from `createdSess`'s `keyStatuses` and to update the content's
421
- // decipherability.
422
- for (const innerKid of periodKeysArr) {
423
- if (
424
- !createdSess.keyStatuses.whitelisted
425
- .some(k => areArraysOfNumbersEqual(k, innerKid)) &&
426
- !createdSess.keyStatuses.blacklisted
427
- .some(k => areArraysOfNumbersEqual(k, innerKid))
428
- ) {
429
- createdSess.keyStatuses.blacklisted.push(innerKid);
430
- }
431
- }
432
- updateDecipherability(initializationData.content.manifest,
433
- createdSess.keyStatuses.whitelisted,
434
- createdSess.keyStatuses.blacklisted,
435
- []);
436
- return;
437
- }
438
- }
439
- }
440
- }
441
-
442
- // /!\ Do not forget to unlock when done
443
- // TODO this is error-prone and can lead to performance issue when loading
444
- // persistent sessions.
445
- // Can we find a better strategy?
446
- this._lockInitDataQueue();
447
-
448
- let wantedSessionType : MediaKeySessionType;
449
- if (options.persistentLicense !== true) {
450
- wantedSessionType = "temporary";
451
- } else if (!canCreatePersistentSession(mediaKeySystemAccess)) {
452
- log.warn("DRM: Cannot create \"persistent-license\" session: not supported");
453
- wantedSessionType = "temporary";
454
- } else {
455
- wantedSessionType = "persistent-license";
456
- }
457
-
458
- const { EME_DEFAULT_MAX_SIMULTANEOUS_MEDIA_KEY_SESSIONS,
459
- EME_MAX_STORED_PERSISTENT_SESSION_INFORMATION } = config.getCurrent();
460
-
461
- const maxSessionCacheSize = typeof options.maxSessionCacheSize === "number" ?
462
- options.maxSessionCacheSize :
463
- EME_DEFAULT_MAX_SIMULTANEOUS_MEDIA_KEY_SESSIONS;
464
-
465
- const sessionRes = await createOrLoadSession(initializationData,
466
- stores,
467
- wantedSessionType,
468
- maxSessionCacheSize,
469
- this._canceller.signal);
470
- if (this._isStopped()) {
471
- return;
472
- }
473
-
474
- const sessionInfo : IActiveSessionInfo = {
475
- record: sessionRes.value.keySessionRecord,
476
- source: sessionRes.type,
477
- keyStatuses: { whitelisted: [], blacklisted: [] },
478
- blacklistedSessionError: null,
479
- };
480
- this._currentSessions.push(sessionInfo);
481
-
482
- const { mediaKeySession, sessionType } = sessionRes.value;
483
-
484
- /**
485
- * We only store persistent sessions once its keys are known.
486
- * This boolean allows to know if this session has already been
487
- * persisted or not.
488
- */
489
- let isSessionPersisted = false;
490
-
491
- SessionEventsListener(
492
- mediaKeySession,
493
- options,
494
- mediaKeySystemAccess.keySystem,
495
- {
496
- onKeyUpdate: (value : IKeyUpdateValue) : void => {
497
- const linkedKeys = getKeyIdsLinkedToSession(
498
- initializationData,
499
- sessionInfo.record,
500
- options.singleLicensePer,
501
- sessionInfo.source === MediaKeySessionLoadingType.Created,
502
- value.whitelistedKeyIds,
503
- value.blacklistedKeyIds);
504
-
505
- sessionInfo.record.associateKeyIds(linkedKeys.whitelisted);
506
- sessionInfo.record.associateKeyIds(linkedKeys.blacklisted);
507
- sessionInfo.keyStatuses = { whitelisted: linkedKeys.whitelisted,
508
- blacklisted: linkedKeys.blacklisted };
509
-
510
- if (sessionInfo.record.getAssociatedKeyIds().length !== 0 &&
511
- sessionType === "persistent-license" &&
512
- stores.persistentSessionsStore !== null &&
513
- !isSessionPersisted)
514
- {
515
- const { persistentSessionsStore } = stores;
516
- cleanOldStoredPersistentInfo(
517
- persistentSessionsStore,
518
- EME_MAX_STORED_PERSISTENT_SESSION_INFORMATION - 1);
519
- persistentSessionsStore.add(initializationData,
520
- sessionInfo.record.getAssociatedKeyIds(),
521
- mediaKeySession);
522
- isSessionPersisted = true;
523
- }
524
-
525
- if (initializationData.content !== undefined) {
526
- updateDecipherability(initializationData.content.manifest,
527
- linkedKeys.whitelisted,
528
- linkedKeys.blacklisted,
529
- []);
530
- }
531
-
532
- this._unlockInitDataQueue();
533
- },
534
- onWarning: (value : IPlayerError) : void => {
535
- this.trigger("warning", value);
536
- },
537
- onError: (err : unknown) : void => {
538
- if (err instanceof DecommissionedSessionError) {
539
- log.warn("DRM: A session's closing condition has been triggered");
540
- this._lockInitDataQueue();
541
- const indexOf = this._currentSessions.indexOf(sessionInfo);
542
- if (indexOf >= 0) {
543
- this._currentSessions.splice(indexOf);
544
- }
545
- if (initializationData.content !== undefined) {
546
- updateDecipherability(initializationData.content.manifest,
547
- [],
548
- [],
549
- sessionInfo.record.getAssociatedKeyIds());
550
- }
551
- stores.persistentSessionsStore?.delete(mediaKeySession.sessionId);
552
- stores.loadedSessionsStore.closeSession(mediaKeySession)
553
- .catch(e => {
554
- const closeError = e instanceof Error ? e :
555
- "unknown error";
556
- log.warn("DRM: failed to close expired session", closeError);
557
- })
558
- .then(() => this._unlockInitDataQueue())
559
- .catch((retryError) => this._onFatalError(retryError));
560
-
561
- if (!this._isStopped()) {
562
- this.trigger("warning", err.reason);
563
- }
564
- return;
565
- }
566
- if (!(err instanceof BlacklistedSessionError)) {
567
- this._onFatalError(err);
568
- return ;
569
- }
570
-
571
- sessionInfo.blacklistedSessionError = err;
572
-
573
- if (initializationData.content !== undefined) {
574
- const { manifest } = initializationData.content;
575
- log.info("DRM: blacklisting Representations based on " +
576
- "protection data.");
577
- blackListProtectionData(manifest, initializationData);
578
- }
579
-
580
- this._unlockInitDataQueue();
581
-
582
- // TODO warning for blacklisted session?
583
- },
584
- },
585
- this._canceller.signal);
586
-
587
- if (options.singleLicensePer === undefined ||
588
- options.singleLicensePer === "init-data")
589
- {
590
- this._unlockInitDataQueue();
591
- }
592
-
593
- if (sessionRes.type === MediaKeySessionLoadingType.Created) {
594
- const requestData = initializationData.values.constructRequestData();
595
- try {
596
- await stores.loadedSessionsStore.generateLicenseRequest(
597
- mediaKeySession,
598
- initializationData.type,
599
- requestData);
600
- } catch (error) {
601
- // First check that the error was not due to the MediaKeySession closing
602
- // or being closed
603
- const entry = stores.loadedSessionsStore.getEntryForSession(mediaKeySession);
604
- if (entry === null || entry.closingStatus.type !== "none") {
605
- // MediaKeySession closing/closed: Just remove from handled list and abort.
606
- const indexInCurrent = this._currentSessions.indexOf(sessionInfo);
607
- if (indexInCurrent >= 0) {
608
- this._currentSessions.splice(indexInCurrent, 1);
609
- }
610
- return Promise.resolve();
611
- }
612
- throw new EncryptedMediaError("KEY_GENERATE_REQUEST_ERROR",
613
- error instanceof Error ? error.toString() :
614
- "Unknown error");
615
- }
616
- }
617
-
618
- return Promise.resolve();
619
- }
620
-
621
- private _tryToUseAlreadyCreatedSession(
622
- initializationData : IProcessedProtectionData,
623
- mediaKeysData : IAttachedMediaKeysData
624
- ) : boolean {
625
- const { stores, options } = mediaKeysData;
626
-
627
- /**
628
- * If set, a currently-used key session is already compatible to this
629
- * initialization data.
630
- */
631
- const compatibleSessionInfo = arrayFind(
632
- this._currentSessions,
633
- (x) => x.record.isCompatibleWith(initializationData));
634
-
635
- if (compatibleSessionInfo === undefined) {
636
- return false;
637
- }
638
-
639
- // Check if the compatible session is blacklisted
640
- const blacklistedSessionError = compatibleSessionInfo.blacklistedSessionError;
641
- if (!isNullOrUndefined(blacklistedSessionError)) {
642
- if (initializationData.type === undefined ||
643
- initializationData.content === undefined)
644
- {
645
- log.error("DRM: This initialization data has already been blacklisted " +
646
- "but the current content is not known.");
647
- return true;
648
- } else {
649
- log.info("DRM: This initialization data has already been blacklisted. " +
650
- "Blacklisting the related content.");
651
- const { manifest } = initializationData.content;
652
- blackListProtectionData(manifest, initializationData);
653
- return true;
654
- }
655
- }
656
-
657
- // Check if the current key id(s) has been blacklisted by this session
658
- if (initializationData.keyIds !== undefined) {
659
- /**
660
- * If set to `true`, the Representation(s) linked to this
661
- * initialization data's key id should be marked as "not decipherable".
662
- */
663
- let isUndecipherable : boolean;
664
-
665
- if (options.singleLicensePer === undefined ||
666
- options.singleLicensePer === "init-data")
667
- {
668
- // Note: In the default "init-data" mode, we only avoid a
669
- // Representation if the key id was originally explicitely
670
- // blacklisted (and not e.g. if its key was just not present in
671
- // the license).
672
- //
673
- // This is to enforce v3.x.x retro-compatibility: we cannot
674
- // fallback from a Representation unless some RxPlayer option
675
- // documentating this behavior has been set.
676
- const { blacklisted } = compatibleSessionInfo.keyStatuses;
677
- isUndecipherable = areSomeKeyIdsContainedIn(initializationData.keyIds,
678
- blacklisted);
679
- } else {
680
- // In any other mode, as soon as not all of this initialization
681
- // data's linked key ids are explicitely whitelisted, we can mark
682
- // the corresponding Representation as "not decipherable".
683
- // This is because we've no such retro-compatibility guarantee to
684
- // make there.
685
- const { whitelisted } = compatibleSessionInfo.keyStatuses;
686
- isUndecipherable = !areAllKeyIdsContainedIn(initializationData.keyIds,
687
- whitelisted);
688
- }
689
-
690
- if (isUndecipherable) {
691
- if (initializationData.content === undefined) {
692
- log.error("DRM: Cannot forbid key id, the content is unknown.");
693
- return true;
694
- }
695
- log.info("DRM: Current initialization data is linked to blacklisted keys. " +
696
- "Marking Representations as not decipherable");
697
- updateDecipherability(initializationData.content.manifest,
698
- [],
699
- initializationData.keyIds,
700
- []);
701
- return true;
702
- }
703
- }
704
-
705
- // If we reached here, it means that this initialization data is not
706
- // blacklisted in any way.
707
- // Search loaded session and put it on top of the cache if it exists.
708
- const entry = stores.loadedSessionsStore.reuse(initializationData);
709
- if (entry !== null) {
710
- // TODO update decipherability to `true` if not?
711
- log.debug("DRM: Init data already processed. Skipping it.");
712
- return true;
713
- }
714
-
715
- // Session not found in `loadedSessionsStore`, it might have been closed
716
- // since.
717
- // Remove from `this._currentSessions` and start again.
718
- const indexOf = this._currentSessions.indexOf(compatibleSessionInfo);
719
- if (indexOf === -1) {
720
- log.error("DRM: Unable to remove processed init data: not found.");
721
- } else {
722
- log.debug("DRM: A session from a processed init data is not available " +
723
- "anymore. Re-processing it.");
724
- this._currentSessions.splice(indexOf, 1);
725
- }
726
- return false;
727
- }
728
-
729
- /**
730
- * Callback that should be called if an error that made the current
731
- * `ContentDecryptor` instance unusable arised.
732
- * This callbacks takes care of resetting state and sending the right events.
733
- *
734
- * Once called, no further actions should be taken.
735
- *
736
- * @param {*} err - The error object which describes the issue. Will be
737
- * formatted and sent in an "error" event.
738
- */
739
- private _onFatalError(err : unknown) : void {
740
- if (this._canceller.isUsed()) {
741
- return;
742
- }
743
- const formattedErr = err instanceof Error ?
744
- err :
745
- new OtherError("NONE", "Unknown decryption error");
746
- this.error = formattedErr;
747
- this._initDataQueue.length = 0;
748
- this._stateData = { state: ContentDecryptorState.Error,
749
- isMediaKeysAttached: undefined,
750
- isInitDataQueueLocked: undefined,
751
- data: null };
752
- this._canceller.cancel();
753
- this.trigger("error", formattedErr);
754
-
755
- // The previous trigger might have lead to a disposal of the `ContentDecryptor`.
756
- if (this._stateData.state === ContentDecryptorState.Error) {
757
- this.trigger("stateChange", this._stateData.state);
758
- }
759
- }
760
-
761
- /**
762
- * Return `true` if the `ContentDecryptor` has either been disposed or
763
- * encountered a fatal error which made it stop.
764
- * @returns {boolean}
765
- */
766
- private _isStopped() : boolean {
767
- return this._stateData.state === ContentDecryptorState.Disposed ||
768
- this._stateData.state === ContentDecryptorState.Error;
769
- }
770
-
771
- /**
772
- * Start processing the next initialization data of the `_initDataQueue` if it
773
- * isn't lock.
774
- */
775
- private _processCurrentInitDataQueue() : void {
776
- while (this._stateData.isInitDataQueueLocked === false) {
777
- const initData = this._initDataQueue.shift();
778
- if (initData === undefined) {
779
- return;
780
- }
781
- this.onInitializationData(initData);
782
- }
783
- }
784
-
785
- /**
786
- * Lock new initialization data (from the `_initDataQueue`) from being
787
- * processed until `_unlockInitDataQueue` is called.
788
- *
789
- * You may want to call this method when performing operations which may have
790
- * an impact on the handling of other initialization data.
791
- */
792
- private _lockInitDataQueue() : void {
793
- if (this._stateData.isInitDataQueueLocked === false) {
794
- this._stateData.isInitDataQueueLocked = true;
795
- }
796
- }
797
-
798
- /**
799
- * Unlock `_initDataQueue` and start processing the first element.
800
- *
801
- * Should have no effect if the `_initDataQueue` was not locked.
802
- */
803
- private _unlockInitDataQueue() : void {
804
- if (this._stateData.isMediaKeysAttached !== MediaKeyAttachmentStatus.Attached) {
805
- log.error("DRM: Trying to unlock in the wrong state");
806
- return;
807
- }
808
- this._stateData.isInitDataQueueLocked = false;
809
- this._processCurrentInitDataQueue();
810
- }
811
- }
812
-
813
- /**
814
- * Returns `true` if the given MediaKeySystemAccess can create
815
- * "persistent-license" MediaKeySessions.
816
- * @param {MediaKeySystemAccess} mediaKeySystemAccess
817
- * @returns {Boolean}
818
- */
819
- function canCreatePersistentSession(
820
- mediaKeySystemAccess : MediaKeySystemAccess | ICustomMediaKeySystemAccess
821
- ) : boolean {
822
- const { sessionTypes } = mediaKeySystemAccess.getConfiguration();
823
- return sessionTypes !== undefined &&
824
- arrayIncludes(sessionTypes, "persistent-license");
825
- }
826
-
827
- /**
828
- * Change the decipherability of Representations which have their key id in one
829
- * of the given Arrays:
830
- *
831
- * - Those who have a key id listed in `whitelistedKeyIds` will have their
832
- * decipherability updated to `true`
833
- *
834
- * - Those who have a key id listed in `blacklistedKeyIds` will have their
835
- * decipherability updated to `false`
836
- *
837
- * - Those who have a key id listed in `delistedKeyIds` will have their
838
- * decipherability updated to `undefined`.
839
- *
840
- * @param {Object} manifest
841
- * @param {Array.<Uint8Array>} whitelistedKeyIds
842
- * @param {Array.<Uint8Array>} blacklistedKeyIds
843
- * @param {Array.<Uint8Array>} delistedKeyIds
844
- */
845
- function updateDecipherability(
846
- manifest : Manifest,
847
- whitelistedKeyIds : Uint8Array[],
848
- blacklistedKeyIds : Uint8Array[],
849
- delistedKeyIds : Uint8Array[]
850
- ) : void {
851
- manifest.updateRepresentationsDeciperability((representation) => {
852
- if (representation.contentProtections === undefined) {
853
- return representation.decipherable;
854
- }
855
- const contentKIDs = representation.contentProtections.keyIds;
856
- if (contentKIDs !== undefined) {
857
- for (const elt of contentKIDs) {
858
- for (const blacklistedKeyId of blacklistedKeyIds) {
859
- if (areArraysOfNumbersEqual(blacklistedKeyId, elt.keyId)) {
860
- return false;
861
- }
862
- }
863
- for (const whitelistedKeyId of whitelistedKeyIds) {
864
- if (areArraysOfNumbersEqual(whitelistedKeyId, elt.keyId)) {
865
- return true;
866
- }
867
- }
868
- for (const delistedKeyId of delistedKeyIds) {
869
- if (areArraysOfNumbersEqual(delistedKeyId, elt.keyId)) {
870
- return undefined;
871
- }
872
- }
873
- }
874
- }
875
- return representation.decipherable;
876
- });
877
- }
878
-
879
- /**
880
- * Update decipherability to `false` to any Representation which is linked to
881
- * the given initialization data.
882
- * @param {Object} manifest
883
- * @param {Object} initData
884
- */
885
- function blackListProtectionData(
886
- manifest : Manifest,
887
- initData : IProcessedProtectionData
888
- ) : void {
889
- manifest.updateRepresentationsDeciperability((representation) => {
890
- if (representation.decipherable === false) {
891
- return false;
892
- }
893
- const segmentProtections = representation.contentProtections?.initData ?? [];
894
- for (const protection of segmentProtections) {
895
- if (initData.type === undefined ||
896
- protection.type === initData.type)
897
- {
898
- const containedInitData = initData.values.getFormattedValues()
899
- .every(undecipherableVal => {
900
- return protection.values.some(currVal => {
901
- return (undecipherableVal.systemId === undefined ||
902
- currVal.systemId === undecipherableVal.systemId) &&
903
- areArraysOfNumbersEqual(currVal.data,
904
- undecipherableVal.data);
905
- });
906
- });
907
- if (containedInitData) {
908
- return false;
909
- }
910
- }
911
- }
912
- return representation.decipherable;
913
- });
914
- }
915
-
916
- /**
917
- * Returns set of all usable and unusable keys - explicit or implicit - that are
918
- * linked to a `MediaKeySession`.
919
- *
920
- * In the RxPlayer, there is a concept of "explicit" key ids, which are key ids
921
- * found in a license whose status can be known through the `keyStatuses`
922
- * property from a `MediaKeySession`, and of "implicit" key ids, which are key
923
- * ids which were expected to be in a fetched license, but apparently weren't.
924
- *
925
- * @param {Object} initializationData - Initialization data object used to make
926
- * the request for the current license.
927
- * @param {Object} keySessionRecord - The `KeySessionRecord` associated with the
928
- * session that has been loaded. It might give supplementary information on
929
- * keys implicitly linked to the license.
930
- * @param {string|undefined} singleLicensePer - Setting allowing to indicate the
931
- * scope a given license should have.
932
- * @param {boolean} isCurrentLicense - If `true` the license has been fetched
933
- * especially for the current content.
934
- *
935
- * Knowing this allows to determine that if decryption keys that should have
936
- * been referenced in the fetched license (according to the `singleLicensePer`
937
- * setting) are missing, then the keys surely must have been voluntarly
938
- * removed from the license.
939
- *
940
- * If it is however set to `false`, it means that the license is an older
941
- * license that might have been linked to another content, thus we cannot make
942
- * that assumption.
943
- * @param {Array.<Uint8Array>} usableKeyIds - Key ids that are present in the
944
- * license and can be used.
945
- * @param {Array.<Uint8Array>} unusableKeyIds - Key ids that are present in the
946
- * license yet cannot be used.
947
- * @returns {Object} - Returns an object with the following properties:
948
- * - `whitelisted`: Array of key ids for keys that are known to be usable
949
- * - `blacklisted`: Array of key ids for keys that are considered unusable.
950
- * The qualities linked to those keys should not be played.
951
- */
952
- function getKeyIdsLinkedToSession(
953
- initializationData : IProcessedProtectionData,
954
- keySessionRecord : KeySessionRecord,
955
- singleLicensePer : undefined | "init-data" | "content" | "periods",
956
- isCurrentLicense : boolean,
957
- usableKeyIds : Uint8Array[],
958
- unusableKeyIds : Uint8Array[]
959
- ) : { whitelisted : Uint8Array[];
960
- blacklisted : Uint8Array[]; }
961
- {
962
- /**
963
- * Every key id associated with the MediaKeySession, starting with
964
- * whitelisted ones.
965
- */
966
- const associatedKeyIds = [...usableKeyIds,
967
- ...unusableKeyIds];
968
-
969
- // Add all key ids associated to the `KeySessionRecord` yet not in
970
- // `usableKeyIds` nor in `unusableKeyIds`
971
- const allKnownKeyIds = keySessionRecord.getAssociatedKeyIds();
972
- for (const kid of allKnownKeyIds) {
973
- if (!associatedKeyIds.some(ak => areArraysOfNumbersEqual(ak, kid))) {
974
- if (log.hasLevel("DEBUG")) {
975
- log.debug("DRM: KeySessionRecord's key missing in the license, blacklisting it",
976
- bytesToHex(kid));
977
- }
978
- associatedKeyIds.push(kid);
979
- }
980
- }
981
-
982
- if (singleLicensePer !== undefined && singleLicensePer !== "init-data") {
983
- // We want to add the current key ids in the blacklist if it is
984
- // not already there.
985
- //
986
- // We only do that when `singleLicensePer` is set to something
987
- // else than the default `"init-data"` because this logic:
988
- // 1. might result in a quality fallback, which is a v3.x.x
989
- // breaking change if some APIs (like `singleLicensePer`)
990
- // aren't used.
991
- // 2. Rely on the EME spec regarding key statuses being well
992
- // implemented on all supported devices, which we're not
993
- // sure yet. Because in any other `singleLicensePer`, we
994
- // need a good implementation anyway, it doesn't matter
995
- // there.
996
- const { keyIds: expectedKeyIds,
997
- content } = initializationData;
998
- if (expectedKeyIds !== undefined) {
999
- const missingKeyIds = expectedKeyIds.filter(expected => {
1000
- return !associatedKeyIds.some(k => areArraysOfNumbersEqual(k, expected));
1001
- });
1002
- if (missingKeyIds.length > 0) {
1003
- if (log.hasLevel("DEBUG")) {
1004
- log.debug("DRM: init data keys missing in the license, blacklisting them",
1005
- missingKeyIds.map(m => bytesToHex(m)).join(", "));
1006
- }
1007
- associatedKeyIds.push(...missingKeyIds) ;
1008
- }
1009
- }
1010
-
1011
- if (isCurrentLicense && content !== undefined) {
1012
- if (singleLicensePer === "content") {
1013
- // Put it in a Set to automatically filter out duplicates (by ref)
1014
- const contentKeys = new Set<Uint8Array>();
1015
- const { manifest } = content;
1016
- for (const period of manifest.periods) {
1017
- addKeyIdsFromPeriod(contentKeys, period);
1018
- }
1019
- mergeKeyIdSetIntoArray(contentKeys, associatedKeyIds);
1020
- } else if (singleLicensePer === "periods") {
1021
- const { manifest } = content;
1022
- for (const period of manifest.periods) {
1023
- const periodKeys = new Set<Uint8Array>();
1024
- addKeyIdsFromPeriod(periodKeys, period);
1025
- if (initializationData.content?.period.id === period.id) {
1026
- mergeKeyIdSetIntoArray(periodKeys, associatedKeyIds);
1027
- } else {
1028
- const periodKeysArr = Array.from(periodKeys);
1029
- for (const kid of periodKeysArr) {
1030
- const isFound = associatedKeyIds.some(k => areArraysOfNumbersEqual(k, kid));
1031
- if (isFound) {
1032
- mergeKeyIdSetIntoArray(periodKeys, associatedKeyIds);
1033
- break;
1034
- }
1035
- }
1036
- }
1037
- }
1038
- }
1039
- }
1040
- }
1041
- return { whitelisted: usableKeyIds,
1042
- /** associatedKeyIds starts with the whitelisted one. */
1043
- blacklisted: associatedKeyIds.slice(usableKeyIds.length) };
1044
- }
1045
-
1046
- /**
1047
- * Push all kei ids in the given `set` and add it to the `arr` Array only if it
1048
- * isn't already present in it.
1049
- * @param {Set.<Uint8Array>} set
1050
- * @param {Array.<Uint8Array>} arr
1051
- */
1052
- function mergeKeyIdSetIntoArray(
1053
- set : Set<Uint8Array>,
1054
- arr : Uint8Array[]
1055
- ) {
1056
- const setArr = Array.from(set.values());
1057
- for (const kid of setArr) {
1058
- const isFound = arr.some(k => areArraysOfNumbersEqual(k, kid));
1059
- if (!isFound) {
1060
- arr.push(kid);
1061
- }
1062
- }
1063
- }
1064
-
1065
- /**
1066
- * Add to the given `set` all key ids found in the given `Period`.
1067
- * @param {Set.<Uint8Array>} set
1068
- * @param {Object} period
1069
- */
1070
- function addKeyIdsFromPeriod(
1071
- set : Set<Uint8Array>,
1072
- period : Period
1073
- ) {
1074
- for (const adaptation of period.getAdaptations()) {
1075
- for (const representation of adaptation.representations) {
1076
- if (representation.contentProtections !== undefined &&
1077
- representation.contentProtections.keyIds !== undefined)
1078
- {
1079
- for (const kidInf of representation.contentProtections.keyIds) {
1080
- set.add(kidInf.keyId);
1081
- }
1082
- }
1083
- }
1084
- }
1085
- }
1086
-
1087
- /** Possible states the ContentDecryptor is in and associated data for each one. */
1088
- type IContentDecryptorStateData = IInitializingStateData |
1089
- IWaitingForAttachmentStateData |
1090
- IReadyForContentStateDataUnattached |
1091
- IReadyForContentStateDataAttached |
1092
- IDisposeStateData |
1093
- IErrorStateData;
1094
-
1095
- /** Skeleton that all variants of `IContentDecryptorStateData` use. */
1096
- interface IContentDecryptorStateBase<
1097
- TStateName extends ContentDecryptorState,
1098
- TIsQueueLocked extends boolean | undefined,
1099
- TIsMediaKeyAttached extends MediaKeyAttachmentStatus | undefined,
1100
- TData
1101
- > {
1102
- /** Identify the ContentDecryptor's state. */
1103
- state: TStateName;
1104
- /**
1105
- * If `true`, the `ContentDecryptor` will wait before processing
1106
- * newly-received initialization data.
1107
- * If `false`, it will process them right away.
1108
- * Set to undefined when it won't ever process them like for example in a
1109
- * disposed or errored state.
1110
- */
1111
- isInitDataQueueLocked: TIsQueueLocked;
1112
- /**
1113
- * If `true`, the `MediaKeys` instance has been attached to the HTMLMediaElement.
1114
- * If `false`, it hasn't happened yet.
1115
- * If uncertain or unimportant (for example if the `ContentDecryptor` is an
1116
- * disposed/errored state, set to `undefined`).
1117
- */
1118
- isMediaKeysAttached: TIsMediaKeyAttached;
1119
- /** Data stored relative to that state. */
1120
- data: TData;
1121
- }
1122
-
1123
- const enum MediaKeyAttachmentStatus {
1124
- NotAttached,
1125
- Pending,
1126
- Attached,
1127
- }
1128
-
1129
- /** ContentDecryptor's internal data when in the `Initializing` state. */
1130
- type IInitializingStateData = IContentDecryptorStateBase<
1131
- ContentDecryptorState.Initializing,
1132
- true, // isInitDataQueueLocked
1133
- MediaKeyAttachmentStatus.NotAttached, // isMediaKeysAttached
1134
- null // data
1135
- >;
1136
-
1137
- /** ContentDecryptor's internal data when in the `WaitingForAttachment` state. */
1138
- type IWaitingForAttachmentStateData = IContentDecryptorStateBase<
1139
- ContentDecryptorState.WaitingForAttachment,
1140
- true, // isInitDataQueueLocked
1141
- MediaKeyAttachmentStatus.NotAttached, // isMediaKeysAttached
1142
- // data
1143
- { mediaKeysInfo : IMediaKeysInfos;
1144
- mediaElement : HTMLMediaElement; }
1145
- >;
1146
-
1147
- /**
1148
- * ContentDecryptor's internal data when in the `ReadyForContent` state before
1149
- * it has attached the `MediaKeys` to the media element.
1150
- */
1151
- type IReadyForContentStateDataUnattached = IContentDecryptorStateBase<
1152
- ContentDecryptorState.ReadyForContent,
1153
- true, // isInitDataQueueLocked
1154
- MediaKeyAttachmentStatus.NotAttached |
1155
- MediaKeyAttachmentStatus.Pending, // isMediaKeysAttached
1156
- { mediaKeysInfo : IMediaKeysInfos;
1157
- mediaElement : HTMLMediaElement; } // data
1158
- >;
1159
-
1160
- /**
1161
- * ContentDecryptor's internal data when in the `ReadyForContent` state once
1162
- * it has attached the `MediaKeys` to the media element.
1163
- */
1164
- type IReadyForContentStateDataAttached = IContentDecryptorStateBase<
1165
- ContentDecryptorState.ReadyForContent,
1166
- boolean, // isInitDataQueueLocked
1167
- MediaKeyAttachmentStatus.Attached, // isMediaKeysAttached
1168
- {
1169
- /**
1170
- * MediaKeys-related information linked to this instance of the
1171
- * `ContentDecryptor`.
1172
- * Set to `null` until it is known.
1173
- * Should be always set when the `ContentDecryptor` has reached the
1174
- * Initialized state (@see ContentDecryptorState).
1175
- */
1176
- mediaKeysData : IAttachedMediaKeysData;
1177
- }
1178
- >;
1179
-
1180
- /** ContentDecryptor's internal data when in the `Disposed` state. */
1181
- type IDisposeStateData = IContentDecryptorStateBase<
1182
- ContentDecryptorState.Disposed,
1183
- undefined, // isInitDataQueueLocked
1184
- undefined, // isMediaKeysAttached
1185
- null // data
1186
- >;
1187
-
1188
- /** ContentDecryptor's internal data when in the `Error` state. */
1189
- type IErrorStateData = IContentDecryptorStateBase<
1190
- ContentDecryptorState.Error,
1191
- undefined, // isInitDataQueueLocked
1192
- undefined, // isMediaKeysAttached
1193
- null // data
1194
- >;
1195
-
1196
- /** Information linked to a session created by the `ContentDecryptor`. */
1197
- interface IActiveSessionInfo {
1198
- /**
1199
- * Record associated to the session.
1200
- * Most notably, it allows both to identify the session as well as to
1201
- * anounce and find out which key ids are already handled.
1202
- */
1203
- record : KeySessionRecord;
1204
-
1205
- /** Current keys' statuses linked that session. */
1206
- keyStatuses : {
1207
- /** Key ids linked to keys that are "usable". */
1208
- whitelisted : Uint8Array[];
1209
- /**
1210
- * Key ids linked to keys that are not considered "usable".
1211
- * Content linked to those keys are not decipherable and may thus be
1212
- * fallbacked from.
1213
- */
1214
- blacklisted : Uint8Array[];
1215
- };
1216
-
1217
- /** Source of the MediaKeySession linked to that record. */
1218
- source : MediaKeySessionLoadingType;
1219
-
1220
- /**
1221
- * If different than `null`, all initialization data compatible with this
1222
- * processed initialization data has been blacklisted with this corresponding
1223
- * error.
1224
- */
1225
- blacklistedSessionError : BlacklistedSessionError | null;
1226
- }
1227
-
1228
- /**
1229
- * Sent when the created (or already created) MediaKeys is attached to the
1230
- * current HTMLMediaElement element.
1231
- * On some peculiar devices, we have to wait for that step before the first
1232
- * media segments are to be pushed to avoid issues.
1233
- * Because this event is sent after a MediaKeys is created, you will always have
1234
- * a "created-media-keys" event before an "attached-media-keys" event.
1235
- */
1236
- interface IAttachedMediaKeysData {
1237
- /** The MediaKeySystemAccess which allowed to create the MediaKeys instance. */
1238
- mediaKeySystemAccess: MediaKeySystemAccess |
1239
- ICustomMediaKeySystemAccess;
1240
- /** The MediaKeys instance. */
1241
- mediaKeys : MediaKeys |
1242
- ICustomMediaKeys;
1243
- stores : IMediaKeySessionStores;
1244
- options : IKeySystemOption;
1245
- }
1246
-