rx-player 4.0.0-dev.2023120600 → 4.0.0-dev.2023121900

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 (326) hide show
  1. package/CHANGELOG.md +178 -2
  2. package/README.md +2 -33
  3. package/VERSION +1 -1
  4. package/dist/_esm5.processed/compat/add_text_track.d.ts +3 -1
  5. package/dist/_esm5.processed/compat/add_text_track.js +7 -4
  6. package/dist/_esm5.processed/compat/browser_compatibility_types.d.ts +7 -0
  7. package/dist/_esm5.processed/compat/event_listeners.d.ts +15 -2
  8. package/dist/_esm5.processed/compat/event_listeners.js +37 -2
  9. package/dist/_esm5.processed/compat/fullscreen.d.ts +32 -0
  10. package/dist/_esm5.processed/compat/fullscreen.js +78 -0
  11. package/dist/_esm5.processed/compat/index.d.ts +3 -1
  12. package/dist/_esm5.processed/compat/index.js +3 -1
  13. package/dist/_esm5.processed/compat/is_offline.d.ts +39 -0
  14. package/dist/_esm5.processed/compat/is_offline.js +43 -0
  15. package/dist/_esm5.processed/config.d.ts +21 -9
  16. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.d.ts +58 -0
  17. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +54 -14
  18. package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.d.ts +8 -2
  19. package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.js +11 -2
  20. package/dist/_esm5.processed/core/api/debug/modules/general_info.js +46 -17
  21. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +3 -3
  22. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +1 -1
  23. package/dist/_esm5.processed/core/api/option_utils.d.ts +35 -14
  24. package/dist/_esm5.processed/core/api/option_utils.js +230 -47
  25. package/dist/_esm5.processed/core/api/public_api.d.ts +266 -92
  26. package/dist/_esm5.processed/core/api/public_api.js +802 -444
  27. package/dist/_esm5.processed/core/api/{track_management/media_element_tracks_store.d.ts → tracks_management/media_element_track_choice_manager.d.ts} +75 -15
  28. package/dist/_esm5.processed/core/api/{track_management/media_element_tracks_store.js → tracks_management/media_element_track_choice_manager.js} +193 -74
  29. package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.d.ts +258 -0
  30. package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.js +989 -0
  31. package/dist/_esm5.processed/core/api/utils.d.ts +0 -1
  32. package/dist/_esm5.processed/core/api/utils.js +11 -28
  33. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +3 -3
  34. package/dist/_esm5.processed/core/decrypt/find_key_system.js +71 -83
  35. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +5 -6
  36. package/dist/_esm5.processed/core/decrypt/session_events_listener.js +72 -10
  37. package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.d.ts +4 -4
  38. package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.js +4 -6
  39. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +3 -1
  40. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +26 -7
  41. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +9 -3
  42. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +9 -16
  43. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +3 -1
  44. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  45. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.d.ts +6 -1
  46. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +41 -4
  47. package/dist/_esm5.processed/core/init/media_source_content_initializer.d.ts +8 -1
  48. package/dist/_esm5.processed/core/init/media_source_content_initializer.js +5 -2
  49. package/dist/_esm5.processed/core/init/types.d.ts +15 -5
  50. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +9 -2
  51. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.d.ts +75 -0
  52. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.js +133 -0
  53. package/dist/_esm5.processed/core/{api/track_management → segment_buffers/implementations/image}/index.d.ts +2 -3
  54. package/dist/_esm5.processed/core/{api/track_management → segment_buffers/implementations/image}/index.js +2 -3
  55. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +1 -1
  56. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +2 -1
  57. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +4 -3
  58. package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +2 -2
  59. package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
  60. package/dist/_esm5.processed/core/segment_buffers/index.js +1 -2
  61. package/dist/_esm5.processed/core/segment_buffers/inventory/index.d.ts +2 -3
  62. package/dist/_esm5.processed/core/segment_buffers/inventory/index.js +0 -1
  63. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +25 -8
  64. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +19 -10
  65. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.d.ts +1 -0
  66. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +16 -2
  67. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +15 -0
  68. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +93 -183
  69. package/dist/_esm5.processed/core/stream/adaptation/types.d.ts +13 -27
  70. package/dist/_esm5.processed/core/stream/index.d.ts +3 -2
  71. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +0 -2
  72. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +7 -5
  73. package/dist/_esm5.processed/core/stream/period/period_stream.js +12 -13
  74. package/dist/_esm5.processed/core/stream/period/types.d.ts +14 -5
  75. package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +4 -2
  76. package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.js +46 -10
  77. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +23 -29
  78. package/dist/_esm5.processed/core/stream/representation/types.d.ts +1 -11
  79. package/dist/_esm5.processed/core/stream/representation/utils/get_buffer_status.js +1 -1
  80. package/dist/_esm5.processed/core/stream/representation/utils/get_needed_segments.js +1 -1
  81. package/dist/_esm5.processed/default_config.d.ts +98 -35
  82. package/dist/_esm5.processed/default_config.js +113 -36
  83. package/dist/_esm5.processed/errors/custom_loader_error.d.ts +3 -1
  84. package/dist/_esm5.processed/errors/custom_loader_error.js +3 -1
  85. package/dist/_esm5.processed/errors/media_error.js +2 -2
  86. package/dist/_esm5.processed/errors/network_error.d.ts +1 -0
  87. package/dist/_esm5.processed/errors/network_error.js +1 -0
  88. package/dist/_esm5.processed/errors/request_error.d.ts +3 -2
  89. package/dist/_esm5.processed/errors/request_error.js +5 -2
  90. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -3
  91. package/dist/_esm5.processed/features/features_object.js +2 -0
  92. package/dist/_esm5.processed/{transports/smooth/is_mp4_embedded_track.js → features/list/bif_parser.d.ts} +6 -7
  93. package/dist/_esm5.processed/features/list/bif_parser.js +27 -0
  94. package/dist/_esm5.processed/features/list/directfile.js +5 -2
  95. package/dist/_esm5.processed/features/list/image_buffer.d.ts +23 -0
  96. package/dist/_esm5.processed/features/list/image_buffer.js +25 -0
  97. package/dist/_esm5.processed/features/list/index.d.ts +2 -0
  98. package/dist/_esm5.processed/features/list/index.js +2 -0
  99. package/dist/_esm5.processed/features/types.d.ts +27 -3
  100. package/dist/_esm5.processed/manifest/adaptation.d.ts +11 -9
  101. package/dist/_esm5.processed/manifest/adaptation.js +30 -41
  102. package/dist/_esm5.processed/manifest/index.d.ts +4 -3
  103. package/dist/_esm5.processed/manifest/manifest.d.ts +54 -5
  104. package/dist/_esm5.processed/manifest/manifest.js +110 -5
  105. package/dist/_esm5.processed/manifest/period.d.ts +5 -4
  106. package/dist/_esm5.processed/manifest/representation.d.ts +5 -10
  107. package/dist/_esm5.processed/manifest/representation.js +5 -15
  108. package/dist/_esm5.processed/manifest/representation_index/index.d.ts +2 -2
  109. package/dist/_esm5.processed/manifest/representation_index/static.d.ts +0 -2
  110. package/dist/_esm5.processed/manifest/representation_index/static.js +0 -6
  111. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +21 -42
  112. package/dist/_esm5.processed/manifest/types.d.ts +2 -0
  113. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +31 -17
  114. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +19 -26
  115. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +0 -2
  116. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +1 -7
  117. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +6 -2
  118. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +8 -11
  119. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +0 -2
  120. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +0 -6
  121. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
  122. package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.js +6 -1
  123. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +5 -3
  124. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +2 -0
  125. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -1
  126. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +2 -2
  127. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +2 -0
  128. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +2 -2
  129. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +6 -10
  130. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +2 -4
  131. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.d.ts +1 -10
  132. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +2 -18
  133. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +4 -4
  134. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +6 -3
  135. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +2 -1
  136. package/dist/_esm5.processed/parsers/manifest/local/representation_index.d.ts +0 -2
  137. package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +0 -6
  138. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.js +6 -6
  139. package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.d.ts +3 -12
  140. package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.js +2 -11
  141. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +1 -0
  142. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +17 -11
  143. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +83 -21
  144. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +125 -53
  145. package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.d.ts +6 -3
  146. package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.js +4 -4
  147. package/dist/_esm5.processed/parsers/manifest/types.d.ts +3 -3
  148. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_line_height.js +2 -1
  149. package/dist/_esm5.processed/public_types.d.ts +310 -396
  150. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.d.ts +4 -5
  151. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +4 -5
  152. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +4 -4
  153. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +38 -0
  154. package/dist/_esm5.processed/transports/dash/image_pipelines.js +129 -0
  155. package/dist/_esm5.processed/transports/dash/manifest_parser.js +3 -2
  156. package/dist/_esm5.processed/transports/dash/pipelines.js +4 -1
  157. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
  158. package/dist/_esm5.processed/transports/dash/segment_loader.js +20 -26
  159. package/dist/_esm5.processed/transports/dash/segment_parser.js +24 -19
  160. package/dist/_esm5.processed/transports/dash/text_loader.js +5 -5
  161. package/dist/_esm5.processed/transports/dash/text_parser.js +33 -28
  162. package/dist/_esm5.processed/transports/local/pipelines.js +10 -1
  163. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -2
  164. package/dist/_esm5.processed/transports/local/segment_parser.d.ts +1 -1
  165. package/dist/_esm5.processed/transports/local/segment_parser.js +10 -10
  166. package/dist/_esm5.processed/transports/local/text_parser.d.ts +2 -2
  167. package/dist/_esm5.processed/transports/local/text_parser.js +23 -23
  168. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +52 -34
  169. package/dist/_esm5.processed/transports/smooth/pipelines.js +190 -33
  170. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +1 -1
  171. package/dist/_esm5.processed/transports/smooth/segment_loader.js +22 -28
  172. package/dist/_esm5.processed/transports/smooth/utils.d.ts +26 -1
  173. package/dist/_esm5.processed/transports/smooth/utils.js +55 -1
  174. package/dist/_esm5.processed/transports/types.d.ts +89 -94
  175. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
  176. package/dist/_esm5.processed/transports/utils/infer_segment_container.d.ts +3 -3
  177. package/dist/_esm5.processed/transports/utils/infer_segment_container.js +7 -5
  178. package/dist/_esm5.processed/transports/utils/parse_text_track.d.ts +12 -8
  179. package/dist/_esm5.processed/transports/utils/parse_text_track.js +21 -19
  180. package/dist/_esm5.processed/utils/array_includes.d.ts +1 -2
  181. package/dist/_esm5.processed/utils/array_includes.js +28 -30
  182. package/dist/_esm5.processed/{transports/smooth/is_mp4_embedded_track.d.ts → utils/list_to_map.d.ts} +5 -5
  183. package/dist/_esm5.processed/utils/list_to_map.js +28 -0
  184. package/dist/_esm5.processed/utils/request/xhr.js +5 -5
  185. package/dist/_esm5.processed/utils/simple_set.d.ts +51 -0
  186. package/dist/_esm5.processed/utils/simple_set.js +57 -0
  187. package/dist/_esm5.processed/utils/uniq.d.ts +36 -0
  188. package/dist/_esm5.processed/utils/uniq.js +43 -0
  189. package/dist/commonjs/config.d.ts +1 -1
  190. package/dist/commonjs/core/adaptive/adaptive_representation_selector.d.ts +2 -19
  191. package/dist/commonjs/core/adaptive/adaptive_representation_selector.js +2 -2
  192. package/dist/commonjs/core/adaptive/network_analyzer.js +3 -3
  193. package/dist/commonjs/core/api/index.d.ts +1 -1
  194. package/dist/commonjs/core/api/playback_observer.d.ts +128 -8
  195. package/dist/commonjs/core/api/playback_observer.js +217 -64
  196. package/dist/commonjs/core/api/public_api.js +9 -9
  197. package/dist/commonjs/core/api/utils.js +1 -1
  198. package/dist/commonjs/core/decrypt/get_media_keys.js +2 -6
  199. package/dist/commonjs/core/init/directfile_content_initializer.js +5 -1
  200. package/dist/commonjs/core/init/media_source_content_initializer.js +28 -14
  201. package/dist/commonjs/core/init/utils/content_time_boundaries_observer.js +1 -2
  202. package/dist/commonjs/core/init/utils/create_stream_playback_observer.d.ts +1 -5
  203. package/dist/commonjs/core/init/utils/create_stream_playback_observer.js +16 -14
  204. package/dist/commonjs/core/init/utils/initial_seek_and_play.d.ts +9 -11
  205. package/dist/commonjs/core/init/utils/initial_seek_and_play.js +121 -91
  206. package/dist/commonjs/core/init/utils/rebuffering_controller.js +27 -70
  207. package/dist/commonjs/core/init/utils/stream_events_emitter/stream_events_emitter.js +4 -2
  208. package/dist/commonjs/core/segment_buffers/garbage_collector.js +1 -2
  209. package/dist/commonjs/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +9 -2
  210. package/dist/commonjs/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +1 -1
  211. package/dist/commonjs/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +1 -1
  212. package/dist/commonjs/core/segment_buffers/index.d.ts +2 -2
  213. package/dist/commonjs/core/segment_buffers/inventory/index.d.ts +2 -2
  214. package/dist/commonjs/core/segment_buffers/inventory/segment_inventory.d.ts +25 -8
  215. package/dist/commonjs/core/segment_buffers/inventory/segment_inventory.js +19 -10
  216. package/dist/commonjs/core/stream/adaptation/get_representations_switch_strategy.d.ts +2 -2
  217. package/dist/commonjs/core/stream/adaptation/get_representations_switch_strategy.js +16 -9
  218. package/dist/commonjs/core/stream/orchestrator/stream_orchestrator.js +14 -18
  219. package/dist/commonjs/core/stream/period/period_stream.js +5 -8
  220. package/dist/commonjs/core/stream/period/types.d.ts +2 -3
  221. package/dist/commonjs/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +4 -5
  222. package/dist/commonjs/core/stream/period/utils/get_adaptation_switch_strategy.js +17 -13
  223. package/dist/commonjs/core/stream/representation/representation_stream.js +3 -4
  224. package/dist/commonjs/core/stream/representation/types.d.ts +2 -2
  225. package/dist/commonjs/core/stream/representation/utils/append_segment_to_buffer.js +11 -12
  226. package/dist/commonjs/core/stream/representation/utils/get_buffer_status.js +1 -1
  227. package/dist/commonjs/default_config.d.ts +7 -16
  228. package/dist/commonjs/default_config.js +16 -16
  229. package/dist/commonjs/manifest/adaptation.js +2 -1
  230. package/dist/commonjs/parsers/texttracks/ttml/html/apply_line_height.js +2 -1
  231. package/dist/commonjs/public_types.d.ts +29 -2
  232. package/dist/es2017/config.d.ts +1 -1
  233. package/dist/es2017/core/adaptive/adaptive_representation_selector.d.ts +2 -19
  234. package/dist/es2017/core/adaptive/adaptive_representation_selector.js +2 -2
  235. package/dist/es2017/core/adaptive/network_analyzer.js +3 -3
  236. package/dist/es2017/core/api/index.d.ts +1 -1
  237. package/dist/es2017/core/api/playback_observer.d.ts +128 -8
  238. package/dist/es2017/core/api/playback_observer.js +217 -66
  239. package/dist/es2017/core/api/public_api.js +9 -9
  240. package/dist/es2017/core/api/utils.js +1 -1
  241. package/dist/es2017/core/decrypt/get_media_keys.js +2 -6
  242. package/dist/es2017/core/init/directfile_content_initializer.js +7 -1
  243. package/dist/es2017/core/init/media_source_content_initializer.js +30 -16
  244. package/dist/es2017/core/init/utils/content_time_boundaries_observer.js +1 -2
  245. package/dist/es2017/core/init/utils/create_stream_playback_observer.d.ts +1 -5
  246. package/dist/es2017/core/init/utils/create_stream_playback_observer.js +16 -14
  247. package/dist/es2017/core/init/utils/initial_seek_and_play.d.ts +9 -11
  248. package/dist/es2017/core/init/utils/initial_seek_and_play.js +120 -91
  249. package/dist/es2017/core/init/utils/rebuffering_controller.js +27 -70
  250. package/dist/es2017/core/init/utils/stream_events_emitter/stream_events_emitter.js +4 -2
  251. package/dist/es2017/core/segment_buffers/garbage_collector.js +1 -2
  252. package/dist/es2017/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +9 -2
  253. package/dist/es2017/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +1 -1
  254. package/dist/es2017/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +1 -1
  255. package/dist/es2017/core/segment_buffers/index.d.ts +2 -2
  256. package/dist/es2017/core/segment_buffers/inventory/index.d.ts +2 -2
  257. package/dist/es2017/core/segment_buffers/inventory/segment_inventory.d.ts +25 -8
  258. package/dist/es2017/core/segment_buffers/inventory/segment_inventory.js +19 -10
  259. package/dist/es2017/core/stream/adaptation/get_representations_switch_strategy.d.ts +2 -2
  260. package/dist/es2017/core/stream/adaptation/get_representations_switch_strategy.js +16 -9
  261. package/dist/es2017/core/stream/orchestrator/stream_orchestrator.js +16 -18
  262. package/dist/es2017/core/stream/period/period_stream.js +4 -7
  263. package/dist/es2017/core/stream/period/types.d.ts +2 -3
  264. package/dist/es2017/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +4 -5
  265. package/dist/es2017/core/stream/period/utils/get_adaptation_switch_strategy.js +17 -13
  266. package/dist/es2017/core/stream/representation/representation_stream.js +3 -4
  267. package/dist/es2017/core/stream/representation/types.d.ts +2 -2
  268. package/dist/es2017/core/stream/representation/utils/append_segment_to_buffer.js +1 -2
  269. package/dist/es2017/core/stream/representation/utils/get_buffer_status.js +1 -1
  270. package/dist/es2017/default_config.d.ts +7 -16
  271. package/dist/es2017/default_config.js +16 -16
  272. package/dist/es2017/manifest/adaptation.js +2 -1
  273. package/dist/es2017/parsers/texttracks/ttml/html/apply_line_height.js +2 -1
  274. package/dist/es2017/public_types.d.ts +29 -2
  275. package/dist/mpd-parser.wasm +0 -0
  276. package/dist/rx-player.js +614 -438
  277. package/dist/rx-player.min.js +1 -1
  278. package/package.json +5 -1
  279. package/scripts/canal-release.patch +78 -0
  280. package/scripts/make-dev-releases +65 -0
  281. package/scripts/update-version +5 -0
  282. package/sonar-project.properties +1 -1
  283. package/src/core/adaptive/adaptive_representation_selector.ts +4 -21
  284. package/src/core/adaptive/network_analyzer.ts +3 -3
  285. package/src/core/api/index.ts +1 -0
  286. package/src/core/api/playback_observer.ts +327 -107
  287. package/src/core/api/public_api.ts +9 -9
  288. package/src/core/api/utils.ts +3 -1
  289. package/src/core/decrypt/get_media_keys.ts +2 -8
  290. package/src/core/init/directfile_content_initializer.ts +8 -8
  291. package/src/core/init/media_source_content_initializer.ts +27 -20
  292. package/src/core/init/utils/content_time_boundaries_observer.ts +1 -1
  293. package/src/core/init/utils/create_stream_playback_observer.ts +19 -20
  294. package/src/core/init/utils/initial_seek_and_play.ts +140 -108
  295. package/src/core/init/utils/rebuffering_controller.ts +32 -77
  296. package/src/core/init/utils/stream_events_emitter/stream_events_emitter.ts +5 -2
  297. package/src/core/segment_buffers/garbage_collector.ts +1 -1
  298. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +10 -2
  299. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +1 -1
  300. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +1 -1
  301. package/src/core/segment_buffers/index.ts +2 -0
  302. package/src/core/segment_buffers/inventory/index.ts +2 -0
  303. package/src/core/segment_buffers/inventory/segment_inventory.ts +49 -17
  304. package/src/core/stream/adaptation/get_representations_switch_strategy.ts +21 -12
  305. package/src/core/stream/orchestrator/stream_orchestrator.ts +14 -19
  306. package/src/core/stream/period/period_stream.ts +7 -8
  307. package/src/core/stream/period/types.ts +2 -3
  308. package/src/core/stream/period/utils/get_adaptation_switch_strategy.ts +21 -15
  309. package/src/core/stream/representation/representation_stream.ts +3 -5
  310. package/src/core/stream/representation/types.ts +2 -2
  311. package/src/core/stream/representation/utils/append_segment_to_buffer.ts +1 -1
  312. package/src/core/stream/representation/utils/get_buffer_status.ts +2 -1
  313. package/src/default_config.ts +17 -17
  314. package/src/manifest/adaptation.ts +2 -1
  315. package/src/parsers/texttracks/ttml/html/apply_line_height.ts +3 -1
  316. package/src/public_types.ts +29 -2
  317. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.d.ts +0 -84
  318. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.js +0 -158
  319. package/dist/_esm5.processed/core/api/track_management/tracks_store.d.ts +0 -406
  320. package/dist/_esm5.processed/core/api/track_management/tracks_store.js +0 -932
  321. package/dist/_esm5.processed/core/segment_buffers/inventory/utils.d.ts +0 -33
  322. package/dist/_esm5.processed/core/segment_buffers/inventory/utils.js +0 -49
  323. package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.d.ts +0 -39
  324. package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.js +0 -133
  325. package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.d.ts +0 -119
  326. package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.js +0 -159
