rx-player 4.0.0-dev.2023111400 → 4.0.0-dev.2023120600
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -227
- package/FILES.md +1 -1
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/add_text_track.d.ts +1 -3
- package/dist/_esm5.processed/compat/add_text_track.js +4 -7
- package/dist/_esm5.processed/compat/browser_compatibility_types.d.ts +0 -7
- package/dist/_esm5.processed/compat/event_listeners.d.ts +2 -15
- package/dist/_esm5.processed/compat/event_listeners.js +2 -37
- package/dist/_esm5.processed/compat/index.d.ts +1 -3
- package/dist/_esm5.processed/compat/index.js +1 -3
- package/dist/_esm5.processed/config.d.ts +9 -21
- package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.d.ts +0 -58
- package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +14 -54
- package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.d.ts +2 -8
- package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.js +2 -11
- package/dist/_esm5.processed/core/api/debug/buffer_graph.js +2 -6
- package/dist/_esm5.processed/core/api/debug/modules/general_info.js +13 -32
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +3 -3
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +1 -1
- package/dist/_esm5.processed/core/api/option_utils.d.ts +12 -35
- package/dist/_esm5.processed/core/api/option_utils.js +41 -230
- package/dist/_esm5.processed/core/api/public_api.d.ts +91 -266
- package/dist/_esm5.processed/core/api/public_api.js +439 -805
- package/dist/_esm5.processed/core/{segment_buffers/implementations/image → api/track_management}/index.d.ts +3 -2
- package/dist/_esm5.processed/core/{segment_buffers/implementations/image → api/track_management}/index.js +3 -2
- package/dist/_esm5.processed/core/api/{tracks_management/media_element_track_choice_manager.d.ts → track_management/media_element_tracks_store.d.ts} +15 -75
- package/dist/_esm5.processed/core/api/{tracks_management/media_element_track_choice_manager.js → track_management/media_element_tracks_store.js} +74 -193
- package/dist/_esm5.processed/core/api/track_management/track_dispatcher.d.ts +84 -0
- package/dist/_esm5.processed/core/api/track_management/track_dispatcher.js +158 -0
- package/dist/_esm5.processed/core/api/track_management/tracks_store.d.ts +406 -0
- package/dist/_esm5.processed/core/api/track_management/tracks_store.js +932 -0
- package/dist/_esm5.processed/core/api/utils.d.ts +1 -0
- package/dist/_esm5.processed/core/api/utils.js +28 -11
- package/dist/_esm5.processed/core/decrypt/content_decryptor.js +3 -3
- package/dist/_esm5.processed/core/decrypt/find_key_system.js +83 -71
- package/dist/_esm5.processed/core/decrypt/get_media_keys.js +6 -5
- package/dist/_esm5.processed/core/decrypt/session_events_listener.js +10 -72
- package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.d.ts +4 -4
- package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.js +6 -4
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +1 -3
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +7 -26
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +3 -9
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +16 -9
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -3
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
- package/dist/_esm5.processed/core/fetchers/utils/schedule_request.d.ts +1 -6
- package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +4 -41
- package/dist/_esm5.processed/core/init/directfile_content_initializer.js +1 -1
- package/dist/_esm5.processed/core/init/media_source_content_initializer.d.ts +1 -8
- package/dist/_esm5.processed/core/init/media_source_content_initializer.js +5 -19
- package/dist/_esm5.processed/core/init/types.d.ts +5 -15
- package/dist/_esm5.processed/core/init/utils/rebuffering_controller.d.ts +2 -36
- package/dist/_esm5.processed/core/init/utils/rebuffering_controller.js +2 -82
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +1 -2
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +2 -3
- package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +2 -2
- package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
- package/dist/_esm5.processed/core/segment_buffers/index.js +2 -1
- package/dist/_esm5.processed/core/segment_buffers/inventory/index.d.ts +1 -0
- package/dist/_esm5.processed/core/segment_buffers/inventory/index.js +1 -0
- package/dist/_esm5.processed/core/segment_buffers/inventory/utils.d.ts +33 -0
- package/dist/_esm5.processed/core/segment_buffers/inventory/utils.js +49 -0
- package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.d.ts +0 -1
- package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +2 -16
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +0 -15
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +183 -93
- package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.d.ts +39 -0
- package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.js +133 -0
- package/dist/_esm5.processed/core/stream/adaptation/types.d.ts +27 -13
- package/dist/_esm5.processed/core/stream/index.d.ts +2 -3
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +2 -0
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +5 -7
- package/dist/_esm5.processed/core/stream/period/period_stream.js +13 -12
- package/dist/_esm5.processed/core/stream/period/types.d.ts +5 -14
- package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +2 -4
- package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.js +10 -46
- package/dist/_esm5.processed/core/stream/representation/representation_stream.js +29 -23
- package/dist/_esm5.processed/core/stream/representation/types.d.ts +11 -1
- package/dist/_esm5.processed/default_config.d.ts +35 -98
- package/dist/_esm5.processed/default_config.js +36 -113
- package/dist/_esm5.processed/errors/custom_loader_error.d.ts +1 -3
- package/dist/_esm5.processed/errors/custom_loader_error.js +1 -3
- package/dist/_esm5.processed/errors/media_error.js +2 -2
- package/dist/_esm5.processed/errors/network_error.d.ts +0 -1
- package/dist/_esm5.processed/errors/network_error.js +0 -1
- package/dist/_esm5.processed/errors/request_error.d.ts +2 -3
- package/dist/_esm5.processed/errors/request_error.js +2 -5
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -3
- package/dist/_esm5.processed/features/features_object.js +0 -2
- package/dist/_esm5.processed/features/list/directfile.js +2 -5
- package/dist/_esm5.processed/features/list/index.d.ts +0 -2
- package/dist/_esm5.processed/features/list/index.js +0 -2
- package/dist/_esm5.processed/features/types.d.ts +3 -27
- package/dist/_esm5.processed/manifest/adaptation.d.ts +9 -11
- package/dist/_esm5.processed/manifest/adaptation.js +41 -30
- package/dist/_esm5.processed/manifest/index.d.ts +3 -4
- package/dist/_esm5.processed/manifest/manifest.d.ts +5 -54
- package/dist/_esm5.processed/manifest/manifest.js +5 -110
- package/dist/_esm5.processed/manifest/period.d.ts +4 -5
- package/dist/_esm5.processed/manifest/representation.d.ts +10 -5
- package/dist/_esm5.processed/manifest/representation.js +15 -5
- package/dist/_esm5.processed/manifest/representation_index/index.d.ts +2 -2
- package/dist/_esm5.processed/manifest/representation_index/static.d.ts +2 -0
- package/dist/_esm5.processed/manifest/representation_index/static.js +6 -0
- package/dist/_esm5.processed/manifest/representation_index/types.d.ts +42 -21
- package/dist/_esm5.processed/manifest/types.d.ts +0 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +17 -31
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +26 -19
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +2 -0
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +7 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +2 -6
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +11 -8
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +2 -0
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +6 -0
- package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.js +1 -6
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +3 -5
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +0 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +0 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +10 -6
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +4 -2
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.d.ts +10 -1
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +18 -2
- package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +4 -4
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +3 -6
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/local/representation_index.d.ts +2 -0
- package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +6 -0
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.js +6 -6
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.d.ts +12 -3
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.js +11 -2
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +0 -1
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +11 -17
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +21 -83
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +53 -125
- package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.d.ts +119 -0
- package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.js +159 -0
- package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.d.ts +3 -6
- package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.js +4 -4
- package/dist/_esm5.processed/parsers/manifest/types.d.ts +3 -3
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_extent.js +1 -8
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_origin.js +1 -9
- package/dist/_esm5.processed/public_types.d.ts +396 -308
- package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.d.ts +5 -4
- package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +5 -4
- package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +4 -4
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +2 -3
- package/dist/_esm5.processed/transports/dash/pipelines.js +1 -4
- package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
- package/dist/_esm5.processed/transports/dash/segment_loader.js +26 -20
- package/dist/_esm5.processed/transports/dash/segment_parser.js +19 -24
- package/dist/_esm5.processed/transports/dash/text_loader.js +5 -5
- package/dist/_esm5.processed/transports/dash/text_parser.js +28 -33
- package/dist/_esm5.processed/transports/local/pipelines.js +1 -10
- package/dist/_esm5.processed/transports/local/segment_loader.js +2 -2
- package/dist/_esm5.processed/transports/local/segment_parser.d.ts +1 -1
- package/dist/_esm5.processed/transports/local/segment_parser.js +10 -10
- package/dist/_esm5.processed/transports/local/text_parser.d.ts +2 -2
- package/dist/_esm5.processed/transports/local/text_parser.js +23 -23
- package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +34 -52
- package/dist/_esm5.processed/{utils/list_to_map.d.ts → transports/smooth/is_mp4_embedded_track.d.ts} +5 -5
- package/dist/_esm5.processed/{features/list/image_buffer.d.ts → transports/smooth/is_mp4_embedded_track.js} +7 -6
- package/dist/_esm5.processed/transports/smooth/pipelines.js +33 -190
- package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +1 -1
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +28 -22
- package/dist/_esm5.processed/transports/smooth/utils.d.ts +1 -26
- package/dist/_esm5.processed/transports/smooth/utils.js +1 -55
- package/dist/_esm5.processed/transports/types.d.ts +94 -89
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
- package/dist/_esm5.processed/transports/utils/infer_segment_container.d.ts +3 -3
- package/dist/_esm5.processed/transports/utils/infer_segment_container.js +5 -7
- package/dist/_esm5.processed/transports/utils/parse_text_track.d.ts +8 -12
- package/dist/_esm5.processed/transports/utils/parse_text_track.js +19 -21
- package/dist/_esm5.processed/utils/array_includes.d.ts +2 -1
- package/dist/_esm5.processed/utils/array_includes.js +30 -28
- package/dist/_esm5.processed/utils/request/xhr.js +5 -5
- package/dist/commonjs/compat/is_codec_supported.js +22 -1
- package/dist/commonjs/config.d.ts +1 -0
- package/dist/commonjs/core/api/debug/buffer_graph.js +2 -6
- package/dist/commonjs/core/api/debug/modules/general_info.js +17 -10
- package/dist/commonjs/core/api/option_utils.d.ts +2 -0
- package/dist/commonjs/core/api/option_utils.js +2 -3
- package/dist/commonjs/core/api/public_api.d.ts +9 -0
- package/dist/commonjs/core/api/public_api.js +34 -9
- package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.d.ts +6 -0
- package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.js +11 -3
- package/dist/commonjs/core/fetchers/segment/segment_fetcher.d.ts +8 -1
- package/dist/commonjs/core/fetchers/segment/segment_fetcher.js +8 -4
- package/dist/commonjs/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -0
- package/dist/commonjs/core/fetchers/utils/schedule_request.js +1 -1
- package/dist/commonjs/core/init/directfile_content_initializer.js +24 -7
- package/dist/commonjs/core/init/media_source_content_initializer.d.ts +6 -0
- package/dist/commonjs/core/init/media_source_content_initializer.js +4 -6
- package/dist/commonjs/core/init/utils/content_time_boundaries_observer.d.ts +13 -12
- package/dist/commonjs/core/init/utils/content_time_boundaries_observer.js +16 -17
- package/dist/commonjs/core/init/utils/get_initial_time.d.ts +17 -3
- package/dist/commonjs/core/init/utils/get_initial_time.js +9 -7
- package/dist/commonjs/core/stream/representation/utils/get_buffer_status.js +3 -3
- package/dist/commonjs/core/stream/representation/utils/get_needed_segments.js +1 -1
- package/dist/commonjs/default_config.d.ts +5 -0
- package/dist/commonjs/default_config.js +5 -0
- package/dist/commonjs/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -1
- package/dist/commonjs/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +2 -0
- package/dist/commonjs/manifest/representation_index/static.d.ts +1 -1
- package/dist/commonjs/manifest/representation_index/static.js +2 -2
- package/dist/commonjs/manifest/representation_index/types.d.ts +4 -4
- package/dist/commonjs/parsers/manifest/dash/common/indexes/base.d.ts +6 -1
- package/dist/commonjs/parsers/manifest/dash/common/indexes/base.js +4 -3
- package/dist/commonjs/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +5 -2
- package/dist/commonjs/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +15 -4
- package/dist/commonjs/parsers/manifest/dash/common/indexes/index.d.ts +5 -5
- package/dist/commonjs/parsers/manifest/dash/common/indexes/list.d.ts +1 -1
- package/dist/commonjs/parsers/manifest/dash/common/indexes/list.js +2 -2
- package/dist/commonjs/parsers/manifest/dash/common/indexes/template.d.ts +12 -5
- package/dist/commonjs/parsers/manifest/dash/common/indexes/template.js +42 -29
- package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/index.d.ts +2 -1
- package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +99 -6
- package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +250 -51
- package/dist/commonjs/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +40 -17
- package/dist/commonjs/parsers/manifest/dash/common/manifest_bounds_calculator.js +38 -18
- package/dist/commonjs/parsers/manifest/dash/common/parse_adaptation_sets.js +13 -10
- package/dist/commonjs/parsers/manifest/dash/common/parse_mpd.js +27 -14
- package/dist/commonjs/parsers/manifest/dash/common/parse_periods.d.ts +1 -1
- package/dist/commonjs/parsers/manifest/dash/common/parse_periods.js +17 -18
- package/dist/commonjs/parsers/manifest/dash/common/parse_representation_index.d.ts +19 -6
- package/dist/commonjs/parsers/manifest/dash/common/parse_representation_index.js +21 -8
- package/dist/commonjs/parsers/manifest/dash/common/parse_representations.js +7 -3
- package/dist/commonjs/parsers/manifest/local/representation_index.d.ts +1 -1
- package/dist/commonjs/parsers/manifest/local/representation_index.js +3 -3
- package/dist/commonjs/parsers/manifest/metaplaylist/representation_index.d.ts +1 -1
- package/dist/commonjs/parsers/manifest/metaplaylist/representation_index.js +2 -2
- package/dist/commonjs/parsers/manifest/smooth/representation_index.d.ts +5 -5
- package/dist/commonjs/parsers/manifest/smooth/representation_index.js +25 -9
- package/dist/commonjs/parsers/manifest/utils/index_helpers.js +1 -1
- package/dist/commonjs/public_types.d.ts +78 -34
- package/dist/commonjs/transports/dash/init_segment_loader.js +10 -5
- package/dist/commonjs/transports/dash/manifest_parser.js +5 -2
- package/dist/commonjs/transports/dash/segment_loader.js +2 -1
- package/dist/commonjs/transports/dash/text_loader.js +2 -0
- package/dist/commonjs/transports/metaplaylist/manifest_loader.js +2 -1
- package/dist/commonjs/transports/metaplaylist/pipelines.js +4 -1
- package/dist/commonjs/transports/smooth/pipelines.js +4 -2
- package/dist/commonjs/transports/smooth/segment_loader.js +2 -1
- package/dist/commonjs/transports/types.d.ts +12 -0
- package/dist/commonjs/transports/utils/generate_manifest_loader.js +6 -3
- package/dist/commonjs/utils/request/fetch.d.ts +6 -0
- package/dist/commonjs/utils/request/fetch.js +29 -8
- package/dist/commonjs/utils/request/xhr.d.ts +11 -5
- package/dist/commonjs/utils/request/xhr.js +29 -8
- package/dist/es2017/compat/is_codec_supported.js +22 -1
- package/dist/es2017/config.d.ts +1 -0
- package/dist/es2017/core/api/debug/buffer_graph.js +2 -6
- package/dist/es2017/core/api/debug/modules/general_info.js +17 -10
- package/dist/es2017/core/api/option_utils.d.ts +2 -0
- package/dist/es2017/core/api/option_utils.js +2 -3
- package/dist/es2017/core/api/public_api.d.ts +9 -0
- package/dist/es2017/core/api/public_api.js +33 -8
- package/dist/es2017/core/fetchers/manifest/manifest_fetcher.d.ts +6 -0
- package/dist/es2017/core/fetchers/manifest/manifest_fetcher.js +11 -3
- package/dist/es2017/core/fetchers/segment/segment_fetcher.d.ts +8 -1
- package/dist/es2017/core/fetchers/segment/segment_fetcher.js +8 -4
- package/dist/es2017/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -0
- package/dist/es2017/core/fetchers/utils/schedule_request.js +1 -1
- package/dist/es2017/core/init/directfile_content_initializer.js +24 -7
- package/dist/es2017/core/init/media_source_content_initializer.d.ts +6 -0
- package/dist/es2017/core/init/media_source_content_initializer.js +4 -6
- package/dist/es2017/core/init/utils/content_time_boundaries_observer.d.ts +13 -12
- package/dist/es2017/core/init/utils/content_time_boundaries_observer.js +16 -15
- package/dist/es2017/core/init/utils/get_initial_time.d.ts +17 -3
- package/dist/es2017/core/init/utils/get_initial_time.js +9 -7
- package/dist/es2017/core/stream/representation/utils/get_buffer_status.js +3 -3
- package/dist/es2017/core/stream/representation/utils/get_needed_segments.js +1 -1
- package/dist/es2017/default_config.d.ts +5 -0
- package/dist/es2017/default_config.js +5 -0
- package/dist/es2017/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -1
- package/dist/es2017/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +2 -0
- package/dist/es2017/manifest/representation_index/static.d.ts +1 -1
- package/dist/es2017/manifest/representation_index/static.js +2 -2
- package/dist/es2017/manifest/representation_index/types.d.ts +4 -4
- package/dist/es2017/parsers/manifest/dash/common/indexes/base.d.ts +6 -1
- package/dist/es2017/parsers/manifest/dash/common/indexes/base.js +4 -3
- package/dist/es2017/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +5 -2
- package/dist/es2017/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +15 -4
- package/dist/es2017/parsers/manifest/dash/common/indexes/index.d.ts +5 -5
- package/dist/es2017/parsers/manifest/dash/common/indexes/list.d.ts +1 -1
- package/dist/es2017/parsers/manifest/dash/common/indexes/list.js +2 -2
- package/dist/es2017/parsers/manifest/dash/common/indexes/template.d.ts +12 -5
- package/dist/es2017/parsers/manifest/dash/common/indexes/template.js +40 -27
- package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/index.d.ts +2 -1
- package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +99 -6
- package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +246 -51
- package/dist/es2017/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +40 -17
- package/dist/es2017/parsers/manifest/dash/common/manifest_bounds_calculator.js +38 -18
- package/dist/es2017/parsers/manifest/dash/common/parse_adaptation_sets.js +11 -8
- package/dist/es2017/parsers/manifest/dash/common/parse_mpd.js +27 -13
- package/dist/es2017/parsers/manifest/dash/common/parse_periods.d.ts +1 -1
- package/dist/es2017/parsers/manifest/dash/common/parse_periods.js +13 -16
- package/dist/es2017/parsers/manifest/dash/common/parse_representation_index.d.ts +19 -6
- package/dist/es2017/parsers/manifest/dash/common/parse_representation_index.js +10 -8
- package/dist/es2017/parsers/manifest/dash/common/parse_representations.js +7 -3
- package/dist/es2017/parsers/manifest/local/representation_index.d.ts +1 -1
- package/dist/es2017/parsers/manifest/local/representation_index.js +3 -3
- package/dist/es2017/parsers/manifest/metaplaylist/representation_index.d.ts +1 -1
- package/dist/es2017/parsers/manifest/metaplaylist/representation_index.js +2 -2
- package/dist/es2017/parsers/manifest/smooth/representation_index.d.ts +5 -5
- package/dist/es2017/parsers/manifest/smooth/representation_index.js +25 -9
- package/dist/es2017/parsers/manifest/utils/index_helpers.js +1 -1
- package/dist/es2017/public_types.d.ts +78 -34
- package/dist/es2017/transports/dash/init_segment_loader.js +5 -0
- package/dist/es2017/transports/dash/manifest_parser.js +3 -0
- package/dist/es2017/transports/dash/segment_loader.js +1 -0
- package/dist/es2017/transports/dash/text_loader.js +2 -0
- package/dist/es2017/transports/metaplaylist/manifest_loader.js +1 -0
- package/dist/es2017/transports/metaplaylist/pipelines.js +4 -1
- package/dist/es2017/transports/smooth/pipelines.js +2 -0
- package/dist/es2017/transports/smooth/segment_loader.js +1 -0
- package/dist/es2017/transports/types.d.ts +12 -0
- package/dist/es2017/transports/utils/generate_manifest_loader.js +3 -0
- package/dist/es2017/utils/request/fetch.d.ts +6 -0
- package/dist/es2017/utils/request/fetch.js +29 -8
- package/dist/es2017/utils/request/xhr.d.ts +11 -5
- package/dist/es2017/utils/request/xhr.js +30 -9
- package/dist/rx-player.js +723 -376
- package/dist/rx-player.min.js +1 -1
- package/package.json +3 -4
- package/scripts/update-version +2 -0
- package/sonar-project.properties +1 -1
- package/src/compat/is_codec_supported.ts +23 -1
- package/src/core/api/debug/buffer_graph.ts +2 -5
- package/src/core/api/debug/modules/general_info.ts +15 -10
- package/src/core/api/option_utils.ts +3 -3
- package/src/core/api/public_api.ts +35 -7
- package/src/core/fetchers/manifest/manifest_fetcher.ts +21 -3
- package/src/core/fetchers/segment/segment_fetcher.ts +19 -5
- package/src/core/fetchers/segment/segment_fetcher_creator.ts +1 -0
- package/src/core/fetchers/utils/schedule_request.ts +1 -1
- package/src/core/init/directfile_content_initializer.ts +23 -7
- package/src/core/init/media_source_content_initializer.ts +13 -7
- package/src/core/init/utils/content_time_boundaries_observer.ts +23 -22
- package/src/core/init/utils/get_initial_time.ts +25 -12
- package/src/core/stream/representation/utils/get_buffer_status.ts +3 -3
- package/src/core/stream/representation/utils/get_needed_segments.ts +2 -2
- package/src/default_config.ts +5 -0
- package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +3 -1
- package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +2 -0
- package/src/manifest/representation_index/static.ts +2 -2
- package/src/manifest/representation_index/types.ts +4 -4
- package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +182 -36
- package/src/parsers/manifest/dash/common/indexes/base.ts +12 -4
- package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +19 -5
- package/src/parsers/manifest/dash/common/indexes/index.ts +16 -4
- package/src/parsers/manifest/dash/common/indexes/list.ts +2 -2
- package/src/parsers/manifest/dash/common/indexes/template.ts +52 -31
- package/src/parsers/manifest/dash/common/indexes/timeline/index.ts +4 -1
- package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +366 -60
- package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +63 -25
- package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +10 -4
- package/src/parsers/manifest/dash/common/parse_mpd.ts +28 -15
- package/src/parsers/manifest/dash/common/parse_periods.ts +12 -17
- package/src/parsers/manifest/dash/common/parse_representation_index.ts +50 -26
- package/src/parsers/manifest/dash/common/parse_representations.ts +9 -3
- package/src/parsers/manifest/local/representation_index.ts +3 -3
- package/src/parsers/manifest/metaplaylist/representation_index.ts +2 -2
- package/src/parsers/manifest/smooth/representation_index.ts +23 -9
- package/src/parsers/manifest/utils/__tests__/get_first_time_from_adaptations.test.ts +1 -1
- package/src/parsers/manifest/utils/__tests__/get_last_time_from_adaptation.test.ts +1 -1
- package/src/parsers/manifest/utils/index_helpers.ts +1 -1
- package/src/public_types.ts +79 -34
- package/src/transports/dash/init_segment_loader.ts +5 -0
- package/src/transports/dash/manifest_parser.ts +6 -0
- package/src/transports/dash/segment_loader.ts +1 -0
- package/src/transports/dash/text_loader.ts +2 -0
- package/src/transports/metaplaylist/manifest_loader.ts +1 -0
- package/src/transports/metaplaylist/pipelines.ts +4 -1
- package/src/transports/smooth/pipelines.ts +2 -0
- package/src/transports/smooth/segment_loader.ts +1 -0
- package/src/transports/types.ts +12 -0
- package/src/transports/utils/generate_manifest_loader.ts +3 -0
- package/src/utils/request/fetch.ts +35 -8
- package/src/utils/request/xhr.ts +45 -14
- package/dist/_esm5.processed/compat/fullscreen.d.ts +0 -32
- package/dist/_esm5.processed/compat/fullscreen.js +0 -78
- package/dist/_esm5.processed/compat/is_offline.d.ts +0 -39
- package/dist/_esm5.processed/compat/is_offline.js +0 -43
- package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.d.ts +0 -258
- package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.js +0 -989
- package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.d.ts +0 -75
- package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.js +0 -133
- package/dist/_esm5.processed/features/list/bif_parser.d.ts +0 -23
- package/dist/_esm5.processed/features/list/bif_parser.js +0 -27
- package/dist/_esm5.processed/features/list/image_buffer.js +0 -25
- package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +0 -38
- package/dist/_esm5.processed/transports/dash/image_pipelines.js +0 -129
- package/dist/_esm5.processed/utils/list_to_map.js +0 -28
- package/dist/_esm5.processed/utils/simple_set.d.ts +0 -51
- package/dist/_esm5.processed/utils/simple_set.js +0 -57
- package/dist/_esm5.processed/utils/uniq.d.ts +0 -36
- package/dist/_esm5.processed/utils/uniq.js +0 -43
- package/dist/commonjs/parsers/manifest/utils/is_segment_still_available.d.ts +0 -29
- package/dist/commonjs/parsers/manifest/utils/is_segment_still_available.js +0 -54
- package/dist/es2017/parsers/manifest/utils/is_segment_still_available.d.ts +0 -29
- package/dist/es2017/parsers/manifest/utils/is_segment_still_available.js +0 -51
- package/src/parsers/manifest/utils/is_segment_still_available.ts +0 -58
- package/src/typings/object-assign.d.ts +0 -48
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rx-player",
|
|
3
3
|
"author": "Canal+",
|
|
4
|
-
"version": "4.0.0-dev.
|
|
4
|
+
"version": "4.0.0-dev.2023120600",
|
|
5
5
|
"description": "Canal+ HTML5 Video Player",
|
|
6
6
|
"main": "./dist/commonjs/index.js",
|
|
7
7
|
"module": "./dist/es2017/index.js",
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
"demo": "node ./scripts/build_demo.mjs --production-mode",
|
|
139
139
|
"demo:min": "node ./scripts/build_demo.mjs --production-mode --minify",
|
|
140
140
|
"demo:watch": "node ./scripts/build_demo.mjs --watch --production-mode",
|
|
141
|
-
"doc": "
|
|
141
|
+
"doc": "readme.doc doc/ doc/generated \"$(cat VERSION)\"",
|
|
142
142
|
"lint": "eslint src -c .eslintrc.js",
|
|
143
143
|
"lint:demo": "eslint -c demo/full/.eslintrc.js demo/full/scripts",
|
|
144
144
|
"lint:tests": "eslint tests/**/*.js --ignore-pattern '/tests/performance/bundle*'",
|
|
@@ -172,6 +172,7 @@
|
|
|
172
172
|
"@babel/plugin-transform-runtime": "7.22.15",
|
|
173
173
|
"@babel/preset-env": "7.22.20",
|
|
174
174
|
"@babel/preset-react": "7.22.15",
|
|
175
|
+
"@canalplus/readme.doc": "^0.3.0",
|
|
175
176
|
"@types/chai": "4.3.6",
|
|
176
177
|
"@types/jest": "29.5.5",
|
|
177
178
|
"@types/mocha": "10.0.1",
|
|
@@ -185,7 +186,6 @@
|
|
|
185
186
|
"babel-loader": "9.1.3",
|
|
186
187
|
"chai": "4.3.8",
|
|
187
188
|
"core-js": "3.32.2",
|
|
188
|
-
"docgen.ico": "^0.2.3",
|
|
189
189
|
"esbuild": "0.19.3",
|
|
190
190
|
"eslint": "8.50.0",
|
|
191
191
|
"eslint-plugin-ban": "1.6.0",
|
|
@@ -215,7 +215,6 @@
|
|
|
215
215
|
"terser-webpack-plugin": "5.3.9",
|
|
216
216
|
"ts-jest": "29.1.1",
|
|
217
217
|
"ts-loader": "9.4.4",
|
|
218
|
-
"tslint": "6.1.3",
|
|
219
218
|
"typescript": "5.2.2",
|
|
220
219
|
"webpack": "5.88.2",
|
|
221
220
|
"webpack-cli": "5.1.4"
|
package/scripts/update-version
CHANGED
|
@@ -22,7 +22,9 @@
|
|
|
22
22
|
set -e
|
|
23
23
|
|
|
24
24
|
version=$1
|
|
25
|
+
date_iso=$(date "+%Y-%m-%d")
|
|
25
26
|
|
|
27
|
+
sed -i.bak -e "s/^\#\# Unreleased/\#\# v${version} \(${date_iso}\)/gi" CHANGELOG.md && rm CHANGELOG.md.bak
|
|
26
28
|
sed -i.bak -e "s/\/\\* PLAYER_VERSION \\*\/\"\(.*\)\";/\/* PLAYER_VERSION *\/\"${version}\";/g" src/core/api/public_api.ts && rm src/core/api/public_api.ts.bak
|
|
27
29
|
sed -i.bak -e "s/\"version\":\s*\"[0-9]\+\.[0-9]\+\.[0-9]\+[^\"]*\"/\"version\": \"${version}\"/g" package.json && rm package.json.bak
|
|
28
30
|
sed -i.bak -e "s/sonar\.projectVersion= *.*/sonar.projectVersion=${version}/g" sonar-project.properties && rm sonar-project.properties.bak
|
package/sonar-project.properties
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
sonar.projectKey=rx-player
|
|
2
2
|
sonar.organization=rx-player
|
|
3
3
|
sonar.projectName=rx-player
|
|
4
|
-
sonar.projectVersion=4.0.0-dev.
|
|
4
|
+
sonar.projectVersion=4.0.0-dev.2023120600
|
|
5
5
|
sonar.sources=./src,./demo,./tests
|
|
6
6
|
sonar.exclusions=demo/full/bundle.js,demo/standalone/lib.js,demo/bundle.js
|
|
7
7
|
sonar.host.url=https://sonarcloud.io
|
|
@@ -16,6 +16,17 @@
|
|
|
16
16
|
|
|
17
17
|
import { MediaSource_ } from "./browser_compatibility_types";
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Setting this value limit the number of entries in the support map
|
|
21
|
+
* preventing important memory usage, value is arbitrary
|
|
22
|
+
*/
|
|
23
|
+
const MAX_SUPPORT_MAP_ENTRIES = 200;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* caching the codec support reduce the amount of call to `isTypeSupported`
|
|
27
|
+
* and help for performance especially on low-end devices.
|
|
28
|
+
*/
|
|
29
|
+
const supportMap: Map<string, boolean> = new Map();
|
|
19
30
|
/**
|
|
20
31
|
* Returns true if the given codec is supported by the browser's MediaSource
|
|
21
32
|
* implementation.
|
|
@@ -33,7 +44,18 @@ export default function isCodecSupported(mimeType : string) : boolean {
|
|
|
33
44
|
/* eslint-disable @typescript-eslint/unbound-method */
|
|
34
45
|
if (typeof MediaSource_.isTypeSupported === "function") {
|
|
35
46
|
/* eslint-enable @typescript-eslint/unbound-method */
|
|
36
|
-
|
|
47
|
+
const cachedSupport = supportMap.get(mimeType);
|
|
48
|
+
if (cachedSupport !== undefined) {
|
|
49
|
+
return cachedSupport;
|
|
50
|
+
} else {
|
|
51
|
+
const isSupported = MediaSource_.isTypeSupported(mimeType);
|
|
52
|
+
if (supportMap.size >= MAX_SUPPORT_MAP_ENTRIES) {
|
|
53
|
+
supportMap.clear();
|
|
54
|
+
}
|
|
55
|
+
supportMap.set(mimeType, isSupported);
|
|
56
|
+
return isSupported;
|
|
57
|
+
}
|
|
58
|
+
|
|
37
59
|
}
|
|
38
60
|
|
|
39
61
|
return true;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Representation } from "../../../manifest";
|
|
2
2
|
import { IBufferedChunk } from "../../segment_buffers";
|
|
3
3
|
|
|
4
|
-
const BUFFER_WIDTH_IN_SECONDS =
|
|
4
|
+
const BUFFER_WIDTH_IN_SECONDS = 30 * 60;
|
|
5
5
|
|
|
6
6
|
const COLORS = [
|
|
7
7
|
"#2ab7ca",
|
|
@@ -95,10 +95,7 @@ export default class SegmentBufferGraph {
|
|
|
95
95
|
let minimumPosition;
|
|
96
96
|
let maximumPosition;
|
|
97
97
|
if (maximumPoint - minimumPoint > BUFFER_WIDTH_IN_SECONDS) {
|
|
98
|
-
if (currentTime
|
|
99
|
-
minimumPosition = minimumPoint;
|
|
100
|
-
maximumPosition = maximumPoint;
|
|
101
|
-
} else if (maximumPoint - currentTime < BUFFER_WIDTH_IN_SECONDS / 2) {
|
|
98
|
+
if (maximumPoint - currentTime < BUFFER_WIDTH_IN_SECONDS / 2) {
|
|
102
99
|
maximumPosition = maximumPoint;
|
|
103
100
|
minimumPosition = maximumPoint - BUFFER_WIDTH_IN_SECONDS;
|
|
104
101
|
} else if (currentTime - minimumPoint < BUFFER_WIDTH_IN_SECONDS / 2) {
|
|
@@ -157,23 +157,28 @@ export default function constructDebugGeneralInfo(
|
|
|
157
157
|
]);
|
|
158
158
|
adaptationsElt.appendChild(textAdaps);
|
|
159
159
|
}
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
})
|
|
160
|
+
const adaptations = instance.__priv_getCurrentAdaptation();
|
|
161
|
+
const videoBitratesStr = adaptations?.video?.representations.map((r) => {
|
|
162
|
+
return String(r.bitrate ?? "N/A") +
|
|
163
|
+
(r.isSupported ? "" : " U!") +
|
|
164
|
+
(r.decipherable !== false ? "" : " E!");
|
|
165
|
+
}) ?? [];
|
|
166
|
+
const audioBitratesStr = adaptations?.video?.representations.map((r) => {
|
|
167
|
+
return String(r.bitrate ?? "N/A") +
|
|
168
|
+
(r.isSupported ? "" : " U!") +
|
|
169
|
+
(r.decipherable !== false ? "" : " E!");
|
|
170
|
+
}) ?? [];
|
|
166
171
|
representationsElt.innerHTML = "";
|
|
167
|
-
if (
|
|
172
|
+
if (videoBitratesStr.length > 0) {
|
|
168
173
|
representationsElt.appendChild(createMetricTitle("vb"));
|
|
169
174
|
representationsElt.appendChild(createElement("span", {
|
|
170
|
-
textContent:
|
|
175
|
+
textContent: videoBitratesStr.join(" ") + " ",
|
|
171
176
|
}));
|
|
172
177
|
}
|
|
173
|
-
if (
|
|
178
|
+
if (audioBitratesStr.length > 0) {
|
|
174
179
|
representationsElt.appendChild(createMetricTitle("ab"));
|
|
175
180
|
representationsElt.appendChild(createElement("span", {
|
|
176
|
-
textContent:
|
|
181
|
+
textContent: audioBitratesStr.join(" ") + " ",
|
|
177
182
|
}));
|
|
178
183
|
}
|
|
179
184
|
} else {
|
|
@@ -42,6 +42,7 @@ export type IParsedStartAtOption = { position : number } |
|
|
|
42
42
|
{ wallClockTime : number } |
|
|
43
43
|
{ percentage : number } |
|
|
44
44
|
{ fromLastPosition : number } |
|
|
45
|
+
{ fromLivePosition : number } |
|
|
45
46
|
{ fromFirstPosition : number };
|
|
46
47
|
|
|
47
48
|
/** Options of the RxPlayer's constructor once parsed. */
|
|
@@ -383,9 +384,8 @@ function parseLoadVideoOptions(
|
|
|
383
384
|
}
|
|
384
385
|
|
|
385
386
|
if (!isNullOrUndefined(options.startAt)) {
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
instanceof Date
|
|
387
|
+
if ("wallClockTime" in options.startAt
|
|
388
|
+
&& options.startAt.wallClockTime instanceof Date
|
|
389
389
|
) {
|
|
390
390
|
const wallClockTime = (options.startAt as { wallClockTime : Date })
|
|
391
391
|
.wallClockTime.getTime() / 1000;
|
|
@@ -346,7 +346,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
346
346
|
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
|
|
347
347
|
videoElement.preload = "auto";
|
|
348
348
|
|
|
349
|
-
this.version = /* PLAYER_VERSION */"4.0.0-dev.
|
|
349
|
+
this.version = /* PLAYER_VERSION */"4.0.0-dev.2023120600";
|
|
350
350
|
this.log = log;
|
|
351
351
|
this.state = "STOPPED";
|
|
352
352
|
this.videoElement = videoElement;
|
|
@@ -610,6 +610,8 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
610
610
|
const manifestRequestSettings = { lowLatencyMode,
|
|
611
611
|
maxRetry : requestConfig.manifest?.maxRetry,
|
|
612
612
|
requestTimeout: requestConfig.manifest?.timeout,
|
|
613
|
+
connectionTimeout:
|
|
614
|
+
requestConfig.manifest?.connectionTimeout,
|
|
613
615
|
minimumManifestUpdateInterval,
|
|
614
616
|
initialManifest };
|
|
615
617
|
|
|
@@ -667,8 +669,9 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
667
669
|
|
|
668
670
|
const segmentRequestOptions = { lowLatencyMode,
|
|
669
671
|
maxRetry: requestConfig.segment?.maxRetry,
|
|
670
|
-
requestTimeout: requestConfig.segment?.timeout
|
|
671
|
-
|
|
672
|
+
requestTimeout: requestConfig.segment?.timeout,
|
|
673
|
+
connectionTimeout:
|
|
674
|
+
requestConfig.segment?.connectionTimeout };
|
|
672
675
|
initializer = new features.mediaSourceInit({
|
|
673
676
|
adaptiveOptions,
|
|
674
677
|
autoPlay,
|
|
@@ -1958,6 +1961,29 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
1958
1961
|
return null;
|
|
1959
1962
|
}
|
|
1960
1963
|
|
|
1964
|
+
/**
|
|
1965
|
+
* Returns the current position for live contents.
|
|
1966
|
+
*
|
|
1967
|
+
* Returns `null` if no content is loaded or if the current loaded content is
|
|
1968
|
+
* not considered as a live content.
|
|
1969
|
+
* Returns `undefined` if that live position is currently unknown.
|
|
1970
|
+
* @returns {number}
|
|
1971
|
+
*/
|
|
1972
|
+
getLivePosition() : number | undefined |null {
|
|
1973
|
+
if (this._priv_contentInfos === null) {
|
|
1974
|
+
return null;
|
|
1975
|
+
}
|
|
1976
|
+
|
|
1977
|
+
const { isDirectFile, manifest } = this._priv_contentInfos;
|
|
1978
|
+
if (isDirectFile) {
|
|
1979
|
+
return undefined;
|
|
1980
|
+
}
|
|
1981
|
+
if (manifest?.isLive !== true) {
|
|
1982
|
+
return null;
|
|
1983
|
+
}
|
|
1984
|
+
return manifest.getLivePosition();
|
|
1985
|
+
}
|
|
1986
|
+
|
|
1961
1987
|
/**
|
|
1962
1988
|
* Get maximum seek-able position.
|
|
1963
1989
|
* @returns {number}
|
|
@@ -2008,9 +2034,11 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
2008
2034
|
}
|
|
2009
2035
|
const segmentBufferStatus = this._priv_contentInfos
|
|
2010
2036
|
.segmentBuffersStore.getStatus(bufferType);
|
|
2011
|
-
|
|
2012
|
-
segmentBufferStatus.value.
|
|
2013
|
-
|
|
2037
|
+
if (segmentBufferStatus.type === "initialized") {
|
|
2038
|
+
segmentBufferStatus.value.synchronizeInventory();
|
|
2039
|
+
return segmentBufferStatus.value.getInventory();
|
|
2040
|
+
}
|
|
2041
|
+
return null;
|
|
2014
2042
|
}
|
|
2015
2043
|
|
|
2016
2044
|
/**
|
|
@@ -2784,7 +2812,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
2784
2812
|
}
|
|
2785
2813
|
}
|
|
2786
2814
|
}
|
|
2787
|
-
Player.version = /* PLAYER_VERSION */"4.0.0-dev.
|
|
2815
|
+
Player.version = /* PLAYER_VERSION */"4.0.0-dev.2023120600";
|
|
2788
2816
|
|
|
2789
2817
|
/** Every events sent by the RxPlayer's public API. */
|
|
2790
2818
|
interface IPublicAPIEvent {
|
|
@@ -29,7 +29,6 @@ import {
|
|
|
29
29
|
ITransportPipelines,
|
|
30
30
|
} from "../../../transports";
|
|
31
31
|
import EventEmitter from "../../../utils/event_emitter";
|
|
32
|
-
import isNullOrUndefined from "../../../utils/is_null_or_undefined";
|
|
33
32
|
import getMonotonicTimeStamp from "../../../utils/monotonic_timestamp";
|
|
34
33
|
import noop from "../../../utils/noop";
|
|
35
34
|
import TaskCanceller from "../../../utils/task_canceller";
|
|
@@ -231,14 +230,27 @@ export default class ManifestFetcher extends EventEmitter<IManifestFetcherEvent>
|
|
|
231
230
|
) : Promise<IRequestedData<ILoadedManifestFormat>> {
|
|
232
231
|
const { loadManifest } = pipelines;
|
|
233
232
|
let requestTimeout : number | undefined =
|
|
234
|
-
|
|
233
|
+
(settings.requestTimeout === undefined) ?
|
|
235
234
|
config.getCurrent().DEFAULT_REQUEST_TIMEOUT :
|
|
236
235
|
settings.requestTimeout;
|
|
236
|
+
|
|
237
|
+
let connectionTimeout: number | undefined =
|
|
238
|
+
(settings.connectionTimeout === undefined) ?
|
|
239
|
+
config.getCurrent().DEFAULT_CONNECTION_TIMEOUT :
|
|
240
|
+
settings.connectionTimeout;
|
|
241
|
+
|
|
237
242
|
if (requestTimeout < 0) {
|
|
238
243
|
requestTimeout = undefined;
|
|
239
244
|
}
|
|
245
|
+
|
|
246
|
+
if (connectionTimeout < 0) {
|
|
247
|
+
connectionTimeout = undefined;
|
|
248
|
+
}
|
|
240
249
|
const callLoader = () => loadManifest(manifestUrl,
|
|
241
|
-
{
|
|
250
|
+
{
|
|
251
|
+
timeout: requestTimeout,
|
|
252
|
+
connectionTimeout,
|
|
253
|
+
},
|
|
242
254
|
cancelSignal);
|
|
243
255
|
return scheduleRequestPromise(callLoader, backoffSettings, cancelSignal);
|
|
244
256
|
}
|
|
@@ -722,6 +734,12 @@ export interface IManifestFetcherSettings {
|
|
|
722
734
|
* `undefined` will lead to a default, large, timeout being used.
|
|
723
735
|
*/
|
|
724
736
|
requestTimeout : number | undefined;
|
|
737
|
+
/**
|
|
738
|
+
* Connection timeout, in milliseconds, after which the request is canceled
|
|
739
|
+
* if the responses headers has not being received.
|
|
740
|
+
* Do not set or set to "undefined" to disable it.
|
|
741
|
+
*/
|
|
742
|
+
connectionTimeout: number | undefined;
|
|
725
743
|
/** Limit the frequency of Manifest updates. */
|
|
726
744
|
minimumManifestUpdateInterval : number;
|
|
727
745
|
/**
|
|
@@ -93,6 +93,8 @@ export default function createSegmentFetcher<TLoadedFormat, TSegmentDataType>(
|
|
|
93
93
|
const requestOptions = {
|
|
94
94
|
timeout: options.requestTimeout < 0 ? undefined :
|
|
95
95
|
options.requestTimeout,
|
|
96
|
+
connectionTimeout: options.connectionTimeout === undefined ? undefined :
|
|
97
|
+
options.connectionTimeout < 0 ? undefined : options.connectionTimeout,
|
|
96
98
|
};
|
|
97
99
|
|
|
98
100
|
/**
|
|
@@ -457,6 +459,12 @@ export interface ISegmentFetcherOptions {
|
|
|
457
459
|
* To set to `-1` for no timeout.
|
|
458
460
|
*/
|
|
459
461
|
requestTimeout : number;
|
|
462
|
+
/**
|
|
463
|
+
* Connection timeout, in milliseconds, after which the request is canceled
|
|
464
|
+
* if the responses headers has not being received.
|
|
465
|
+
* Do not set or set to "undefined" to disable it.
|
|
466
|
+
*/
|
|
467
|
+
connectionTimeout: number | undefined;
|
|
460
468
|
}
|
|
461
469
|
|
|
462
470
|
/**
|
|
@@ -467,12 +475,15 @@ export interface ISegmentFetcherOptions {
|
|
|
467
475
|
export function getSegmentFetcherOptions(
|
|
468
476
|
{ maxRetry,
|
|
469
477
|
lowLatencyMode,
|
|
470
|
-
requestTimeout
|
|
471
|
-
|
|
472
|
-
|
|
478
|
+
requestTimeout,
|
|
479
|
+
connectionTimeout } : { maxRetry? : number | undefined;
|
|
480
|
+
requestTimeout? : number | undefined;
|
|
481
|
+
connectionTimeout? : number | undefined;
|
|
482
|
+
lowLatencyMode : boolean; }
|
|
473
483
|
) : ISegmentFetcherOptions {
|
|
474
484
|
const { DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR,
|
|
475
485
|
DEFAULT_REQUEST_TIMEOUT,
|
|
486
|
+
DEFAULT_CONNECTION_TIMEOUT,
|
|
476
487
|
INITIAL_BACKOFF_DELAY_BASE,
|
|
477
488
|
MAX_BACKOFF_DELAY_BASE } = config.getCurrent();
|
|
478
489
|
return { maxRetry: maxRetry ?? DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR,
|
|
@@ -480,6 +491,9 @@ export function getSegmentFetcherOptions(
|
|
|
480
491
|
INITIAL_BACKOFF_DELAY_BASE.REGULAR,
|
|
481
492
|
maxDelay: lowLatencyMode ? MAX_BACKOFF_DELAY_BASE.LOW_LATENCY :
|
|
482
493
|
MAX_BACKOFF_DELAY_BASE.REGULAR,
|
|
483
|
-
requestTimeout:
|
|
484
|
-
|
|
494
|
+
requestTimeout: (requestTimeout === undefined) ? DEFAULT_REQUEST_TIMEOUT :
|
|
495
|
+
requestTimeout,
|
|
496
|
+
connectionTimeout: (connectionTimeout === undefined) ?
|
|
497
|
+
DEFAULT_CONNECTION_TIMEOUT : connectionTimeout,
|
|
498
|
+
};
|
|
485
499
|
}
|
|
@@ -352,7 +352,7 @@ export async function scheduleRequestWithCdns<T>(
|
|
|
352
352
|
* attempts already done for that resource.
|
|
353
353
|
*
|
|
354
354
|
* Returns `undefined` if there's no Cdn left to request the resource.
|
|
355
|
-
* @param {Array.<Object>}
|
|
355
|
+
* @param {Array.<Object>} sortedCdns
|
|
356
356
|
* @returns {Object|undefined}
|
|
357
357
|
*/
|
|
358
358
|
function getPrioritaryRequestableCdnFromSortedList(
|
|
@@ -27,6 +27,7 @@ import {
|
|
|
27
27
|
IPlayerError,
|
|
28
28
|
} from "../../public_types";
|
|
29
29
|
import assert from "../../utils/assert";
|
|
30
|
+
import isNullOrUndefined from "../../utils/is_null_or_undefined";
|
|
30
31
|
import SharedReference, {
|
|
31
32
|
IReadOnlySharedReference,
|
|
32
33
|
} from "../../utils/reference";
|
|
@@ -241,11 +242,11 @@ function getDirectFileInitialTime(
|
|
|
241
242
|
mediaElement : HTMLMediaElement,
|
|
242
243
|
startAt? : IInitialTimeOptions
|
|
243
244
|
) : number {
|
|
244
|
-
if (startAt
|
|
245
|
+
if (isNullOrUndefined(startAt)) {
|
|
245
246
|
return 0;
|
|
246
247
|
}
|
|
247
248
|
|
|
248
|
-
if (startAt.position
|
|
249
|
+
if (!isNullOrUndefined(startAt.position)) {
|
|
249
250
|
return startAt.position;
|
|
250
251
|
} else if (startAt.wallClockTime != null) {
|
|
251
252
|
return startAt.wallClockTime;
|
|
@@ -254,15 +255,30 @@ function getDirectFileInitialTime(
|
|
|
254
255
|
}
|
|
255
256
|
|
|
256
257
|
const duration = mediaElement.duration;
|
|
257
|
-
if (duration == null || !isFinite(duration)) {
|
|
258
|
-
log.warn("startAt.fromLastPosition set but no known duration, " +
|
|
259
|
-
"beginning at 0.");
|
|
260
|
-
return 0;
|
|
261
|
-
}
|
|
262
258
|
|
|
263
259
|
if (typeof startAt.fromLastPosition === "number") {
|
|
260
|
+
if (isNullOrUndefined(duration) || !isFinite(duration)) {
|
|
261
|
+
log.warn("startAt.fromLastPosition set but no known duration, " +
|
|
262
|
+
"beginning at 0.");
|
|
263
|
+
return 0;
|
|
264
|
+
}
|
|
264
265
|
return Math.max(0, duration + startAt.fromLastPosition);
|
|
266
|
+
} else if (typeof startAt.fromLivePosition === "number") {
|
|
267
|
+
const livePosition = mediaElement.seekable.length > 0 ?
|
|
268
|
+
mediaElement.seekable.end(0) :
|
|
269
|
+
duration;
|
|
270
|
+
if (isNullOrUndefined(livePosition)) {
|
|
271
|
+
log.warn("startAt.fromLivePosition set but no known live position, " +
|
|
272
|
+
"beginning at 0.");
|
|
273
|
+
return 0;
|
|
274
|
+
}
|
|
275
|
+
return Math.max(0, livePosition + startAt.fromLivePosition);
|
|
265
276
|
} else if (startAt.percentage != null) {
|
|
277
|
+
if (isNullOrUndefined(duration) || !isFinite(duration)) {
|
|
278
|
+
log.warn("startAt.percentage set but no known duration, " +
|
|
279
|
+
"beginning at 0.");
|
|
280
|
+
return 0;
|
|
281
|
+
}
|
|
266
282
|
const { percentage } = startAt;
|
|
267
283
|
if (percentage >= 100) {
|
|
268
284
|
return duration;
|
|
@@ -541,7 +541,7 @@ export default class MediaSourceContentInitializer extends ContentInitializer {
|
|
|
541
541
|
if (
|
|
542
542
|
// Data is buffered around the current position
|
|
543
543
|
obs.currentRange !== null ||
|
|
544
|
-
// Or, for whatever reason,
|
|
544
|
+
// Or, for whatever reason, we have no buffer but we're already advancing
|
|
545
545
|
obs.position > seekedTime + 0.1
|
|
546
546
|
) {
|
|
547
547
|
stopListening();
|
|
@@ -728,9 +728,10 @@ export default class MediaSourceContentInitializer extends ContentInitializer {
|
|
|
728
728
|
contentTimeBoundariesObserver.addEventListener("periodChange", (period) => {
|
|
729
729
|
this.trigger("activePeriodChanged", { period });
|
|
730
730
|
});
|
|
731
|
-
contentTimeBoundariesObserver.addEventListener(
|
|
732
|
-
|
|
733
|
-
|
|
731
|
+
contentTimeBoundariesObserver.addEventListener(
|
|
732
|
+
"endingPositionChange",
|
|
733
|
+
(x) => mediaSourceDurationUpdater.updateDuration(x.endingPosition, x.isEnd)
|
|
734
|
+
);
|
|
734
735
|
contentTimeBoundariesObserver.addEventListener("endOfStream", () => {
|
|
735
736
|
if (endOfStreamCanceller === null) {
|
|
736
737
|
endOfStreamCanceller = new TaskCanceller();
|
|
@@ -746,9 +747,8 @@ export default class MediaSourceContentInitializer extends ContentInitializer {
|
|
|
746
747
|
endOfStreamCanceller = null;
|
|
747
748
|
}
|
|
748
749
|
});
|
|
749
|
-
const
|
|
750
|
-
mediaSourceDurationUpdater.updateDuration(
|
|
751
|
-
currentDuration.isEnd);
|
|
750
|
+
const endInfo = contentTimeBoundariesObserver.getCurrentEndingTime();
|
|
751
|
+
mediaSourceDurationUpdater.updateDuration(endInfo.endingPosition, endInfo.isEnd);
|
|
752
752
|
return contentTimeBoundariesObserver;
|
|
753
753
|
}
|
|
754
754
|
|
|
@@ -835,6 +835,12 @@ export interface IInitializeArguments {
|
|
|
835
835
|
* `-1` indicates no timeout.
|
|
836
836
|
*/
|
|
837
837
|
requestTimeout : number | undefined;
|
|
838
|
+
/**
|
|
839
|
+
* Amount of time, in milliseconds, after which a request that hasn't receive
|
|
840
|
+
* the headers and status code should be aborted and optionnaly retried,
|
|
841
|
+
* depending on the maxRetry configuration.
|
|
842
|
+
*/
|
|
843
|
+
connectionTimeout : number | undefined;
|
|
838
844
|
/** Maximum number of time a request on error will be retried. */
|
|
839
845
|
maxRetry : number | undefined;
|
|
840
846
|
};
|
|
@@ -32,8 +32,8 @@ import { IStreamOrchestratorPlaybackObservation } from "../../stream";
|
|
|
32
32
|
/**
|
|
33
33
|
* Observes what's being played and take care of media events relating to time
|
|
34
34
|
* boundaries:
|
|
35
|
-
* - Emits a `
|
|
36
|
-
* known and every time it changes.
|
|
35
|
+
* - Emits a `endingPositionChange` when the known maximum playable position
|
|
36
|
+
* of the current content is known and every time it changes.
|
|
37
37
|
* - Emits `endOfStream` API once segments have been pushed until the end and
|
|
38
38
|
* `resumeStream` if downloads starts back.
|
|
39
39
|
* - Emits a `periodChange` event when the currently-playing Period seemed to
|
|
@@ -111,7 +111,7 @@ export default class ContentTimeBoundariesObserver
|
|
|
111
111
|
}, { includeLastObservation: true, clearSignal: cancelSignal });
|
|
112
112
|
|
|
113
113
|
manifest.addEventListener("manifestUpdate", () => {
|
|
114
|
-
this.trigger("
|
|
114
|
+
this.trigger("endingPositionChange", this._getManifestEndTime());
|
|
115
115
|
if (cancelSignal.isCancelled()) {
|
|
116
116
|
return;
|
|
117
117
|
}
|
|
@@ -120,11 +120,12 @@ export default class ContentTimeBoundariesObserver
|
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
/**
|
|
123
|
-
* Returns an estimate of the current
|
|
123
|
+
* Returns an estimate of the current last position which may be played in
|
|
124
|
+
* the content at the moment.
|
|
124
125
|
* @returns {Object}
|
|
125
126
|
*/
|
|
126
|
-
public
|
|
127
|
-
return this.
|
|
127
|
+
public getCurrentEndingTime() : IEndingPositionInformation {
|
|
128
|
+
return this._getManifestEndTime();
|
|
128
129
|
}
|
|
129
130
|
|
|
130
131
|
/**
|
|
@@ -157,12 +158,13 @@ export default class ContentTimeBoundariesObserver
|
|
|
157
158
|
.updateLastVideoAdaptation(adaptation);
|
|
158
159
|
}
|
|
159
160
|
const endingPosition = this._maximumPositionCalculator.getEndingPosition();
|
|
160
|
-
const
|
|
161
|
+
const newEndingPosition = endingPosition !== undefined ?
|
|
161
162
|
{ isEnd: true,
|
|
162
|
-
|
|
163
|
+
endingPosition } :
|
|
163
164
|
{ isEnd: false,
|
|
164
|
-
|
|
165
|
-
|
|
165
|
+
endingPosition: this._maximumPositionCalculator
|
|
166
|
+
.getMaximumAvailablePosition() };
|
|
167
|
+
this.trigger("endingPositionChange", newEndingPosition);
|
|
166
168
|
}
|
|
167
169
|
}
|
|
168
170
|
}
|
|
@@ -311,13 +313,13 @@ export default class ContentTimeBoundariesObserver
|
|
|
311
313
|
}
|
|
312
314
|
}
|
|
313
315
|
|
|
314
|
-
private
|
|
316
|
+
private _getManifestEndTime() : IEndingPositionInformation {
|
|
315
317
|
const endingPosition = this._maximumPositionCalculator.getEndingPosition();
|
|
316
318
|
return endingPosition !== undefined ?
|
|
317
319
|
{ isEnd: true,
|
|
318
|
-
|
|
320
|
+
endingPosition } :
|
|
319
321
|
{ isEnd: false,
|
|
320
|
-
|
|
322
|
+
endingPosition: this._maximumPositionCalculator.getMaximumAvailablePosition() };
|
|
321
323
|
}
|
|
322
324
|
|
|
323
325
|
private _lazilyCreateActiveStreamInfo(bufferType : IBufferType) : IActiveStreamsInfo {
|
|
@@ -348,16 +350,16 @@ export default class ContentTimeBoundariesObserver
|
|
|
348
350
|
}
|
|
349
351
|
}
|
|
350
352
|
|
|
351
|
-
export interface
|
|
353
|
+
export interface IEndingPositionInformation {
|
|
352
354
|
/**
|
|
353
355
|
* The new maximum known position (note that this is the ending position
|
|
354
356
|
* currently known of the current content, it might be superior to the last
|
|
355
357
|
* position at which segments are available and it might also evolve over
|
|
356
358
|
* time), in seconds.
|
|
357
359
|
*/
|
|
358
|
-
|
|
360
|
+
endingPosition : number;
|
|
359
361
|
/**
|
|
360
|
-
* If `true`, the communicated `
|
|
362
|
+
* If `true`, the communicated `endingPosition` is the actual end of the content.
|
|
361
363
|
* It may still be updated due to a track change or to add precision, but it
|
|
362
364
|
* is still a (rough) estimate of the maximum position that content should
|
|
363
365
|
* have.
|
|
@@ -365,7 +367,7 @@ export interface IDurationItem {
|
|
|
365
367
|
* If `false`, this is the currently known maximum position associated to
|
|
366
368
|
* the content, but the content is still evolving (typically, new media
|
|
367
369
|
* segments are still being generated) and as such it can still have a
|
|
368
|
-
* longer
|
|
370
|
+
* longer `endingPosition` in the future.
|
|
369
371
|
*/
|
|
370
372
|
isEnd : boolean;
|
|
371
373
|
}
|
|
@@ -380,10 +382,10 @@ export interface IContentTimeBoundariesObserverEvent {
|
|
|
380
382
|
/** Triggered when a new `Period` is currently playing. */
|
|
381
383
|
periodChange : Period;
|
|
382
384
|
/**
|
|
383
|
-
* Triggered when the
|
|
384
|
-
* or changed.
|
|
385
|
+
* Triggered when the ending position of the currently-playing content became
|
|
386
|
+
* known or changed.
|
|
385
387
|
*/
|
|
386
|
-
|
|
388
|
+
endingPositionChange : IEndingPositionInformation;
|
|
387
389
|
/**
|
|
388
390
|
* Triggered when the last possible chronological segment for all types of
|
|
389
391
|
* buffers has either been pushed or is being pushed to the corresponding
|
|
@@ -460,8 +462,7 @@ class MaximumPositionCalculator {
|
|
|
460
462
|
*/
|
|
461
463
|
public getMaximumAvailablePosition() : number {
|
|
462
464
|
if (this._manifest.isDynamic) {
|
|
463
|
-
return this._manifest.
|
|
464
|
-
this._manifest.getMaximumSafePosition();
|
|
465
|
+
return this._manifest.getMaximumSafePosition();
|
|
465
466
|
}
|
|
466
467
|
if (this._lastVideoAdaptation === undefined ||
|
|
467
468
|
this._lastAudioAdaptation === undefined)
|