rx-player 4.0.0-dev.2023110700 → 4.0.0-dev.2023120600
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -226
- 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 +14 -35
- package/dist/_esm5.processed/core/api/option_utils.js +47 -230
- package/dist/_esm5.processed/core/api/public_api.d.ts +92 -266
- package/dist/_esm5.processed/core/api/public_api.js +451 -807
- 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/html/text_track_cues_store.js +54 -6
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/utils.d.ts +2 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/utils.js +19 -2
- 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 +33 -10
- 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/convert_supplemental_codecs.d.ts +17 -0
- package/dist/_esm5.processed/parsers/manifest/dash/common/convert_supplemental_codecs.js +26 -0
- package/dist/_esm5.processed/parsers/manifest/dash/common/flatten_overlapping_periods.js +5 -0
- 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/common/parse_representations.js +29 -17
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +13 -6
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +7 -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 +6 -4
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +7 -6
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +5 -2
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
- 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 +4 -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/compat/patch_webkit_source_buffer.js +2 -2
- 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 +4 -0
- package/dist/commonjs/core/api/option_utils.js +8 -3
- package/dist/commonjs/core/api/public_api.d.ts +11 -1
- package/dist/commonjs/core/api/public_api.js +46 -11
- 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/segment_buffers/implementations/text/html/text_track_cues_store.js +54 -6
- package/dist/commonjs/core/segment_buffers/implementations/text/html/utils.d.ts +2 -1
- package/dist/commonjs/core/segment_buffers/implementations/text/html/utils.js +19 -2
- package/dist/commonjs/core/stream/adaptation/adaptation_stream.js +2 -2
- package/dist/commonjs/core/stream/orchestrator/stream_orchestrator.js +3 -3
- package/dist/commonjs/core/stream/period/period_stream.js +2 -2
- 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.js +18 -5
- 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/convert_supplemental_codecs.d.ts +17 -0
- package/dist/commonjs/parsers/manifest/dash/common/convert_supplemental_codecs.js +30 -0
- package/dist/commonjs/parsers/manifest/dash/common/flatten_overlapping_periods.js +5 -0
- 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 +36 -20
- package/dist/commonjs/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +3 -0
- package/dist/commonjs/parsers/manifest/dash/js-parser/node_parsers/Representation.js +3 -0
- package/dist/commonjs/parsers/manifest/dash/node_parser_types.d.ts +2 -0
- package/dist/commonjs/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +4 -0
- package/dist/commonjs/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +4 -0
- package/dist/commonjs/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
- 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/types.d.ts +1 -0
- 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/queue_microtask.d.ts +2 -0
- package/dist/commonjs/utils/queue_microtask.js +7 -0
- 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/compat/patch_webkit_source_buffer.js +2 -2
- 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 +4 -0
- package/dist/es2017/core/api/option_utils.js +8 -3
- package/dist/es2017/core/api/public_api.d.ts +11 -1
- package/dist/es2017/core/api/public_api.js +44 -9
- 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/segment_buffers/implementations/text/html/text_track_cues_store.js +54 -6
- package/dist/es2017/core/segment_buffers/implementations/text/html/utils.d.ts +2 -1
- package/dist/es2017/core/segment_buffers/implementations/text/html/utils.js +18 -2
- package/dist/es2017/core/stream/adaptation/adaptation_stream.js +2 -2
- package/dist/es2017/core/stream/orchestrator/stream_orchestrator.js +3 -3
- package/dist/es2017/core/stream/period/period_stream.js +2 -2
- 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.js +18 -5
- 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/convert_supplemental_codecs.d.ts +17 -0
- package/dist/es2017/parsers/manifest/dash/common/convert_supplemental_codecs.js +26 -0
- package/dist/es2017/parsers/manifest/dash/common/flatten_overlapping_periods.js +5 -0
- 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 +36 -20
- package/dist/es2017/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +3 -0
- package/dist/es2017/parsers/manifest/dash/js-parser/node_parsers/Representation.js +3 -0
- package/dist/es2017/parsers/manifest/dash/node_parser_types.d.ts +2 -0
- package/dist/es2017/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +4 -0
- package/dist/es2017/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +4 -0
- package/dist/es2017/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
- 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/types.d.ts +1 -0
- 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/queue_microtask.d.ts +2 -0
- package/dist/es2017/utils/queue_microtask.js +5 -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/mpd-parser.wasm +0 -0
- package/dist/rx-player.js +900 -492
- package/dist/rx-player.min.js +1 -1
- package/package.json +3 -7
- package/scripts/update-version +2 -0
- package/sonar-project.properties +1 -1
- package/src/compat/is_codec_supported.ts +23 -1
- package/src/compat/patch_webkit_source_buffer.ts +2 -2
- 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 +11 -3
- package/src/core/api/public_api.ts +48 -8
- 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/segment_buffers/implementations/text/html/__tests__/utils.test.ts +15 -0
- package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +57 -6
- package/src/core/segment_buffers/implementations/text/html/utils.ts +19 -2
- package/src/core/stream/adaptation/adaptation_stream.ts +2 -2
- package/src/core/stream/orchestrator/stream_orchestrator.ts +3 -3
- package/src/core/stream/period/period_stream.ts +2 -2
- 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.ts +19 -6
- 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__/convert_supplemental_codecs.test.ts +37 -0
- package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +20 -0
- package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +182 -36
- package/src/parsers/manifest/dash/common/convert_supplemental_codecs.ts +32 -0
- package/src/parsers/manifest/dash/common/flatten_overlapping_periods.ts +5 -0
- 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 +39 -20
- package/src/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.ts +4 -0
- package/src/parsers/manifest/dash/js-parser/node_parsers/Representation.ts +4 -0
- package/src/parsers/manifest/dash/node_parser_types.ts +2 -0
- package/src/parsers/manifest/dash/wasm-parser/rs/events.rs +2 -0
- package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +2 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.ts +4 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/Representation.ts +4 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +2 -0
- 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/types.ts +2 -0
- 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/queue_microtask.ts +7 -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/next-tick.d.ts +0 -23
- package/src/typings/object-assign.d.ts +0 -48
|
@@ -27,10 +27,11 @@ function request(options) {
|
|
|
27
27
|
responseType: (0, is_null_or_undefined_1.default)(options.responseType) ? DEFAULT_RESPONSE_TYPE :
|
|
28
28
|
options.responseType,
|
|
29
29
|
timeout: options.timeout,
|
|
30
|
+
connectionTimeout: options.connectionTimeout,
|
|
30
31
|
};
|
|
31
32
|
return new Promise(function (resolve, reject) {
|
|
32
33
|
var onProgress = options.onProgress, cancelSignal = options.cancelSignal;
|
|
33
|
-
var url = requestOptions.url, headers = requestOptions.headers, responseType = requestOptions.responseType, timeout = requestOptions.timeout;
|
|
34
|
+
var url = requestOptions.url, headers = requestOptions.headers, responseType = requestOptions.responseType, timeout = requestOptions.timeout, connectionTimeout = requestOptions.connectionTimeout;
|
|
34
35
|
var xhr = new XMLHttpRequest();
|
|
35
36
|
xhr.open("GET", url, true);
|
|
36
37
|
var timeoutId;
|
|
@@ -44,9 +45,19 @@ function request(options) {
|
|
|
44
45
|
// is more precise, it might also be more efficient.
|
|
45
46
|
timeoutId = setTimeout(function () {
|
|
46
47
|
clearCancellingProcess();
|
|
47
|
-
reject(new errors_1.RequestError(url, xhr.status,
|
|
48
|
+
reject(new errors_1.RequestError(url, xhr.status, errors_1.NetworkErrorTypes.TIMEOUT));
|
|
48
49
|
}, timeout + 3000);
|
|
49
50
|
}
|
|
51
|
+
var connectionTimeoutId;
|
|
52
|
+
if (connectionTimeout !== undefined) {
|
|
53
|
+
connectionTimeoutId = setTimeout(function () {
|
|
54
|
+
clearCancellingProcess();
|
|
55
|
+
if (xhr.readyState !== XMLHttpRequest.DONE) {
|
|
56
|
+
xhr.abort();
|
|
57
|
+
}
|
|
58
|
+
reject(new errors_1.RequestError(url, xhr.status, errors_1.NetworkErrorTypes.TIMEOUT));
|
|
59
|
+
}, connectionTimeout);
|
|
60
|
+
}
|
|
50
61
|
xhr.responseType = responseType;
|
|
51
62
|
if (xhr.responseType === "document") {
|
|
52
63
|
xhr.overrideMimeType("text/xml");
|
|
@@ -66,7 +77,7 @@ function request(options) {
|
|
|
66
77
|
deregisterCancellationListener = cancelSignal
|
|
67
78
|
.register(function abortRequest(err) {
|
|
68
79
|
clearCancellingProcess();
|
|
69
|
-
if (
|
|
80
|
+
if (xhr.readyState !== XMLHttpRequest.DONE) {
|
|
70
81
|
xhr.abort();
|
|
71
82
|
}
|
|
72
83
|
reject(err);
|
|
@@ -77,12 +88,19 @@ function request(options) {
|
|
|
77
88
|
}
|
|
78
89
|
xhr.onerror = function onXHRError() {
|
|
79
90
|
clearCancellingProcess();
|
|
80
|
-
reject(new errors_1.RequestError(url, xhr.status,
|
|
91
|
+
reject(new errors_1.RequestError(url, xhr.status, errors_1.NetworkErrorTypes.ERROR_EVENT));
|
|
81
92
|
};
|
|
82
93
|
xhr.ontimeout = function onXHRTimeout() {
|
|
83
94
|
clearCancellingProcess();
|
|
84
|
-
reject(new errors_1.RequestError(url, xhr.status,
|
|
95
|
+
reject(new errors_1.RequestError(url, xhr.status, errors_1.NetworkErrorTypes.TIMEOUT));
|
|
85
96
|
};
|
|
97
|
+
if (connectionTimeout !== undefined) {
|
|
98
|
+
xhr.onreadystatechange = function clearConnectionTimeout() {
|
|
99
|
+
if (xhr.readyState >= XMLHttpRequest.HEADERS_RECEIVED) {
|
|
100
|
+
clearTimeout(connectionTimeoutId);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
}
|
|
86
104
|
if (onProgress !== undefined) {
|
|
87
105
|
xhr.onprogress = function onXHRProgress(event) {
|
|
88
106
|
var currentTime = (0, monotonic_timestamp_1.default)();
|
|
@@ -91,7 +109,7 @@ function request(options) {
|
|
|
91
109
|
};
|
|
92
110
|
}
|
|
93
111
|
xhr.onload = function onXHRLoad(event) {
|
|
94
|
-
if (xhr.readyState ===
|
|
112
|
+
if (xhr.readyState === XMLHttpRequest.DONE) {
|
|
95
113
|
clearCancellingProcess();
|
|
96
114
|
if (xhr.status >= 200 && xhr.status < 300) {
|
|
97
115
|
var receivedTime = (0, monotonic_timestamp_1.default)();
|
|
@@ -115,7 +133,7 @@ function request(options) {
|
|
|
115
133
|
responseData = xhr.response;
|
|
116
134
|
}
|
|
117
135
|
if ((0, is_null_or_undefined_1.default)(responseData)) {
|
|
118
|
-
reject(new errors_1.RequestError(url, xhr.status,
|
|
136
|
+
reject(new errors_1.RequestError(url, xhr.status, errors_1.NetworkErrorTypes.PARSE_ERROR));
|
|
119
137
|
return;
|
|
120
138
|
}
|
|
121
139
|
resolve({ status: status_1, url: _url,
|
|
@@ -123,7 +141,7 @@ function request(options) {
|
|
|
123
141
|
size: totalSize, responseData: responseData });
|
|
124
142
|
}
|
|
125
143
|
else {
|
|
126
|
-
reject(new errors_1.RequestError(url, xhr.status,
|
|
144
|
+
reject(new errors_1.RequestError(url, xhr.status, errors_1.NetworkErrorTypes.ERROR_HTTP_CODE));
|
|
127
145
|
}
|
|
128
146
|
}
|
|
129
147
|
};
|
|
@@ -135,6 +153,9 @@ function request(options) {
|
|
|
135
153
|
if (timeoutId !== undefined) {
|
|
136
154
|
clearTimeout(timeoutId);
|
|
137
155
|
}
|
|
156
|
+
if (connectionTimeoutId !== undefined) {
|
|
157
|
+
clearTimeout(connectionTimeoutId);
|
|
158
|
+
}
|
|
138
159
|
if (deregisterCancellationListener !== null) {
|
|
139
160
|
deregisterCancellationListener();
|
|
140
161
|
}
|
|
@@ -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
|
}
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import nextTick from "next-tick";
|
|
17
16
|
import EventEmitter from "../utils/event_emitter";
|
|
17
|
+
import queueMicrotask from "../utils/queue_microtask";
|
|
18
18
|
import globalScope from "./global_scope";
|
|
19
19
|
import isNode from "./is_node";
|
|
20
20
|
// TODO This is the last ugly side-effect here.
|
|
@@ -41,7 +41,7 @@ export default function patchWebkitSourceBuffer() {
|
|
|
41
41
|
sourceBufferWebkitProto._listeners = [];
|
|
42
42
|
sourceBufferWebkitProto._emitUpdate =
|
|
43
43
|
function (eventName, val) {
|
|
44
|
-
|
|
44
|
+
queueMicrotask(() => {
|
|
45
45
|
/* eslint-disable no-invalid-this */
|
|
46
46
|
this.trigger(eventName, val);
|
|
47
47
|
this.updating = false;
|
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
|
}
|
|
@@ -23,6 +23,8 @@ export type IParsedStartAtOption = {
|
|
|
23
23
|
percentage: number;
|
|
24
24
|
} | {
|
|
25
25
|
fromLastPosition: number;
|
|
26
|
+
} | {
|
|
27
|
+
fromLivePosition: number;
|
|
26
28
|
} | {
|
|
27
29
|
fromFirstPosition: number;
|
|
28
30
|
};
|
|
@@ -103,6 +105,8 @@ declare function checkReloadOptions(options?: {
|
|
|
103
105
|
position?: number;
|
|
104
106
|
relative?: number;
|
|
105
107
|
};
|
|
108
|
+
keySystems?: IKeySystemOption[];
|
|
109
|
+
autoPlay?: boolean;
|
|
106
110
|
}): void;
|
|
107
111
|
/**
|
|
108
112
|
* Parse options given to loadVideo and set default options as found
|
|
@@ -139,6 +139,12 @@ function checkReloadOptions(options) {
|
|
|
139
139
|
((_d = options === null || options === void 0 ? void 0 : options.reloadAt) === null || _d === void 0 ? void 0 : _d.relative) !== undefined) {
|
|
140
140
|
throw new Error("API: reload - Invalid 'reloadAt.relative' option format.");
|
|
141
141
|
}
|
|
142
|
+
if (!Array.isArray(options === null || options === void 0 ? void 0 : options.keySystems) && (options === null || options === void 0 ? void 0 : options.keySystems) !== undefined) {
|
|
143
|
+
throw new Error("API: reload - Invalid 'keySystems' option format.");
|
|
144
|
+
}
|
|
145
|
+
if ((options === null || options === void 0 ? void 0 : options.autoPlay) !== undefined && typeof options.autoPlay !== "boolean") {
|
|
146
|
+
throw new Error("API: reload - Invalid 'autoPlay' option format.");
|
|
147
|
+
}
|
|
142
148
|
}
|
|
143
149
|
/**
|
|
144
150
|
* Parse options given to loadVideo and set default options as found
|
|
@@ -253,9 +259,8 @@ function parseLoadVideoOptions(options) {
|
|
|
253
259
|
"an \"html\" textTrackMode. It will be ignored.");
|
|
254
260
|
}
|
|
255
261
|
if (!isNullOrUndefined(options.startAt)) {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
instanceof Date) {
|
|
262
|
+
if ("wallClockTime" in options.startAt
|
|
263
|
+
&& options.startAt.wallClockTime instanceof Date) {
|
|
259
264
|
const wallClockTime = options.startAt
|
|
260
265
|
.wallClockTime.getTime() / 1000;
|
|
261
266
|
startAt = objectAssign({}, options.startAt, { wallClockTime });
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
import { IErrorCode, IErrorType } from "../../errors";
|
|
17
17
|
import { IFeature } from "../../features";
|
|
18
18
|
import Manifest, { Adaptation, Representation } from "../../manifest";
|
|
19
|
-
import { IAudioRepresentation, IAudioTrack, IAudioTrackSetting, IAvailableAudioTrack, IAvailableTextTrack, IAvailableVideoTrack, IBrokenRepresentationsLockContext, IConstructorOptions, IKeySystemConfigurationOutput, ILoadVideoOptions, ILockedAudioRepresentationsSettings, ILockedVideoRepresentationsSettings, ITrackUpdateEventPayload, IRepresentationListUpdateContext, IPeriod, IPeriodChangeEvent, IPlayerError, IPlayerState, IPositionUpdate, IStreamEvent, ITextTrack, IVideoRepresentation, ITextTrackSetting, IVideoTrack, IVideoTrackSetting } from "../../public_types";
|
|
19
|
+
import { IAudioRepresentation, IAudioTrack, IAudioTrackSetting, IAvailableAudioTrack, IAvailableTextTrack, IAvailableVideoTrack, IBrokenRepresentationsLockContext, IConstructorOptions, IKeySystemConfigurationOutput, IKeySystemOption, ILoadVideoOptions, ILockedAudioRepresentationsSettings, ILockedVideoRepresentationsSettings, ITrackUpdateEventPayload, IRepresentationListUpdateContext, IPeriod, IPeriodChangeEvent, IPlayerError, IPlayerState, IPositionUpdate, IStreamEvent, ITextTrack, IVideoRepresentation, ITextTrackSetting, IVideoTrack, IVideoTrackSetting } from "../../public_types";
|
|
20
20
|
import EventEmitter, { IListener } from "../../utils/event_emitter";
|
|
21
21
|
import Logger from "../../utils/logger";
|
|
22
22
|
import { IBufferedChunk, IBufferType } from "../segment_buffers";
|
|
@@ -159,6 +159,7 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
159
159
|
position?: number;
|
|
160
160
|
relative?: number;
|
|
161
161
|
};
|
|
162
|
+
keySystems?: IKeySystemOption[];
|
|
162
163
|
autoPlay?: boolean;
|
|
163
164
|
}): void;
|
|
164
165
|
createDebugElement(element: HTMLElement): {
|
|
@@ -556,6 +557,15 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
556
557
|
* @returns {number}
|
|
557
558
|
*/
|
|
558
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;
|
|
559
569
|
/**
|
|
560
570
|
* Get maximum seek-able position.
|
|
561
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;
|
|
@@ -186,7 +186,7 @@ class Player extends EventEmitter {
|
|
|
186
186
|
* @param {Object} reloadOpts
|
|
187
187
|
*/
|
|
188
188
|
reload(reloadOpts) {
|
|
189
|
-
var _a, _b;
|
|
189
|
+
var _a, _b, _c;
|
|
190
190
|
const { options, manifest, reloadPosition, reloadInPause } = this._priv_reloadingMetadata;
|
|
191
191
|
if (options === undefined) {
|
|
192
192
|
throw new Error("API: Can't reload without having previously loaded a content.");
|
|
@@ -214,6 +214,13 @@ class Player extends EventEmitter {
|
|
|
214
214
|
else if (reloadInPause !== undefined) {
|
|
215
215
|
autoPlay = !reloadInPause;
|
|
216
216
|
}
|
|
217
|
+
let keySystems;
|
|
218
|
+
if ((reloadOpts === null || reloadOpts === void 0 ? void 0 : reloadOpts.keySystems) !== undefined) {
|
|
219
|
+
keySystems = reloadOpts.keySystems;
|
|
220
|
+
}
|
|
221
|
+
else if (((_c = this._priv_reloadingMetadata.options) === null || _c === void 0 ? void 0 : _c.keySystems) !== undefined) {
|
|
222
|
+
keySystems = this._priv_reloadingMetadata.options.keySystems;
|
|
223
|
+
}
|
|
217
224
|
const newOptions = Object.assign(Object.assign({}, options), { initialManifest: manifest });
|
|
218
225
|
if (startAt !== undefined) {
|
|
219
226
|
newOptions.startAt = startAt;
|
|
@@ -221,6 +228,9 @@ class Player extends EventEmitter {
|
|
|
221
228
|
if (autoPlay !== undefined) {
|
|
222
229
|
newOptions.autoPlay = autoPlay;
|
|
223
230
|
}
|
|
231
|
+
if (keySystems !== undefined) {
|
|
232
|
+
newOptions.keySystems = keySystems;
|
|
233
|
+
}
|
|
224
234
|
this._priv_initializeContentPlayback(newOptions);
|
|
225
235
|
}
|
|
226
236
|
createDebugElement(element) {
|
|
@@ -240,7 +250,7 @@ class Player extends EventEmitter {
|
|
|
240
250
|
* @param {Object} options
|
|
241
251
|
*/
|
|
242
252
|
_priv_initializeContentPlayback(options) {
|
|
243
|
-
var _a, _b, _c, _d;
|
|
253
|
+
var _a, _b, _c, _d, _e, _f;
|
|
244
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;
|
|
245
255
|
// Perform multiple checks on the given options
|
|
246
256
|
if (this.videoElement === null) {
|
|
@@ -276,6 +286,7 @@ class Player extends EventEmitter {
|
|
|
276
286
|
const manifestRequestSettings = { lowLatencyMode,
|
|
277
287
|
maxRetry: (_a = requestConfig.manifest) === null || _a === void 0 ? void 0 : _a.maxRetry,
|
|
278
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,
|
|
279
290
|
minimumManifestUpdateInterval,
|
|
280
291
|
initialManifest };
|
|
281
292
|
const relyOnVideoVisibilityAndSize = canRelyOnVideoVisibilityAndSize();
|
|
@@ -322,8 +333,9 @@ class Player extends EventEmitter {
|
|
|
322
333
|
const bufferOptions = objectAssign({ enableFastSwitching,
|
|
323
334
|
onCodecSwitch }, this._priv_bufferOptions);
|
|
324
335
|
const segmentRequestOptions = { lowLatencyMode,
|
|
325
|
-
maxRetry: (
|
|
326
|
-
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 };
|
|
327
339
|
initializer = new features.mediaSourceInit({
|
|
328
340
|
adaptiveOptions,
|
|
329
341
|
autoPlay,
|
|
@@ -1452,6 +1464,27 @@ class Player extends EventEmitter {
|
|
|
1452
1464
|
}
|
|
1453
1465
|
return null;
|
|
1454
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
|
+
}
|
|
1455
1488
|
/**
|
|
1456
1489
|
* Get maximum seek-able position.
|
|
1457
1490
|
* @returns {number}
|
|
@@ -1496,9 +1529,11 @@ class Player extends EventEmitter {
|
|
|
1496
1529
|
}
|
|
1497
1530
|
const segmentBufferStatus = this._priv_contentInfos
|
|
1498
1531
|
.segmentBuffersStore.getStatus(bufferType);
|
|
1499
|
-
|
|
1500
|
-
segmentBufferStatus.value.
|
|
1501
|
-
|
|
1532
|
+
if (segmentBufferStatus.type === "initialized") {
|
|
1533
|
+
segmentBufferStatus.value.synchronizeInventory();
|
|
1534
|
+
return segmentBufferStatus.value.getInventory();
|
|
1535
|
+
}
|
|
1536
|
+
return null;
|
|
1502
1537
|
}
|
|
1503
1538
|
/**
|
|
1504
1539
|
* /!\ For tools use only! Do not touch!
|
|
@@ -2097,5 +2132,5 @@ class Player extends EventEmitter {
|
|
|
2097
2132
|
}
|
|
2098
2133
|
}
|
|
2099
2134
|
}
|
|
2100
|
-
Player.version = /* PLAYER_VERSION */ "4.0.0-dev.
|
|
2135
|
+
Player.version = /* PLAYER_VERSION */ "4.0.0-dev.2023120600";
|
|
2101
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
|
/**
|