@@ -24,25 +24,110 @@ var __assign = (this && this.__assign) || function () {
24
24
  };
25
25
  return __assign.apply(this, arguments);
26
26
  };
27
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
28
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
29
+ return new (P || (P = Promise))(function (resolve, reject) {
30
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
31
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
32
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
33
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
34
+ });
35
+ };
36
+ var __generator = (this && this.__generator) || function (thisArg, body) {
37
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
38
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
39
+ function verb(n) { return function (v) { return step([n, v]); }; }
40
+ function step(op) {
41
+ if (f) throw new TypeError("Generator is already executing.");
42
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
43
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
44
+ if (y = 0, t) op = [op[0] & 2, t.value];
45
+ switch (op[0]) {
46
+ case 0: case 1: t = op; break;
47
+ case 4: _.label++; return { value: op[1], done: false };
48
+ case 5: _.label++; y = op[1]; op = [0]; continue;
49
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
50
+ default:
51
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
52
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
53
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
54
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
55
+ if (t[2]) _.ops.pop();
56
+ _.trys.pop(); continue;
57
+ }
58
+ op = body.call(thisArg, _);
59
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
60
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
61
+ }
62
+ };
63
+ import features from "../../features";
27
64
  import log from "../../log";
28
65
  import Manifest from "../../manifest";
