rx-player 4.0.0-beta.0 → 4.0.0-beta.2

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 (297) hide show
  1. package/.eslintrc.js +8 -0
  2. package/CHANGELOG.md +93 -0
  3. package/CONTRIBUTING.md +48 -168
  4. package/FILES.md +40 -92
  5. package/VERSION +1 -1
  6. package/dist/_esm5.processed/compat/browser_detection.d.ts +25 -12
  7. package/dist/_esm5.processed/compat/browser_detection.js +85 -38
  8. package/dist/_esm5.processed/compat/can_reuse_media_keys.js +2 -2
  9. package/dist/_esm5.processed/compat/eme/close_session.js +2 -2
  10. package/dist/_esm5.processed/compat/eme/load_session.js +1 -1
  11. package/dist/_esm5.processed/compat/event_listeners.js +1 -1
  12. package/dist/_esm5.processed/compat/has_issues_with_high_media_source_duration.d.ts +21 -0
  13. package/dist/_esm5.processed/compat/has_issues_with_high_media_source_duration.js +26 -0
  14. package/dist/_esm5.processed/config.d.ts +4 -0
  15. package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +9 -6
  16. package/dist/_esm5.processed/core/adaptive/buffer_based_chooser.d.ts +18 -1
  17. package/dist/_esm5.processed/core/adaptive/buffer_based_chooser.js +106 -25
  18. package/dist/_esm5.processed/core/adaptive/guess_based_chooser.js +6 -6
  19. package/dist/_esm5.processed/core/adaptive/network_analyzer.js +8 -5
  20. package/dist/_esm5.processed/core/adaptive/utils/representation_score_calculator.d.ts +19 -1
  21. package/dist/_esm5.processed/core/adaptive/utils/representation_score_calculator.js +1 -1
  22. package/dist/_esm5.processed/core/api/debug/buffer_graph.d.ts +28 -0
  23. package/dist/_esm5.processed/core/api/debug/buffer_graph.js +175 -0
  24. package/dist/_esm5.processed/core/api/debug/buffer_size_graph.d.ts +10 -0
  25. package/dist/_esm5.processed/core/api/debug/buffer_size_graph.js +104 -0
  26. package/dist/_esm5.processed/core/api/debug/constants.d.ts +2 -0
  27. package/dist/_esm5.processed/core/api/debug/constants.js +2 -0
  28. package/dist/_esm5.processed/core/api/debug/index.d.ts +2 -0
  29. package/dist/_esm5.processed/core/api/debug/index.js +2 -0
  30. package/dist/_esm5.processed/core/api/debug/modules/general_info.d.ts +3 -0
  31. package/dist/_esm5.processed/core/api/debug/modules/general_info.js +180 -0
  32. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.d.ts +4 -0
  33. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +121 -0
  34. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.d.ts +3 -0
  35. package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +35 -0
  36. package/dist/_esm5.processed/core/api/debug/render.d.ts +3 -0
  37. package/dist/_esm5.processed/core/api/debug/render.js +32 -0
  38. package/dist/_esm5.processed/core/api/debug/utils.d.ts +39 -0
  39. package/dist/_esm5.processed/core/api/debug/utils.js +57 -0
  40. package/dist/_esm5.processed/core/api/playback_observer.js +4 -2
  41. package/dist/_esm5.processed/core/api/public_api.d.ts +60 -3
  42. package/dist/_esm5.processed/core/api/public_api.js +280 -60
  43. package/dist/_esm5.processed/core/api/track_management/media_element_tracks_store.js +10 -1
  44. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.d.ts +13 -1
  45. package/dist/_esm5.processed/core/api/track_management/track_dispatcher.js +30 -15
  46. package/dist/_esm5.processed/core/api/track_management/tracks_store.d.ts +3 -1
  47. package/dist/_esm5.processed/core/api/track_management/tracks_store.js +67 -152
  48. package/dist/_esm5.processed/core/api/utils.d.ts +10 -0
  49. package/dist/_esm5.processed/core/api/utils.js +23 -3
  50. package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.d.ts +27 -8
  51. package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.js +28 -7
  52. package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +1 -1
  53. package/dist/_esm5.processed/core/decrypt/content_decryptor.js +1 -1
  54. package/dist/_esm5.processed/core/decrypt/find_key_system.js +29 -6
  55. package/dist/_esm5.processed/core/decrypt/session_events_listener.js +42 -32
  56. package/dist/_esm5.processed/core/decrypt/utils/check_key_statuses.js +4 -0
  57. package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +2 -0
  58. package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +5 -1
  59. package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.d.ts +17 -8
  60. package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.js +10 -6
  61. package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +5 -4
  62. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +22 -5
  63. package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +37 -21
  64. package/dist/_esm5.processed/core/fetchers/segment/task_prioritizer.js +21 -23
  65. package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +17 -7
  66. package/dist/_esm5.processed/core/init/directfile_content_initializer.js +2 -2
  67. package/dist/_esm5.processed/core/init/media_source_content_initializer.js +74 -41
  68. package/dist/_esm5.processed/core/init/types.d.ts +9 -1
  69. package/dist/_esm5.processed/core/init/utils/content_time_boundaries_observer.d.ts +28 -1
  70. package/dist/_esm5.processed/core/init/utils/content_time_boundaries_observer.js +24 -11
  71. package/dist/_esm5.processed/core/init/utils/create_media_source.js +3 -12
  72. package/dist/_esm5.processed/core/init/utils/end_of_stream.js +6 -3
  73. package/dist/_esm5.processed/core/init/utils/get_loaded_reference.js +2 -1
  74. package/dist/_esm5.processed/core/init/utils/initial_seek_and_play.js +9 -5
  75. package/dist/_esm5.processed/core/init/utils/initialize_content_decryption.js +2 -1
  76. package/dist/_esm5.processed/core/init/utils/media_source_duration_updater.d.ts +58 -0
  77. package/dist/_esm5.processed/core/init/utils/{media_duration_updater.js → media_source_duration_updater.js} +87 -86
  78. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.d.ts +36 -2
  79. package/dist/_esm5.processed/core/init/utils/rebuffering_controller.js +83 -3
  80. package/dist/_esm5.processed/core/init/utils/stream_events_emitter/stream_events_emitter.js +6 -4
  81. package/dist/_esm5.processed/core/init/utils/throw_on_media_error.js +1 -1
  82. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.d.ts +18 -7
  83. package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +38 -50
  84. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +8 -0
  85. package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +16 -2
  86. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +8 -0
  87. package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +12 -0
  88. package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +11 -4
  89. package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
  90. package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +13 -9
  91. package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +30 -16
  92. package/dist/_esm5.processed/core/stream/adaptation/utils/create_representation_estimator.d.ts +47 -0
  93. package/dist/_esm5.processed/core/stream/adaptation/utils/create_representation_estimator.js +70 -0
  94. package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +41 -20
  95. package/dist/_esm5.processed/core/stream/period/period_stream.js +12 -11
  96. package/dist/_esm5.processed/core/stream/representation/representation_stream.js +37 -28
  97. package/dist/_esm5.processed/core/stream/representation/utils/append_segment_to_buffer.d.ts +4 -2
  98. package/dist/_esm5.processed/core/stream/representation/utils/append_segment_to_buffer.js +3 -3
  99. package/dist/_esm5.processed/core/stream/representation/utils/downloading_queue.js +16 -6
  100. package/dist/_esm5.processed/core/stream/representation/utils/push_init_segment.d.ts +3 -2
  101. package/dist/_esm5.processed/core/stream/representation/utils/push_init_segment.js +8 -8
  102. package/dist/_esm5.processed/core/stream/representation/utils/push_media_segment.d.ts +2 -2
  103. package/dist/_esm5.processed/core/stream/representation/utils/push_media_segment.js +2 -3
  104. package/dist/_esm5.processed/core/stream/utils/create_reload_request.js +1 -1
  105. package/dist/_esm5.processed/default_config.d.ts +41 -0
  106. package/dist/_esm5.processed/default_config.js +46 -2
  107. package/dist/_esm5.processed/errors/index.d.ts +2 -2
  108. package/dist/_esm5.processed/errors/media_error.d.ts +23 -1
  109. package/dist/_esm5.processed/errors/media_error.js +18 -5
  110. package/dist/_esm5.processed/experimental/features/debug_element.d.ts +8 -0
  111. package/dist/_esm5.processed/experimental/features/debug_element.js +10 -0
  112. package/dist/_esm5.processed/experimental/features/index.d.ts +1 -0
  113. package/dist/_esm5.processed/experimental/features/index.js +1 -0
  114. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_and_push_segment.d.ts +1 -1
  115. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_and_push_segment.js +8 -7
  116. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +7 -4
  117. package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +24 -12
  118. package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/index.js +0 -2
  119. package/dist/_esm5.processed/features/features_object.js +1 -0
  120. package/dist/_esm5.processed/features/initialize_features.js +13 -10
  121. package/dist/_esm5.processed/features/types.d.ts +3 -0
  122. package/dist/_esm5.processed/manifest/adaptation.d.ts +21 -2
  123. package/dist/_esm5.processed/manifest/adaptation.js +80 -1
  124. package/dist/_esm5.processed/manifest/manifest.js +2 -0
  125. package/dist/_esm5.processed/manifest/period.js +2 -2
  126. package/dist/_esm5.processed/manifest/representation.d.ts +33 -2
  127. package/dist/_esm5.processed/manifest/representation.js +32 -4
  128. package/dist/_esm5.processed/manifest/utils.js +1 -3
  129. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +105 -137
  130. package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +25 -5
  131. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.d.ts +1 -1
  132. package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.js +1 -1
  133. package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -0
  134. package/dist/_esm5.processed/public_types.d.ts +13 -3
  135. package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +1 -1
  136. package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +15 -11
  137. package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.js +2 -2
  138. package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
  139. package/dist/_esm5.processed/transports/dash/segment_loader.js +4 -4
  140. package/dist/_esm5.processed/transports/local/segment_loader.js +13 -26
  141. package/dist/_esm5.processed/transports/smooth/isobmff/create_boxes.d.ts +4 -6
  142. package/dist/_esm5.processed/transports/smooth/isobmff/create_boxes.js +4 -6
  143. package/dist/_esm5.processed/transports/smooth/segment_loader.js +4 -4
  144. package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
  145. package/dist/_esm5.processed/utils/cancellable_sleep.js +4 -10
  146. package/dist/_esm5.processed/utils/create_cancellable_promise.d.ts +26 -0
  147. package/dist/_esm5.processed/utils/create_cancellable_promise.js +52 -0
  148. package/dist/_esm5.processed/utils/is_null_or_undefined.d.ts +1 -1
  149. package/dist/_esm5.processed/utils/is_null_or_undefined.js +1 -1
  150. package/dist/_esm5.processed/utils/reference.js +6 -0
  151. package/dist/_esm5.processed/utils/request/xhr.js +1 -1
  152. package/dist/_esm5.processed/utils/task_canceller.d.ts +34 -15
  153. package/dist/_esm5.processed/utils/task_canceller.js +55 -22
  154. package/dist/mpd-parser.wasm +0 -0
  155. package/dist/rx-player.js +5424 -4712
  156. package/dist/rx-player.min.js +1 -1
  157. package/jest.config.js +1 -5
  158. package/package.json +44 -40
  159. package/scripts/build/constants.d.ts +1 -0
  160. package/scripts/build/generate_build.js +1 -1
  161. package/scripts/fast_demo_build.js +40 -40
  162. package/scripts/generate_full_demo.js +1 -1
  163. package/sonar-project.properties +1 -1
  164. package/src/compat/browser_detection.ts +105 -52
  165. package/src/compat/can_reuse_media_keys.ts +5 -2
  166. package/src/compat/eme/close_session.ts +2 -2
  167. package/src/compat/eme/load_session.ts +1 -1
  168. package/src/compat/event_listeners.ts +1 -1
  169. package/src/compat/has_issues_with_high_media_source_duration.ts +27 -0
  170. package/src/core/adaptive/__tests__/buffer_based_chooser.test.ts +147 -48
  171. package/src/core/adaptive/adaptive_representation_selector.ts +11 -6
  172. package/src/core/adaptive/buffer_based_chooser.ts +144 -26
  173. package/src/core/adaptive/guess_based_chooser.ts +9 -8
  174. package/src/core/adaptive/network_analyzer.ts +9 -4
  175. package/src/core/adaptive/utils/representation_score_calculator.ts +22 -2
  176. package/src/core/api/debug/buffer_graph.ts +247 -0
  177. package/src/core/api/debug/buffer_size_graph.ts +130 -0
  178. package/src/core/api/debug/constants.ts +2 -0
  179. package/src/core/api/debug/index.ts +3 -0
  180. package/src/core/api/debug/modules/general_info.ts +184 -0
  181. package/src/core/api/debug/modules/segment_buffer_content.ts +155 -0
  182. package/src/core/api/debug/modules/segment_buffer_size.ts +48 -0
  183. package/src/core/api/debug/render.ts +40 -0
  184. package/src/core/api/debug/utils.ts +103 -0
  185. package/src/core/api/playback_observer.ts +5 -2
  186. package/src/core/api/public_api.ts +334 -73
  187. package/src/core/api/track_management/media_element_tracks_store.ts +17 -8
  188. package/src/core/api/track_management/track_dispatcher.ts +37 -14
  189. package/src/core/api/track_management/tracks_store.ts +77 -167
  190. package/src/core/api/utils.ts +29 -3
  191. package/src/core/decrypt/__tests__/__global__/utils.ts +61 -40
  192. package/src/core/decrypt/attach_media_keys.ts +1 -1
  193. package/src/core/decrypt/content_decryptor.ts +1 -1
  194. package/src/core/decrypt/find_key_system.ts +25 -11
  195. package/src/core/decrypt/session_events_listener.ts +45 -39
  196. package/src/core/decrypt/utils/check_key_statuses.ts +6 -0
  197. package/src/core/decrypt/utils/clean_old_loaded_sessions.ts +2 -1
  198. package/src/core/decrypt/utils/loaded_sessions_store.ts +8 -1
  199. package/src/core/fetchers/cdn_prioritizer.ts +18 -9
  200. package/src/core/fetchers/manifest/manifest_fetcher.ts +5 -4
  201. package/src/core/fetchers/segment/segment_fetcher.ts +36 -14
  202. package/src/core/fetchers/segment/task_prioritizer.ts +25 -30
  203. package/src/core/fetchers/utils/schedule_request.ts +18 -7
  204. package/src/core/init/directfile_content_initializer.ts +2 -1
  205. package/src/core/init/media_source_content_initializer.ts +89 -50
  206. package/src/core/init/types.ts +9 -1
  207. package/src/core/init/utils/content_time_boundaries_observer.ts +48 -12
  208. package/src/core/init/utils/create_media_source.ts +4 -16
  209. package/src/core/init/utils/end_of_stream.ts +6 -3
  210. package/src/core/init/utils/get_loaded_reference.ts +2 -1
  211. package/src/core/init/utils/initial_seek_and_play.ts +9 -5
  212. package/src/core/init/utils/initialize_content_decryption.ts +2 -1
  213. package/src/core/init/utils/{media_duration_updater.ts → media_source_duration_updater.ts} +103 -110
  214. package/src/core/init/utils/rebuffering_controller.ts +115 -4
  215. package/src/core/init/utils/stream_events_emitter/stream_events_emitter.ts +6 -4
  216. package/src/core/init/utils/throw_on_media_error.ts +1 -1
  217. package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +63 -66
  218. package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +20 -2
  219. package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +16 -0
  220. package/src/core/segment_buffers/implementations/types.ts +16 -4
  221. package/src/core/segment_buffers/index.ts +2 -0
  222. package/src/core/segment_buffers/segment_buffers_store.ts +16 -13
  223. package/src/core/stream/adaptation/adaptation_stream.ts +33 -19
  224. package/src/core/stream/adaptation/utils/create_representation_estimator.ts +114 -0
  225. package/src/core/stream/orchestrator/stream_orchestrator.ts +42 -20
  226. package/src/core/stream/period/period_stream.ts +13 -11
  227. package/src/core/stream/representation/representation_stream.ts +49 -37
  228. package/src/core/stream/representation/utils/append_segment_to_buffer.ts +9 -4
  229. package/src/core/stream/representation/utils/downloading_queue.ts +16 -4
  230. package/src/core/stream/representation/utils/push_init_segment.ts +11 -6
  231. package/src/core/stream/representation/utils/push_media_segment.ts +3 -3
  232. package/src/core/stream/utils/create_reload_request.ts +1 -1
  233. package/src/default_config.ts +59 -11
  234. package/src/errors/__tests__/media_error.test.ts +6 -6
  235. package/src/errors/index.ts +4 -1
  236. package/src/errors/media_error.ts +67 -1
  237. package/src/experimental/features/__tests__/debug_element.test.ts +26 -0
  238. package/src/experimental/features/debug_element.ts +13 -0
  239. package/src/experimental/features/index.ts +1 -0
  240. package/src/experimental/tools/VideoThumbnailLoader/load_and_push_segment.ts +10 -7
  241. package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +7 -4
  242. package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +25 -10
  243. package/src/experimental/tools/mediaCapabilitiesProber/index.ts +0 -4
  244. package/src/features/__tests__/initialize_features.test.ts +11 -0
  245. package/src/features/features_object.ts +1 -0
  246. package/src/features/initialize_features.ts +15 -10
  247. package/src/features/types.ts +9 -0
  248. package/src/manifest/__tests__/manifest.test.ts +7 -7
  249. package/src/manifest/__tests__/period.test.ts +90 -45
  250. package/src/manifest/adaptation.ts +96 -1
  251. package/src/manifest/manifest.ts +4 -0
  252. package/src/manifest/period.ts +4 -2
  253. package/src/manifest/representation.ts +77 -5
  254. package/src/manifest/utils.ts +1 -3
  255. package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +116 -151
  256. package/src/parsers/manifest/dash/common/parse_representations.ts +21 -4
  257. package/src/parsers/manifest/dash/js-parser/parse_from_document.ts +1 -1
  258. package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +1 -0
  259. package/src/parsers/texttracks/ttml/parse_ttml.ts +1 -1
  260. package/src/public_types.ts +16 -1
  261. package/src/tools/TextTrackRenderer/text_track_renderer.ts +1 -1
  262. package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +31 -22
  263. package/src/transports/dash/low_latency_segment_loader.ts +2 -2
  264. package/src/transports/dash/manifest_parser.ts +1 -1
  265. package/src/transports/dash/segment_loader.ts +4 -4
  266. package/src/transports/local/segment_loader.ts +14 -30
  267. package/src/transports/smooth/isobmff/create_boxes.ts +4 -6
  268. package/src/transports/smooth/segment_loader.ts +4 -4
  269. package/src/transports/utils/call_custom_manifest_loader.ts +3 -3
  270. package/src/typings/globals.d.ts +21 -19
  271. package/src/utils/cancellable_sleep.ts +5 -14
  272. package/src/utils/create_cancellable_promise.ts +69 -0
  273. package/src/utils/is_null_or_undefined.ts +1 -1
  274. package/src/utils/reference.ts +6 -0
  275. package/src/utils/request/xhr.ts +1 -1
  276. package/src/utils/task_canceller.ts +63 -34
  277. package/tsconfig.json +1 -1
  278. package/tsconfig.modules.json +1 -1
  279. package/dist/_esm5.processed/core/init/utils/media_duration_updater.d.ts +0 -56
  280. package/locked_reps.js +0 -46
  281. package/scripts/doc-generator/construct_table_of_contents.js +0 -76
  282. package/scripts/doc-generator/convert_MD_to_HMTL.js +0 -26
  283. package/scripts/doc-generator/create_documentation.js +0 -331
  284. package/scripts/doc-generator/create_documentation_page.js +0 -209
  285. package/scripts/doc-generator/create_page.js +0 -210
  286. package/scripts/doc-generator/generate_header_html.js +0 -147
  287. package/scripts/doc-generator/generate_page_html.js +0 -115
  288. package/scripts/doc-generator/generate_page_list_html.js +0 -92
  289. package/scripts/doc-generator/generate_sidebar_html.js +0 -85
  290. package/scripts/doc-generator/get_search_data_for_content.js +0 -137
  291. package/scripts/doc-generator/index.js +0 -34
  292. package/scripts/doc-generator/parse_doc_configs.js +0 -327
  293. package/scripts/doc-generator/scripts/lunr.js +0 -10
  294. package/scripts/doc-generator/scripts/script.js +0 -451
  295. package/scripts/doc-generator/styles/code.css +0 -99
  296. package/scripts/doc-generator/styles/style.css +0 -835
  297. package/scripts/doc-generator/utils.js +0 -74
