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

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 (479) hide show
  1. package/CHANGELOG.md +18 -226
  2. package/FILES.md +1 -1
  3. package/VERSION +1 -1
  4. package/dist/_esm5.processed/compat/add_text_track.d.ts +1 -3
  5. package/dist/_esm5.processed/compat/add_text_track.js +4 -7
  6. package/dist/_esm5.processed/compat/browser_compatibility_types.d.ts +0 -7
  7. package/dist/_esm5.processed/compat/event_listeners.d.ts +2 -15
  8. package/dist/_esm5.processed/compat/event_listeners.js +2 -37
  9. package/dist/_esm5.processed/compat/index.d.ts +1 -3
  10. package/dist/_esm5.processed/compat/index.js +1 -3
  11. package/dist/_esm5.processed/config.d.ts +9 -21
  12. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.d.ts +0 -58
  13. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +14 -54
  14. package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.d.ts +2 -8
  15. package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.js +2 -11
  16. package/dist/_esm5.processed/core/api/debug/buffer_graph.js +2 -6
  17. package/dist/_esm5.processed/core/api/debug/modules/general_info.js +13 -32
  18. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +3 -3
  19. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +1 -1
  20. package/dist/_esm5.processed/core/api/option_utils.d.ts +14 -35
  21. package/dist/_esm5.processed/core/api/option_utils.js +47 -230
  22. package/dist/_esm5.processed/core/api/public_api.d.ts +92 -266
  23. package/dist/_esm5.processed/core/api/public_api.js +451 -807
  24. package/dist/_esm5.processed/core/{segment_buffers/implementations/image → api/track_management}/index.d.ts +3 -2
  25. package/dist/_esm5.processed/core/{segment_buffers/implementations/image → api/track_management}/index.js +3 -2
  26. package/dist/_esm5.processed/core/api/{tracks_management/media_element_track_choice_manager.d.ts → track_management/media_element_tracks_store.d.ts} +15 -75
  27. package/dist/_esm5.processed/core/api/{tracks_management/media_element_track_choice_manager.js → track_management/media_element_tracks_store.js} +74 -193
  28. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.d.ts +84 -0
  29. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.js +158 -0
  30. package/dist/_esm5.processed/core/api/track_management/tracks_store.d.ts +406 -0
  31. package/dist/_esm5.processed/core/api/track_management/tracks_store.js +932 -0
  32. package/dist/_esm5.processed/core/api/utils.d.ts +1 -0
  33. package/dist/_esm5.processed/core/api/utils.js +28 -11
  34. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +3 -3
  35. package/dist/_esm5.processed/core/decrypt/find_key_system.js +83 -71
  36. package/dist/_esm5.processed/core/decrypt/get_media_keys.js +6 -5
  37. package/dist/_esm5.processed/core/decrypt/session_events_listener.js +10 -72
  38. package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.d.ts +4 -4
  39. package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.js +6 -4
  40. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +1 -3
  41. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +7 -26
  42. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +3 -9
  43. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +16 -9
  44. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -3
  45. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
  46. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.d.ts +1 -6
  47. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +4 -41
  48. package/dist/_esm5.processed/core/init/directfile_content_initializer.js +1 -1
  49. package/dist/_esm5.processed/core/init/media_source_content_initializer.d.ts +1 -8
  50. package/dist/_esm5.processed/core/init/media_source_content_initializer.js +5 -19
  51. package/dist/_esm5.processed/core/init/types.d.ts +5 -15
  52. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.d.ts +2 -36
  53. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.js +2 -82
  54. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +54 -6
  55. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/utils.d.ts +2 -1
  56. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/utils.js +19 -2
  57. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +1 -2
  58. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +2 -3
  59. package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +2 -2
  60. package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
  61. package/dist/_esm5.processed/core/segment_buffers/index.js +2 -1
  62. package/dist/_esm5.processed/core/segment_buffers/inventory/index.d.ts +1 -0
  63. package/dist/_esm5.processed/core/segment_buffers/inventory/index.js +1 -0
  64. package/dist/_esm5.processed/core/segment_buffers/inventory/utils.d.ts +33 -0
  65. package/dist/_esm5.processed/core/segment_buffers/inventory/utils.js +49 -0
  66. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.d.ts +0 -1
  67. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +2 -16
  68. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +0 -15
  69. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +183 -93
  70. package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.d.ts +39 -0
  71. package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.js +133 -0
  72. package/dist/_esm5.processed/core/stream/adaptation/types.d.ts +27 -13
  73. package/dist/_esm5.processed/core/stream/index.d.ts +2 -3
  74. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +2 -0
  75. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +5 -7
  76. package/dist/_esm5.processed/core/stream/period/period_stream.js +13 -12
  77. package/dist/_esm5.processed/core/stream/period/types.d.ts +5 -14
  78. package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +2 -4
  79. package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.js +10 -46
  80. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +29 -23
  81. package/dist/_esm5.processed/core/stream/representation/types.d.ts +11 -1
  82. package/dist/_esm5.processed/default_config.d.ts +35 -98
  83. package/dist/_esm5.processed/default_config.js +36 -113
  84. package/dist/_esm5.processed/errors/custom_loader_error.d.ts +1 -3
  85. package/dist/_esm5.processed/errors/custom_loader_error.js +1 -3
  86. package/dist/_esm5.processed/errors/media_error.js +2 -2
  87. package/dist/_esm5.processed/errors/network_error.d.ts +0 -1
  88. package/dist/_esm5.processed/errors/network_error.js +0 -1
  89. package/dist/_esm5.processed/errors/request_error.d.ts +2 -3
  90. package/dist/_esm5.processed/errors/request_error.js +2 -5
  91. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -3
  92. package/dist/_esm5.processed/features/features_object.js +0 -2
  93. package/dist/_esm5.processed/features/list/directfile.js +2 -5
  94. package/dist/_esm5.processed/features/list/index.d.ts +0 -2
  95. package/dist/_esm5.processed/features/list/index.js +0 -2
  96. package/dist/_esm5.processed/features/types.d.ts +3 -27
  97. package/dist/_esm5.processed/manifest/adaptation.d.ts +9 -11
  98. package/dist/_esm5.processed/manifest/adaptation.js +41 -30
  99. package/dist/_esm5.processed/manifest/index.d.ts +3 -4
  100. package/dist/_esm5.processed/manifest/manifest.d.ts +5 -54
  101. package/dist/_esm5.processed/manifest/manifest.js +5 -110
  102. package/dist/_esm5.processed/manifest/period.d.ts +4 -5
  103. package/dist/_esm5.processed/manifest/representation.d.ts +10 -5
  104. package/dist/_esm5.processed/manifest/representation.js +33 -10
  105. package/dist/_esm5.processed/manifest/representation_index/index.d.ts +2 -2
  106. package/dist/_esm5.processed/manifest/representation_index/static.d.ts +2 -0
  107. package/dist/_esm5.processed/manifest/representation_index/static.js +6 -0
  108. package/dist/_esm5.processed/manifest/representation_index/types.d.ts +42 -21
  109. package/dist/_esm5.processed/manifest/types.d.ts +0 -2
  110. package/dist/_esm5.processed/parsers/manifest/dash/common/convert_supplemental_codecs.d.ts +17 -0
  111. package/dist/_esm5.processed/parsers/manifest/dash/common/convert_supplemental_codecs.js +26 -0
  112. package/dist/_esm5.processed/parsers/manifest/dash/common/flatten_overlapping_periods.js +5 -0
  113. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +17 -31
  114. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +26 -19
  115. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +2 -0
  116. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +7 -1
  117. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +2 -6
  118. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +11 -8
  119. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +2 -0
  120. package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +6 -0
  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 +1 -6
  123. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +3 -5
  124. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +0 -2
  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 +0 -2
  128. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +2 -2
  129. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +29 -17
  130. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +13 -6
  131. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +7 -2
  132. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.d.ts +10 -1
  133. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +18 -2
  134. package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +6 -4
  135. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +7 -6
  136. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +5 -2
  137. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
  138. package/dist/_esm5.processed/parsers/manifest/local/representation_index.d.ts +2 -0
  139. package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +6 -0
  140. package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.js +6 -6
  141. package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.d.ts +12 -3
  142. package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.js +11 -2
  143. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +0 -1
  144. package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +11 -17
  145. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +21 -83
  146. package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +53 -125
  147. package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.d.ts +119 -0
  148. package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.js +159 -0
  149. package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.d.ts +3 -6
  150. package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.js +4 -4
  151. package/dist/_esm5.processed/parsers/manifest/types.d.ts +4 -3
  152. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_extent.js +1 -8
  153. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_origin.js +1 -9
  154. package/dist/_esm5.processed/public_types.d.ts +396 -308
  155. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.d.ts +5 -4
  156. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +5 -4
  157. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +4 -4
  158. package/dist/_esm5.processed/transports/dash/manifest_parser.js +2 -3
  159. package/dist/_esm5.processed/transports/dash/pipelines.js +1 -4
  160. package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
  161. package/dist/_esm5.processed/transports/dash/segment_loader.js +26 -20
  162. package/dist/_esm5.processed/transports/dash/segment_parser.js +19 -24
  163. package/dist/_esm5.processed/transports/dash/text_loader.js +5 -5
  164. package/dist/_esm5.processed/transports/dash/text_parser.js +28 -33
  165. package/dist/_esm5.processed/transports/local/pipelines.js +1 -10
  166. package/dist/_esm5.processed/transports/local/segment_loader.js +2 -2
  167. package/dist/_esm5.processed/transports/local/segment_parser.d.ts +1 -1
  168. package/dist/_esm5.processed/transports/local/segment_parser.js +10 -10
  169. package/dist/_esm5.processed/transports/local/text_parser.d.ts +2 -2
  170. package/dist/_esm5.processed/transports/local/text_parser.js +23 -23
  171. package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +34 -52
  172. package/dist/_esm5.processed/{utils/list_to_map.d.ts → transports/smooth/is_mp4_embedded_track.d.ts} +5 -5
  173. package/dist/_esm5.processed/{features/list/image_buffer.d.ts → transports/smooth/is_mp4_embedded_track.js} +7 -6
  174. package/dist/_esm5.processed/transports/smooth/pipelines.js +33 -190
  175. package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +1 -1
  176. package/dist/_esm5.processed/transports/smooth/segment_loader.js +28 -22
  177. package/dist/_esm5.processed/transports/smooth/utils.d.ts +1 -26
  178. package/dist/_esm5.processed/transports/smooth/utils.js +1 -55
  179. package/dist/_esm5.processed/transports/types.d.ts +94 -89
  180. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
  181. package/dist/_esm5.processed/transports/utils/infer_segment_container.d.ts +3 -3
  182. package/dist/_esm5.processed/transports/utils/infer_segment_container.js +5 -7
  183. package/dist/_esm5.processed/transports/utils/parse_text_track.d.ts +8 -12
  184. package/dist/_esm5.processed/transports/utils/parse_text_track.js +19 -21
  185. package/dist/_esm5.processed/utils/array_includes.d.ts +2 -1
  186. package/dist/_esm5.processed/utils/array_includes.js +30 -28
  187. package/dist/_esm5.processed/utils/request/xhr.js +5 -5
  188. package/dist/commonjs/compat/is_codec_supported.js +22 -1
  189. package/dist/commonjs/compat/patch_webkit_source_buffer.js +2 -2
  190. package/dist/commonjs/config.d.ts +1 -0
  191. package/dist/commonjs/core/api/debug/buffer_graph.js +2 -6
  192. package/dist/commonjs/core/api/debug/modules/general_info.js +17 -10
  193. package/dist/commonjs/core/api/option_utils.d.ts +4 -0
  194. package/dist/commonjs/core/api/option_utils.js +8 -3
  195. package/dist/commonjs/core/api/public_api.d.ts +11 -1
  196. package/dist/commonjs/core/api/public_api.js +46 -11
  197. package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.d.ts +6 -0
  198. package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.js +11 -3
  199. package/dist/commonjs/core/fetchers/segment/segment_fetcher.d.ts +8 -1
  200. package/dist/commonjs/core/fetchers/segment/segment_fetcher.js +8 -4
  201. package/dist/commonjs/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -0
  202. package/dist/commonjs/core/fetchers/utils/schedule_request.js +1 -1
  203. package/dist/commonjs/core/init/directfile_content_initializer.js +24 -7
  204. package/dist/commonjs/core/init/media_source_content_initializer.d.ts +6 -0
  205. package/dist/commonjs/core/init/media_source_content_initializer.js +4 -6
  206. package/dist/commonjs/core/init/utils/content_time_boundaries_observer.d.ts +13 -12
  207. package/dist/commonjs/core/init/utils/content_time_boundaries_observer.js +16 -17
  208. package/dist/commonjs/core/init/utils/get_initial_time.d.ts +17 -3
  209. package/dist/commonjs/core/init/utils/get_initial_time.js +9 -7
  210. package/dist/commonjs/core/segment_buffers/implementations/text/html/text_track_cues_store.js +54 -6
  211. package/dist/commonjs/core/segment_buffers/implementations/text/html/utils.d.ts +2 -1
  212. package/dist/commonjs/core/segment_buffers/implementations/text/html/utils.js +19 -2
  213. package/dist/commonjs/core/stream/adaptation/adaptation_stream.js +2 -2
  214. package/dist/commonjs/core/stream/orchestrator/stream_orchestrator.js +3 -3
  215. package/dist/commonjs/core/stream/period/period_stream.js +2 -2
  216. package/dist/commonjs/core/stream/representation/utils/get_buffer_status.js +3 -3
  217. package/dist/commonjs/core/stream/representation/utils/get_needed_segments.js +1 -1
  218. package/dist/commonjs/default_config.d.ts +5 -0
  219. package/dist/commonjs/default_config.js +5 -0
  220. package/dist/commonjs/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -1
  221. package/dist/commonjs/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +2 -0
  222. package/dist/commonjs/manifest/representation.js +18 -5
  223. package/dist/commonjs/manifest/representation_index/static.d.ts +1 -1
  224. package/dist/commonjs/manifest/representation_index/static.js +2 -2
  225. package/dist/commonjs/manifest/representation_index/types.d.ts +4 -4
  226. package/dist/commonjs/parsers/manifest/dash/common/convert_supplemental_codecs.d.ts +17 -0
  227. package/dist/commonjs/parsers/manifest/dash/common/convert_supplemental_codecs.js +30 -0
  228. package/dist/commonjs/parsers/manifest/dash/common/flatten_overlapping_periods.js +5 -0
  229. package/dist/commonjs/parsers/manifest/dash/common/indexes/base.d.ts +6 -1
  230. package/dist/commonjs/parsers/manifest/dash/common/indexes/base.js +4 -3
  231. package/dist/commonjs/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +5 -2
  232. package/dist/commonjs/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +15 -4
  233. package/dist/commonjs/parsers/manifest/dash/common/indexes/index.d.ts +5 -5
  234. package/dist/commonjs/parsers/manifest/dash/common/indexes/list.d.ts +1 -1
  235. package/dist/commonjs/parsers/manifest/dash/common/indexes/list.js +2 -2
  236. package/dist/commonjs/parsers/manifest/dash/common/indexes/template.d.ts +12 -5
  237. package/dist/commonjs/parsers/manifest/dash/common/indexes/template.js +42 -29
  238. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/index.d.ts +2 -1
  239. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +99 -6
  240. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +250 -51
  241. package/dist/commonjs/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +40 -17
  242. package/dist/commonjs/parsers/manifest/dash/common/manifest_bounds_calculator.js +38 -18
  243. package/dist/commonjs/parsers/manifest/dash/common/parse_adaptation_sets.js +13 -10
  244. package/dist/commonjs/parsers/manifest/dash/common/parse_mpd.js +27 -14
  245. package/dist/commonjs/parsers/manifest/dash/common/parse_periods.d.ts +1 -1
  246. package/dist/commonjs/parsers/manifest/dash/common/parse_periods.js +17 -18
  247. package/dist/commonjs/parsers/manifest/dash/common/parse_representation_index.d.ts +19 -6
  248. package/dist/commonjs/parsers/manifest/dash/common/parse_representation_index.js +21 -8
  249. package/dist/commonjs/parsers/manifest/dash/common/parse_representations.js +36 -20
  250. package/dist/commonjs/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +3 -0
  251. package/dist/commonjs/parsers/manifest/dash/js-parser/node_parsers/Representation.js +3 -0
  252. package/dist/commonjs/parsers/manifest/dash/node_parser_types.d.ts +2 -0
  253. package/dist/commonjs/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +4 -0
  254. package/dist/commonjs/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +4 -0
  255. package/dist/commonjs/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
  256. package/dist/commonjs/parsers/manifest/local/representation_index.d.ts +1 -1
  257. package/dist/commonjs/parsers/manifest/local/representation_index.js +3 -3
  258. package/dist/commonjs/parsers/manifest/metaplaylist/representation_index.d.ts +1 -1
  259. package/dist/commonjs/parsers/manifest/metaplaylist/representation_index.js +2 -2
  260. package/dist/commonjs/parsers/manifest/smooth/representation_index.d.ts +5 -5
  261. package/dist/commonjs/parsers/manifest/smooth/representation_index.js +25 -9
  262. package/dist/commonjs/parsers/manifest/types.d.ts +1 -0
  263. package/dist/commonjs/parsers/manifest/utils/index_helpers.js +1 -1
  264. package/dist/commonjs/public_types.d.ts +78 -34
  265. package/dist/commonjs/transports/dash/init_segment_loader.js +10 -5
  266. package/dist/commonjs/transports/dash/manifest_parser.js +5 -2
  267. package/dist/commonjs/transports/dash/segment_loader.js +2 -1
  268. package/dist/commonjs/transports/dash/text_loader.js +2 -0
  269. package/dist/commonjs/transports/metaplaylist/manifest_loader.js +2 -1
  270. package/dist/commonjs/transports/metaplaylist/pipelines.js +4 -1
  271. package/dist/commonjs/transports/smooth/pipelines.js +4 -2
  272. package/dist/commonjs/transports/smooth/segment_loader.js +2 -1
  273. package/dist/commonjs/transports/types.d.ts +12 -0
  274. package/dist/commonjs/transports/utils/generate_manifest_loader.js +6 -3
  275. package/dist/commonjs/utils/queue_microtask.d.ts +2 -0
  276. package/dist/commonjs/utils/queue_microtask.js +7 -0
  277. package/dist/commonjs/utils/request/fetch.d.ts +6 -0
  278. package/dist/commonjs/utils/request/fetch.js +29 -8
  279. package/dist/commonjs/utils/request/xhr.d.ts +11 -5
  280. package/dist/commonjs/utils/request/xhr.js +29 -8
  281. package/dist/es2017/compat/is_codec_supported.js +22 -1
  282. package/dist/es2017/compat/patch_webkit_source_buffer.js +2 -2
  283. package/dist/es2017/config.d.ts +1 -0
  284. package/dist/es2017/core/api/debug/buffer_graph.js +2 -6
  285. package/dist/es2017/core/api/debug/modules/general_info.js +17 -10
  286. package/dist/es2017/core/api/option_utils.d.ts +4 -0
  287. package/dist/es2017/core/api/option_utils.js +8 -3
  288. package/dist/es2017/core/api/public_api.d.ts +11 -1
  289. package/dist/es2017/core/api/public_api.js +44 -9
  290. package/dist/es2017/core/fetchers/manifest/manifest_fetcher.d.ts +6 -0
  291. package/dist/es2017/core/fetchers/manifest/manifest_fetcher.js +11 -3
  292. package/dist/es2017/core/fetchers/segment/segment_fetcher.d.ts +8 -1
  293. package/dist/es2017/core/fetchers/segment/segment_fetcher.js +8 -4
  294. package/dist/es2017/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -0
  295. package/dist/es2017/core/fetchers/utils/schedule_request.js +1 -1
  296. package/dist/es2017/core/init/directfile_content_initializer.js +24 -7
  297. package/dist/es2017/core/init/media_source_content_initializer.d.ts +6 -0
  298. package/dist/es2017/core/init/media_source_content_initializer.js +4 -6
  299. package/dist/es2017/core/init/utils/content_time_boundaries_observer.d.ts +13 -12
  300. package/dist/es2017/core/init/utils/content_time_boundaries_observer.js +16 -15
  301. package/dist/es2017/core/init/utils/get_initial_time.d.ts +17 -3
  302. package/dist/es2017/core/init/utils/get_initial_time.js +9 -7
  303. package/dist/es2017/core/segment_buffers/implementations/text/html/text_track_cues_store.js +54 -6
  304. package/dist/es2017/core/segment_buffers/implementations/text/html/utils.d.ts +2 -1
  305. package/dist/es2017/core/segment_buffers/implementations/text/html/utils.js +18 -2
  306. package/dist/es2017/core/stream/adaptation/adaptation_stream.js +2 -2
  307. package/dist/es2017/core/stream/orchestrator/stream_orchestrator.js +3 -3
  308. package/dist/es2017/core/stream/period/period_stream.js +2 -2
  309. package/dist/es2017/core/stream/representation/utils/get_buffer_status.js +3 -3
  310. package/dist/es2017/core/stream/representation/utils/get_needed_segments.js +1 -1
  311. package/dist/es2017/default_config.d.ts +5 -0
  312. package/dist/es2017/default_config.js +5 -0
  313. package/dist/es2017/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -1
  314. package/dist/es2017/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +2 -0
  315. package/dist/es2017/manifest/representation.js +18 -5
  316. package/dist/es2017/manifest/representation_index/static.d.ts +1 -1
  317. package/dist/es2017/manifest/representation_index/static.js +2 -2
  318. package/dist/es2017/manifest/representation_index/types.d.ts +4 -4
  319. package/dist/es2017/parsers/manifest/dash/common/convert_supplemental_codecs.d.ts +17 -0
  320. package/dist/es2017/parsers/manifest/dash/common/convert_supplemental_codecs.js +26 -0
  321. package/dist/es2017/parsers/manifest/dash/common/flatten_overlapping_periods.js +5 -0
  322. package/dist/es2017/parsers/manifest/dash/common/indexes/base.d.ts +6 -1
  323. package/dist/es2017/parsers/manifest/dash/common/indexes/base.js +4 -3
  324. package/dist/es2017/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +5 -2
  325. package/dist/es2017/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +15 -4
  326. package/dist/es2017/parsers/manifest/dash/common/indexes/index.d.ts +5 -5
  327. package/dist/es2017/parsers/manifest/dash/common/indexes/list.d.ts +1 -1
  328. package/dist/es2017/parsers/manifest/dash/common/indexes/list.js +2 -2
  329. package/dist/es2017/parsers/manifest/dash/common/indexes/template.d.ts +12 -5
  330. package/dist/es2017/parsers/manifest/dash/common/indexes/template.js +40 -27
  331. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/index.d.ts +2 -1
  332. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +99 -6
  333. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +246 -51
  334. package/dist/es2017/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +40 -17
  335. package/dist/es2017/parsers/manifest/dash/common/manifest_bounds_calculator.js +38 -18
  336. package/dist/es2017/parsers/manifest/dash/common/parse_adaptation_sets.js +11 -8
  337. package/dist/es2017/parsers/manifest/dash/common/parse_mpd.js +27 -13
  338. package/dist/es2017/parsers/manifest/dash/common/parse_periods.d.ts +1 -1
  339. package/dist/es2017/parsers/manifest/dash/common/parse_periods.js +13 -16
  340. package/dist/es2017/parsers/manifest/dash/common/parse_representation_index.d.ts +19 -6
  341. package/dist/es2017/parsers/manifest/dash/common/parse_representation_index.js +10 -8
  342. package/dist/es2017/parsers/manifest/dash/common/parse_representations.js +36 -20
  343. package/dist/es2017/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +3 -0
  344. package/dist/es2017/parsers/manifest/dash/js-parser/node_parsers/Representation.js +3 -0
  345. package/dist/es2017/parsers/manifest/dash/node_parser_types.d.ts +2 -0
  346. package/dist/es2017/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +4 -0
  347. package/dist/es2017/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +4 -0
  348. package/dist/es2017/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
  349. package/dist/es2017/parsers/manifest/local/representation_index.d.ts +1 -1
  350. package/dist/es2017/parsers/manifest/local/representation_index.js +3 -3
  351. package/dist/es2017/parsers/manifest/metaplaylist/representation_index.d.ts +1 -1
  352. package/dist/es2017/parsers/manifest/metaplaylist/representation_index.js +2 -2
  353. package/dist/es2017/parsers/manifest/smooth/representation_index.d.ts +5 -5
  354. package/dist/es2017/parsers/manifest/smooth/representation_index.js +25 -9
  355. package/dist/es2017/parsers/manifest/types.d.ts +1 -0
  356. package/dist/es2017/parsers/manifest/utils/index_helpers.js +1 -1
  357. package/dist/es2017/public_types.d.ts +78 -34
  358. package/dist/es2017/transports/dash/init_segment_loader.js +5 -0
  359. package/dist/es2017/transports/dash/manifest_parser.js +3 -0
  360. package/dist/es2017/transports/dash/segment_loader.js +1 -0
  361. package/dist/es2017/transports/dash/text_loader.js +2 -0
  362. package/dist/es2017/transports/metaplaylist/manifest_loader.js +1 -0
  363. package/dist/es2017/transports/metaplaylist/pipelines.js +4 -1
  364. package/dist/es2017/transports/smooth/pipelines.js +2 -0
  365. package/dist/es2017/transports/smooth/segment_loader.js +1 -0
  366. package/dist/es2017/transports/types.d.ts +12 -0
  367. package/dist/es2017/transports/utils/generate_manifest_loader.js +3 -0
  368. package/dist/es2017/utils/queue_microtask.d.ts +2 -0
  369. package/dist/es2017/utils/queue_microtask.js +5 -0
  370. package/dist/es2017/utils/request/fetch.d.ts +6 -0
  371. package/dist/es2017/utils/request/fetch.js +29 -8
  372. package/dist/es2017/utils/request/xhr.d.ts +11 -5
  373. package/dist/es2017/utils/request/xhr.js +30 -9
  374. package/dist/mpd-parser.wasm +0 -0
  375. package/dist/rx-player.js +900 -492
  376. package/dist/rx-player.min.js +1 -1
  377. package/package.json +3 -7
  378. package/scripts/update-version +2 -0
  379. package/sonar-project.properties +1 -1
  380. package/src/compat/is_codec_supported.ts +23 -1
  381. package/src/compat/patch_webkit_source_buffer.ts +2 -2
  382. package/src/core/api/debug/buffer_graph.ts +2 -5
  383. package/src/core/api/debug/modules/general_info.ts +15 -10
  384. package/src/core/api/option_utils.ts +11 -3
  385. package/src/core/api/public_api.ts +48 -8
  386. package/src/core/fetchers/manifest/manifest_fetcher.ts +21 -3
  387. package/src/core/fetchers/segment/segment_fetcher.ts +19 -5
  388. package/src/core/fetchers/segment/segment_fetcher_creator.ts +1 -0
  389. package/src/core/fetchers/utils/schedule_request.ts +1 -1
  390. package/src/core/init/directfile_content_initializer.ts +23 -7
  391. package/src/core/init/media_source_content_initializer.ts +13 -7
  392. package/src/core/init/utils/content_time_boundaries_observer.ts +23 -22
  393. package/src/core/init/utils/get_initial_time.ts +25 -12
  394. package/src/core/segment_buffers/implementations/text/html/__tests__/utils.test.ts +15 -0
  395. package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +57 -6
  396. package/src/core/segment_buffers/implementations/text/html/utils.ts +19 -2
  397. package/src/core/stream/adaptation/adaptation_stream.ts +2 -2
  398. package/src/core/stream/orchestrator/stream_orchestrator.ts +3 -3
  399. package/src/core/stream/period/period_stream.ts +2 -2
  400. package/src/core/stream/representation/utils/get_buffer_status.ts +3 -3
  401. package/src/core/stream/representation/utils/get_needed_segments.ts +2 -2
  402. package/src/default_config.ts +5 -0
  403. package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +3 -1
  404. package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +2 -0
  405. package/src/manifest/representation.ts +19 -6
  406. package/src/manifest/representation_index/static.ts +2 -2
  407. package/src/manifest/representation_index/types.ts +4 -4
  408. package/src/parsers/manifest/dash/common/__tests__/convert_supplemental_codecs.test.ts +37 -0
  409. package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +20 -0
  410. package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +182 -36
  411. package/src/parsers/manifest/dash/common/convert_supplemental_codecs.ts +32 -0
  412. package/src/parsers/manifest/dash/common/flatten_overlapping_periods.ts +5 -0
  413. package/src/parsers/manifest/dash/common/indexes/base.ts +12 -4
  414. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +19 -5
  415. package/src/parsers/manifest/dash/common/indexes/index.ts +16 -4
  416. package/src/parsers/manifest/dash/common/indexes/list.ts +2 -2
  417. package/src/parsers/manifest/dash/common/indexes/template.ts +52 -31
  418. package/src/parsers/manifest/dash/common/indexes/timeline/index.ts +4 -1
  419. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +366 -60
  420. package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +63 -25
  421. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +10 -4
  422. package/src/parsers/manifest/dash/common/parse_mpd.ts +28 -15
  423. package/src/parsers/manifest/dash/common/parse_periods.ts +12 -17
  424. package/src/parsers/manifest/dash/common/parse_representation_index.ts +50 -26
  425. package/src/parsers/manifest/dash/common/parse_representations.ts +39 -20
  426. package/src/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.ts +4 -0
  427. package/src/parsers/manifest/dash/js-parser/node_parsers/Representation.ts +4 -0
  428. package/src/parsers/manifest/dash/node_parser_types.ts +2 -0
  429. package/src/parsers/manifest/dash/wasm-parser/rs/events.rs +2 -0
  430. package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +2 -0
  431. package/src/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.ts +4 -0
  432. package/src/parsers/manifest/dash/wasm-parser/ts/generators/Representation.ts +4 -0
  433. package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +2 -0
  434. package/src/parsers/manifest/local/representation_index.ts +3 -3
  435. package/src/parsers/manifest/metaplaylist/representation_index.ts +2 -2
  436. package/src/parsers/manifest/smooth/representation_index.ts +23 -9
  437. package/src/parsers/manifest/types.ts +2 -0
  438. package/src/parsers/manifest/utils/__tests__/get_first_time_from_adaptations.test.ts +1 -1
  439. package/src/parsers/manifest/utils/__tests__/get_last_time_from_adaptation.test.ts +1 -1
  440. package/src/parsers/manifest/utils/index_helpers.ts +1 -1
  441. package/src/public_types.ts +79 -34
  442. package/src/transports/dash/init_segment_loader.ts +5 -0
  443. package/src/transports/dash/manifest_parser.ts +6 -0
  444. package/src/transports/dash/segment_loader.ts +1 -0
  445. package/src/transports/dash/text_loader.ts +2 -0
  446. package/src/transports/metaplaylist/manifest_loader.ts +1 -0
  447. package/src/transports/metaplaylist/pipelines.ts +4 -1
  448. package/src/transports/smooth/pipelines.ts +2 -0
  449. package/src/transports/smooth/segment_loader.ts +1 -0
  450. package/src/transports/types.ts +12 -0
  451. package/src/transports/utils/generate_manifest_loader.ts +3 -0
  452. package/src/utils/queue_microtask.ts +7 -0
  453. package/src/utils/request/fetch.ts +35 -8
  454. package/src/utils/request/xhr.ts +45 -14
  455. package/dist/_esm5.processed/compat/fullscreen.d.ts +0 -32
  456. package/dist/_esm5.processed/compat/fullscreen.js +0 -78
  457. package/dist/_esm5.processed/compat/is_offline.d.ts +0 -39
  458. package/dist/_esm5.processed/compat/is_offline.js +0 -43
  459. package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.d.ts +0 -258
  460. package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.js +0 -989
  461. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.d.ts +0 -75
  462. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.js +0 -133
  463. package/dist/_esm5.processed/features/list/bif_parser.d.ts +0 -23
  464. package/dist/_esm5.processed/features/list/bif_parser.js +0 -27
  465. package/dist/_esm5.processed/features/list/image_buffer.js +0 -25
  466. package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +0 -38
  467. package/dist/_esm5.processed/transports/dash/image_pipelines.js +0 -129
  468. package/dist/_esm5.processed/utils/list_to_map.js +0 -28
  469. package/dist/_esm5.processed/utils/simple_set.d.ts +0 -51
  470. package/dist/_esm5.processed/utils/simple_set.js +0 -57
  471. package/dist/_esm5.processed/utils/uniq.d.ts +0 -36
  472. package/dist/_esm5.processed/utils/uniq.js +0 -43
  473. package/dist/commonjs/parsers/manifest/utils/is_segment_still_available.d.ts +0 -29
  474. package/dist/commonjs/parsers/manifest/utils/is_segment_still_available.js +0 -54
  475. package/dist/es2017/parsers/manifest/utils/is_segment_still_available.d.ts +0 -29
  476. package/dist/es2017/parsers/manifest/utils/is_segment_still_available.js +0 -51
  477. package/src/parsers/manifest/utils/is_segment_still_available.ts +0 -58
  478. package/src/typings/next-tick.d.ts +0 -23
  479. package/src/typings/object-assign.d.ts +0 -48