29
66
  import { getMDAT } from "../../parsers/containers/isobmff";
30
- import createSmoothManifestParser from "../../parsers/manifest/smooth";
67
+ import createSmoothManifestParser, { SmoothRepresentationIndex, } from "../../parsers/manifest/smooth";
31
68
  import request from "../../utils/request";
32
69
  import { strToUtf8, utf8ToStr, } from "../../utils/string_parsing";
70
+ import warnOnce from "../../utils/warn_once";
33
71
  import checkISOBMFFIntegrity from "../utils/check_isobmff_integrity";
34
72
  import generateManifestLoader from "../utils/generate_manifest_loader";
35
73
  import extractTimingsInfos from "./extract_timings_infos";
36
- import isMP4EmbeddedTrack from "./is_mp4_embedded_track";
37
74
  import { patchSegment } from "./isobmff";
38
75
  import generateSegmentLoader from "./segment_loader";
39
- import { constructSegmentUrl } from "./utils";
76
+ import { constructSegmentUrl, extractISML, extractToken, isMP4EmbeddedTrack, replaceToken, resolveManifest, } from "./utils";
77
+ var WSX_REG = /\.wsx?(\?token=\S+)?/;
78
+ /**
79
+ * @param {Object} adaptation
80
+ * @param {Object} dlSegment
81
+ * @param {Object} nextSegments
82
+ */
83
+ function addNextSegments(adaptation, nextSegments, dlSegment) {
84
+ var _a;
85
+ log.debug("Smooth Parser: update segments information.");
86
+ var representations = adaptation.representations;
87
+ for (var i = 0; i < representations.length; i++) {
88
+ var representation = representations[i];
89
+ if (representation.index instanceof SmoothRepresentationIndex &&
90
+ ((_a = dlSegment === null || dlSegment === void 0 ? void 0 : dlSegment.privateInfos) === null || _a === void 0 ? void 0 : _a.smoothMediaSegment) !== undefined) {
91
+ representation.index.addNewSegments(nextSegments, dlSegment.privateInfos.smoothMediaSegment);
92
+ }
93
+ else {
94
+ log.warn("Smooth Parser: should only encounter SmoothRepresentationIndex");
95
+ }
96
+ }
97
+ }
40
98
  export default function (transportOptions) {
41
99
  var smoothManifestParser = createSmoothManifestParser(transportOptions);
42
100
  var segmentLoader = generateSegmentLoader(transportOptions);
43
101
  var manifestLoaderOptions = { customManifestLoader: transportOptions.manifestLoader };
44
102
  var manifestLoader = generateManifestLoader(manifestLoaderOptions, "text");
45
103
  var manifestPipeline = {
104
+ // TODO (v4.x.x) Remove that function
105
+ resolveManifestUrl: function (url, cancelSignal) {
106
+ if (url === undefined) {
107
+ return Promise.resolve(undefined);
108
+ }
109
+ var resolving;
110
+ if (WSX_REG.test(url)) {
111
+ warnOnce("Giving WSX URL to loadVideo is deprecated." +
112
+ " You should only give Manifest URLs.");
113
+ resolving = request({ url: replaceToken(url, ""),
114
+ responseType: "document", cancelSignal: cancelSignal })
115
+ .then(function (value) {
116
+ var extractedURL = extractISML(value.responseData);
117
+ if (extractedURL === null || extractedURL.length === 0) {
118
+ throw new Error("Invalid ISML");
119
+ }
120
+ return extractedURL;
121
+ });
122
+ }
123
+ else {
124
+ resolving = Promise.resolve(url);
125
+ }
126
+ var token = extractToken(url);
127
+ return resolving.then(function (_url) {
128
+ return replaceToken(resolveManifest(_url), token);
129
+ });
130
+ },
46
131
  loadManifest: manifestLoader,
47
132
  parseManifest: function (manifestData, parserOptions) {
48
133
  var _a;
@@ -54,6 +139,8 @@ export default function (transportOptions) {
54
139
  var parserResult = smoothManifestParser(documentData, url, manifestReceivedTime);
55
140
  var manifest = new Manifest(parserResult, {
56
141
  representationFilter: transportOptions.representationFilter,
142
+ supplementaryImageTracks: transportOptions.supplementaryImageTracks,
143
+ supplementaryTextTracks: transportOptions.supplementaryTextTracks,
57
144
  });
58
145
  return { manifest: manifest, url: url };
59
146
  },
@@ -66,26 +153,26 @@ export default function (transportOptions) {
66
153
  /**
67
154
  * Load a Smooth audio/video segment.
68
155
  * @param {Object|null} wantedCdn
69
- * @param {Object} context
156
+ * @param {Object} content
70
157
  * @param {Object} loaderOptions
71
158
  * @param {Object} cancelSignal
72
159
  * @param {Object} callbacks
73
160
  * @returns {Promise}
74
161
  */
75
- loadSegment: function (wantedCdn, context, loaderOptions, cancelSignal, callbacks) {
76
- var url = constructSegmentUrl(wantedCdn, context.segment);
77
- return segmentLoader(url, context, loaderOptions, cancelSignal, callbacks);
162
+ loadSegment: function (wantedCdn, content, loaderOptions, cancelSignal, callbacks) {
163
+ var url = constructSegmentUrl(wantedCdn, content.segment);
164
+ return segmentLoader(url, content, loaderOptions, cancelSignal, callbacks);
78
165
  },
79
- parseSegment: function (loadedSegment, context, initTimescale) {
166
+ parseSegment: function (loadedSegment, content, initTimescale) {
80
167
  var _a, _b;
81
- var segment = context.segment;
168
+ var segment = content.segment, adaptation = content.adaptation, manifest = content.manifest;
82
169
  var data = loadedSegment.data, isChunked = loadedSegment.isChunked;
83
170
  if (data === null) {
84
171
  if (segment.isInit) {
85
172
  return { segmentType: "init",
86
173
  initializationData: null,
87
174
  initializationDataSize: 0,
88
- protectionData: [],
175
+ protectionDataUpdate: false,
89
176
  initTimescale: undefined };
90
177
  }
91
178
  return { segmentType: "media",
@@ -93,7 +180,7 @@ export default function (transportOptions) {
93
180
  chunkInfos: null,
94
181
  chunkOffset: 0,
95
182
  chunkSize: 0,
96
- protectionData: [],
183
+ protectionDataUpdate: false,
97
184
  appendWindow: [undefined, undefined] };
98
185
  }
99
186
  var responseBuffer = data instanceof Uint8Array ? data :
@@ -106,10 +193,10 @@ export default function (transportOptions) {
106
193
  // smooth init segments are crafted by hand.
107
194
  // Their timescale is the one from the manifest.
108
195
  initTimescale: timescale,
109
- protectionData: [] };
196
+ protectionDataUpdate: false };
110
197
  }
111
198
  var timingInfos = initTimescale !== undefined ?
112
- extractTimingsInfos(responseBuffer, isChunked, initTimescale, segment, context.isLive) :
199
+ extractTimingsInfos(responseBuffer, isChunked, initTimescale, segment, manifest.isLive) :
113
200
  null;
114
201
  if (timingInfos === null ||
115
202
  timingInfos.chunkInfos === null ||
@@ -118,22 +205,24 @@ export default function (transportOptions) {
118
205
  }
119
206
  var nextSegments = timingInfos.nextSegments, chunkInfos = timingInfos.chunkInfos, scaledSegmentTime = timingInfos.scaledSegmentTime;
120
207
  var chunkData = patchSegment(responseBuffer, scaledSegmentTime);
121
- var predictedSegments = nextSegments.length > 0 ? nextSegments :
122
- undefined;
208
+ if (nextSegments.length > 0) {
209
+ addNextSegments(adaptation, nextSegments, segment);
210
+ }
123
211
  return { segmentType: "media", chunkData: chunkData, chunkInfos: chunkInfos, chunkOffset: 0,
124
212
  chunkSize: chunkData.length,
125
- protectionData: [], predictedSegments: predictedSegments, appendWindow: [undefined, undefined] };
213
+ protectionDataUpdate: false,
214
+ appendWindow: [undefined, undefined] };
126
215
  },
127
216
  };
128
217
  var textTrackPipeline = {
129
- loadSegment: function (wantedCdn, context, loaderOptions, cancelSignal, callbacks) {
130
- var segment = context.segment;
218
+ loadSegment: function (wantedCdn, content, loaderOptions, cancelSignal, callbacks) {
219
+ var segment = content.segment, representation = content.representation;
131
220
  var url = constructSegmentUrl(wantedCdn, segment);
132
221
  if (segment.isInit || url === null) {
133
222
  return Promise.resolve({ resultType: "segment-created",
134
223
  resultData: null });
135
224
  }
136
- var isMP4 = isMP4EmbeddedTrack(context.mimeType);
225
+ var isMP4 = isMP4EmbeddedTrack(representation);
137
226
  if (!isMP4) {
138
227
  return request({ url: url, responseType: "text",
139
228
  timeout: loaderOptions.timeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress })
@@ -149,23 +238,25 @@ export default function (transportOptions) {
149
238
  resultData: data };
150
239
  }
151
240
  var dataU8 = new Uint8Array(data.responseData);
152
- checkISOBMFFIntegrity(dataU8, context.segment.isInit);
241
+ checkISOBMFFIntegrity(dataU8, content.segment.isInit);
153
242
  return { resultType: "segment-loaded",
154
243
  resultData: __assign(__assign({}, data), { responseData: dataU8 }) };
155
244
  });
156
245
  }
157
246
  },
158
- parseSegment: function (loadedSegment, context, initTimescale) {
247
+ parseSegment: function (loadedSegment, content, initTimescale) {
159
248
  var _a;
160
- var segment = context.segment, language = context.language, _b = context.mimeType, mimeType = _b === void 0 ? "" : _b, _c = context.codecs, codecs = _c === void 0 ? "" : _c;
161
- var isMP4 = isMP4EmbeddedTrack(context.mimeType);
249
+ var manifest = content.manifest, adaptation = content.adaptation, representation = content.representation, segment = content.segment;
250
+ var language = adaptation.language;
251
+ var isMP4 = isMP4EmbeddedTrack(representation);
252
+ var _b = representation.mimeType, mimeType = _b === void 0 ? "" : _b, _c = representation.codec, codec = _c === void 0 ? "" : _c;
162
253
  var data = loadedSegment.data, isChunked = loadedSegment.isChunked;
163
254
  var chunkSize;
164
255
  if (segment.isInit) { // text init segment has no use in HSS
165
256
  return { segmentType: "init",
166
257
  initializationData: null,
167
258
  initializationDataSize: 0,
168
- protectionData: [],
259
+ protectionDataUpdate: false,
169
260
  initTimescale: undefined };
170
261
  }
171
262
  if (data === null) {
@@ -174,7 +265,7 @@ export default function (transportOptions) {
174
265
  chunkInfos: null,
175
266
  chunkOffset: 0,
176
267
  chunkSize: 0,
177
- protectionData: [],
268
+ protectionDataUpdate: false,
178
269
  appendWindow: [undefined, undefined] };
179
270
  }
180
271
  var nextSegments;
@@ -194,7 +285,7 @@ export default function (transportOptions) {
194
285
  }
195
286
  chunkSize = chunkBytes.length;
196
287
  var timingInfos = initTimescale !== undefined ?
197
- extractTimingsInfos(chunkBytes, isChunked, initTimescale, segment, context.isLive) :
288
+ extractTimingsInfos(chunkBytes, isChunked, initTimescale, segment, manifest.isLive) :
198
289
  null;
199
290
  nextSegments = timingInfos === null || timingInfos === void 0 ? void 0 : timingInfos.nextSegments;
200
291
  chunkInfos = (_a = timingInfos === null || timingInfos === void 0 ? void 0 : timingInfos.chunkInfos) !== null && _a !== void 0 ? _a : null;
@@ -213,7 +304,7 @@ export default function (transportOptions) {
213
304
  chunkInfos.time + chunkInfos.duration :
214
305
  segment.end;
215
306
  }
216
- var lcCodec = codecs.toLowerCase();
307
+ var lcCodec = codec.toLowerCase();
217
308
  if (mimeType === "application/ttml+xml+mp4" ||
218
309
  lcCodec === "stpp" ||
219
310
  lcCodec === "stpp.ttml.im1t") {
@@ -255,7 +346,7 @@ export default function (transportOptions) {
255
346
  break;
256
347
  }
257
348
  if (_sdType === undefined) {
258
- var lcCodec = codecs.toLowerCase();
349
+ var lcCodec = codec.toLowerCase();
259
350
  if (lcCodec === "srt") {
260
351
  _sdType = "srt";
261
352
  }
@@ -265,19 +356,85 @@ export default function (transportOptions) {
265
356
  }
266
357
  _sdData = chunkString;
267
358
  }
268
- var predictedSegments = Array.isArray(nextSegments) &&
269
- nextSegments.length > 0 ? nextSegments :
270
- undefined;
359
+ if (chunkInfos !== null &&
360
+ Array.isArray(nextSegments) && nextSegments.length > 0) {
361
+ addNextSegments(adaptation, nextSegments, segment);
362
+ }
271
363
  var chunkOffset = segmentStart !== null && segmentStart !== void 0 ? segmentStart : 0;
272
364
  return { segmentType: "media",
273
365
  chunkData: { type: _sdType,
274
366
  data: _sdData,
275
367
  start: segmentStart,
276
- end: segmentEnd, language: language }, chunkSize: chunkSize, chunkInfos: chunkInfos, chunkOffset: chunkOffset, protectionData: [], predictedSegments: predictedSegments, appendWindow: [undefined, undefined] };
368
+ end: segmentEnd, language: language }, chunkSize: chunkSize, chunkInfos: chunkInfos, chunkOffset: chunkOffset, protectionDataUpdate: false,
369
+ appendWindow: [undefined, undefined] };
370
+ },
371
+ };
372
+ var imageTrackPipeline = {
373
+ loadSegment: function (wantedCdn, content, loaderOptions, cancelSignal, callbacks) {
374
+ return __awaiter(this, void 0, void 0, function () {
375
+ var segment, url, data;
376
+ return __generator(this, function (_a) {
377
+ switch (_a.label) {
378
+ case 0:
379
+ segment = content.segment;
380
+ url = constructSegmentUrl(wantedCdn, segment);
381
+ if (segment.isInit || url === null) {
382
+ // image do not need an init segment. Passthrough directly to the parser
383
+ return [2 /*return*/, { resultType: "segment-created",
384
+ resultData: null }];
385
+ }
386
+ return [4 /*yield*/, request({ url: url, responseType: "arraybuffer",
387
+ timeout: loaderOptions.timeout,
388
+ onProgress: callbacks.onProgress, cancelSignal: cancelSignal })];
389
+ case 1:
390
+ data = _a.sent();
391
+ return [2 /*return*/, { resultType: "segment-loaded",
392
+ resultData: data }];
393
+ }
394
+ });
395
+ });
396
+ },
397
+ parseSegment: function (loadedSegment, content, _initTimescale) {
398
+ var data = loadedSegment.data, isChunked = loadedSegment.isChunked;
399
+ if (content.segment.isInit) { // image init segment has no use
400
+ return { segmentType: "init",
401
+ initializationData: null,
402
+ initializationDataSize: 0,
403
+ protectionDataUpdate: false,
404
+ initTimescale: undefined };
405
+ }
406
+ if (isChunked) {
407
+ throw new Error("Image data should not be downloaded in chunks");
408
+ }
409
+ // TODO image Parsing should be more on the buffer side, no?
410
+ if (data === null || features.imageParser === null) {
411
+ return { segmentType: "media",
412
+ chunkData: null,
413
+ chunkInfos: null,
414
+ chunkOffset: 0,
415
+ chunkSize: 0,
416
+ protectionDataUpdate: false,
417
+ appendWindow: [undefined, undefined] };
418
+ }
419
+ var bifObject = features.imageParser(new Uint8Array(data));
420
+ var thumbsData = bifObject.thumbs;
421
+ return { segmentType: "media",
422
+ chunkData: { data: thumbsData,
423
+ start: 0,
424
+ end: Number.MAX_VALUE,
425
+ timescale: 1,
426
+ type: "bif" },
427
+ chunkInfos: { time: 0,
428
+ duration: Number.MAX_VALUE },
429
+ chunkSize: undefined,
430
+ chunkOffset: 0,
431
+ protectionDataUpdate: false,
432
+ appendWindow: [undefined, undefined] };
277
433
  },
278
434
  };
279
435
  return { manifest: manifestPipeline,
280
436
  audio: audioVideoPipeline,
281
437
  video: audioVideoPipeline,
282
- text: textTrackPipeline };
438
+ text: textTrackPipeline,
439
+ image: imageTrackPipeline };
283
440
  }