@@ -0,0 +1,3 @@
1
+ import { CancellationSignal } from "../../../../utils/task_canceller";
2
+ import RxPlayer from "../../public_api";
3
+ export default function constructDebugGeneralInfo(instance: RxPlayer, parentElt: HTMLElement, cancelSignal: CancellationSignal): HTMLElement;
@@ -0,0 +1,180 @@
1
+ import { DEFAULT_REFRESH_INTERVAL } from "../constants";
2
+ import { createCompositeElement, createElement, createMetricTitle, isExtendedMode, } from "../utils";
3
+ export default function constructDebugGeneralInfo(instance, parentElt, cancelSignal) {
4
+ var generalInfoElt = createElement("div");
5
+ var adaptationsElt = createElement("div");
6
+ var representationsElt = createElement("div");
7
+ updateGeneralInfo();
8
+ var generalInfoItv = setInterval(function () {
9
+ updateGeneralInfo();
10
+ }, DEFAULT_REFRESH_INTERVAL);
11
+ cancelSignal.register(function () {
12
+ clearInterval(generalInfoItv);
13
+ });
14
+ return createCompositeElement("div", [
15
+ generalInfoElt,
16
+ adaptationsElt,
17
+ representationsElt,
18
+ ]);
19
+ function updateGeneralInfo() {
20
+ var _a, _b, _c, _d, _e;
21
+ var videoElement = instance.getVideoElement();
22
+ if (videoElement === null) {
23
+ // disposed player. Clean-up everything
24
+ generalInfoElt.innerHTML = "";
25
+ adaptationsElt.innerHTML = "";
26
+ representationsElt.innerHTML = "";
27
+ clearInterval(generalInfoItv);
28
+ return;
29
+ }
30
+ else {
31
+ var currentTime = instance.getPosition();
32
+ var bufferGap = instance.getCurrentBufferGap();
33
+ var bufferGapStr = bufferGap === Infinity ? "0" : bufferGap.toFixed(2);
34
+ var valuesLine1 = [
35
+ ["ct", currentTime.toFixed(2)],
36
+ ["bg", bufferGapStr],
37
+ ["rs", String(videoElement.readyState)],
38
+ ["pr", String(videoElement.playbackRate)],
39
+ ["sp", String(instance.getPlaybackRate())],
40
+ ["pa", String(videoElement.paused ? 1 : 0)],
41
+ ["en", String(videoElement.ended ? 1 : 0)],
42
+ ["li", String(instance.isLive() ? 1 : 0)],
43
+ ["wba", String(instance.getWantedBufferAhead())],
44
+ ["st", "\"".concat(instance.getPlayerState(), "\"")],
45
+ ];
46
+ var valuesLine2 = [];
47
+ var ks = instance.getKeySystemConfiguration();
48
+ if (ks !== null) {
49
+ valuesLine2.push(["ks", ks.keySystem]);
50
+ }
51
+ var mbb = instance.getMaxBufferBehind();
52
+ if (mbb !== Infinity) {
53
+ valuesLine2.push(["mbb", String(mbb)]);
54
+ }
55
+ var mba = instance.getMaxBufferAhead();
56
+ if (mba !== Infinity) {
57
+ valuesLine2.push(["mba", String(mba)]);
58
+ }
59
+ var mbs = instance.getMaxVideoBufferSize();
60
+ if (mbs !== Infinity) {
61
+ valuesLine2.push(["mbs", String(mbs)]);
62
+ }
63
+ var minPos = instance.getMinimumPosition();
64
+ if (minPos !== null) {
65
+ valuesLine1.push(["mip", minPos.toFixed(2)]);
66
+ valuesLine2.push(["dmi", (currentTime - minPos).toFixed(2)]);
67
+ }
68
+ var maxPos = instance.getMaximumPosition();
69
+ if (maxPos !== null) {
70
+ valuesLine1.push(["map", maxPos.toFixed(2)]);
71
+ valuesLine2.push(["dma", (maxPos - currentTime).toFixed(2)]);
72
+ }
73
+ var valuesLine3 = [];
74
+ var error = instance.getError();
75
+ if (error !== null) {
76
+ valuesLine3.push(["er", "\"".concat(String(error), "\"")]);
77
+ }
78
+ generalInfoElt.innerHTML = "";
79
+ for (var _i = 0, _f = [valuesLine1, valuesLine2, valuesLine3]; _i < _f.length; _i++) {
80
+ var valueSet = _f[_i];
81
+ if (valueSet.length > 0) {
82
+ var lineInfoElt = createElement("div");
83
+ for (var _g = 0, valueSet_1 = valueSet; _g < valueSet_1.length; _g++) {
84
+ var value = valueSet_1[_g];
85
+ lineInfoElt.appendChild(createMetricTitle(value[0]));
86
+ lineInfoElt.appendChild(createElement("span", {
87
+ textContent: value[1] + " ",
88
+ }));
89
+ }
90
+ generalInfoElt.appendChild(lineInfoElt);
91
+ }
92
+ }
93
+ if (isExtendedMode(parentElt)) {
94
+ var url = (_a = instance.getContentUrls()) === null || _a === void 0 ? void 0 : _a[0];
95
+ if (url !== undefined) {
96
+ var reducedUrl = url.length > 100 ?
97
+ url.substring(0, 99) + "…" :
98
+ url;
99
+ generalInfoElt.appendChild(createCompositeElement("div", [
100
+ createMetricTitle("url"),
101
+ createElement("span", {
102
+ textContent: reducedUrl,
103
+ }),
104
+ ]));
105
+ }
106
+ }
107
+ }
108
+ if (isExtendedMode(parentElt)) {
109
+ var videoId = instance.getAvailableVideoTracks().map(function (_a) {
110
+ var id = _a.id, active = _a.active;
111
+ return active ? "*".concat(id) : id;
112
+ });
113
+ var audioId = instance.getAvailableAudioTracks().map(function (_a) {
114
+ var id = _a.id, active = _a.active;
115
+ return active ? "*".concat(id) : id;
116
+ });
117
+ var textId = instance.getAvailableTextTracks().map(function (_a) {
118
+ var id = _a.id, active = _a.active;
119
+ return active ? "*".concat(id) : id;
120
+ });
121
+ adaptationsElt.innerHTML = "";
122
+ if (videoId.length > 0) {
123
+ var textContent = "".concat(videoId.length, ":").concat(videoId.join(" "), " ");
124
+ if (textContent.length > 100) {
125
+ textContent = textContent.substring(0, 98) + "… ";
126
+ }
127
+ var videoAdaps = createCompositeElement("div", [
128
+ createMetricTitle("vt"),
129
+ createElement("span", { textContent: textContent }),
130
+ ]);
131
+ adaptationsElt.appendChild(videoAdaps);
132
+ }
133
+ if (audioId.length > 0) {
134
+ var textContent = "".concat(audioId.length, ":").concat(audioId.join(" "), " ");
135
+ if (textContent.length > 100) {
136
+ textContent = textContent.substring(0, 98) + "… ";
137
+ }
138
+ var audioAdaps = createCompositeElement("div", [
139
+ createMetricTitle("at"),
140
+ createElement("span", { textContent: textContent }),
141
+ ]);
142
+ adaptationsElt.appendChild(audioAdaps);
143
+ }
144
+ if (textId.length > 0) {
145
+ var textContent = "".concat(textId.length, ":").concat(textId.join(" "), " ");
146
+ if (textContent.length > 100) {
147
+ textContent = textContent.substring(0, 98) + "… ";
148
+ }
149
+ var textAdaps = createCompositeElement("div", [
150
+ createMetricTitle("tt"),
151
+ createElement("span", { textContent: textContent }),
152
+ ]);
153
+ adaptationsElt.appendChild(textAdaps);
154
+ }
155
+ var videoBitrates = (_c = (_b = instance.getVideoTrack()) === null || _b === void 0 ? void 0 : _b.representations.map(function (r) {
156
+ return r.bitrate;
157
+ }).filter(function (bitrate) { return bitrate !== undefined; })) !== null && _c !== void 0 ? _c : [];
158
+ var audioBitrates = (_e = (_d = instance.getAudioTrack()) === null || _d === void 0 ? void 0 : _d.representations.map(function (r) {
159
+ return r.bitrate;
160
+ }).filter(function (bitrate) { return bitrate !== undefined; })) !== null && _e !== void 0 ? _e : [];
161
+ representationsElt.innerHTML = "";
162
+ if (videoBitrates.length > 0) {
163
+ representationsElt.appendChild(createMetricTitle("vb"));
164
+ representationsElt.appendChild(createElement("span", {
165
+ textContent: videoBitrates.join(" ") + " ",
166
+ }));
167
+ }
168
+ if (audioBitrates.length > 0) {
169
+ representationsElt.appendChild(createMetricTitle("ab"));
170
+ representationsElt.appendChild(createElement("span", {
171
+ textContent: audioBitrates.join(" ") + " ",
172
+ }));
173
+ }
174
+ }
175
+ else {
176
+ adaptationsElt.innerHTML = "";
177
+ representationsElt.innerHTML = "";
178
+ }
179
+ }
180
+ }
@@ -0,0 +1,4 @@
1
+ import { CancellationSignal } from "../../../../utils/task_canceller";
2
+ import { IBufferType } from "../../../segment_buffers";
3
+ import RxPlayer from "../../public_api";
4
+ export default function createSegmentBufferGraph(instance: RxPlayer, bufferType: IBufferType, title: string, parentElt: HTMLElement, cancelSignal: CancellationSignal): HTMLElement;
@@ -0,0 +1,121 @@
1
+ import isNullOrUndefined from "../../../../utils/is_null_or_undefined";
2
+ import SegmentBufferGraph from "../buffer_graph";
3
+ import { DEFAULT_REFRESH_INTERVAL } from "../constants";
4
+ import { createElement, createGraphCanvas, createMetricTitle, isExtendedMode, } from "../utils";
5
+ export default function createSegmentBufferGraph(instance, bufferType, title, parentElt, cancelSignal) {
6
+ var bufferGraphWrapper = createElement("div");
7
+ var bufferTitle = createMetricTitle(title);
8
+ var canvasElt = createGraphCanvas();
9
+ var currentRangeRepInfoElt = createElement("div");
10
+ var loadingRangeRepInfoElt = createElement("div");
11
+ var bufferGraph = new SegmentBufferGraph(canvasElt);
12
+ var intervalId = setInterval(update, DEFAULT_REFRESH_INTERVAL);
13
+ cancelSignal.register(function () {
14
+ clearInterval(intervalId);
15
+ });
16
+ bufferGraphWrapper.appendChild(bufferTitle);
17
+ bufferGraphWrapper.appendChild(canvasElt);
18
+ bufferGraphWrapper.appendChild(currentRangeRepInfoElt);
19
+ bufferGraphWrapper.appendChild(loadingRangeRepInfoElt);
20
+ bufferGraphWrapper.style.padding = "5px 0px";
21
+ update();
22
+ return bufferGraphWrapper;
23
+ function update() {
24
+ var _a, _b, _c, _d;
25
+ if (instance.getVideoElement() === null) {
26
+ // disposed player. Clean-up everything
27
+ bufferGraphWrapper.style.display = "none";
28
+ bufferGraphWrapper.innerHTML = "";
29
+ clearInterval(intervalId);
30
+ return;
31
+ }
32
+ var showAllInfo = isExtendedMode(parentElt);
33
+ var inventory = instance.__priv_getSegmentBufferContent(bufferType);
34
+ if (inventory === null) {
35
+ bufferGraphWrapper.style.display = "none";
36
+ currentRangeRepInfoElt.innerHTML = "";
37
+ loadingRangeRepInfoElt.innerHTML = "";
38
+ }
39
+ else {
40
+ bufferGraphWrapper.style.display = "block";
41
+ var currentTime = instance.getPosition();
42
+ var width = Math.min(parentElt.clientWidth - 150, 600);
43
+ bufferGraph.update({
44
+ currentTime: currentTime,
45
+ minimumPosition: (_a = instance.getMinimumPosition()) !== null && _a !== void 0 ? _a : undefined,
46
+ maximumPosition: (_b = instance.getMaximumPosition()) !== null && _b !== void 0 ? _b : undefined,
47
+ inventory: inventory,
48
+ width: width,
49
+ height: 10,
50
+ });
51
+ if (!showAllInfo) {
52
+ currentRangeRepInfoElt.innerHTML = "";
53
+ loadingRangeRepInfoElt.innerHTML = "";
54
+ return;
55
+ }
56
+ currentRangeRepInfoElt.innerHTML = "";
57
+ for (var i = 0; i < inventory.length; i++) {
58
+ var rangeInfo = inventory[i];
59
+ var bufferedStart = rangeInfo.bufferedStart, bufferedEnd = rangeInfo.bufferedEnd, infos = rangeInfo.infos;
60
+ if (bufferedStart !== undefined && bufferedEnd !== undefined &&
61
+ currentTime >= bufferedStart && currentTime < bufferedEnd) {
62
+ currentRangeRepInfoElt.appendChild(createMetricTitle("play"));
63
+ currentRangeRepInfoElt.appendChild(createElement("span", {
64
+ textContent: constructRepresentationInfo(infos),
65
+ }));
66
+ break;
67
+ }
68
+ }
69
+ loadingRangeRepInfoElt.innerHTML = "";
70
+ var rep = (_c = instance.__priv_getCurrentRepresentations()) === null || _c === void 0 ? void 0 : _c[bufferType];
71
+ var adap = (_d = instance.__priv_getCurrentAdaptation()) === null || _d === void 0 ? void 0 : _d[bufferType];
72
+ var manifest = instance.__priv_getManifest();
73
+ if (manifest !== null && !isNullOrUndefined(rep) && !isNullOrUndefined(adap)) {
74
+ var period = manifest.getPeriodForTime(currentTime);
75
+ if (period !== undefined) {
76
+ loadingRangeRepInfoElt.appendChild(createMetricTitle("load"));
77
+ loadingRangeRepInfoElt.appendChild(createElement("span", {
78
+ textContent: constructRepresentationInfo({
79
+ period: period,
80
+ adaptation: adap,
81
+ representation: rep,
82
+ }),
83
+ }));
84
+ }
85
+ }
86
+ }
87
+ }
88
+ }
89
+ function constructRepresentationInfo(content) {
90
+ var _a;
91
+ var period = content.period;
92
+ var _b = content.adaptation, language = _b.language, isAudioDescription = _b.isAudioDescription, isClosedCaption = _b.isClosedCaption, isTrickModeTrack = _b.isTrickModeTrack, isSignInterpreted = _b.isSignInterpreted, bufferType = _b.type;
93
+ var _c = content.representation, id = _c.id, height = _c.height, width = _c.width, bitrate = _c.bitrate, codec = _c.codec;
94
+ var representationInfo = "\"".concat(id, "\" ");
95
+ if (height !== undefined && width !== undefined) {
96
+ representationInfo += "".concat(width, "x").concat(height, " ");
97
+ }
98
+ if (bitrate !== undefined) {
99
+ representationInfo += "(".concat((bitrate / 1000).toFixed(0), "kbps) ");
100
+ }
101
+ if (codec !== undefined) {
102
+ representationInfo += "c:\"".concat(codec, "\" ");
103
+ }
104
+ if (language !== undefined) {
105
+ representationInfo += "l:\"".concat(language, "\" ");
106
+ }
107
+ if (bufferType === "video" && typeof isSignInterpreted === "boolean") {
108
+ representationInfo += "si:".concat(isSignInterpreted ? 1 : 0, " ");
109
+ }
110
+ if (bufferType === "video" && typeof isTrickModeTrack === "boolean") {
111
+ representationInfo += "tm:".concat(isTrickModeTrack ? 1 : 0, " ");
112
+ }
113
+ if (bufferType === "audio" && typeof isAudioDescription === "boolean") {
114
+ representationInfo += "ad:".concat(isAudioDescription ? 1 : 0, " ");
115
+ }
116
+ if (bufferType === "text" && typeof isClosedCaption === "boolean") {
117
+ representationInfo += "cc:".concat(isClosedCaption ? 1 : 0, " ");
118
+ }
119
+ representationInfo += "p:".concat(period.start, "-").concat((_a = period.end) !== null && _a !== void 0 ? _a : "?");
120
+ return representationInfo;
121
+ }
@@ -0,0 +1,3 @@
1
+ import { CancellationSignal } from "../../../../utils/task_canceller";
2
+ import RxPlayer from "../../public_api";
3
+ export default function createSegmentBufferSizeGraph(instance: RxPlayer, parentElt: HTMLElement, cancelSignal: CancellationSignal): HTMLElement;
@@ -0,0 +1,35 @@
1
+ import BufferSizeGraph from "../buffer_size_graph";
2
+ import { DEFAULT_REFRESH_INTERVAL } from "../constants";
3
+ import { createElement, createGraphCanvas, createMetricTitle, } from "../utils";
4
+ export default function createSegmentBufferSizeGraph(instance, parentElt, cancelSignal) {
5
+ var bufferSizeGraphWrapperElt = createElement("div");
6
+ var bufferSizeTitle = createMetricTitle("bgap");
7
+ var canvasElt = createGraphCanvas();
8
+ var bufferSizeGraph = new BufferSizeGraph(canvasElt);
9
+ var intervalId = setInterval(addBufferSize, DEFAULT_REFRESH_INTERVAL);
10
+ cancelSignal.register(function () {
11
+ clearInterval(intervalId);
12
+ });
13
+ bufferSizeGraphWrapperElt.appendChild(bufferSizeTitle);
14
+ bufferSizeGraphWrapperElt.appendChild(canvasElt);
15
+ bufferSizeGraphWrapperElt.style.padding = "7px 0px";
16
+ addBufferSize();
17
+ return bufferSizeGraphWrapperElt;
18
+ function addBufferSize() {
19
+ if (instance.getVideoElement() === null) {
20
+ // disposed player. Clean-up everything
21
+ bufferSizeGraphWrapperElt.innerHTML = "";
22
+ clearInterval(intervalId);
23
+ return;
24
+ }
25
+ var bufferGap = instance.getCurrentBufferGap();
26
+ if (bufferGap === Infinity) {
27
+ bufferSizeGraph.pushBufferSize(0);
28
+ }
29
+ else {
30
+ bufferSizeGraph.pushBufferSize(bufferGap);
31
+ }
32
+ var width = Math.min(parentElt.clientWidth - 150, 600);
33
+ bufferSizeGraph.reRender(width, 10);
34
+ }
35
+ }
@@ -0,0 +1,3 @@
1
+ import { CancellationSignal } from "../../../utils/task_canceller";
2
+ import RxPlayer from "../public_api";
3
+ export default function renderDebugElement(parentElt: HTMLElement, instance: RxPlayer, cancelSignal: CancellationSignal): void;
@@ -0,0 +1,32 @@
1
+ import constructDebugGeneralInfo from "./modules/general_info";
2
+ import createSegmentBufferGraph from "./modules/segment_buffer_content";
3
+ import createSegmentBufferSizeGraph from "./modules/segment_buffer_size";
4
+ import { createCompositeElement, createElement } from "./utils";
5
+ export default function renderDebugElement(parentElt, instance, cancelSignal) {
6
+ var debugElementTitleElt = createElement("div", {
7
+ textContent: "RxPlayer Debug Information",
8
+ });
9
+ debugElementTitleElt.style.fontWeight = "bold";
10
+ debugElementTitleElt.style.borderBottom = "1px solid white";
11
+ debugElementTitleElt.style.marginBottom = "5px";
12
+ debugElementTitleElt.style.fontStyle = "italic";
13
+ var debugWrapperElt = createCompositeElement("div", [
14
+ debugElementTitleElt,
15
+ constructDebugGeneralInfo(instance, parentElt, cancelSignal),
16
+ createSegmentBufferGraph(instance, "video", "vbuf", parentElt, cancelSignal),
17
+ createSegmentBufferGraph(instance, "audio", "abuf", parentElt, cancelSignal),
18
+ createSegmentBufferGraph(instance, "text", "tbuf", parentElt, cancelSignal),
19
+ createSegmentBufferSizeGraph(instance, parentElt, cancelSignal),
20
+ ]);
21
+ debugWrapperElt.style.backgroundColor = "#00000099";
22
+ debugWrapperElt.style.padding = "7px";
23
+ debugWrapperElt.style.fontSize = "13px";
24
+ debugWrapperElt.style.fontFamily = "mono, monospace";
25
+ debugWrapperElt.style.color = "white";
26
+ debugWrapperElt.style.display = "inline-block";
27
+ debugWrapperElt.style.bottom = "0px";
28
+ parentElt.appendChild(debugWrapperElt);
29
+ cancelSignal.register(function () {
30
+ parentElt.removeChild(debugWrapperElt);
31
+ });
32
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Create an HTML element.
3
+ * @param {string} elementName - The element's name, like `"div"` for example.
4
+ * @param {Object} [options={}] - Optional attributes for the element.
5
+ * @param {string} [options.textContent] - Inner text for that element.
6
+ * @param {string} [options.className] - Value for a `class` attribute
7
+ * associated to this element.
8
+ * @param {string} [options.href] - Value for a `href` attribute
9
+ * associated to this element.
10
+ * @returns {HTMLElement}
11
+ */
12
+ export declare function createElement(elementName: "input", opts?: CreateElementOptions | undefined): HTMLInputElement;
13
+ export declare function createElement(elementName: "button", opts?: CreateElementOptions | undefined): HTMLButtonElement;
14
+ export declare function createElement(elementName: "a", opts?: CreateElementOptions | undefined): HTMLLinkElement;
15
+ export declare function createElement(elementName: "canvas", opts?: CreateElementOptions | undefined): HTMLCanvasElement;
16
+ export declare function createElement(elementName: string, opts?: CreateElementOptions | undefined): HTMLElement;
17
+ interface CreateElementOptions {
18
+ textContent?: string | undefined;
19
+ className?: string | undefined;
20
+ }
21
+ /**
22
+ * Create an HTML element which may contain mutiple HTML sub-elements.
23
+ * @param {string} rootElementName - The element's name, like `"div"` for
24
+ * example.
25
+ * @param {Array.<string|HTMLElement>} parts - The HTML sub-elements, in order.
26
+ * Those can also just be strings, in which case only text nodes (and no actual
27
+ * HTMLElement) will be added at this place.
28
+ * @param {Object} [options={}] - Optional attributes for the element.
29
+ * @param {string} [options.className] - Value for a `class` attribute
30
+ * associated to this element.
31
+ * @returns {HTMLElement}
32
+ */
33
+ export declare function createCompositeElement(rootElementName: string, parts: Array<HTMLElement | string>, { className }?: {
34
+ className?: string;
35
+ } | undefined): HTMLElement;
36
+ export declare function isExtendedMode(parentElt: HTMLElement): boolean;
37
+ export declare function createMetricTitle(title: string): HTMLElement;
38
+ export declare function createGraphCanvas(): HTMLCanvasElement;
39
+ export {};
@@ -0,0 +1,57 @@
1
+ export function createElement(elementName, _a) {
2
+ var _b = _a === void 0 ? {} : _a, textContent = _b.textContent, className = _b.className;
3
+ var elt = document.createElement(elementName);
4
+ if (className !== undefined) {
5
+ elt.className = className;
6
+ }
7
+ if (textContent !== undefined) {
8
+ elt.textContent = textContent;
9
+ }
10
+ return elt;
11
+ }
12
+ /**
13
+ * Create an HTML element which may contain mutiple HTML sub-elements.
14
+ * @param {string} rootElementName - The element's name, like `"div"` for
15
+ * example.
16
+ * @param {Array.<string|HTMLElement>} parts - The HTML sub-elements, in order.
17
+ * Those can also just be strings, in which case only text nodes (and no actual
18
+ * HTMLElement) will be added at this place.
19
+ * @param {Object} [options={}] - Optional attributes for the element.
20
+ * @param {string} [options.className] - Value for a `class` attribute
21
+ * associated to this element.
22
+ * @returns {HTMLElement}
23
+ */
24
+ export function createCompositeElement(rootElementName, parts, _a) {
25
+ var _b = _a === void 0 ? {} : _a, className = _b.className;
26
+ var elt = document.createElement(rootElementName);
27
+ if (className !== undefined) {
28
+ elt.className = className;
29
+ }
30
+ for (var _i = 0, parts_1 = parts; _i < parts_1.length; _i++) {
31
+ var subElt = parts_1[_i];
32
+ if (typeof subElt === "string") {
33
+ elt.appendChild(document.createTextNode(subElt));
34
+ }
35
+ else {
36
+ elt.appendChild(subElt);
37
+ }
38
+ }
39
+ return elt;
40
+ }
41
+ export function isExtendedMode(parentElt) {
42
+ return parentElt.clientHeight > 400;
43
+ }
44
+ export function createMetricTitle(title) {
45
+ var elt = createElement("span", {
46
+ textContent: title + "/",
47
+ });
48
+ elt.style.fontWeight = "bold";
49
+ return elt;
50
+ }
51
+ export function createGraphCanvas() {
52
+ var canvasElt = createElement("canvas");
53
+ canvasElt.style.border = "1px solid white";
54
+ canvasElt.style.height = "15px";
55
+ canvasElt.style.marginLeft = "2px";
56
+ return canvasElt;
57
+ }
@@ -114,6 +114,7 @@ var PlaybackObserver = /** @class */ (function () {
114
114
  */
115
115
  PlaybackObserver.prototype.setCurrentTime = function (time) {
116
116
  this._internalSeeksIncoming.push(time);
117
+ log.info("API: Seeking internally", time);
117
118
  this._mediaElement.currentTime = time;
118
119
  };
119
120
  /**
@@ -154,7 +155,7 @@ var PlaybackObserver = /** @class */ (function () {
154
155
  */
155
156
  PlaybackObserver.prototype.listen = function (cb, options) {
156
157
  var _a;
157
- if (this._canceller.isUsed || ((_a = options === null || options === void 0 ? void 0 : options.clearSignal) === null || _a === void 0 ? void 0 : _a.isCancelled) === true) {
158
+ if (this._canceller.isUsed() || ((_a = options === null || options === void 0 ? void 0 : options.clearSignal) === null || _a === void 0 ? void 0 : _a.isCancelled()) === true) {
158
159
  return noop;
159
160
  }
160
161
  this._observationRef.onUpdate(cb, {
@@ -565,7 +566,8 @@ function generateReadOnlyObserver(src, transform, cancellationSignal) {
565
566
  },
566
567
  listen: function (cb, options) {
567
568
  var _a;
568
- if (cancellationSignal.isCancelled || ((_a = options === null || options === void 0 ? void 0 : options.clearSignal) === null || _a === void 0 ? void 0 : _a.isCancelled) === true) {
569
+ if (cancellationSignal.isCancelled() ||
570
+ ((_a = options === null || options === void 0 ? void 0 : options.clearSignal) === null || _a === void 0 ? void 0 : _a.isCancelled()) === true) {
569
571
  return;
570
572
  }
571
573
  mappedRef.onUpdate(cb, {
@@ -14,8 +14,8 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { IErrorCode, IErrorType } from "../../errors";
17
- import Manifest from "../../manifest";
18
- import { IAudioRepresentation, IAudioTrack, IAudioTrackSetting, IAvailableAudioTrack, IAvailableTextTrack, IAvailableVideoTrack, IBrokenRepresentationsLockContext, IConstructorOptions, IKeySystemConfigurationOutput, ILoadVideoOptions, ILockedAudioRepresentationsSettings, ILockedVideoRepresentationsSettings, ITrackUpdateEventPayload, IPeriod, IPeriodChangeEvent, IPlayerError, IPlayerState, IPositionUpdate, IStreamEvent, ITextTrack, IVideoRepresentation, ITextTrackSetting, IVideoTrack, IVideoTrackSetting } from "../../public_types";
17
+ import Manifest, { Adaptation, Representation } from "../../manifest";
18
+ import { IAudioRepresentation, IAudioTrack, IAudioTrackSetting, IAvailableAudioTrack, IAvailableTextTrack, IAvailableVideoTrack, IBrokenRepresentationsLockContext, IConstructorOptions, IKeySystemConfigurationOutput, ILoadVideoOptions, ILockedAudioRepresentationsSettings, ILockedVideoRepresentationsSettings, ITrackUpdateEventPayload, IRepresentationListUpdateContext, IPeriod, IPeriodChangeEvent, IPlayerError, IPlayerState, IPositionUpdate, IStreamEvent, ITextTrack, IVideoRepresentation, ITextTrackSetting, IVideoTrack, IVideoTrackSetting } from "../../public_types";
19
19
  import EventEmitter, { IListener } from "../../utils/event_emitter";
20
20
  import Logger from "../../utils/logger";
21
21
  import { IBufferedChunk, IBufferType } from "../segment_buffers";
@@ -95,6 +95,10 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
95
95
  * It should refer to the last content being played.
96
96
  */
97
97
  private _priv_reloadingMetadata;
98
+ /**
99
+ * Store last value of autoPlay, from the last load or reload.
100
+ */
101
+ private _priv_lastAutoPlay;
98
102
  /** All possible Error types emitted by the RxPlayer. */
99
103
  static get ErrorTypes(): Record<IErrorType, IErrorType>;
100
104
  /** All possible Error codes emitted by the RxPlayer. */
@@ -151,6 +155,9 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
151
155
  };
152
156
  autoPlay?: boolean;
153
157
  }): void;
158
+ createDebugElement(element: HTMLElement): {
159
+ dispose(): void;
160
+ };
154
161
  /**
155
162
  * From given options, initialize content playback.
156
163
  * @param {Object} options
@@ -175,6 +182,26 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
175
182
  * @returns {string} - The current Player's state
176
183
  */
177
184
  getPlayerState(): string;
185
+ /**
186
+ * Returns true if a content is loaded.
187
+ * @returns {Boolean} - `true` if a content is loaded, `false` otherwise.
188
+ */
189
+ isContentLoaded(): boolean;
190
+ /**
191
+ * Returns true if the player is buffering.
192
+ * @returns {Boolean} - `true` if the player is buffering, `false` otherwise.
193
+ */
194
+ isBuffering(): boolean;
195
+ /**
196
+ * Returns the play/pause status of the player :
197
+ * - when `LOADING` or `RELOADING`, returns the scheduled play/pause condition
198
+ * for when loading is over,
199
+ * - in other states, returns the `<video>` element .paused value,
200
+ * - if the player is disposed, returns `true`.
201
+ * @returns {Boolean} - `true` if the player is paused or will be after loading,
202
+ * `false` otherwise.
203
+ */
204
+ isPaused(): boolean;
178
205
  /**
179
206
  * Returns true if both:
180
207
  * - a content is loaded
@@ -247,6 +274,12 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
247
274
  * @returns {Number}
248
275
  */
249
276
  getPosition(): number;
277
+ /**
278
+ * Returns the last stored content position, in seconds.
279
+ *
280
+ * @returns {number|undefined}
281
+ */
282
+ getLastStoredContentPosition(): number | undefined;
250
283
  /**
251
284
  * Returns the current playback rate at which the video plays.
252
285
  * @returns {Number}
@@ -539,6 +572,8 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
539
572
  * @returns {Manifest|null} - The current Manifest (`null` when not known).
540
573
  */
541
574
  __priv_getManifest(): Manifest | null;
575
+ __priv_getCurrentAdaptation(): Partial<Record<IBufferType, Adaptation | null>> | null;
576
+ __priv_getCurrentRepresentations(): Partial<Record<IBufferType, Representation | null>> | null;
542
577
  /**
543
578
  * Reset all state properties relative to a playing content.
544
579
  */
@@ -613,7 +648,6 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
613
648
  * @param {Object} observation
614
649
  */
615
650
  private _priv_triggerPositionUpdate;
616
- private _priv_getCurrentRepresentations;
617
651
  /**
618
652
  * @param {string} evt
619
653
  * @param {*} arg
@@ -626,6 +660,26 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
626
660
  */
627
661
  private _priv_initializeMediaElementTracksStore;
628
662
  private _priv_callTracksStoreGetterSetter;
663
+ /**
664
+ * Method to call when some event lead to a high for possibility that the
665
+ * available tracks for the given type have changed.
666
+ * Send the corresponding `available*Tracks` change event with the last
667
+ * available tracks.
668
+ *
669
+ * @param {string} trackType
670
+ * @param {Object|undefined} [oPeriodRef] - optional period object used by the
671
+ * `tracksStore` API, allows to optimize the method by bypassing this step.
672
+ */
673
+ private _priv_onAvailableTracksMayHaveChanged;
674
+ /**
675
+ * Method to call when a fatal error lead to the stopping of the current
676
+ * content.
677
+ *
678
+ * @param {*} err - The error encountered.
679
+ * @param {Object} contentInfos - The `IPublicApiContentInfos` object linked
680
+ * to the content for which the error was received.
681
+ */
682
+ private _priv_onFatalError;
629
683
  }
630
684
  /** Every events sent by the RxPlayer's public API. */
631
685
  interface IPublicAPIEvent {
@@ -643,9 +697,12 @@ interface IPublicAPIEvent {
643
697
  availableAudioTracksChange: IAvailableAudioTrack[];
644
698
  availableTextTracksChange: IAvailableTextTrack[];
645
699
  availableVideoTracksChange: IAvailableVideoTrack[];
700
+ play: null;
701
+ pause: null;
646
702
  newAvailablePeriods: IPeriod[];
647
703
  brokenRepresentationsLock: IBrokenRepresentationsLockContext;
648
704
  trackUpdate: ITrackUpdateEventPayload;
705
+ representationListUpdate: IRepresentationListUpdateContext;
649
706
  seeking: null;
650
707
  seeked: null;
651
708
  streamEvent: IStreamEvent;