@@ -15,79 +15,29 @@
15
15
  */
16
16
  import { IRepresentationIndex, ISegment } from "../../../manifest";
17
17
  import { IPlayerError } from "../../../public_types";
18
- /**
19
- * Object describing information about one segment or several consecutive
20
- * segments.
21
- */
22
- export interface IIndexSegment {
23
- /** Time (timescaled) at which the segment starts. */
24
- start: number;
25
- /** Duration (timescaled) of the segment. */
26
- duration: number;
27
- /**
28
- * Amount of consecutive segments with that duration.
29
- *
30
- * For example let's consider the following IIndexSegment:
31
- * ```
32
- * { start: 10, duration: 2, repeatCount: 2 }
33
- * ```
34
- * Here, because `repeatCount` is set to `2`, this object actually defines 3
35
- * segments:
36
- * 1. one starting at `10` and ending at `12` (10 + 2)
37
- * 2. another one starting at `12` (the previous one's end) and ending at
38
- * `14` (12 + 2)
39
- * 3. another one starting at `14` (the previous one's end) and ending at
40
- * `16` (14 +2)
41
- */
42
- repeatCount: number;
43
- }
44
- /**
45
- * Object containing information about the segments available in a
46
- * `SmoothRepresentationIndex`.
47
- */
48
- interface ITimelineIndex {
49
- /**
50
- * "Timescale" used here allowing to convert the time in this object into
51
- * seconds (by doing `time / timescale`).
52
- */
53
- timescale: number;
54
- /**
55
- * Generic tokenized (e.g. with placeholders for time information) URL for
56
- * every segments anounced here.
57
- */
58
- media: string;
59
- /** Contains information about all segments available here. */
60
- timeline: IIndexSegment[];
61
- }
18
+ import SharedSmoothSegmentTimeline from "./shared_smooth_segment_timeline";
62
19
  /**
63
20
  * Supplementary options taken by a SmoothRepresentationIndex bringing the
64
21
  * context the segments are in.
65
22
  */