@@ -23,5 +23,5 @@ import { ISegmentContext, ISegmentLoaderCallbacks, ISegmentLoaderOptions, ISegme
23
23
  declare const generateSegmentLoader: ({ checkMediaSegmentIntegrity, customSegmentLoader, }: {
24
24
  checkMediaSegmentIntegrity?: boolean | undefined;
25
25
  customSegmentLoader?: ICustomSegmentLoader | undefined;
26
- }) => (url: string | null, context: ISegmentContext, loaderOptions: ISegmentLoaderOptions, cancelSignal: CancellationSignal, callbacks: ISegmentLoaderCallbacks<Uint8Array | ArrayBuffer | null>) => Promise<ISegmentLoaderResultSegmentLoaded<Uint8Array | ArrayBuffer | null> | ISegmentLoaderResultSegmentCreated<Uint8Array | ArrayBuffer | null>>;
26
+ }) => (url: string | null, content: ISegmentContext, loaderOptions: ISegmentLoaderOptions, cancelSignal: CancellationSignal, callbacks: ISegmentLoaderCallbacks<Uint8Array | ArrayBuffer | null>) => Promise<ISegmentLoaderResultSegmentLoaded<Uint8Array | ArrayBuffer | null> | ISegmentLoaderResultSegmentCreated<Uint8Array | ArrayBuffer | null>>;
27
27
  export default generateSegmentLoader;
