rx-player 4.0.0-dev.2023111400 → 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 (336) hide show
  1. package/CHANGELOG.md +20 -60
  2. package/FILES.md +1 -1
  3. package/README.md +2 -33
  4. package/VERSION +1 -1
  5. package/dist/_esm5.processed/core/api/debug/buffer_graph.js +2 -6
  6. package/dist/_esm5.processed/core/api/debug/modules/general_info.js +20 -10
  7. package/dist/_esm5.processed/core/api/option_utils.d.ts +0 -2
  8. package/dist/_esm5.processed/core/api/option_utils.js +0 -6
  9. package/dist/_esm5.processed/core/api/public_api.d.ts +1 -2
  10. package/dist/_esm5.processed/core/api/public_api.js +9 -17
  11. package/dist/_esm5.processed/core/init/directfile_content_initializer.js +1 -1
  12. package/dist/_esm5.processed/core/init/media_source_content_initializer.js +3 -14
  13. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.d.ts +2 -36
  14. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.js +2 -82
  15. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +9 -2
  16. package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.js +1 -1
  17. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +1 -1
  18. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +1 -1
  19. package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
  20. package/dist/_esm5.processed/core/segment_buffers/inventory/index.d.ts +2 -2
  21. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +25 -8
  22. package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +19 -10
  23. package/dist/_esm5.processed/core/stream/representation/utils/get_buffer_status.js +1 -1
  24. package/dist/_esm5.processed/core/stream/representation/utils/get_needed_segments.js +1 -1
  25. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_extent.js +1 -8
  26. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_line_height.js +2 -1
  27. package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_origin.js +1 -9
  28. package/dist/_esm5.processed/public_types.d.ts +2 -0
  29. package/dist/commonjs/compat/is_codec_supported.js +22 -1
  30. package/dist/commonjs/config.d.ts +2 -1
  31. package/dist/commonjs/core/adaptive/adaptive_representation_selector.d.ts +2 -19
  32. package/dist/commonjs/core/adaptive/adaptive_representation_selector.js +2 -2
  33. package/dist/commonjs/core/adaptive/network_analyzer.js +3 -3
  34. package/dist/commonjs/core/api/debug/buffer_graph.js +2 -6
  35. package/dist/commonjs/core/api/debug/modules/general_info.js +17 -10
  36. package/dist/commonjs/core/api/index.d.ts +1 -1
  37. package/dist/commonjs/core/api/option_utils.d.ts +2 -0
  38. package/dist/commonjs/core/api/option_utils.js +2 -3
  39. package/dist/commonjs/core/api/playback_observer.d.ts +128 -8
  40. package/dist/commonjs/core/api/playback_observer.js +217 -64
  41. package/dist/commonjs/core/api/public_api.d.ts +9 -0
  42. package/dist/commonjs/core/api/public_api.js +41 -16
  43. package/dist/commonjs/core/api/utils.js +1 -1
  44. package/dist/commonjs/core/decrypt/get_media_keys.js +2 -6
  45. package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.d.ts +6 -0
  46. package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.js +11 -3
  47. package/dist/commonjs/core/fetchers/segment/segment_fetcher.d.ts +8 -1
  48. package/dist/commonjs/core/fetchers/segment/segment_fetcher.js +8 -4
  49. package/dist/commonjs/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -0
  50. package/dist/commonjs/core/fetchers/utils/schedule_request.js +1 -1
  51. package/dist/commonjs/core/init/directfile_content_initializer.js +29 -8
  52. package/dist/commonjs/core/init/media_source_content_initializer.d.ts +6 -0
  53. package/dist/commonjs/core/init/media_source_content_initializer.js +32 -20
  54. package/dist/commonjs/core/init/utils/content_time_boundaries_observer.d.ts +13 -12
  55. package/dist/commonjs/core/init/utils/content_time_boundaries_observer.js +17 -19
  56. package/dist/commonjs/core/init/utils/create_stream_playback_observer.d.ts +1 -5
  57. package/dist/commonjs/core/init/utils/create_stream_playback_observer.js +16 -14
  58. package/dist/commonjs/core/init/utils/get_initial_time.d.ts +17 -3
  59. package/dist/commonjs/core/init/utils/get_initial_time.js +9 -7
  60. package/dist/commonjs/core/init/utils/initial_seek_and_play.d.ts +9 -11
  61. package/dist/commonjs/core/init/utils/initial_seek_and_play.js +121 -91
  62. package/dist/commonjs/core/init/utils/rebuffering_controller.js +27 -70
  63. package/dist/commonjs/core/init/utils/stream_events_emitter/stream_events_emitter.js +4 -2
  64. package/dist/commonjs/core/segment_buffers/garbage_collector.js +1 -2
  65. package/dist/commonjs/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +9 -2
  66. package/dist/commonjs/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +1 -1
  67. package/dist/commonjs/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +1 -1
  68. package/dist/commonjs/core/segment_buffers/index.d.ts +2 -2
  69. package/dist/commonjs/core/segment_buffers/inventory/index.d.ts +2 -2
  70. package/dist/commonjs/core/segment_buffers/inventory/segment_inventory.d.ts +25 -8
  71. package/dist/commonjs/core/segment_buffers/inventory/segment_inventory.js +19 -10
  72. package/dist/commonjs/core/stream/adaptation/get_representations_switch_strategy.d.ts +2 -2
  73. package/dist/commonjs/core/stream/adaptation/get_representations_switch_strategy.js +16 -9
  74. package/dist/commonjs/core/stream/orchestrator/stream_orchestrator.js +14 -18
  75. package/dist/commonjs/core/stream/period/period_stream.js +5 -8
  76. package/dist/commonjs/core/stream/period/types.d.ts +2 -3
  77. package/dist/commonjs/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +4 -5
  78. package/dist/commonjs/core/stream/period/utils/get_adaptation_switch_strategy.js +17 -13
  79. package/dist/commonjs/core/stream/representation/representation_stream.js +3 -4
  80. package/dist/commonjs/core/stream/representation/types.d.ts +2 -2
  81. package/dist/commonjs/core/stream/representation/utils/append_segment_to_buffer.js +11 -12
  82. package/dist/commonjs/core/stream/representation/utils/get_buffer_status.js +4 -4
  83. package/dist/commonjs/core/stream/representation/utils/get_needed_segments.js +1 -1
  84. package/dist/commonjs/default_config.d.ts +12 -16
  85. package/dist/commonjs/default_config.js +21 -16
  86. package/dist/commonjs/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -1
  87. package/dist/commonjs/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +2 -0
  88. package/dist/commonjs/manifest/adaptation.js +2 -1
  89. package/dist/commonjs/manifest/representation_index/static.d.ts +1 -1
  90. package/dist/commonjs/manifest/representation_index/static.js +2 -2
  91. package/dist/commonjs/manifest/representation_index/types.d.ts +4 -4
  92. package/dist/commonjs/parsers/manifest/dash/common/indexes/base.d.ts +6 -1
  93. package/dist/commonjs/parsers/manifest/dash/common/indexes/base.js +4 -3
  94. package/dist/commonjs/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +5 -2
  95. package/dist/commonjs/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +15 -4
  96. package/dist/commonjs/parsers/manifest/dash/common/indexes/index.d.ts +5 -5
  97. package/dist/commonjs/parsers/manifest/dash/common/indexes/list.d.ts +1 -1
  98. package/dist/commonjs/parsers/manifest/dash/common/indexes/list.js +2 -2
  99. package/dist/commonjs/parsers/manifest/dash/common/indexes/template.d.ts +12 -5
  100. package/dist/commonjs/parsers/manifest/dash/common/indexes/template.js +42 -29
  101. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/index.d.ts +2 -1
  102. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +99 -6
  103. package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +250 -51
  104. package/dist/commonjs/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +40 -17
  105. package/dist/commonjs/parsers/manifest/dash/common/manifest_bounds_calculator.js +38 -18
  106. package/dist/commonjs/parsers/manifest/dash/common/parse_adaptation_sets.js +13 -10
  107. package/dist/commonjs/parsers/manifest/dash/common/parse_mpd.js +27 -14
  108. package/dist/commonjs/parsers/manifest/dash/common/parse_periods.d.ts +1 -1
  109. package/dist/commonjs/parsers/manifest/dash/common/parse_periods.js +17 -18
  110. package/dist/commonjs/parsers/manifest/dash/common/parse_representation_index.d.ts +19 -6
  111. package/dist/commonjs/parsers/manifest/dash/common/parse_representation_index.js +21 -8
  112. package/dist/commonjs/parsers/manifest/dash/common/parse_representations.js +7 -3
  113. package/dist/commonjs/parsers/manifest/local/representation_index.d.ts +1 -1
  114. package/dist/commonjs/parsers/manifest/local/representation_index.js +3 -3
  115. package/dist/commonjs/parsers/manifest/metaplaylist/representation_index.d.ts +1 -1
  116. package/dist/commonjs/parsers/manifest/metaplaylist/representation_index.js +2 -2
  117. package/dist/commonjs/parsers/manifest/smooth/representation_index.d.ts +5 -5
  118. package/dist/commonjs/parsers/manifest/smooth/representation_index.js +25 -9
  119. package/dist/commonjs/parsers/manifest/utils/index_helpers.js +1 -1
  120. package/dist/commonjs/parsers/texttracks/ttml/html/apply_line_height.js +2 -1
  121. package/dist/commonjs/public_types.d.ts +107 -36
  122. package/dist/commonjs/transports/dash/init_segment_loader.js +10 -5
  123. package/dist/commonjs/transports/dash/manifest_parser.js +5 -2
  124. package/dist/commonjs/transports/dash/segment_loader.js +2 -1
  125. package/dist/commonjs/transports/dash/text_loader.js +2 -0
  126. package/dist/commonjs/transports/metaplaylist/manifest_loader.js +2 -1
  127. package/dist/commonjs/transports/metaplaylist/pipelines.js +4 -1
  128. package/dist/commonjs/transports/smooth/pipelines.js +4 -2
  129. package/dist/commonjs/transports/smooth/segment_loader.js +2 -1
  130. package/dist/commonjs/transports/types.d.ts +12 -0
  131. package/dist/commonjs/transports/utils/generate_manifest_loader.js +6 -3
  132. package/dist/commonjs/utils/request/fetch.d.ts +6 -0
  133. package/dist/commonjs/utils/request/fetch.js +29 -8
  134. package/dist/commonjs/utils/request/xhr.d.ts +11 -5
  135. package/dist/commonjs/utils/request/xhr.js +29 -8
  136. package/dist/es2017/compat/is_codec_supported.js +22 -1
  137. package/dist/es2017/config.d.ts +2 -1
  138. package/dist/es2017/core/adaptive/adaptive_representation_selector.d.ts +2 -19
  139. package/dist/es2017/core/adaptive/adaptive_representation_selector.js +2 -2
  140. package/dist/es2017/core/adaptive/network_analyzer.js +3 -3
  141. package/dist/es2017/core/api/debug/buffer_graph.js +2 -6
  142. package/dist/es2017/core/api/debug/modules/general_info.js +17 -10
  143. package/dist/es2017/core/api/index.d.ts +1 -1
  144. package/dist/es2017/core/api/option_utils.d.ts +2 -0
  145. package/dist/es2017/core/api/option_utils.js +2 -3
  146. package/dist/es2017/core/api/playback_observer.d.ts +128 -8
  147. package/dist/es2017/core/api/playback_observer.js +217 -66
  148. package/dist/es2017/core/api/public_api.d.ts +9 -0
  149. package/dist/es2017/core/api/public_api.js +40 -15
  150. package/dist/es2017/core/api/utils.js +1 -1
  151. package/dist/es2017/core/decrypt/get_media_keys.js +2 -6
  152. package/dist/es2017/core/fetchers/manifest/manifest_fetcher.d.ts +6 -0
  153. package/dist/es2017/core/fetchers/manifest/manifest_fetcher.js +11 -3
  154. package/dist/es2017/core/fetchers/segment/segment_fetcher.d.ts +8 -1
  155. package/dist/es2017/core/fetchers/segment/segment_fetcher.js +8 -4
  156. package/dist/es2017/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -0
  157. package/dist/es2017/core/fetchers/utils/schedule_request.js +1 -1
  158. package/dist/es2017/core/init/directfile_content_initializer.js +31 -8
  159. package/dist/es2017/core/init/media_source_content_initializer.d.ts +6 -0
  160. package/dist/es2017/core/init/media_source_content_initializer.js +34 -22
  161. package/dist/es2017/core/init/utils/content_time_boundaries_observer.d.ts +13 -12
  162. package/dist/es2017/core/init/utils/content_time_boundaries_observer.js +17 -17
  163. package/dist/es2017/core/init/utils/create_stream_playback_observer.d.ts +1 -5
  164. package/dist/es2017/core/init/utils/create_stream_playback_observer.js +16 -14
  165. package/dist/es2017/core/init/utils/get_initial_time.d.ts +17 -3
  166. package/dist/es2017/core/init/utils/get_initial_time.js +9 -7
  167. package/dist/es2017/core/init/utils/initial_seek_and_play.d.ts +9 -11
  168. package/dist/es2017/core/init/utils/initial_seek_and_play.js +120 -91
  169. package/dist/es2017/core/init/utils/rebuffering_controller.js +27 -70
  170. package/dist/es2017/core/init/utils/stream_events_emitter/stream_events_emitter.js +4 -2
  171. package/dist/es2017/core/segment_buffers/garbage_collector.js +1 -2
  172. package/dist/es2017/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +9 -2
  173. package/dist/es2017/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +1 -1
  174. package/dist/es2017/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +1 -1
  175. package/dist/es2017/core/segment_buffers/index.d.ts +2 -2
  176. package/dist/es2017/core/segment_buffers/inventory/index.d.ts +2 -2
  177. package/dist/es2017/core/segment_buffers/inventory/segment_inventory.d.ts +25 -8
  178. package/dist/es2017/core/segment_buffers/inventory/segment_inventory.js +19 -10
  179. package/dist/es2017/core/stream/adaptation/get_representations_switch_strategy.d.ts +2 -2
  180. package/dist/es2017/core/stream/adaptation/get_representations_switch_strategy.js +16 -9
  181. package/dist/es2017/core/stream/orchestrator/stream_orchestrator.js +16 -18
  182. package/dist/es2017/core/stream/period/period_stream.js +4 -7
  183. package/dist/es2017/core/stream/period/types.d.ts +2 -3
  184. package/dist/es2017/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +4 -5
  185. package/dist/es2017/core/stream/period/utils/get_adaptation_switch_strategy.js +17 -13
  186. package/dist/es2017/core/stream/representation/representation_stream.js +3 -4
  187. package/dist/es2017/core/stream/representation/types.d.ts +2 -2
  188. package/dist/es2017/core/stream/representation/utils/append_segment_to_buffer.js +1 -2
  189. package/dist/es2017/core/stream/representation/utils/get_buffer_status.js +4 -4
  190. package/dist/es2017/core/stream/representation/utils/get_needed_segments.js +1 -1
  191. package/dist/es2017/default_config.d.ts +12 -16
  192. package/dist/es2017/default_config.js +21 -16
  193. package/dist/es2017/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -1
  194. package/dist/es2017/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +2 -0
  195. package/dist/es2017/manifest/adaptation.js +2 -1
  196. package/dist/es2017/manifest/representation_index/static.d.ts +1 -1
  197. package/dist/es2017/manifest/representation_index/static.js +2 -2
  198. package/dist/es2017/manifest/representation_index/types.d.ts +4 -4
  199. package/dist/es2017/parsers/manifest/dash/common/indexes/base.d.ts +6 -1
  200. package/dist/es2017/parsers/manifest/dash/common/indexes/base.js +4 -3
  201. package/dist/es2017/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +5 -2
  202. package/dist/es2017/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +15 -4
  203. package/dist/es2017/parsers/manifest/dash/common/indexes/index.d.ts +5 -5
  204. package/dist/es2017/parsers/manifest/dash/common/indexes/list.d.ts +1 -1
  205. package/dist/es2017/parsers/manifest/dash/common/indexes/list.js +2 -2
  206. package/dist/es2017/parsers/manifest/dash/common/indexes/template.d.ts +12 -5
  207. package/dist/es2017/parsers/manifest/dash/common/indexes/template.js +40 -27
  208. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/index.d.ts +2 -1
  209. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +99 -6
  210. package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +246 -51
  211. package/dist/es2017/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +40 -17
  212. package/dist/es2017/parsers/manifest/dash/common/manifest_bounds_calculator.js +38 -18
  213. package/dist/es2017/parsers/manifest/dash/common/parse_adaptation_sets.js +11 -8
  214. package/dist/es2017/parsers/manifest/dash/common/parse_mpd.js +27 -13
  215. package/dist/es2017/parsers/manifest/dash/common/parse_periods.d.ts +1 -1
  216. package/dist/es2017/parsers/manifest/dash/common/parse_periods.js +13 -16
  217. package/dist/es2017/parsers/manifest/dash/common/parse_representation_index.d.ts +19 -6
  218. package/dist/es2017/parsers/manifest/dash/common/parse_representation_index.js +10 -8
  219. package/dist/es2017/parsers/manifest/dash/common/parse_representations.js +7 -3
  220. package/dist/es2017/parsers/manifest/local/representation_index.d.ts +1 -1
  221. package/dist/es2017/parsers/manifest/local/representation_index.js +3 -3
  222. package/dist/es2017/parsers/manifest/metaplaylist/representation_index.d.ts +1 -1
  223. package/dist/es2017/parsers/manifest/metaplaylist/representation_index.js +2 -2
  224. package/dist/es2017/parsers/manifest/smooth/representation_index.d.ts +5 -5
  225. package/dist/es2017/parsers/manifest/smooth/representation_index.js +25 -9
  226. package/dist/es2017/parsers/manifest/utils/index_helpers.js +1 -1
  227. package/dist/es2017/parsers/texttracks/ttml/html/apply_line_height.js +2 -1
  228. package/dist/es2017/public_types.d.ts +107 -36
  229. package/dist/es2017/transports/dash/init_segment_loader.js +5 -0
  230. package/dist/es2017/transports/dash/manifest_parser.js +3 -0
  231. package/dist/es2017/transports/dash/segment_loader.js +1 -0
  232. package/dist/es2017/transports/dash/text_loader.js +2 -0
  233. package/dist/es2017/transports/metaplaylist/manifest_loader.js +1 -0
  234. package/dist/es2017/transports/metaplaylist/pipelines.js +4 -1
  235. package/dist/es2017/transports/smooth/pipelines.js +2 -0
  236. package/dist/es2017/transports/smooth/segment_loader.js +1 -0
  237. package/dist/es2017/transports/types.d.ts +12 -0
  238. package/dist/es2017/transports/utils/generate_manifest_loader.js +3 -0
  239. package/dist/es2017/utils/request/fetch.d.ts +6 -0
  240. package/dist/es2017/utils/request/fetch.js +29 -8
  241. package/dist/es2017/utils/request/xhr.d.ts +11 -5
  242. package/dist/es2017/utils/request/xhr.js +30 -9
  243. package/dist/mpd-parser.wasm +0 -0
  244. package/dist/rx-player.js +1335 -812
  245. package/dist/rx-player.min.js +1 -1
  246. package/package.json +7 -4
  247. package/scripts/canal-release.patch +78 -0
  248. package/scripts/make-dev-releases +65 -0
  249. package/scripts/update-version +7 -0
  250. package/sonar-project.properties +1 -1
  251. package/src/compat/is_codec_supported.ts +23 -1
  252. package/src/core/adaptive/adaptive_representation_selector.ts +4 -21
  253. package/src/core/adaptive/network_analyzer.ts +3 -3
  254. package/src/core/api/debug/buffer_graph.ts +2 -5
  255. package/src/core/api/debug/modules/general_info.ts +15 -10
  256. package/src/core/api/index.ts +1 -0
  257. package/src/core/api/option_utils.ts +3 -3
  258. package/src/core/api/playback_observer.ts +327 -107
  259. package/src/core/api/public_api.ts +42 -14
  260. package/src/core/api/utils.ts +3 -1
  261. package/src/core/decrypt/get_media_keys.ts +2 -8
  262. package/src/core/fetchers/manifest/manifest_fetcher.ts +21 -3
  263. package/src/core/fetchers/segment/segment_fetcher.ts +19 -5
  264. package/src/core/fetchers/segment/segment_fetcher_creator.ts +1 -0
  265. package/src/core/fetchers/utils/schedule_request.ts +1 -1
  266. package/src/core/init/directfile_content_initializer.ts +31 -15
  267. package/src/core/init/media_source_content_initializer.ts +40 -27
  268. package/src/core/init/utils/content_time_boundaries_observer.ts +24 -23
  269. package/src/core/init/utils/create_stream_playback_observer.ts +19 -20
  270. package/src/core/init/utils/get_initial_time.ts +25 -12
  271. package/src/core/init/utils/initial_seek_and_play.ts +140 -108
  272. package/src/core/init/utils/rebuffering_controller.ts +32 -77
  273. package/src/core/init/utils/stream_events_emitter/stream_events_emitter.ts +5 -2
  274. package/src/core/segment_buffers/garbage_collector.ts +1 -1
  275. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +10 -2
  276. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +1 -1
  277. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +1 -1
  278. package/src/core/segment_buffers/index.ts +2 -0
  279. package/src/core/segment_buffers/inventory/index.ts +2 -0
  280. package/src/core/segment_buffers/inventory/segment_inventory.ts +49 -17
  281. package/src/core/stream/adaptation/get_representations_switch_strategy.ts +21 -12
  282. package/src/core/stream/orchestrator/stream_orchestrator.ts +14 -19
  283. package/src/core/stream/period/period_stream.ts +7 -8
  284. package/src/core/stream/period/types.ts +2 -3
  285. package/src/core/stream/period/utils/get_adaptation_switch_strategy.ts +21 -15
  286. package/src/core/stream/representation/representation_stream.ts +3 -5
  287. package/src/core/stream/representation/types.ts +2 -2
  288. package/src/core/stream/representation/utils/append_segment_to_buffer.ts +1 -1
  289. package/src/core/stream/representation/utils/get_buffer_status.ts +5 -4
  290. package/src/core/stream/representation/utils/get_needed_segments.ts +2 -2
  291. package/src/default_config.ts +22 -17
  292. package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +3 -1
  293. package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +2 -0
  294. package/src/manifest/adaptation.ts +2 -1
  295. package/src/manifest/representation_index/static.ts +2 -2
  296. package/src/manifest/representation_index/types.ts +4 -4
  297. package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +182 -36
  298. package/src/parsers/manifest/dash/common/indexes/base.ts +12 -4
  299. package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +19 -5
  300. package/src/parsers/manifest/dash/common/indexes/index.ts +16 -4
  301. package/src/parsers/manifest/dash/common/indexes/list.ts +2 -2
  302. package/src/parsers/manifest/dash/common/indexes/template.ts +52 -31
  303. package/src/parsers/manifest/dash/common/indexes/timeline/index.ts +4 -1
  304. package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +366 -60
  305. package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +63 -25
  306. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +10 -4
  307. package/src/parsers/manifest/dash/common/parse_mpd.ts +28 -15
  308. package/src/parsers/manifest/dash/common/parse_periods.ts +12 -17
  309. package/src/parsers/manifest/dash/common/parse_representation_index.ts +50 -26
  310. package/src/parsers/manifest/dash/common/parse_representations.ts +9 -3
  311. package/src/parsers/manifest/local/representation_index.ts +3 -3
  312. package/src/parsers/manifest/metaplaylist/representation_index.ts +2 -2
  313. package/src/parsers/manifest/smooth/representation_index.ts +23 -9
  314. package/src/parsers/manifest/utils/__tests__/get_first_time_from_adaptations.test.ts +1 -1
  315. package/src/parsers/manifest/utils/__tests__/get_last_time_from_adaptation.test.ts +1 -1
  316. package/src/parsers/manifest/utils/index_helpers.ts +1 -1
  317. package/src/parsers/texttracks/ttml/html/apply_line_height.ts +3 -1
  318. package/src/public_types.ts +108 -36
  319. package/src/transports/dash/init_segment_loader.ts +5 -0
  320. package/src/transports/dash/manifest_parser.ts +6 -0
  321. package/src/transports/dash/segment_loader.ts +1 -0
  322. package/src/transports/dash/text_loader.ts +2 -0
  323. package/src/transports/metaplaylist/manifest_loader.ts +1 -0
  324. package/src/transports/metaplaylist/pipelines.ts +4 -1
  325. package/src/transports/smooth/pipelines.ts +2 -0
  326. package/src/transports/smooth/segment_loader.ts +1 -0
  327. package/src/transports/types.ts +12 -0
  328. package/src/transports/utils/generate_manifest_loader.ts +3 -0
  329. package/src/utils/request/fetch.ts +35 -8
  330. package/src/utils/request/xhr.ts +45 -14
  331. package/dist/commonjs/parsers/manifest/utils/is_segment_still_available.d.ts +0 -29
  332. package/dist/commonjs/parsers/manifest/utils/is_segment_still_available.js +0 -54
  333. package/dist/es2017/parsers/manifest/utils/is_segment_still_available.d.ts +0 -29
  334. package/dist/es2017/parsers/manifest/utils/is_segment_still_available.js +0 -51
  335. package/src/parsers/manifest/utils/is_segment_still_available.ts +0 -58
  336. package/src/typings/object-assign.d.ts +0 -48