66
23
  export interface ISmoothRepresentationIndexContextInformation {
67
- /**
68
- * if `true`, the `SmoothRepresentationIndex` will return segments even if
69
- * we're not sure they had time to be generated on the server side.
70
- *
71
- * TODO(Paul B.) This is a somewhat ugly option, only here for very specific
72
- * Canal+ use-cases for now (most of all for Peer-to-Peer efficiency),
73
- * scheduled to be removed in a next major version.
74
- */
75
- aggressiveMode: boolean;
76
24
  /**
77
25
  * If `true` the corresponding Smooth Manifest was announced as a live
78
26
  * content.
79
27
  * `false` otherwise.
80
28
  */
81
29
  isLive: boolean;
82
- /** Value of `performance.now()` when the Manifest request was finished. */
83
- manifestReceivedTime: number | undefined;
30
+ /**
31
+ * Generic tokenized (e.g. with placeholders for time information) URL for
32
+ * every segments anounced here.
33
+ */
34
+ media: string;
84
35
  /**
85
36
  * Contains information allowing to generate the corresponding initialization
86
37
  * segment.
87
38
  */
88
39
  segmentPrivateInfos: ISmoothInitSegmentPrivateInfos;
89
- /** Depth of the DVR window, in seconds. */
90
- timeShiftBufferDepth: number | undefined;
40
+ sharedSmoothTimeline: SharedSmoothSegmentTimeline;
91
41
  }