@@ -29,33 +29,33 @@ import assert from "../../utils/assert";
29
29
  import request from "../../utils/request";
30
30
  import byteRange from "../utils/byte_range";
31
31
  import checkISOBMFFIntegrity from "../utils/check_isobmff_integrity";
32
- import isMP4EmbeddedTrack from "./is_mp4_embedded_track";
33
32
  import { createAudioInitSegment, createVideoInitSegment, } from "./isobmff";
33
+ import { isMP4EmbeddedTrack } from "./utils";
34
34
  /**
35
35
  * Segment loader triggered if there was no custom-defined one in the API.
36
36
  * @param {string} url
37
- * @param {Object} context
37
+ * @param {Object} content
38
38
  * @param {Object} loaderOptions
39
39
  * @param {Object} callbacks
40
40
  * @param {Object} cancelSignal
41
41
  * @param {boolean} checkMediaSegmentIntegrity
42
42
  * @returns {Promise}
43
43
  */
44
- function regularSegmentLoader(url, context, callbacks, loaderOptions, cancelSignal, checkMediaSegmentIntegrity) {
44
+ function regularSegmentLoader(url, content, callbacks, loaderOptions, cancelSignal, checkMediaSegmentIntegrity) {
45
45
  var headers;
46
- var range = context.segment.range;
46
+ var range = content.segment.range;
47
47
  if (Array.isArray(range)) {
48
48
  headers = { Range: byteRange(range) };
49
49
  }
50
50
  return request({ url: url, responseType: "arraybuffer", headers: headers, timeout: loaderOptions.timeout, cancelSignal: cancelSignal, onProgress: callbacks.onProgress })
51
51
  .then(function (data) {
52
- var isMP4 = isMP4EmbeddedTrack(context.mimeType);
52
+ var isMP4 = isMP4EmbeddedTrack(content.representation);
53
53
  if (!isMP4 || checkMediaSegmentIntegrity !== true) {
54
54
  return { resultType: "segment-loaded",
55
55
  resultData: data };
56
56
  }
57
57
  var dataU8 = new Uint8Array(data.responseData);
58
- checkISOBMFFIntegrity(dataU8, context.segment.isInit);
58
+ checkISOBMFFIntegrity(dataU8, content.segment.isInit);
59
59
  return { resultType: "segment-loaded",
60
60
  resultData: __assign(__assign({}, data), { responseData: dataU8 }) };
61
61
  });
@@ -66,8 +66,8 @@ function regularSegmentLoader(url, context, callbacks, loaderOptions, cancelSign
66
66
  */
67
67
  var generateSegmentLoader = function (_a) {
68
68
  var checkMediaSegmentIntegrity = _a.checkMediaSegmentIntegrity, customSegmentLoader = _a.customSegmentLoader;
69
- return function (url, context, loaderOptions, cancelSignal, callbacks) {
70
- var segment = context.segment;
69
+ return function (url, content, loaderOptions, cancelSignal, callbacks) {
70
+ var segment = content.segment, manifest = content.manifest, period = content.period, adaptation = content.adaptation, representation = content.representation;
71
71
  if (segment.isInit) {
72
72
  if (segment.privateInfos === undefined ||
73
73
  segment.privateInfos.smoothInitSegment === undefined) {
@@ -75,19 +75,20 @@ var generateSegmentLoader = function (_a) {
75
75
  }
76
76
  var smoothInitPrivateInfos = segment.privateInfos.smoothInitSegment;
77
77
  var responseData = void 0;
78
- var codecPrivateData = smoothInitPrivateInfos.codecPrivateData, timescale = smoothInitPrivateInfos.timescale, height = smoothInitPrivateInfos.height, width = smoothInitPrivateInfos.width, _a = smoothInitPrivateInfos.protection, protection = _a === void 0 ? { keyId: undefined,
78
+ var codecPrivateData = smoothInitPrivateInfos.codecPrivateData, timescale = smoothInitPrivateInfos.timescale, _a = smoothInitPrivateInfos.protection, protection = _a === void 0 ? { keyId: undefined,
79
79
  keySystems: undefined } : _a;
80
80
  if (codecPrivateData === undefined) {
81
81
  throw new Error("Smooth: no codec private data.");
82
82
  }
83
- switch (context.type) {
83
+ switch (adaptation.type) {
84
84
  case "video": {
85
- responseData = createVideoInitSegment(timescale, width !== null && width !== void 0 ? width : 0, height !== null && height !== void 0 ? height : 0, 72, 72, 4, // vRes, hRes, nal
85
+ var _b = representation.width, width = _b === void 0 ? 0 : _b, _c = representation.height, height = _c === void 0 ? 0 : _c;
86
+ responseData = createVideoInitSegment(timescale, width, height, 72, 72, 4, // vRes, hRes, nal
86
87
  codecPrivateData, protection.keyId);
87
88
  break;
88
89
  }
89
90
  case "audio": {
90
- var _b = smoothInitPrivateInfos.channels, channels = _b === void 0 ? 0 : _b, _c = smoothInitPrivateInfos.bitsPerSample, bitsPerSample = _c === void 0 ? 0 : _c, _d = smoothInitPrivateInfos.packetSize, packetSize = _d === void 0 ? 0 : _d, _e = smoothInitPrivateInfos.samplingRate, samplingRate = _e === void 0 ? 0 : _e;
91
+ var _d = smoothInitPrivateInfos.channels, channels = _d === void 0 ? 0 : _d, _e = smoothInitPrivateInfos.bitsPerSample, bitsPerSample = _e === void 0 ? 0 : _e, _f = smoothInitPrivateInfos.packetSize, packetSize = _f === void 0 ? 0 : _f, _g = smoothInitPrivateInfos.samplingRate, samplingRate = _g === void 0 ? 0 : _g;
91
92
  responseData = createAudioInitSegment(timescale, channels, bitsPerSample, packetSize, samplingRate, codecPrivateData, protection.keyId);
92
93
  break;
93
94
  }
@@ -105,8 +106,10 @@ var generateSegmentLoader = function (_a) {
105
106
  resultData: null });
106
107
  }
107
108
  else {
109
+ var args_1 = { adaptation: adaptation, manifest: manifest, period: period, representation: representation, segment: segment, transport: "smooth",
110
+ timeout: loaderOptions.timeout, url: url };
108
111
  if (typeof customSegmentLoader !== "function") {
109
- return regularSegmentLoader(url, context, callbacks, loaderOptions, cancelSignal, checkMediaSegmentIntegrity);
112
+ return regularSegmentLoader(url, content, callbacks, loaderOptions, cancelSignal, checkMediaSegmentIntegrity);
110
113
  }
111
114
  return new Promise(function (res, rej) {
112
115
  /** `true` when the custom segmentLoader should not be active anymore. */
@@ -121,7 +124,7 @@ var generateSegmentLoader = function (_a) {
121
124
  }
122
125
  hasFinished = true;
123
126
  cancelSignal.deregister(abortCustomLoader);
124
- var isMP4 = isMP4EmbeddedTrack(context.mimeType);
127
+ var isMP4 = isMP4EmbeddedTrack(content.representation);
125
128
  if (!isMP4 || checkMediaSegmentIntegrity !== true) {
126
129
  res({ resultType: "segment-loaded",
127
130
  resultData: { responseData: _args.data,
@@ -130,7 +133,7 @@ var generateSegmentLoader = function (_a) {
130
133
  }
131
134
  var dataU8 = _args.data instanceof Uint8Array ? _args.data :
132
135
  new Uint8Array(_args.data);
133
- checkISOBMFFIntegrity(dataU8, context.segment.isInit);
136
+ checkISOBMFFIntegrity(dataU8, content.segment.isInit);
134
137
  res({ resultType: "segment-loaded",
135
138
  resultData: { responseData: dataU8,
136
139
  size: _args.size,
@@ -141,7 +144,7 @@ var generateSegmentLoader = function (_a) {
141
144
  * @param {*} err - The corresponding error encountered
142
145
  */
143
146
  var reject = function (err) {
144
- var _a, _b;
147
+ var _a, _b, _c;
145
148
  if (hasFinished || cancelSignal.isCancelled()) {
146
149
  return;
147
150
  }
@@ -151,7 +154,7 @@ var generateSegmentLoader = function (_a) {
151
154
  var castedErr = err;
152
155
  var message = (_a = castedErr === null || castedErr === void 0 ? void 0 : castedErr.message) !== null && _a !== void 0 ? _a : "Unknown error when fetching a Smooth segment through a " +
153
156
  "custom segmentLoader.";
154
- var emittedErr = new CustomLoaderError(message, (_b = castedErr === null || castedErr === void 0 ? void 0 : castedErr.canRetry) !== null && _b !== void 0 ? _b : false, castedErr === null || castedErr === void 0 ? void 0 : castedErr.xhr);
157
+ var emittedErr = new CustomLoaderError(message, (_b = castedErr === null || castedErr === void 0 ? void 0 : castedErr.canRetry) !== null && _b !== void 0 ? _b : false, (_c = castedErr === null || castedErr === void 0 ? void 0 : castedErr.isOfflineError) !== null && _c !== void 0 ? _c : false, castedErr === null || castedErr === void 0 ? void 0 : castedErr.xhr);
155
158
  rej(emittedErr);
156
159
  };
157
160
  var progress = function (_args) {
@@ -168,20 +171,11 @@ var generateSegmentLoader = function (_a) {
168
171
  }
169
172
  hasFinished = true;
170
173
  cancelSignal.deregister(abortCustomLoader);
171
- regularSegmentLoader(url, context, callbacks, loaderOptions, cancelSignal, checkMediaSegmentIntegrity)
174
+ regularSegmentLoader(url, content, callbacks, loaderOptions, cancelSignal, checkMediaSegmentIntegrity)
172
175
  .then(res, rej);
173
176
  };
174
177
  var customCallbacks = { reject: reject, resolve: resolve, fallback: fallback, progress: progress };
175
- var byteRanges;
176
- if (context.segment.range !== undefined) {
177
- byteRanges = [context.segment.range];
178
- if (context.segment.indexRange !== undefined) {
179
- byteRanges.push(context.segment.indexRange);
180
- }
181
- }
182
- var args = { isInit: context.segment.isInit,
183
- timeout: loaderOptions.timeout, byteRanges: byteRanges, type: context.type, url: url };
184
- var abort = customSegmentLoader(args, customCallbacks);
178
+ var abort = customSegmentLoader(args_1, customCallbacks);
185
179
  cancelSignal.register(abortCustomLoader);
186
180
  /**
187
181
  * The logic to run when the custom loader is cancelled while pending.
@@ -15,6 +15,31 @@
15
15
  */
16
16
  import { ISegment, Representation } from "../../manifest";
17
17
  import { ICdnMetadata } from "../../parsers/manifest";
18
+ /**
19
+ * TODO Remove this logic completely from the player
20
+ * @param {Document} doc
21
+ * @returns {string|null}
22
+ */
23
+ declare function extractISML(doc: Document): string | null;
24
+ /**
25
+ * Returns string corresponding to the token contained in the url's querystring.
26
+ * Empty string if no token is found.
27
+ * @param {string} url
28
+ * @returns {string}
29
+ */
30
+ declare function extractToken(url: string): string;
31
+ /**
32
+ * Replace/Remove token from the url's querystring
33
+ * @param {string} url
34
+ * @param {string} [token]
35
+ * @returns {string}
36
+ */
37
+ declare function replaceToken(url: string, token?: string): string;
38
+ /**
39
+ * @param {string} url
40
+ * @returns {string}
41
+ */
42
+ declare function resolveManifest(url: string): string;
18
43
  /**
19
44
  * Returns `true` if the given Representation refers to segments in an MP4
20
45
  * container
@@ -23,4 +48,4 @@ import { ICdnMetadata } from "../../parsers/manifest";
23
48
  */
24
49
  declare function isMP4EmbeddedTrack(representation: Representation): boolean;
25
50
  declare function constructSegmentUrl(wantedCdn: ICdnMetadata | null, segment: ISegment): string | null;
26
- export { constructSegmentUrl, isMP4EmbeddedTrack, };
51
+ export { constructSegmentUrl, extractISML, extractToken, isMP4EmbeddedTrack, replaceToken, resolveManifest, };
@@ -13,7 +13,61 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ import isNonEmptyString from "../../utils/is_non_empty_string";
16
17
  import resolveURL from "../../utils/resolve_url";
18
+ import warnOnce from "../../utils/warn_once";
19
+ var ISM_REG = /(\.isml?)(\?token=\S+)?$/;
20
+ var TOKEN_REG = /\?token=(\S+)/;
21
+ /**
22
+ * TODO Remove this logic completely from the player
23
+ * @param {Document} doc
24
+ * @returns {string|null}
25
+ */
26
+ function extractISML(doc) {
27
+ return doc.getElementsByTagName("media")[0].getAttribute("src");
28
+ }
29
+ /**
30
+ * Returns string corresponding to the token contained in the url's querystring.
31
+ * Empty string if no token is found.
32
+ * @param {string} url
33
+ * @returns {string}
34
+ */
35
+ function extractToken(url) {
36
+ var tokenMatch = TOKEN_REG.exec(url);
37
+ if (tokenMatch !== null) {
38
+ var match = tokenMatch[1];
39
+ if (match !== undefined) {
40
+ return match;
41
+ }
42
+ }
43
+ return "";
44
+ }
45
+ /**
46
+ * Replace/Remove token from the url's querystring
47
+ * @param {string} url
48
+ * @param {string} [token]
49
+ * @returns {string}
50
+ */
51
+ function replaceToken(url, token) {
52
+ if (isNonEmptyString(token)) {
53
+ return url.replace(TOKEN_REG, "?token=" + token);
54
+ }
55
+ else {
56
+ return url.replace(TOKEN_REG, "");
57
+ }
58
+ }
59
+ /**
60
+ * @param {string} url
61
+ * @returns {string}
62
+ */
63
+ function resolveManifest(url) {
64
+ if (ISM_REG.test(url)) {
65
+ warnOnce("Giving a isml URL to loadVideo is deprecated." +
66
+ " Please give the Manifest URL directly");
67
+ return url.replace(ISM_REG, "$1/manifest$2");
68
+ }
69
+ return url;
70
+ }
17
71
  /**
18
72
  * Returns `true` if the given Representation refers to segments in an MP4
19
73
  * container
@@ -29,4 +83,4 @@ function constructSegmentUrl(wantedCdn, segment) {
29
83
  segment.url === null ? wantedCdn.baseUrl :
30
84
  resolveURL(wantedCdn.baseUrl, segment.url);
31
85
  }
32
- export { constructSegmentUrl, isMP4EmbeddedTrack, };
86
+ export { constructSegmentUrl, extractISML, extractToken, isMP4EmbeddedTrack, replaceToken, resolveManifest, };