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
|
@@ -14,6 +14,16 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import { MediaSource_ } from "./browser_compatibility_types";
|
|
17
|
+
/**
|
|
18
|
+
* Setting this value limit the number of entries in the support map
|
|
19
|
+
* preventing important memory usage, value is arbitrary
|
|
20
|
+
*/
|
|
21
|
+
const MAX_SUPPORT_MAP_ENTRIES = 200;
|
|
22
|
+
/**
|
|
23
|
+
* caching the codec support reduce the amount of call to `isTypeSupported`
|
|
24
|
+
* and help for performance especially on low-end devices.
|
|
25
|
+
*/
|
|
26
|
+
const supportMap = new Map();
|
|
17
27
|
/**
|
|
18
28
|
* Returns true if the given codec is supported by the browser's MediaSource
|
|
19
29
|
* implementation.
|
|
@@ -30,7 +40,18 @@ export default function isCodecSupported(mimeType) {
|
|
|
30
40
|
/* eslint-disable @typescript-eslint/unbound-method */
|
|
31
41
|
if (typeof MediaSource_.isTypeSupported === "function") {
|
|
32
42
|
/* eslint-enable @typescript-eslint/unbound-method */
|
|
33
|
-
|
|
43
|
+
const cachedSupport = supportMap.get(mimeType);
|
|
44
|
+
if (cachedSupport !== undefined) {
|
|
45
|
+
return cachedSupport;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const isSupported = MediaSource_.isTypeSupported(mimeType);
|
|
49
|
+
if (supportMap.size >= MAX_SUPPORT_MAP_ENTRIES) {
|
|
50
|
+
supportMap.clear();
|
|
51
|
+
}
|
|
52
|
+
supportMap.set(mimeType, isSupported);
|
|
53
|
+
return isSupported;
|
|
54
|
+
}
|
|
34
55
|
}
|
|
35
56
|
return true;
|
|
36
57
|
}
|
package/dist/es2017/config.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ declare class ConfigHandler {
|
|
|
18
18
|
_config: {
|
|
19
19
|
DEFAULT_UNMUTED_VOLUME: number;
|
|
20
20
|
DEFAULT_REQUEST_TIMEOUT: number;
|
|
21
|
+
DEFAULT_CONNECTION_TIMEOUT: number;
|
|
21
22
|
DEFAULT_TEXT_TRACK_MODE: "native" | "html";
|
|
22
23
|
DEFAULT_ENABLE_FAST_SWITCHING: boolean;
|
|
23
24
|
DELTA_POSITION_AFTER_RELOAD: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const BUFFER_WIDTH_IN_SECONDS =
|
|
1
|
+
const BUFFER_WIDTH_IN_SECONDS = 30 * 60;
|
|
2
2
|
const COLORS = [
|
|
3
3
|
"#2ab7ca",
|
|
4
4
|
"#fed766",
|
|
@@ -65,11 +65,7 @@ export default class SegmentBufferGraph {
|
|
|
65
65
|
let minimumPosition;
|
|
66
66
|
let maximumPosition;
|
|
67
67
|
if (maximumPoint - minimumPoint > BUFFER_WIDTH_IN_SECONDS) {
|
|
68
|
-
if (currentTime
|
|
69
|
-
minimumPosition = minimumPoint;
|
|
70
|
-
maximumPosition = maximumPoint;
|
|
71
|
-
}
|
|
72
|
-
else if (maximumPoint - currentTime < BUFFER_WIDTH_IN_SECONDS / 2) {
|
|
68
|
+
if (maximumPoint - currentTime < BUFFER_WIDTH_IN_SECONDS / 2) {
|
|
73
69
|
maximumPosition = maximumPoint;
|
|
74
70
|
minimumPosition = maximumPoint - BUFFER_WIDTH_IN_SECONDS;
|
|
75
71
|
}
|
|
@@ -141,23 +141,30 @@ export default function constructDebugGeneralInfo(instance, parentElt, cancelSig
|
|
|
141
141
|
]);
|
|
142
142
|
adaptationsElt.appendChild(textAdaps);
|
|
143
143
|
}
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
144
|
+
const adaptations = instance.__priv_getCurrentAdaptation();
|
|
145
|
+
const videoBitratesStr = (_c = (_b = adaptations === null || adaptations === void 0 ? void 0 : adaptations.video) === null || _b === void 0 ? void 0 : _b.representations.map((r) => {
|
|
146
|
+
var _a;
|
|
147
|
+
return String((_a = r.bitrate) !== null && _a !== void 0 ? _a : "N/A") +
|
|
148
|
+
(r.isSupported ? "" : " U!") +
|
|
149
|
+
(r.decipherable !== false ? "" : " E!");
|
|
150
|
+
})) !== null && _c !== void 0 ? _c : [];
|
|
151
|
+
const audioBitratesStr = (_e = (_d = adaptations === null || adaptations === void 0 ? void 0 : adaptations.video) === null || _d === void 0 ? void 0 : _d.representations.map((r) => {
|
|
152
|
+
var _a;
|
|
153
|
+
return String((_a = r.bitrate) !== null && _a !== void 0 ? _a : "N/A") +
|
|
154
|
+
(r.isSupported ? "" : " U!") +
|
|
155
|
+
(r.decipherable !== false ? "" : " E!");
|
|
156
|
+
})) !== null && _e !== void 0 ? _e : [];
|
|
150
157
|
representationsElt.innerHTML = "";
|
|
151
|
-
if (
|
|
158
|
+
if (videoBitratesStr.length > 0) {
|
|
152
159
|
representationsElt.appendChild(createMetricTitle("vb"));
|
|
153
160
|
representationsElt.appendChild(createElement("span", {
|
|
154
|
-
textContent:
|
|
161
|
+
textContent: videoBitratesStr.join(" ") + " ",
|
|
155
162
|
}));
|
|
156
163
|
}
|
|
157
|
-
if (
|
|
164
|
+
if (audioBitratesStr.length > 0) {
|
|
158
165
|
representationsElt.appendChild(createMetricTitle("ab"));
|
|
159
166
|
representationsElt.appendChild(createElement("span", {
|
|
160
|
-
textContent:
|
|
167
|
+
textContent: audioBitratesStr.join(" ") + " ",
|
|
161
168
|
}));
|
|
162
169
|
}
|
|
163
170
|
}
|
|
@@ -259,9 +259,8 @@ function parseLoadVideoOptions(options) {
|
|
|
259
259
|
"an \"html\" textTrackMode. It will be ignored.");
|
|
260
260
|
}
|
|
261
261
|
if (!isNullOrUndefined(options.startAt)) {
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
instanceof Date) {
|
|
262
|
+
if ("wallClockTime" in options.startAt
|
|
263
|
+
&& options.startAt.wallClockTime instanceof Date) {
|
|
265
264
|
const wallClockTime = options.startAt
|
|
266
265
|
.wallClockTime.getTime() / 1000;
|
|
267
266
|
startAt = objectAssign({}, options.startAt, { wallClockTime });
|
|
@@ -557,6 +557,15 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
557
557
|
* @returns {number}
|
|
558
558
|
*/
|
|
559
559
|
getMinimumPosition(): number | null;
|
|
560
|
+
/**
|
|
561
|
+
* Returns the current position for live contents.
|
|
562
|
+
*
|
|
563
|
+
* Returns `null` if no content is loaded or if the current loaded content is
|
|
564
|
+
* not considered as a live content.
|
|
565
|
+
* Returns `undefined` if that live position is currently unknown.
|
|
566
|
+
* @returns {number}
|
|
567
|
+
*/
|
|
568
|
+
getLivePosition(): number | undefined | null;
|
|
560
569
|
/**
|
|
561
570
|
* Get maximum seek-able position.
|
|
562
571
|
* @returns {number}
|
|
@@ -91,7 +91,7 @@ class Player extends EventEmitter {
|
|
|
91
91
|
// Workaround to support Firefox autoplay on FF 42.
|
|
92
92
|
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
|
|
93
93
|
videoElement.preload = "auto";
|
|
94
|
-
this.version = /* PLAYER_VERSION */ "4.0.0-dev.
|
|
94
|
+
this.version = /* PLAYER_VERSION */ "4.0.0-dev.2023120600";
|
|
95
95
|
this.log = log;
|
|
96
96
|
this.state = "STOPPED";
|
|
97
97
|
this.videoElement = videoElement;
|
|
@@ -250,7 +250,7 @@ class Player extends EventEmitter {
|
|
|
250
250
|
* @param {Object} options
|
|
251
251
|
*/
|
|
252
252
|
_priv_initializeContentPlayback(options) {
|
|
253
|
-
var _a, _b, _c, _d;
|
|
253
|
+
var _a, _b, _c, _d, _e, _f;
|
|
254
254
|
const { autoPlay, defaultAudioTrackSwitchingMode, enableFastSwitching, initialManifest, keySystems, lowLatencyMode, minimumManifestUpdateInterval, requestConfig, onCodecSwitch, startAt, transport, checkMediaSegmentIntegrity, manifestLoader, referenceDateTime, representationFilter, segmentLoader, serverSyncInfos, __priv_manifestUpdateUrl, __priv_patchLastSegmentInSidx, url } = options;
|
|
255
255
|
// Perform multiple checks on the given options
|
|
256
256
|
if (this.videoElement === null) {
|
|
@@ -286,6 +286,7 @@ class Player extends EventEmitter {
|
|
|
286
286
|
const manifestRequestSettings = { lowLatencyMode,
|
|
287
287
|
maxRetry: (_a = requestConfig.manifest) === null || _a === void 0 ? void 0 : _a.maxRetry,
|
|
288
288
|
requestTimeout: (_b = requestConfig.manifest) === null || _b === void 0 ? void 0 : _b.timeout,
|
|
289
|
+
connectionTimeout: (_c = requestConfig.manifest) === null || _c === void 0 ? void 0 : _c.connectionTimeout,
|
|
289
290
|
minimumManifestUpdateInterval,
|
|
290
291
|
initialManifest };
|
|
291
292
|
const relyOnVideoVisibilityAndSize = canRelyOnVideoVisibilityAndSize();
|
|
@@ -332,8 +333,9 @@ class Player extends EventEmitter {
|
|
|
332
333
|
const bufferOptions = objectAssign({ enableFastSwitching,
|
|
333
334
|
onCodecSwitch }, this._priv_bufferOptions);
|
|
334
335
|
const segmentRequestOptions = { lowLatencyMode,
|
|
335
|
-
maxRetry: (
|
|
336
|
-
requestTimeout: (
|
|
336
|
+
maxRetry: (_d = requestConfig.segment) === null || _d === void 0 ? void 0 : _d.maxRetry,
|
|
337
|
+
requestTimeout: (_e = requestConfig.segment) === null || _e === void 0 ? void 0 : _e.timeout,
|
|
338
|
+
connectionTimeout: (_f = requestConfig.segment) === null || _f === void 0 ? void 0 : _f.connectionTimeout };
|
|
337
339
|
initializer = new features.mediaSourceInit({
|
|
338
340
|
adaptiveOptions,
|
|
339
341
|
autoPlay,
|
|
@@ -1462,6 +1464,27 @@ class Player extends EventEmitter {
|
|
|
1462
1464
|
}
|
|
1463
1465
|
return null;
|
|
1464
1466
|
}
|
|
1467
|
+
/**
|
|
1468
|
+
* Returns the current position for live contents.
|
|
1469
|
+
*
|
|
1470
|
+
* Returns `null` if no content is loaded or if the current loaded content is
|
|
1471
|
+
* not considered as a live content.
|
|
1472
|
+
* Returns `undefined` if that live position is currently unknown.
|
|
1473
|
+
* @returns {number}
|
|
1474
|
+
*/
|
|
1475
|
+
getLivePosition() {
|
|
1476
|
+
if (this._priv_contentInfos === null) {
|
|
1477
|
+
return null;
|
|
1478
|
+
}
|
|
1479
|
+
const { isDirectFile, manifest } = this._priv_contentInfos;
|
|
1480
|
+
if (isDirectFile) {
|
|
1481
|
+
return undefined;
|
|
1482
|
+
}
|
|
1483
|
+
if ((manifest === null || manifest === void 0 ? void 0 : manifest.isLive) !== true) {
|
|
1484
|
+
return null;
|
|
1485
|
+
}
|
|
1486
|
+
return manifest.getLivePosition();
|
|
1487
|
+
}
|
|
1465
1488
|
/**
|
|
1466
1489
|
* Get maximum seek-able position.
|
|
1467
1490
|
* @returns {number}
|
|
@@ -1506,9 +1529,11 @@ class Player extends EventEmitter {
|
|
|
1506
1529
|
}
|
|
1507
1530
|
const segmentBufferStatus = this._priv_contentInfos
|
|
1508
1531
|
.segmentBuffersStore.getStatus(bufferType);
|
|
1509
|
-
|
|
1510
|
-
segmentBufferStatus.value.
|
|
1511
|
-
|
|
1532
|
+
if (segmentBufferStatus.type === "initialized") {
|
|
1533
|
+
segmentBufferStatus.value.synchronizeInventory();
|
|
1534
|
+
return segmentBufferStatus.value.getInventory();
|
|
1535
|
+
}
|
|
1536
|
+
return null;
|
|
1512
1537
|
}
|
|
1513
1538
|
/**
|
|
1514
1539
|
* /!\ For tools use only! Do not touch!
|
|
@@ -2107,5 +2132,5 @@ class Player extends EventEmitter {
|
|
|
2107
2132
|
}
|
|
2108
2133
|
}
|
|
2109
2134
|
}
|
|
2110
|
-
Player.version = /* PLAYER_VERSION */ "4.0.0-dev.
|
|
2135
|
+
Player.version = /* PLAYER_VERSION */ "4.0.0-dev.2023120600";
|
|
2111
2136
|
export default Player;
|
|
@@ -171,6 +171,12 @@ export interface IManifestFetcherSettings {
|
|
|
171
171
|
* `undefined` will lead to a default, large, timeout being used.
|
|
172
172
|
*/
|
|
173
173
|
requestTimeout: number | undefined;
|
|
174
|
+
/**
|
|
175
|
+
* Connection timeout, in milliseconds, after which the request is canceled
|
|
176
|
+
* if the responses headers has not being received.
|
|
177
|
+
* Do not set or set to "undefined" to disable it.
|
|
178
|
+
*/
|
|
179
|
+
connectionTimeout: number | undefined;
|
|
174
180
|
/** Limit the frequency of Manifest updates. */
|
|
175
181
|
minimumManifestUpdateInterval: number;
|
|
176
182
|
/**
|
|
@@ -18,7 +18,6 @@ import { formatError } from "../../../errors";
|
|
|
18
18
|
import log from "../../../log";
|
|
19
19
|
import Manifest from "../../../manifest";
|
|
20
20
|
import EventEmitter from "../../../utils/event_emitter";
|
|
21
|
-
import isNullOrUndefined from "../../../utils/is_null_or_undefined";
|
|
22
21
|
import getMonotonicTimeStamp from "../../../utils/monotonic_timestamp";
|
|
23
22
|
import noop from "../../../utils/noop";
|
|
24
23
|
import TaskCanceller from "../../../utils/task_canceller";
|
|
@@ -157,13 +156,22 @@ export default class ManifestFetcher extends EventEmitter {
|
|
|
157
156
|
*/
|
|
158
157
|
function callLoaderWithRetries(manifestUrl) {
|
|
159
158
|
const { loadManifest } = pipelines;
|
|
160
|
-
let requestTimeout =
|
|
159
|
+
let requestTimeout = (settings.requestTimeout === undefined) ?
|
|
161
160
|
config.getCurrent().DEFAULT_REQUEST_TIMEOUT :
|
|
162
161
|
settings.requestTimeout;
|
|
162
|
+
let connectionTimeout = (settings.connectionTimeout === undefined) ?
|
|
163
|
+
config.getCurrent().DEFAULT_CONNECTION_TIMEOUT :
|
|
164
|
+
settings.connectionTimeout;
|
|
163
165
|
if (requestTimeout < 0) {
|
|
164
166
|
requestTimeout = undefined;
|
|
165
167
|
}
|
|
166
|
-
|
|
168
|
+
if (connectionTimeout < 0) {
|
|
169
|
+
connectionTimeout = undefined;
|
|
170
|
+
}
|
|
171
|
+
const callLoader = () => loadManifest(manifestUrl, {
|
|
172
|
+
timeout: requestTimeout,
|
|
173
|
+
connectionTimeout,
|
|
174
|
+
}, cancelSignal);
|
|
167
175
|
return scheduleRequestPromise(callLoader, backoffSettings, cancelSignal);
|
|
168
176
|
}
|
|
169
177
|
}
|
|
@@ -135,14 +135,21 @@ export interface ISegmentFetcherOptions {
|
|
|
135
135
|
* To set to `-1` for no timeout.
|
|
136
136
|
*/
|
|
137
137
|
requestTimeout: number;
|
|
138
|
+
/**
|
|
139
|
+
* Connection timeout, in milliseconds, after which the request is canceled
|
|
140
|
+
* if the responses headers has not being received.
|
|
141
|
+
* Do not set or set to "undefined" to disable it.
|
|
142
|
+
*/
|
|
143
|
+
connectionTimeout: number | undefined;
|
|
138
144
|
}
|
|
139
145
|
/**
|
|
140
146
|
* @param {string} bufferType
|
|
141
147
|
* @param {Object}
|
|
142
148
|
* @returns {Object}
|
|
143
149
|
*/
|
|
144
|
-
export declare function getSegmentFetcherOptions({ maxRetry, lowLatencyMode, requestTimeout }: {
|
|
150
|
+
export declare function getSegmentFetcherOptions({ maxRetry, lowLatencyMode, requestTimeout, connectionTimeout }: {
|
|
145
151
|
maxRetry?: number | undefined;
|
|
146
152
|
requestTimeout?: number | undefined;
|
|
153
|
+
connectionTimeout?: number | undefined;
|
|
147
154
|
lowLatencyMode: boolean;
|
|
148
155
|
}): ISegmentFetcherOptions;
|
|
@@ -56,6 +56,8 @@ export default function createSegmentFetcher(bufferType, pipeline, cdnPrioritize
|
|
|
56
56
|
const requestOptions = {
|
|
57
57
|
timeout: options.requestTimeout < 0 ? undefined :
|
|
58
58
|
options.requestTimeout,
|
|
59
|
+
connectionTimeout: options.connectionTimeout === undefined ? undefined :
|
|
60
|
+
options.connectionTimeout < 0 ? undefined : options.connectionTimeout,
|
|
59
61
|
};
|
|
60
62
|
/**
|
|
61
63
|
* Cache audio and video initialization segments.
|
|
@@ -283,13 +285,15 @@ export default function createSegmentFetcher(bufferType, pipeline, cdnPrioritize
|
|
|
283
285
|
* @param {Object}
|
|
284
286
|
* @returns {Object}
|
|
285
287
|
*/
|
|
286
|
-
export function getSegmentFetcherOptions({ maxRetry, lowLatencyMode, requestTimeout }) {
|
|
287
|
-
const { DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR, DEFAULT_REQUEST_TIMEOUT, INITIAL_BACKOFF_DELAY_BASE, MAX_BACKOFF_DELAY_BASE } = config.getCurrent();
|
|
288
|
+
export function getSegmentFetcherOptions({ maxRetry, lowLatencyMode, requestTimeout, connectionTimeout }) {
|
|
289
|
+
const { DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR, DEFAULT_REQUEST_TIMEOUT, DEFAULT_CONNECTION_TIMEOUT, INITIAL_BACKOFF_DELAY_BASE, MAX_BACKOFF_DELAY_BASE } = config.getCurrent();
|
|
288
290
|
return { maxRetry: maxRetry !== null && maxRetry !== void 0 ? maxRetry : DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR,
|
|
289
291
|
baseDelay: lowLatencyMode ? INITIAL_BACKOFF_DELAY_BASE.LOW_LATENCY :
|
|
290
292
|
INITIAL_BACKOFF_DELAY_BASE.REGULAR,
|
|
291
293
|
maxDelay: lowLatencyMode ? MAX_BACKOFF_DELAY_BASE.LOW_LATENCY :
|
|
292
294
|
MAX_BACKOFF_DELAY_BASE.REGULAR,
|
|
293
|
-
requestTimeout:
|
|
294
|
-
requestTimeout
|
|
295
|
+
requestTimeout: (requestTimeout === undefined) ? DEFAULT_REQUEST_TIMEOUT :
|
|
296
|
+
requestTimeout,
|
|
297
|
+
connectionTimeout: (connectionTimeout === undefined) ?
|
|
298
|
+
DEFAULT_CONNECTION_TIMEOUT : connectionTimeout, };
|
|
295
299
|
}
|
|
@@ -287,7 +287,7 @@ export async function scheduleRequestWithCdns(cdns, cdnPrioritizer, performReque
|
|
|
287
287
|
* attempts already done for that resource.
|
|
288
288
|
*
|
|
289
289
|
* Returns `undefined` if there's no Cdn left to request the resource.
|
|
290
|
-
* @param {Array.<Object>}
|
|
290
|
+
* @param {Array.<Object>} sortedCdns
|
|
291
291
|
* @returns {Object|undefined}
|
|
292
292
|
*/
|
|
293
293
|
function getPrioritaryRequestableCdnFromSortedList(sortedCdns) {
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
import { clearElementSrc } from "../../compat";
|
|
21
21
|
import log from "../../log";
|
|
22
22
|
import assert from "../../utils/assert";
|
|
23
|
+
import isNullOrUndefined from "../../utils/is_null_or_undefined";
|
|
23
24
|
import SharedReference from "../../utils/reference";
|
|
24
25
|
import TaskCanceller from "../../utils/task_canceller";
|
|
25
26
|
import { ContentInitializer } from "./types";
|
|
@@ -174,10 +175,10 @@ export default class DirectFileContentInitializer extends ContentInitializer {
|
|
|
174
175
|
* @returns {number}
|
|
175
176
|
*/
|
|
176
177
|
function getDirectFileInitialTime(mediaElement, startAt) {
|
|
177
|
-
if (startAt
|
|
178
|
+
if (isNullOrUndefined(startAt)) {
|
|
178
179
|
return 0;
|
|
179
180
|
}
|
|
180
|
-
if (startAt.position
|
|
181
|
+
if (!isNullOrUndefined(startAt.position)) {
|
|
181
182
|
return startAt.position;
|
|
182
183
|
}
|
|
183
184
|
else if (startAt.wallClockTime != null) {
|
|
@@ -187,15 +188,31 @@ function getDirectFileInitialTime(mediaElement, startAt) {
|
|
|
187
188
|
return startAt.fromFirstPosition;
|
|
188
189
|
}
|
|
189
190
|
const duration = mediaElement.duration;
|
|
190
|
-
if (duration == null || !isFinite(duration)) {
|
|
191
|
-
log.warn("startAt.fromLastPosition set but no known duration, " +
|
|
192
|
-
"beginning at 0.");
|
|
193
|
-
return 0;
|
|
194
|
-
}
|
|
195
191
|
if (typeof startAt.fromLastPosition === "number") {
|
|
192
|
+
if (isNullOrUndefined(duration) || !isFinite(duration)) {
|
|
193
|
+
log.warn("startAt.fromLastPosition set but no known duration, " +
|
|
194
|
+
"beginning at 0.");
|
|
195
|
+
return 0;
|
|
196
|
+
}
|
|
196
197
|
return Math.max(0, duration + startAt.fromLastPosition);
|
|
197
198
|
}
|
|
199
|
+
else if (typeof startAt.fromLivePosition === "number") {
|
|
200
|
+
const livePosition = mediaElement.seekable.length > 0 ?
|
|
201
|
+
mediaElement.seekable.end(0) :
|
|
202
|
+
duration;
|
|
203
|
+
if (isNullOrUndefined(livePosition)) {
|
|
204
|
+
log.warn("startAt.fromLivePosition set but no known live position, " +
|
|
205
|
+
"beginning at 0.");
|
|
206
|
+
return 0;
|
|
207
|
+
}
|
|
208
|
+
return Math.max(0, livePosition + startAt.fromLivePosition);
|
|
209
|
+
}
|
|
198
210
|
else if (startAt.percentage != null) {
|
|
211
|
+
if (isNullOrUndefined(duration) || !isFinite(duration)) {
|
|
212
|
+
log.warn("startAt.percentage set but no known duration, " +
|
|
213
|
+
"beginning at 0.");
|
|
214
|
+
return 0;
|
|
215
|
+
}
|
|
199
216
|
const { percentage } = startAt;
|
|
200
217
|
if (percentage >= 100) {
|
|
201
218
|
return duration;
|
|
@@ -160,6 +160,12 @@ export interface IInitializeArguments {
|
|
|
160
160
|
* `-1` indicates no timeout.
|
|
161
161
|
*/
|
|
162
162
|
requestTimeout: number | undefined;
|
|
163
|
+
/**
|
|
164
|
+
* Amount of time, in milliseconds, after which a request that hasn't receive
|
|
165
|
+
* the headers and status code should be aborted and optionnaly retried,
|
|
166
|
+
* depending on the maxRetry configuration.
|
|
167
|
+
*/
|
|
168
|
+
connectionTimeout: number | undefined;
|
|
163
169
|
/** Maximum number of time a request on error will be retried. */
|
|
164
170
|
maxRetry: number | undefined;
|
|
165
171
|
};
|
|
@@ -359,7 +359,7 @@ export default class MediaSourceContentInitializer extends ContentInitializer {
|
|
|
359
359
|
if (
|
|
360
360
|
// Data is buffered around the current position
|
|
361
361
|
obs.currentRange !== null ||
|
|
362
|
-
// Or, for whatever reason,
|
|
362
|
+
// Or, for whatever reason, we have no buffer but we're already advancing
|
|
363
363
|
obs.position > seekedTime + 0.1) {
|
|
364
364
|
stopListening();
|
|
365
365
|
playbackObserver.setCurrentTime(obs.position + 0.001);
|
|
@@ -512,9 +512,7 @@ export default class MediaSourceContentInitializer extends ContentInitializer {
|
|
|
512
512
|
contentTimeBoundariesObserver.addEventListener("periodChange", (period) => {
|
|
513
513
|
this.trigger("activePeriodChanged", { period });
|
|
514
514
|
});
|
|
515
|
-
contentTimeBoundariesObserver.addEventListener("
|
|
516
|
-
mediaSourceDurationUpdater.updateDuration(newDuration.duration, newDuration.isEnd);
|
|
517
|
-
});
|
|
515
|
+
contentTimeBoundariesObserver.addEventListener("endingPositionChange", (x) => mediaSourceDurationUpdater.updateDuration(x.endingPosition, x.isEnd));
|
|
518
516
|
contentTimeBoundariesObserver.addEventListener("endOfStream", () => {
|
|
519
517
|
if (endOfStreamCanceller === null) {
|
|
520
518
|
endOfStreamCanceller = new TaskCanceller();
|
|
@@ -530,8 +528,8 @@ export default class MediaSourceContentInitializer extends ContentInitializer {
|
|
|
530
528
|
endOfStreamCanceller = null;
|
|
531
529
|
}
|
|
532
530
|
});
|
|
533
|
-
const
|
|
534
|
-
mediaSourceDurationUpdater.updateDuration(
|
|
531
|
+
const endInfo = contentTimeBoundariesObserver.getCurrentEndingTime();
|
|
532
|
+
mediaSourceDurationUpdater.updateDuration(endInfo.endingPosition, endInfo.isEnd);
|
|
535
533
|
return contentTimeBoundariesObserver;
|
|
536
534
|
}
|
|
537
535
|
/**
|
|
@@ -22,8 +22,8 @@ import { IStreamOrchestratorPlaybackObservation } from "../../stream";
|
|
|
22
22
|
/**
|
|
23
23
|
* Observes what's being played and take care of media events relating to time
|
|
24
24
|
* boundaries:
|
|
25
|
-
* - Emits a `
|
|
26
|
-
* known and every time it changes.
|
|
25
|
+
* - Emits a `endingPositionChange` when the known maximum playable position
|
|
26
|
+
* of the current content is known and every time it changes.
|
|
27
27
|
* - Emits `endOfStream` API once segments have been pushed until the end and
|
|
28
28
|
* `resumeStream` if downloads starts back.
|
|
29
29
|
* - Emits a `periodChange` event when the currently-playing Period seemed to
|
|
@@ -56,10 +56,11 @@ export default class ContentTimeBoundariesObserver extends EventEmitter<IContent
|
|
|
56
56
|
*/
|
|
57
57
|
constructor(manifest: Manifest, playbackObserver: IReadOnlyPlaybackObserver<IStreamOrchestratorPlaybackObservation>, bufferTypes: IBufferType[]);
|
|
58
58
|
/**
|
|
59
|
-
* Returns an estimate of the current
|
|
59
|
+
* Returns an estimate of the current last position which may be played in
|
|
60
|
+
* the content at the moment.
|
|
60
61
|
* @returns {Object}
|
|
61
62
|
*/
|
|
62
|
-
|
|
63
|
+
getCurrentEndingTime(): IEndingPositionInformation;
|
|
63
64
|
/**
|
|
64
65
|
* Method to call any time an Adaptation has been selected.
|
|
65
66
|
*
|
|
@@ -126,20 +127,20 @@ export default class ContentTimeBoundariesObserver extends EventEmitter<IContent
|
|
|
126
127
|
private _addActivelyLoadedPeriod;
|
|
127
128
|
private _removeActivelyLoadedPeriod;
|
|
128
129
|
private _checkCurrentPeriod;
|
|
129
|
-
private
|
|
130
|
+
private _getManifestEndTime;
|
|
130
131
|
private _lazilyCreateActiveStreamInfo;
|
|
131
132
|
private _checkEndOfStream;
|
|
132
133
|
}
|
|
133
|
-
export interface
|
|
134
|
+
export interface IEndingPositionInformation {
|
|
134
135
|
/**
|
|
135
136
|
* The new maximum known position (note that this is the ending position
|
|
136
137
|
* currently known of the current content, it might be superior to the last
|
|
137
138
|
* position at which segments are available and it might also evolve over
|
|
138
139
|
* time), in seconds.
|
|
139
140
|
*/
|
|
140
|
-
|
|
141
|
+
endingPosition: number;
|
|
141
142
|
/**
|
|
142
|
-
* If `true`, the communicated `
|
|
143
|
+
* If `true`, the communicated `endingPosition` is the actual end of the content.
|
|
143
144
|
* It may still be updated due to a track change or to add precision, but it
|
|
144
145
|
* is still a (rough) estimate of the maximum position that content should
|
|
145
146
|
* have.
|
|
@@ -147,7 +148,7 @@ export interface IDurationItem {
|
|
|
147
148
|
* If `false`, this is the currently known maximum position associated to
|
|
148
149
|
* the content, but the content is still evolving (typically, new media
|
|
149
150
|
* segments are still being generated) and as such it can still have a
|
|
150
|
-
* longer
|
|
151
|
+
* longer `endingPosition` in the future.
|
|
151
152
|
*/
|
|
152
153
|
isEnd: boolean;
|
|
153
154
|
}
|
|
@@ -161,10 +162,10 @@ export interface IContentTimeBoundariesObserverEvent {
|
|
|
161
162
|
/** Triggered when a new `Period` is currently playing. */
|
|
162
163
|
periodChange: Period;
|
|
163
164
|
/**
|
|
164
|
-
* Triggered when the
|
|
165
|
-
* or changed.
|
|
165
|
+
* Triggered when the ending position of the currently-playing content became
|
|
166
|
+
* known or changed.
|
|
166
167
|
*/
|
|
167
|
-
|
|
168
|
+
endingPositionChange: IEndingPositionInformation;
|
|
168
169
|
/**
|
|
169
170
|
* Triggered when the last possible chronological segment for all types of
|
|
170
171
|
* buffers has either been pushed or is being pushed to the corresponding
|
|
@@ -21,8 +21,8 @@ import TaskCanceller from "../../../utils/task_canceller";
|
|
|
21
21
|
/**
|
|
22
22
|
* Observes what's being played and take care of media events relating to time
|
|
23
23
|
* boundaries:
|
|
24
|
-
* - Emits a `
|
|
25
|
-
* known and every time it changes.
|
|
24
|
+
* - Emits a `endingPositionChange` when the known maximum playable position
|
|
25
|
+
* of the current content is known and every time it changes.
|
|
26
26
|
* - Emits `endOfStream` API once segments have been pushed until the end and
|
|
27
27
|
* `resumeStream` if downloads starts back.
|
|
28
28
|
* - Emits a `periodChange` event when the currently-playing Period seemed to
|
|
@@ -65,7 +65,7 @@ export default class ContentTimeBoundariesObserver extends EventEmitter {
|
|
|
65
65
|
}
|
|
66
66
|
}, { includeLastObservation: true, clearSignal: cancelSignal });
|
|
67
67
|
manifest.addEventListener("manifestUpdate", () => {
|
|
68
|
-
this.trigger("
|
|
68
|
+
this.trigger("endingPositionChange", this._getManifestEndTime());
|
|
69
69
|
if (cancelSignal.isCancelled()) {
|
|
70
70
|
return;
|
|
71
71
|
}
|
|
@@ -73,11 +73,12 @@ export default class ContentTimeBoundariesObserver extends EventEmitter {
|
|
|
73
73
|
}, cancelSignal);
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
|
-
* Returns an estimate of the current
|
|
76
|
+
* Returns an estimate of the current last position which may be played in
|
|
77
|
+
* the content at the moment.
|
|
77
78
|
* @returns {Object}
|
|
78
79
|
*/
|
|
79
|
-
|
|
80
|
-
return this.
|
|
80
|
+
getCurrentEndingTime() {
|
|
81
|
+
return this._getManifestEndTime();
|
|
81
82
|
}
|
|
82
83
|
/**
|
|
83
84
|
* Method to call any time an Adaptation has been selected.
|
|
@@ -106,12 +107,13 @@ export default class ContentTimeBoundariesObserver extends EventEmitter {
|
|
|
106
107
|
.updateLastVideoAdaptation(adaptation);
|
|
107
108
|
}
|
|
108
109
|
const endingPosition = this._maximumPositionCalculator.getEndingPosition();
|
|
109
|
-
const
|
|
110
|
+
const newEndingPosition = endingPosition !== undefined ?
|
|
110
111
|
{ isEnd: true,
|
|
111
|
-
|
|
112
|
+
endingPosition } :
|
|
112
113
|
{ isEnd: false,
|
|
113
|
-
|
|
114
|
-
|
|
114
|
+
endingPosition: this._maximumPositionCalculator
|
|
115
|
+
.getMaximumAvailablePosition() };
|
|
116
|
+
this.trigger("endingPositionChange", newEndingPosition);
|
|
115
117
|
}
|
|
116
118
|
}
|
|
117
119
|
}
|
|
@@ -238,13 +240,13 @@ export default class ContentTimeBoundariesObserver extends EventEmitter {
|
|
|
238
240
|
}
|
|
239
241
|
}
|
|
240
242
|
}
|
|
241
|
-
|
|
243
|
+
_getManifestEndTime() {
|
|
242
244
|
const endingPosition = this._maximumPositionCalculator.getEndingPosition();
|
|
243
245
|
return endingPosition !== undefined ?
|
|
244
246
|
{ isEnd: true,
|
|
245
|
-
|
|
247
|
+
endingPosition } :
|
|
246
248
|
{ isEnd: false,
|
|
247
|
-
|
|
249
|
+
endingPosition: this._maximumPositionCalculator.getMaximumAvailablePosition() };
|
|
248
250
|
}
|
|
249
251
|
_lazilyCreateActiveStreamInfo(bufferType) {
|
|
250
252
|
let streamInfo = this._activeStreams.get(bufferType);
|
|
@@ -315,9 +317,8 @@ class MaximumPositionCalculator {
|
|
|
315
317
|
* @returns {number}
|
|
316
318
|
*/
|
|
317
319
|
getMaximumAvailablePosition() {
|
|
318
|
-
var _a;
|
|
319
320
|
if (this._manifest.isDynamic) {
|
|
320
|
-
return
|
|
321
|
+
return this._manifest.getMaximumSafePosition();
|
|
321
322
|
}
|
|
322
323
|
if (this._lastVideoAdaptation === undefined ||
|
|
323
324
|
this._lastAudioAdaptation === undefined) {
|
|
@@ -37,11 +37,25 @@ export interface IInitialTimeOptions {
|
|
|
37
37
|
*/
|
|
38
38
|
fromFirstPosition?: number | null | undefined;
|
|
39
39
|
/**
|
|
40
|
-
* If set, we should begin at this position relative to the content's
|
|
41
|
-
* in seconds.
|
|
40
|
+
* If set, we should begin at this position relative to the content's maximum
|
|
41
|
+
* seekable position, in seconds.
|
|
42
|
+
*
|
|
43
|
+
* It should consequently in most cases be a negative value.
|
|
42
44
|
*/
|
|
43
45
|
fromLastPosition?: number | null | undefined;
|
|
44
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* If set, we should begin at this position relative to the content's live
|
|
48
|
+
* edge if it makes sense, in seconds.
|
|
49
|
+
*
|
|
50
|
+
* It should consequently in most cases be a negative value.
|
|
51
|
+
*
|
|
52
|
+
* If the live edge is unknown or if it does not make sense for the current
|
|
53
|
+
* content, that position is relative to the content's maximum position
|
|
54
|
+
* instead.
|
|
55
|
+
*/
|
|
56
|
+
fromLivePosition?: number | null | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* If set, we should begin at this position relative to the whole duration of
|
|
45
59
|
* the content, in percentage.
|
|
46
60
|
*/
|
|
47
61
|
percentage?: number | null | undefined;
|