@@ -13,8 +13,8 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import BaseRepresentationIndex from "./base";
17
- import ListRepresentationIndex from "./list";
18
- import TemplateRepresentationIndex from "./template";
19
- import TimelineRepresentationIndex from "./timeline";
20
- export { BaseRepresentationIndex, ListRepresentationIndex, TemplateRepresentationIndex, TimelineRepresentationIndex, };
16
+ import BaseRepresentationIndex, { IBaseIndexContextArgument } from "./base";
17
+ import ListRepresentationIndex, { IListIndexContextArgument } from "./list";
18
+ import TemplateRepresentationIndex, { ITemplateIndexContextArgument } from "./template";
19
+ import TimelineRepresentationIndex, { ITimelineIndexContextArgument } from "./timeline";
20
+ export { BaseRepresentationIndex, ListRepresentationIndex, TemplateRepresentationIndex, TimelineRepresentationIndex, IBaseIndexContextArgument, IListIndexContextArgument, ITemplateIndexContextArgument, ITimelineIndexContextArgument, };
@@ -178,7 +178,7 @@ export default class ListRepresentationIndex implements IRepresentationIndex {
178
178
  /**
179
179
  * @returns {Boolean}
180
180
  */
181
- isFinished(): true;
181
+ isStillAwaitingFutureSegments(): false;
182
182
  /**
183
183
  * @returns {Boolean}
184
184
  */
@@ -187,8 +187,8 @@ var ListRepresentationIndex = /** @class */ (function () {
187
187
  /**
188
188
  * @returns {Boolean}
189
189
  */
190
- ListRepresentationIndex.prototype.isFinished = function () {
191
- return true;
190
+ ListRepresentationIndex.prototype.isStillAwaitingFutureSegments = function () {
191
+ return false;
192
192
  };
193
193
  /**
194
194
  * @returns {Boolean}
@@ -102,8 +102,15 @@ export interface ITemplateIndexIndexArgument {
102
102
  }
103
103
  /** Aditional context needed by a SegmentTemplate RepresentationIndex. */
104
104
  export interface ITemplateIndexContextArgument {
105
- /** Minimum availabilityTimeOffset concerning the segments of this Representation. */
106
- availabilityTimeOffset: number;
105
+ /**
106
+ * availability time offset of the concerned Adaptation.
107
+ *
108
+ * If `undefined`, the corresponding property was not set in the MPD and it is
109
+ * thus assumed to be equal to `0`.
110
+ * It might however be semantically different than `0` in the RxPlayer as it
111
+ * means that the packager didn't include that information in the MPD.
112
+ */
113
+ availabilityTimeOffset: number | undefined;
107
114
  /** Allows to obtain the minimum and maximum positions of a content. */
108
115
  manifestBoundsCalculator: ManifestBoundsCalculator;
109
116
  /** Start of the period concerned by this RepresentationIndex, in seconds. */
@@ -208,13 +215,13 @@ export default class TemplateRepresentationIndex implements IRepresentationIndex
208
215
  */
209
216
  canBeOutOfSyncError(): false;
210
217
  /**
211
- * Returns `true` if the last segments in this index have already been
218
+ * Returns `false` if the last segments in this index have already been
212
219
  * generated so that we can freely go to the next period.
213
- * Returns `false` if the index is still waiting on future segments to be
220
+ * Returns `true` if the index is still waiting on future segments to be
214
221
  * generated.
215
222
  * @returns {Boolean}
216
223
  */
217
- isFinished(): boolean;
224
+ isStillAwaitingFutureSegments(): boolean;
218
225
  /**
219
226
  * @returns {Boolean}
220
227
  */
@@ -201,13 +201,24 @@ var TemplateRepresentationIndex = /** @class */ (function () {
201
201
  var timescale = this._index.timescale;
202
202
  var segmentTimeRounding = (0, utils_1.getSegmentTimeRoundingError)(timescale);
203
203
  var scaledPeriodStart = this._periodStart * timescale;
204
- var scaledRelativeEnd = end * timescale - scaledPeriodStart;
204
+ var scaledRelativeStart = (start * timescale) - scaledPeriodStart;
205
+ var scaledRelativeEnd = (end * timescale) - scaledPeriodStart;
206
+ var lastSegmentStart = this._getLastSegmentStart();
207
+ if ((0, is_null_or_undefined_1.default)(lastSegmentStart)) {
208
+ var relativeScaledIndexEnd_1 = this._estimateRelativeScaledEnd();
209
+ if (relativeScaledIndexEnd_1 === undefined) {
210
+ return scaledRelativeEnd + segmentTimeRounding >= 0;
211
+ }
212
+ return scaledRelativeEnd + segmentTimeRounding >= 0 &&
213
+ scaledRelativeStart < relativeScaledIndexEnd_1 - segmentTimeRounding;
214
+ }
215
+ var lastSegmentEnd = lastSegmentStart + this._index.duration;
205
216
  var relativeScaledIndexEnd = this._estimateRelativeScaledEnd();
206
217
  if (relativeScaledIndexEnd === undefined) {
207
- return (scaledRelativeEnd + segmentTimeRounding) >= 0;
218
+ return scaledRelativeEnd > lastSegmentEnd - segmentTimeRounding;
208
219
  }
209
- var scaledRelativeStart = start * timescale - scaledPeriodStart;
210
- return (scaledRelativeStart - segmentTimeRounding) < relativeScaledIndexEnd;
220
+ return scaledRelativeEnd > lastSegmentEnd - segmentTimeRounding &&
221
+ scaledRelativeStart < relativeScaledIndexEnd - segmentTimeRounding;
211
222
  };
212
223
  /**
213
224
  * Returns true if, based on the arguments, the index should be refreshed.
@@ -252,30 +263,30 @@ var TemplateRepresentationIndex = /** @class */ (function () {
252
263
  return false;
253
264
  };
254
265
  /**
255
- * Returns `true` if the last segments in this index have already been
266
+ * Returns `false` if the last segments in this index have already been
256
267
  * generated so that we can freely go to the next period.
257
- * Returns `false` if the index is still waiting on future segments to be
268
+ * Returns `true` if the index is still waiting on future segments to be
258
269
  * generated.
259
270
  * @returns {Boolean}
260
271
  */
261
- TemplateRepresentationIndex.prototype.isFinished = function () {
272
+ TemplateRepresentationIndex.prototype.isStillAwaitingFutureSegments = function () {
262
273
  if (!this._isDynamic) {
263
- return true;
274
+ return false;
264
275
  }
265
276
  var scaledRelativeIndexEnd = this._estimateRelativeScaledEnd();
266
277
  if (scaledRelativeIndexEnd === undefined) {
267
- return false;
278
+ return true;
268
279
  }
269
280
  var timescale = this._index.timescale;
270
281
  var lastSegmentStart = this._getLastSegmentStart();
271
282
  // As last segment start is null if live time is before
272
283
  // current period, consider the index not to be finished.
273
284
  if ((0, is_null_or_undefined_1.default)(lastSegmentStart)) {
274
- return false;
285
+ return true;
275
286
  }
276
287
  var lastSegmentEnd = lastSegmentStart + this._index.duration;
277
288
  var segmentTimeRounding = (0, utils_1.getSegmentTimeRoundingError)(timescale);
278
- return (lastSegmentEnd + segmentTimeRounding) >= scaledRelativeIndexEnd;
289
+ return (lastSegmentEnd + segmentTimeRounding) < scaledRelativeIndexEnd;
279
290
  };
280
291
  /**
281
292
  * @returns {Boolean}
@@ -313,6 +324,7 @@ var TemplateRepresentationIndex = /** @class */ (function () {
313
324
  * @returns {number | null | undefined}
314
325
  */
315
326
  TemplateRepresentationIndex.prototype._getFirstSegmentStart = function () {
327
+ var _a;
316
328
  if (!this._isDynamic) {
317
329
  return 0; // it is the start of the Period
318
330
  }
@@ -322,15 +334,15 @@ var TemplateRepresentationIndex = /** @class */ (function () {
322
334
  // /!\ The scaled max position augments continuously and might not
323
335
  // reflect exactly the real server-side value. As segments are
324
336
  // generated discretely.
325
- var maximumBound = this._manifestBoundsCalculator.estimateMaximumBound();
326
- if (maximumBound !== undefined && maximumBound < this._periodStart) {
337
+ var maximumSegmentTime = this._manifestBoundsCalculator.getEstimatedMaximumPosition((_a = this._availabilityTimeOffset) !== null && _a !== void 0 ? _a : 0);
338
+ if (maximumSegmentTime !== undefined && maximumSegmentTime < this._periodStart) {
327
339
  // Maximum position is before this period.
328
340
  // No segment is yet available here
329
341
  return null;
330
342
  }
331
343
  }
332
- var _a = this._index, duration = _a.duration, timescale = _a.timescale;
333
- var firstPosition = this._manifestBoundsCalculator.estimateMinimumBound();
344
+ var _b = this._index, duration = _b.duration, timescale = _b.timescale;
345
+ var firstPosition = this._manifestBoundsCalculator.getEstimatedMinimumSegmentTime();
334
346
  if (firstPosition === undefined) {
335
347
  return undefined;
336
348
  }
@@ -347,34 +359,35 @@ var TemplateRepresentationIndex = /** @class */ (function () {
347
359
  * @returns {number|null|undefined}
348
360
  */
349
361
  TemplateRepresentationIndex.prototype._getLastSegmentStart = function () {
350
- var _a;
351
- var _b = this._index, duration = _b.duration, timescale = _b.timescale, endNumber = _b.endNumber, _c = _b.startNumber, startNumber = _c === void 0 ? 1 : _c;
362
+ var _a, _b;
363
+ var _c = this._index, duration = _c.duration, timescale = _c.timescale, endNumber = _c.endNumber, _d = _c.startNumber, startNumber = _d === void 0 ? 1 : _d;
352
364
  if (this._isDynamic) {
353
- var lastPos = this._manifestBoundsCalculator.estimateMaximumBound();
354
- if (lastPos === undefined) {
355
- return undefined;
356
- }
357
- if (this._scaledRelativePeriodEnd !== undefined &&
358
- this._scaledRelativePeriodEnd <
359
- (lastPos - this._periodStart) * this._index.timescale) {
365
+ var liveEdge = this._manifestBoundsCalculator.getEstimatedLiveEdge();
366
+ if (liveEdge !== undefined &&
367
+ this._scaledRelativePeriodEnd !== undefined &&
368
+ this._scaledRelativePeriodEnd < liveEdge - (this._periodStart *
369
+ this._index.timescale)) {
360
370
  var numberOfSegments = Math.ceil(this._scaledRelativePeriodEnd / duration);
361
371
  if (endNumber !== undefined && (endNumber - startNumber + 1) < numberOfSegments) {
362
372
  numberOfSegments = endNumber - startNumber + 1;
363
373
  }
364
374
  return (numberOfSegments - 1) * duration;
365
375
  }
376
+ var lastPosition = this._manifestBoundsCalculator
377
+ .getEstimatedMaximumPosition((_a = this._availabilityTimeOffset) !== null && _a !== void 0 ? _a : 0);
378
+ if (lastPosition === undefined) {
379
+ return undefined;
380
+ }
366
381
  // /!\ The scaled last position augments continuously and might not
367
382
  // reflect exactly the real server-side value. As segments are
368
383
  // generated discretely.
369
- var scaledLastPosition = (lastPos - this._periodStart) * timescale;
384
+ var scaledLastPosition = (lastPosition - this._periodStart) * timescale;
370
385
  // Maximum position is before this period.
371
386
  // No segment is yet available here
372
387
  if (scaledLastPosition < 0) {
373
388
  return null;
374
389
  }
375
- var availabilityTimeOffset = ((this._availabilityTimeOffset !== undefined ? this._availabilityTimeOffset : 0))
376
- * timescale;
377
- var numberOfSegmentsAvailable = Math.floor((scaledLastPosition + availabilityTimeOffset) / duration);
390
+ var numberOfSegmentsAvailable = Math.floor(scaledLastPosition / duration);
378
391
  if (endNumber !== undefined &&
379
392
  (endNumber - startNumber + 1) < numberOfSegmentsAvailable) {
380
393
  numberOfSegmentsAvailable = endNumber - startNumber + 1;
@@ -384,7 +397,7 @@ var TemplateRepresentationIndex = /** @class */ (function () {
384
397
  (numberOfSegmentsAvailable - 1) * duration;
385
398
  }
386
399
  else {
387
- var maximumTime = (_a = this._scaledRelativePeriodEnd) !== null && _a !== void 0 ? _a : 0;
400
+ var maximumTime = (_b = this._scaledRelativePeriodEnd) !== null && _b !== void 0 ? _b : 0;
388
401
  var numberOfSegments = Math.ceil(maximumTime / duration);
389
402
  if (endNumber !== undefined && (endNumber - startNumber + 1) < numberOfSegments) {
390
403
  numberOfSegments = endNumber - startNumber + 1;
@@ -13,5 +13,6 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import TimelineRepresentationIndex from "./timeline_representation_index";
16
+ import TimelineRepresentationIndex, { ITimelineIndexContextArgument } from "./timeline_representation_index";
17
17
  export default TimelineRepresentationIndex;
18
+ export { ITimelineIndexContextArgument };
@@ -27,6 +27,8 @@ import ManifestBoundsCalculator from "../../manifest_bounds_calculator";
27
27
  export interface ITimelineIndex {
28
28
  /** If `false`, the last segment anounced might be still incomplete. */
29
29
  availabilityTimeComplete: boolean;
30
+ /** Minimum availabilityTimeOffset concerning the segments of this Representation. */
31
+ availabilityTimeOffset: number;
30
32
  /** Byte range for a possible index of segments in the server. */
31
33
  indexRange?: [number, number] | undefined;
32
34
  /**
@@ -123,8 +125,25 @@ export interface ITimelineIndexIndexArgument {
123
125
  }
124
126
  /** Aditional context needed by a SegmentTimeline RepresentationIndex. */
125
127
  export interface ITimelineIndexContextArgument {
126
- /** If `false`, the last segment anounced might be still incomplete. */
127
- availabilityTimeComplete: boolean;
128
+ /**
129
+ * If `false`, declared segments in the MPD might still be not completely generated.
130
+ * If `true`, they are completely generated.
131
+ *
132
+ * If `undefined`, the corresponding property was not set in the MPD and it is
133
+ * thus assumed that they are all generated.
134
+ * It might however be semantically different than `true` in the RxPlayer as it
135
+ * means that the packager didn't include that information in the MPD.
136
+ */
137
+ availabilityTimeComplete: boolean | undefined;
138
+ /**
139
+ * availability time offset of the concerned Adaptation.
140
+ *
141
+ * If `undefined`, the corresponding property was not set in the MPD and it is
142
+ * thus assumed to be equal to `0`.
143
+ * It might however be semantically different than `0` in the RxPlayer as it
144
+ * means that the packager didn't include that information in the MPD.
145
+ */
146
+ availabilityTimeOffset: number | undefined;
128
147
  /** Allows to obtain the minimum and maximum positions of a content. */
129
148
  manifestBoundsCalculator: ManifestBoundsCalculator;
130
149
  /** Start of the period linked to this RepresentationIndex, in seconds. */
@@ -164,6 +183,11 @@ export interface ILastSegmentInformation {
164
183
  /** Defines the time at which `lastPosition` was last calculated. */
165
184
  time: number;
166
185
  }
186
+ /**
187
+ * `IRepresentationIndex` implementation for a DASH `SegmentTimeline` segment
188
+ * indexing scheme.
189
+ * @class TimelineRepresentationIndex
190
+ */
167
191
  export default class TimelineRepresentationIndex implements IRepresentationIndex {
168
192
  /** Underlying structure to retrieve segment information. */
169
193
  protected _index: ITimelineIndex;
@@ -287,12 +311,12 @@ export default class TimelineRepresentationIndex implements IRepresentationIndex
287
311
  */
288
312
  _update(newIndex: TimelineRepresentationIndex): void;
289
313
  /**
290
- * Returns `true` if this RepresentationIndex currently contains its last
314
+ * Returns `false` if this RepresentationIndex currently contains its last
291
315
  * segment.
292
- * Returns `false` if it's still pending.
316
+ * Returns `true` if it's still pending.
293
317
  * @returns {Boolean}
294
318
  */
295
- isFinished(): boolean;
319
+ isStillAwaitingFutureSegments(): boolean;
296
320
  /**
297
321
  * @returns {Boolean}
298
322
  */
@@ -311,7 +335,6 @@ export default class TimelineRepresentationIndex implements IRepresentationIndex
311
335
  * available due to timeshifting.
312
336
  */
313
337
  private _refreshTimeline;
314
- static getIndexEnd(timeline: IIndexSegment[], scaledPeriodEnd: number | undefined): number | null;
315
338
  /**
316
339
  * Allows to generate the "timeline" for this RepresentationIndex.
317
340
  * Call this function when the timeline is unknown.
@@ -336,3 +359,73 @@ export default class TimelineRepresentationIndex implements IRepresentationIndex
336
359
  */
337
360
  private _getTimeline;
338
361
  }
362
+ /**
363
+ * Returns true if a Segment returned by the corresponding index is still
364
+ * considered available.
365
+ * Returns false if it is not available anymore.
366
+ * Returns undefined if we cannot know whether it is still available or not.
367
+ * /!\ We do not check the mediaURLs of the segment.
368
+ * @param {Object} segment
369
+ * @param {Object} index
370
+ * @param {Object} manifestBoundsCalculator
371
+ * @param {number|undefined} scaledPeriodEnd
372
+ * @returns {Boolean|undefined}
373
+ */
374
+ export declare function isSegmentStillAvailable(segment: ISegment, index: {
375
+ availabilityTimeOffset: number;
376
+ timeline: IIndexSegment[];
377
+ indexTimeOffset: number;
378
+ timescale: number;
379
+ }, manifestBoundsCalculator: ManifestBoundsCalculator, scaledPeriodEnd: number | undefined): boolean | undefined;
380
+ /**
381
+ * Returns from the given RepresentationIndex information on the last segment
382
+ * that may be requested currently.
383
+ *
384
+ * Returns `null` if there's no such segment.
385
+ * @param {Object} index
386
+ * @param {Object} manifestBoundsCalculator
387
+ * @param {number|undefined} scaledPeriodEnd
388
+ * @returns {number|null}
389
+ */
390
+ export declare function getLastRequestableSegmentInfo(index: {
391
+ availabilityTimeOffset: number;
392
+ timeline: IIndexSegment[];
393
+ timescale: number;
394
+ }, manifestBoundsCalculator: ManifestBoundsCalculator, scaledPeriodEnd: number | undefined): ILastRequestableSegmentInfo | null;
395
+ /**
396
+ * Information on the last requestable segment deduced from a timeline array of
397
+ * segment information.
398
+ */
399
+ export interface ILastRequestableSegmentInfo {
400
+ /**
401
+ * If `true`, we know that the last requestable segment is equal to the last
402
+ * segment that can be deduced from the corresponding given timeline.
403
+ * Written another way, there seem to be no segment announced in the timeline
404
+ * that are not yet requestable.
405
+ *
406
+ * If `false`, we know that the last requestable segment is not the last
407
+ * segment that can be deduced from the corresponding timeline.
408
+ * Written another way, there are supplementary segments in the timeline which
409
+ * are not yet requestable.
410
+ *
411
+ * Note that if the last requestable segment has its information from the last
412
+ * element from the timeline but it's not the last segment that would be
413
+ * deduced from the `repeatCount` property, then this value is set to `false`.
414
+ */
415
+ isLastOfTimeline: boolean;
416
+ /**
417
+ * End time at which the last requestable segment ends, in the corresponding
418
+ * index timescale (__NOT__ in seconds).
419
+ */
420
+ end: number;
421
+ /**
422
+ * The index in `timeline` of the last requestable segment.
423
+ * Note that its `repeatCount` may be updated and put as `newRepeatCount`.
424
+ */
425
+ timelineIdx: number;
426
+ /**
427
+ * The new `repeatCount` value for that last segment. May be equal or
428
+ * different from the timeline element found at `timelineIdx`.
429
+ */
430
+ newRepeatCount: number;
431
+ }