92
42
  /** Information allowing to generate a Smooth initialization segment. */
93
43
  interface ISmoothInitSegmentPrivateInfos {
@@ -99,6 +49,8 @@ interface ISmoothInitSegmentPrivateInfos {
99
49
  protection?: {
100
50
  keyId: Uint8Array;
101
51
  } | undefined;
52
+ height?: number | undefined;
53
+ width?: number | undefined;
102
54
  }
103
55
  /**
104
56
  * RepresentationIndex implementation for Smooth Manifests.
@@ -113,15 +65,6 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
113
65
  * Taken from the Manifest.
114
66
  */
115
67
  private _initSegmentInfos;
116
- /**
117
- * if `true`, this class will return segments even if we're not sure they had
118
- * time to be generated on the server side.
119
- *
120
- * This is a somewhat ugly option, only here for very specific Canal+
121
- * use-cases for now (most of all for Peer-to-Peer efficiency), scheduled to
122
- * be removed in a next major version.
123
- */
124
- private _isAggressiveMode;
125
68
  /**
126
69
  * Value only calculated for live contents.
127
70
  *
@@ -137,13 +80,6 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
137
80
  * be valid, in the index's timescale.
138
81
  */
139
82
  private _initialScaledLastPosition;
140
- /**
141
- * Defines the earliest time when this index was known to be valid (that is, when
142
- * all segments declared in it are available). This means either:
143
- * - the manifest downloading time, if known
144
- * - else, the time of creation of this RepresentationIndex, as the best guess
145
- */
146
- private _indexValidityTime;
147
83
  /**
148
84
  * If `true` the corresponding Smooth Manifest was announced as a live
149
85
  * content.
@@ -154,15 +90,18 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
154
90
  * Contains information on the list of segments available in this
155
91
  * SmoothRepresentationIndex.
156
92
  */
157
- private _index;
158
- /** Depth of the DVR window anounced in the Manifest, in seconds. */
159
- private _timeShiftBufferDepth;
93
+ private _sharedSmoothTimeline;
94
+ /**
95
+ * Generic tokenized (e.g. with placeholders for time information) URL for
96
+ * every segments anounced here.
97
+ */
98
+ private _media;
160
99
  /**
161
100
  * Creates a new `SmoothRepresentationIndex`.
162
101
  * @param {Object} index
163
102
  * @param {Object} options
164
103
  */
165
- constructor(index: ITimelineIndex, options: ISmoothRepresentationIndexContextInformation);
104
+ constructor(options: ISmoothRepresentationIndexContextInformation);
166
105
  /**
167
106
  * Construct init Segment compatible with a Smooth Manifest.
168
107
  * @returns {Object}
@@ -265,20 +204,19 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
265
204
  * @returns {Boolean}
266
205
  */
267
206
  isInitialized(): true;
207
+ initialize(): void;
268
208
  /**
269
- * Add new segments to a `SmoothRepresentationIndex`.
209
+ * Add segments to a `SharedSmoothSegmentTimeline` that were predicted to come
210
+ * after `currentSegment`.
270
211
  * @param {Array.<Object>} nextSegments - The segment information parsed.
271
212
  * @param {Object} segment - Information on the segment which contained that
272
213
  * new segment information.
273
214
  */
274
- addNewSegments(nextSegments: Array<{
215
+ addPredictedSegments(nextSegments: Array<{
275
216
  duration: number;
276
217
  time: number;
277
218
  timescale: number;
278
- }>, currentSegment: {
279
- duration: number;
280
- time: number;
281
- }): void;
219
+ }>, currentSegment: ISegment): void;
282
220
  /**
283
221
  * Clean-up timeline to remove segment information which should not be
284
222
  * available due to the timeshift window
@@ -16,11 +16,8 @@
16
16
  import { NetworkError } from "../../../errors";
17
17
  import log from "../../../log";
18
18
  import assert from "../../../utils/assert";
19
- import clearTimelineFromPosition from "../utils/clear_timeline_from_position";
20
19
  import { checkDiscontinuity, getIndexSegmentEnd, } from "../utils/index_helpers";
21
20
  import isSegmentStillAvailable from "../utils/is_segment_still_available";
22
- import updateSegmentTimeline from "../utils/update_segment_timeline";
23
- import addSegmentInfos from "./utils/add_segment_infos";
24
21
  import { replaceSegmentSmoothTokens } from "./utils/tokens";
25
22
  /**
26
23
  * @param {Number} start
@@ -43,12 +40,12 @@ function getSegmentNumber(start, up, duration) {
43
40
  * - up {Number}: timescaled timestamp of the beginning time
44
41
  * - to {Number}: timescaled timestamp of the end time (start time + duration)
45
42
  */
46
- function normalizeRange(index, start, duration) {
47
- var timescale = index.timescale === undefined ||
48
- index.timescale === 0 ? 1 :
49
- index.timescale;
50
- return { up: start * timescale,
51
- to: (start + duration) * timescale };
43
+ function normalizeRange(timescale, start, duration) {
44
+ var ts = timescale === undefined ||
45
+ timescale === 0 ? 1 :
46
+ timescale;
47
+ return { up: start * ts,
48
+ to: (start + duration) * ts };
52
49
  }
53
50
  /**
54
51
  * Calculate the number of times a segment repeat based on the next segment.
@@ -63,7 +60,7 @@ function calculateRepeat(segment, nextSegment) {
63
60
  // start of the next S element, the end of the Period or until the
64
61
  // next MPD update.
65
62
  // TODO Also for SMOOTH????
66
- if (segment.duration != null && repeatCount < 0) {
63
+ if (segment.duration !== undefined && repeatCount < 0) {
67
64
  var repeatEnd = nextSegment !== undefined ? nextSegment.start :
68
65
  Infinity;
69
66
  repeatCount = Math.ceil((repeatEnd - segment.start) / segment.duration) - 1;
@@ -83,31 +80,27 @@ var SmoothRepresentationIndex = /** @class */ (function () {
83
80
  * @param {Object} index
84
81
  * @param {Object} options
85
82
  */
86
- function SmoothRepresentationIndex(index, options) {
87
- var aggressiveMode = options.aggressiveMode, isLive = options.isLive, segmentPrivateInfos = options.segmentPrivateInfos, timeShiftBufferDepth = options.timeShiftBufferDepth;
88
- var estimatedReceivedTime = options.manifestReceivedTime == null ?
89
- performance.now() :
90
- options.manifestReceivedTime;
91
- this._index = index;
92
- this._indexValidityTime = estimatedReceivedTime;
93
- this._timeShiftBufferDepth = timeShiftBufferDepth;
83
+ function SmoothRepresentationIndex(options) {
84
+ var isLive = options.isLive, segmentPrivateInfos = options.segmentPrivateInfos, media = options.media, sharedSmoothTimeline = options.sharedSmoothTimeline;
85
+ this._sharedSmoothTimeline = sharedSmoothTimeline;
94
86
  this._initSegmentInfos = { bitsPerSample: segmentPrivateInfos.bitsPerSample,
95
87
  channels: segmentPrivateInfos.channels,
96
88
  codecPrivateData: segmentPrivateInfos.codecPrivateData,
97
89
  packetSize: segmentPrivateInfos.packetSize,
98
90
  samplingRate: segmentPrivateInfos.samplingRate,
99
- timescale: index.timescale,
91
+ timescale: sharedSmoothTimeline.timescale,
92
+ height: segmentPrivateInfos.height,
93
+ width: segmentPrivateInfos.width,
100
94
  protection: segmentPrivateInfos.protection };
101
- this._isAggressiveMode = aggressiveMode;
102
95
  this._isLive = isLive;
103
- if (index.timeline.length !== 0) {
104
- var lastItem = index.timeline[index.timeline.length - 1];
96
+ this._media = media;
97
+ if (sharedSmoothTimeline.timeline.length !== 0 && isLive) {
98
+ var timeline = sharedSmoothTimeline.timeline, validityTime = sharedSmoothTimeline.validityTime;
99
+ var lastItem = timeline[timeline.length - 1];
105
100
  var scaledEnd = getIndexSegmentEnd(lastItem, null);
106
- this._initialScaledLastPosition = scaledEnd;
107
- if (isLive) {
108
- var scaledReceivedTime = (estimatedReceivedTime / 1000) * index.timescale;
109
- this._scaledLiveGap = scaledReceivedTime - scaledEnd;
110
- }
101
+ var scaledTimelineValidityTime = (validityTime / 1000) *
102
+ sharedSmoothTimeline.timescale;
103
+ this._scaledLiveGap = scaledTimelineValidityTime - scaledEnd;
111
104
  }
112
105
  }
113
106
  /**
@@ -134,13 +127,13 @@ var SmoothRepresentationIndex = /** @class */ (function () {
134
127
  */
135
128
  SmoothRepresentationIndex.prototype.getSegments = function (from, dur) {
136
129
  this._refreshTimeline();
137
- var _a = normalizeRange(this._index, from, dur), up = _a.up, to = _a.to;
138
- var _b = this._index, timeline = _b.timeline, timescale = _b.timescale, media = _b.media;
139
- var isAggressive = this._isAggressiveMode;
130
+ var _a = this._sharedSmoothTimeline, timescale = _a.timescale, timeline = _a.timeline;
131
+ var _b = normalizeRange(timescale, from, dur), up = _b.up, to = _b.to;
132
+ var media = this._media;
140
133
  var currentNumber;
141
134
  var segments = [];
142
135
  var timelineLength = timeline.length;
143
- var maxPosition = this._scaledLiveGap == null ?
136
+ var maxPosition = this._scaledLiveGap === undefined ?
144
137
  undefined :
145
138
  ((performance.now() / 1000) * timescale) - this._scaledLiveGap;
146
139
  for (var i = 0; i < timelineLength; i++) {
@@ -149,14 +142,13 @@ var SmoothRepresentationIndex = /** @class */ (function () {
149
142
  var repeat = calculateRepeat(segmentRange, timeline[i + 1]);
150
143
  var segmentNumberInCurrentRange = getSegmentNumber(start, up, duration);
151
144
  var segmentTime = start + segmentNumberInCurrentRange * duration;
152
- var timeToAddToCheckMaxPosition = isAggressive ? 0 :
153
- duration;
145
+ var timeToAddToCheckMaxPosition = duration;
154
146
  while (segmentTime < to &&
155
147
  segmentNumberInCurrentRange <= repeat &&
156
- (maxPosition == null ||
148
+ (maxPosition === undefined ||
157
149
  (segmentTime + timeToAddToCheckMaxPosition) <= maxPosition)) {
158
150
  var time = segmentTime;
159
- var number = currentNumber != null ?
151
+ var number = currentNumber !== undefined ?
160
152
  currentNumber + segmentNumberInCurrentRange :
161
153
  undefined;
162
154
  var segment = { id: String(segmentTime),
@@ -176,7 +168,7 @@ var SmoothRepresentationIndex = /** @class */ (function () {
176
168
  // we reached ``to``, we're done
177
169
  return segments;
178
170
  }
179
- if (currentNumber != null) {
171
+ if (currentNumber !== undefined) {
180
172
  currentNumber += repeat + 1;
181
173
  }
182
174
  }
@@ -194,7 +186,7 @@ var SmoothRepresentationIndex = /** @class */ (function () {
194
186
  if (!this._isLive) {
195
187
  return false;
196
188
  }
197
- var _a = this._index, timeline = _a.timeline, timescale = _a.timescale;
189
+ var _a = this._sharedSmoothTimeline, timeline = _a.timeline, timescale = _a.timescale;
198
190
  var lastSegmentInCurrentTimeline = timeline[timeline.length - 1];
199
191
  if (lastSegmentInCurrentTimeline === undefined) {
200
192
  return false;
@@ -219,11 +211,11 @@ var SmoothRepresentationIndex = /** @class */ (function () {
219
211
  */
220
212
  SmoothRepresentationIndex.prototype.getFirstAvailablePosition = function () {
221
213
  this._refreshTimeline();
222
- var index = this._index;
223
- if (index.timeline.length === 0) {
214
+ var _a = this._sharedSmoothTimeline, timeline = _a.timeline, timescale = _a.timescale;
215
+ if (timeline.length === 0) {
224
216
  return null;
225
217
  }
226
- return index.timeline[0].start / index.timescale;
218
+ return timeline[0].start / timescale;
227
219
  };
228
220
  /**
229
221
  * Returns last position available in the index.
@@ -231,21 +223,20 @@ var SmoothRepresentationIndex = /** @class */ (function () {
231
223
  */
232
224
  SmoothRepresentationIndex.prototype.getLastAvailablePosition = function () {
233
225
  this._refreshTimeline();
234
- var index = this._index;
235
- if (this._scaledLiveGap == null) {
236
- var lastTimelineElement = index.timeline[index.timeline.length - 1];
237
- return getIndexSegmentEnd(lastTimelineElement, null) / index.timescale;
226
+ var _a = this._sharedSmoothTimeline, timeline = _a.timeline, timescale = _a.timescale;
227
+ if (this._scaledLiveGap === undefined) {
228
+ var lastTimelineElement = timeline[timeline.length - 1];
229
+ return getIndexSegmentEnd(lastTimelineElement, null) / timescale;
238
230
  }
239
- for (var i = index.timeline.length - 1; i >= 0; i--) {
240
- var timelineElt = index.timeline[i];
241
- var timescaledNow = (performance.now() / 1000) * index.timescale;
231
+ for (var i = timeline.length - 1; i >= 0; i--) {
232
+ var timelineElt = timeline[i];
233
+ var timescaledNow = (performance.now() / 1000) * timescale;
242
234
  var start = timelineElt.start, duration = timelineElt.duration, repeatCount = timelineElt.repeatCount;
243
235
  for (var j = repeatCount; j >= 0; j--) {
244
236
  var end = start + (duration * (j + 1));
245
- var positionToReach = this._isAggressiveMode ? end - duration :
246
- end;
237
+ var positionToReach = end;
247
238
  if (positionToReach <= timescaledNow - this._scaledLiveGap) {
248
- return end / index.timescale;
239
+ return end / timescale;
249
240
  }
250
241
  }
251
242
  }
@@ -297,7 +288,7 @@ var SmoothRepresentationIndex = /** @class */ (function () {
297
288
  */
298
289
  SmoothRepresentationIndex.prototype.checkDiscontinuity = function (timeSec) {
299
290
  this._refreshTimeline();
300
- return checkDiscontinuity(this._index, timeSec, undefined);
291
+ return checkDiscontinuity(this._sharedSmoothTimeline, timeSec, undefined);
301
292
  };
302
293
  /**
303
294
  * Returns `true` if a Segment returned by this index is still considered
@@ -312,7 +303,7 @@ var SmoothRepresentationIndex = /** @class */ (function () {
312
303
  return true;
313
304
  }
314
305
  this._refreshTimeline();
315
- var _a = this._index, timeline = _a.timeline, timescale = _a.timescale;
306
+ var _a = this._sharedSmoothTimeline, timeline = _a.timeline, timescale = _a.timescale;
316
307
  return isSegmentStillAvailable(segment, timeline, timescale, 0);
317
308
  };
318
309
  /**
@@ -333,57 +324,9 @@ var SmoothRepresentationIndex = /** @class */ (function () {
333
324
  * @param {Object} newIndex
334
325
  */
335
326
  SmoothRepresentationIndex.prototype._replace = function (newIndex) {
336
- var oldTimeline = this._index.timeline;
337
- var newTimeline = newIndex._index.timeline;
338
- var oldTimescale = this._index.timescale;
339
- var newTimescale = newIndex._index.timescale;
340
- this._index = newIndex._index;
341
327
  this._initialScaledLastPosition = newIndex._initialScaledLastPosition;
342
- this._indexValidityTime = newIndex._indexValidityTime;
343
328
  this._scaledLiveGap = newIndex._scaledLiveGap;
344
- if (oldTimeline.length === 0 ||
345
- newTimeline.length === 0 ||
346
- oldTimescale !== newTimescale) {
347
- return; // don't take risk, if something is off, take the new one
348
- }
349
- var lastOldTimelineElement = oldTimeline[oldTimeline.length - 1];
350
- var lastNewTimelineElement = newTimeline[newTimeline.length - 1];
351
- var newEnd = getIndexSegmentEnd(lastNewTimelineElement, null);
352
- if (getIndexSegmentEnd(lastOldTimelineElement, null) <= newEnd) {
353
- return;
354
- }
355
- for (var i = 0; i < oldTimeline.length; i++) {
356
- var oldTimelineRange = oldTimeline[i];
357
- var oldEnd = getIndexSegmentEnd(oldTimelineRange, null);
358
- if (oldEnd === newEnd) { // just add the supplementary segments
359
- this._index.timeline = this._index.timeline.concat(oldTimeline.slice(i + 1));
360
- return;
361
- }
362
- if (oldEnd > newEnd) { // adjust repeatCount + add supplementary segments
363
- if (oldTimelineRange.duration !== lastNewTimelineElement.duration) {
364
- return;
365
- }
366
- var rangeDuration = newEnd - oldTimelineRange.start;
367
- if (rangeDuration === 0) {
368
- log.warn("Smooth Parser: a discontinuity detected in the previous manifest" +
369
- " has been resolved.");
370
- this._index.timeline = this._index.timeline.concat(oldTimeline.slice(i));
371
- return;
372
- }
373
- if (rangeDuration < 0 || rangeDuration % oldTimelineRange.duration !== 0) {
374
- return;
375
- }
376
- var repeatWithOld = (rangeDuration / oldTimelineRange.duration) - 1;
377
- var relativeRepeat = oldTimelineRange.repeatCount - repeatWithOld;
378
- if (relativeRepeat < 0) {
379
- return;
380
- }
381
- lastNewTimelineElement.repeatCount += relativeRepeat;
382
- var supplementarySegments = oldTimeline.slice(i + 1);
383
- this._index.timeline = this._index.timeline.concat(supplementarySegments);
384
- return;
385
- }
386
- }
329
+ this._sharedSmoothTimeline.replace(newIndex._sharedSmoothTimeline);
387
330
  };
388
331
  /**
389
332
  * Update the current index with a new, partial, version.
@@ -391,10 +334,8 @@ var SmoothRepresentationIndex = /** @class */ (function () {
391
334
  * @param {Object} newIndex
392
335
  */
393
336
  SmoothRepresentationIndex.prototype._update = function (newIndex) {
394
- updateSegmentTimeline(this._index.timeline, newIndex._index.timeline);
395
- this._initialScaledLastPosition = newIndex._initialScaledLastPosition;
396
- this._indexValidityTime = newIndex._indexValidityTime;
397
337
  this._scaledLiveGap = newIndex._scaledLiveGap;
338
+ this._sharedSmoothTimeline.update(newIndex._sharedSmoothTimeline);
398
339
  };
399
340
  /**
400
341
  * Returns `true` if the last segments in this index have already been
@@ -416,38 +357,25 @@ var SmoothRepresentationIndex = /** @class */ (function () {
416
357
  SmoothRepresentationIndex.prototype.isInitialized = function () {
417
358
  return true;
418
359
  };
360
+ SmoothRepresentationIndex.prototype.initialize = function () {
361
+ log.error("A `SmoothRepresentationIndex` does not need to be initialized");
362
+ };
419
363
  /**
420
- * Add new segments to a `SmoothRepresentationIndex`.
364
+ * Add segments to a `SharedSmoothSegmentTimeline` that were predicted to come
365
+ * after `currentSegment`.
421
366
  * @param {Array.<Object>} nextSegments - The segment information parsed.
422
367
  * @param {Object} segment - Information on the segment which contained that
423
368
  * new segment information.
424
369
  */
425
- SmoothRepresentationIndex.prototype.addNewSegments = function (nextSegments, currentSegment) {
426
- this._refreshTimeline();
427
- for (var i = 0; i < nextSegments.length; i++) {
428
- addSegmentInfos(this._index, nextSegments[i], currentSegment);
429
- }
370
+ SmoothRepresentationIndex.prototype.addPredictedSegments = function (nextSegments, currentSegment) {
371
+ this._sharedSmoothTimeline.addPredictedSegments(nextSegments, currentSegment);
430
372
  };
431
373
  /**
432
374
  * Clean-up timeline to remove segment information which should not be
433
375
  * available due to the timeshift window
434
376
  */
435
377
  SmoothRepresentationIndex.prototype._refreshTimeline = function () {
436
- // clean segments before time shift buffer depth
437
- if (this._initialScaledLastPosition == null) {
438
- return;
439
- }
440
- var index = this._index;
441
- var timeShiftBufferDepth = this._timeShiftBufferDepth;
442
- var timeSinceLastRealUpdate = (performance.now() -
443
- this._indexValidityTime) / 1000;
444
- var lastPositionEstimate = timeSinceLastRealUpdate +
445
- this._initialScaledLastPosition / index.timescale;
446
- if (timeShiftBufferDepth != null) {
447
- var minimumPosition = (lastPositionEstimate - timeShiftBufferDepth) *
448
- index.timescale;
449
- clearTimelineFromPosition(index.timeline, minimumPosition);
450
- }
378
+ this._sharedSmoothTimeline.refresh();
451
379
  };
452
380
  return SmoothRepresentationIndex;
453
381
  }());
@@ -0,0 +1,119 @@
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
+ import { ISegment } from "../../../manifest";
17
+ /**
18
+ * Smooth contents provide the index of segments under a "StreamIndex", the
19
+ * smooth equivalent of an AdaptationSet.
20
+ *
21
+ * This means that multiple "QualityLevel" (smooth's Representation) are going
22
+ * to rely on the exact same list of segments. This also means that all
23
+ * mutations on that timeline (whether it is to evict old segments or to add
24
+ * new ones) should presumably happen for all of them at the same time.
25
+ *
26
+ * The `SharedSmoothSegmentTimeline` is an abstraction over that index of
27
+ * segments whose goal is to explicitely provide a data structure that can be
28
+ * shared to every `RepresentationIndex` linked to Representations being part
29
+ * of the same smooth Adaptation, thus allowing to mutualize any side-effect
30
+ * done to it automatically.
31
+ *
32
+ * @class SharedSmoothSegmentTimeline
33
+ */
34
+ export default class SharedSmoothSegmentTimeline {
35
+ /**
36
+ * Array describing the list of segments available.
37
+ * Note that this same list might be shared by multiple `RepresentationIndex`
38
+ * (as they link to the same timeline in the Manifest).
39
+ */
40
+ timeline: IIndexSegment[];
41
+ /** Timescale allowing to convert time values in `timeline` into seconds. */
42
+ timescale: number;
43
+ /**
44
+ * Defines the earliest time - in terms of `performance.now()` - when the
45
+ * timeline was known to be valid (that is, when all segments declared in it
46
+ * are available).
47
+ *
48
+ * This is either:
49
+ * - the Manifest downloading time, if known
50
+ * - else, the time of creation of this SharedSmoothSegmentTimeline, as a
51
+ * guess
52
+ */
53
+ validityTime: number;
54
+ private _timeShiftBufferDepth;
55
+ private _initialScaledLastPosition;
56
+ constructor(args: ISharedSmoothSegmentTimelineArguments);
57
+ /**
58
+ * Clean-up timeline to remove segment information which should not be
59
+ * available due to the timeshift window
60
+ */
61
+ refresh(): void;
62
+ /**
63
+ * Replace this SharedSmoothSegmentTimeline by a newly downloaded one.
64
+ * Check if the old timeline had more information about new segments and re-add
65
+ * them if that's the case.
66
+ * @param {Object} newSmoothTimeline
67
+ */
68
+ replace(newSmoothTimeline: SharedSmoothSegmentTimeline): void;
69
+ /**
70
+ * Update the current SharedSmoothSegmentTimeline with a new, partial, version.
71
+ * This method might be use to only add information about new segments.
72
+ * @param {Object} newSmoothTimeline
73
+ */
74
+ update(newSmoothTimeline: SharedSmoothSegmentTimeline): void;
75
+ /**
76
+ * Add segments to a `SharedSmoothSegmentTimeline` that were predicted to come
77
+ * after `currentSegment`.
78
+ * @param {Array.<Object>} nextSegments - The segment information parsed.
79
+ * @param {Object} segment - Information on the segment which contained that
80
+ * new segment information.
81
+ */
82
+ addPredictedSegments(nextSegments: Array<{
83
+ duration: number;
84
+ time: number;
85
+ timescale: number;
86
+ }>, currentSegment: ISegment): void;
87
+ }
88
+ export interface ISharedSmoothSegmentTimelineArguments {
89
+ timeline: IIndexSegment[];
90
+ timescale: number;
91
+ timeShiftBufferDepth: number | undefined;
92
+ manifestReceivedTime: number | undefined;
93
+ }
94
+ /**
95
+ * Object describing information about one segment or several consecutive
96
+ * segments.
97
+ */
98
+ export interface IIndexSegment {
99
+ /** Time (timescaled) at which the segment starts. */
100
+ start: number;
101
+ /** Duration (timescaled) of the segment. */
102
+ duration: number;
103
+ /**
104
+ * Amount of consecutive segments with that duration.
105
+ *
106
+ * For example let's consider the following IIndexSegment:
107
+ * ```
108
+ * { start: 10, duration: 2, repeatCount: 2 }
109
+ * ```
110
+ * Here, because `repeatCount` is set to `2`, this object actually defines 3
111
+ * segments:
112
+ * 1. one starting at `10` and ending at `12` (10 + 2)
113
+ * 2. another one starting at `12` (the previous one's end) and ending at
114
+ * `14` (12 + 2)
115
+ * 3. another one starting at `14` (the previous one's end) and ending at
116
+ * `16` (14 +2)
117
+ */
118
+ repeatCount: number;
119
+ }