rx-player 3.26.1 → 3.26.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/checks.yml +99 -0
- package/.github/workflows/sonarcloud_analysis.yml +20 -0
- package/CHANGELOG.md +99 -71
- package/README.md +19 -18
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/clear_element_src.js +8 -6
- package/dist/_esm5.processed/compat/eme/close_session.js +1 -2
- package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +1 -2
- package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -1
- package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +6 -4
- package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +1 -2
- package/dist/_esm5.processed/compat/eme/generate_key_request.js +1 -2
- package/dist/_esm5.processed/compat/eme/load_session.js +2 -3
- package/dist/_esm5.processed/compat/event_listeners.d.ts +3 -2
- package/dist/_esm5.processed/compat/event_listeners.js +8 -14
- package/dist/_esm5.processed/compat/make_vtt_cue.js +1 -1
- package/dist/_esm5.processed/compat/on_height_width_change.js +1 -2
- package/dist/_esm5.processed/compat/set_element_src.js +1 -1
- package/dist/_esm5.processed/compat/when_loaded_metadata.js +1 -2
- package/dist/_esm5.processed/compat/when_media_source_open.js +1 -2
- package/dist/_esm5.processed/config.d.ts +3 -8
- package/dist/_esm5.processed/config.js +4 -9
- package/dist/_esm5.processed/core/abr/abr_manager.d.ts +11 -10
- package/dist/_esm5.processed/core/abr/abr_manager.js +47 -8
- package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +1 -1
- package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +2 -2
- package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +3 -3
- package/dist/_esm5.processed/core/abr/get_buffer_levels.js +3 -0
- package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +3 -3
- package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +3 -3
- package/dist/_esm5.processed/core/abr/guess_based_chooser.d.ts +95 -0
- package/dist/_esm5.processed/core/abr/guess_based_chooser.js +242 -0
- package/dist/_esm5.processed/core/abr/index.d.ts +3 -3
- package/dist/_esm5.processed/core/abr/last_estimate_storage.d.ts +61 -0
- package/dist/_esm5.processed/core/abr/last_estimate_storage.js +37 -0
- package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +25 -7
- package/dist/_esm5.processed/core/abr/network_analyzer.js +68 -31
- package/dist/_esm5.processed/core/abr/pending_requests_store.d.ts +56 -28
- package/dist/_esm5.processed/core/abr/pending_requests_store.js +9 -7
- package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +34 -51
- package/dist/_esm5.processed/core/abr/representation_estimator.js +111 -52
- package/dist/_esm5.processed/core/abr/representation_score_calculator.d.ts +5 -8
- package/dist/_esm5.processed/core/abr/representation_score_calculator.js +20 -23
- package/dist/_esm5.processed/core/abr/{ewma.d.ts → utils/ewma.d.ts} +0 -0
- package/dist/_esm5.processed/core/abr/{ewma.js → utils/ewma.js} +0 -0
- package/dist/_esm5.processed/core/abr/{filter_by_bitrate.d.ts → utils/filter_by_bitrate.d.ts} +1 -1
- package/dist/_esm5.processed/core/abr/{filter_by_bitrate.js → utils/filter_by_bitrate.js} +1 -1
- package/dist/_esm5.processed/core/abr/{filter_by_width.d.ts → utils/filter_by_width.d.ts} +1 -1
- package/dist/_esm5.processed/core/abr/{filter_by_width.js → utils/filter_by_width.js} +2 -2
- package/dist/_esm5.processed/core/abr/{select_optimal_representation.d.ts → utils/select_optimal_representation.d.ts} +1 -1
- package/dist/_esm5.processed/core/abr/{select_optimal_representation.js → utils/select_optimal_representation.js} +1 -1
- package/dist/_esm5.processed/core/api/emit_seek_events.d.ts +4 -4
- package/dist/_esm5.processed/core/api/emit_seek_events.js +12 -10
- package/dist/_esm5.processed/core/api/index.d.ts +3 -1
- package/dist/_esm5.processed/core/api/index.js +2 -0
- package/dist/_esm5.processed/core/api/option_utils.js +4 -4
- package/dist/_esm5.processed/core/api/playback_observer.d.ts +280 -0
- package/dist/_esm5.processed/core/api/playback_observer.js +461 -0
- package/dist/_esm5.processed/core/api/public_api.d.ts +8 -7
- package/dist/_esm5.processed/core/api/public_api.js +98 -94
- package/dist/_esm5.processed/core/api/track_choice_manager.js +3 -3
- package/dist/_esm5.processed/core/eme/__tests__/__global__/utils.js +1 -0
- package/dist/_esm5.processed/core/eme/attach_media_keys.js +1 -2
- package/dist/_esm5.processed/core/eme/check_key_statuses.js +4 -5
- package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js +1 -2
- package/dist/_esm5.processed/core/eme/clear_eme_session.js +6 -2
- package/dist/_esm5.processed/core/eme/create_session.js +1 -2
- package/dist/_esm5.processed/core/eme/dispose_media_keys.js +2 -3
- package/dist/_esm5.processed/core/eme/eme_manager.js +4 -5
- package/dist/_esm5.processed/core/eme/find_key_system.js +4 -5
- package/dist/_esm5.processed/core/eme/get_media_keys.js +2 -3
- package/dist/_esm5.processed/core/eme/get_session.js +1 -2
- package/dist/_esm5.processed/core/eme/init_media_keys.js +5 -5
- package/dist/_esm5.processed/core/eme/session_events_listener.js +6 -7
- package/dist/_esm5.processed/core/eme/set_server_certificate.js +8 -3
- package/dist/_esm5.processed/core/eme/types.d.ts +12 -4
- package/dist/_esm5.processed/core/eme/utils/close_session.js +2 -3
- package/dist/_esm5.processed/core/eme/utils/is_session_usable.js +1 -1
- package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +3 -4
- package/dist/_esm5.processed/core/eme/utils/persistent_sessions_store.js +3 -3
- package/dist/_esm5.processed/core/fetchers/index.d.ts +2 -2
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +2 -2
- package/dist/_esm5.processed/core/fetchers/segment/index.d.ts +2 -2
- package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.d.ts +12 -29
- package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.js +3 -7
- package/dist/_esm5.processed/core/fetchers/segment/prioritizer.d.ts +53 -53
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +42 -11
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +118 -46
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +21 -20
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +9 -8
- package/dist/_esm5.processed/core/init/create_eme_manager.js +1 -2
- package/dist/_esm5.processed/core/init/create_media_source.js +3 -4
- package/dist/_esm5.processed/core/init/create_stream_playback_observer.d.ts +39 -0
- package/dist/_esm5.processed/core/init/create_stream_playback_observer.js +50 -0
- package/dist/_esm5.processed/core/init/duration_updater.js +16 -7
- package/dist/_esm5.processed/core/init/emit_loaded_event.d.ts +4 -3
- package/dist/_esm5.processed/core/init/emit_loaded_event.js +8 -8
- package/dist/_esm5.processed/core/init/end_of_stream.js +1 -2
- package/dist/_esm5.processed/core/init/get_initial_time.js +2 -3
- package/dist/_esm5.processed/core/init/initial_seek_and_play.d.ts +32 -31
- package/dist/_esm5.processed/core/init/initial_seek_and_play.js +25 -32
- package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +6 -5
- package/dist/_esm5.processed/core/init/initialize_directfile.js +16 -12
- package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +10 -10
- package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -12
- package/dist/_esm5.processed/core/init/load_on_media_source.d.ts +8 -11
- package/dist/_esm5.processed/core/init/load_on_media_source.js +16 -19
- package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +8 -7
- package/dist/_esm5.processed/core/init/stall_avoider.d.ts +4 -6
- package/dist/_esm5.processed/core/init/stall_avoider.js +56 -42
- package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.d.ts +2 -2
- package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +20 -15
- package/dist/_esm5.processed/core/init/throw_on_media_error.js +1 -2
- package/dist/_esm5.processed/core/init/types.d.ts +0 -20
- package/dist/_esm5.processed/core/init/update_playback_rate.d.ts +5 -4
- package/dist/_esm5.processed/core/init/update_playback_rate.js +10 -11
- package/dist/_esm5.processed/core/segment_buffers/garbage_collector.d.ts +4 -4
- package/dist/_esm5.processed/core/segment_buffers/garbage_collector.js +12 -7
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +8 -7
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +9 -10
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +4 -4
- package/dist/_esm5.processed/core/segment_buffers/implementations/utils/manual_time_ranges.js +2 -2
- package/dist/_esm5.processed/core/segment_buffers/inventory/buffered_history.js +2 -2
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +1 -12
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +10 -10
- package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +1 -1
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +15 -13
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +36 -23
- package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.d.ts +9 -17
- package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.js +11 -20
- package/dist/_esm5.processed/core/stream/adaptation/index.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/index.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/orchestrator/active_period_emitter.js +5 -6
- package/dist/_esm5.processed/core/stream/orchestrator/are_streams_complete.js +1 -2
- package/dist/_esm5.processed/core/stream/orchestrator/index.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +10 -8
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +22 -21
- package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.d.ts +6 -4
- package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +11 -10
- package/dist/_esm5.processed/core/stream/period/index.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +23 -7
- package/dist/_esm5.processed/core/stream/period/period_stream.js +38 -24
- package/dist/_esm5.processed/core/stream/reload_after_switch.d.ts +5 -4
- package/dist/_esm5.processed/core/stream/reload_after_switch.js +8 -7
- package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.d.ts +4 -2
- package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.js +10 -8
- package/dist/_esm5.processed/core/stream/representation/downloading_queue.d.ts +9 -9
- package/dist/_esm5.processed/core/stream/representation/downloading_queue.js +10 -12
- package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.d.ts +1 -3
- package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +6 -8
- package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +3 -7
- package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +7 -8
- package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +1 -1
- package/dist/_esm5.processed/core/stream/representation/get_segment_priority.d.ts +6 -9
- package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +7 -8
- package/dist/_esm5.processed/core/stream/representation/index.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/representation/push_init_segment.d.ts +4 -2
- package/dist/_esm5.processed/core/stream/representation/push_init_segment.js +3 -5
- package/dist/_esm5.processed/core/stream/representation/push_media_segment.d.ts +6 -4
- package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -5
- package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +9 -12
- package/dist/_esm5.processed/core/stream/representation/representation_stream.js +30 -21
- package/dist/_esm5.processed/errors/error_message.js +1 -1
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.d.ts +5 -3
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.js +21 -8
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.js +2 -3
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.d.ts +2 -2
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.js +4 -0
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +1 -1
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +2 -2
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +17 -6
- package/dist/_esm5.processed/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +1 -2
- package/dist/_esm5.processed/experimental/tools/createMetaplaylist/index.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +1 -1
- package/dist/_esm5.processed/features/initialize_features.js +47 -44
- package/dist/_esm5.processed/index.js +2 -2
- package/dist/_esm5.processed/manifest/index.d.ts +2 -2
- package/dist/_esm5.processed/manifest/index.js +2 -2
- package/dist/_esm5.processed/manifest/representation.js +1 -1
- package/dist/_esm5.processed/manifest/representation_index/static.js +1 -0
- package/dist/_esm5.processed/manifest/representation_index/types.d.ts +24 -3
- package/dist/_esm5.processed/manifest/update_period_in_place.js +1 -1
- package/dist/_esm5.processed/manifest/{are_same_content.d.ts → utils.d.ts} +9 -7
- package/dist/_esm5.processed/manifest/{are_same_content.js → utils.js} +18 -1
- package/dist/_esm5.processed/minimal.js +2 -2
- package/dist/_esm5.processed/parsers/containers/isobmff/get_box.d.ts +18 -9
- package/dist/_esm5.processed/parsers/containers/isobmff/get_box.js +32 -9
- package/dist/_esm5.processed/parsers/containers/isobmff/read.d.ts +18 -5
- package/dist/_esm5.processed/parsers/containers/isobmff/read.js +28 -6
- package/dist/_esm5.processed/parsers/containers/isobmff/utils.js +52 -47
- package/dist/_esm5.processed/parsers/images/bif.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/flatten_overlapping_periods.js +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_http_utc-timing_url.js +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +2 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +3 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.js +2 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +1 -0
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +7 -9
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +2 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +4 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +2 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +11 -5
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.js +10 -9
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/parse_s_element.js +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +6 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +5 -4
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.d.ts +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.js +4 -4
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +3 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +19 -18
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +2 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +14 -8
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +7 -8
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +3 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +5 -10
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +3 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +17 -8
- package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.d.ts +7 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.js +22 -21
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +10 -0
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/BaseURL.js +9 -9
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +24 -0
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.js +7 -5
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +12 -9
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.js +5 -2
- package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +8 -0
- package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +11 -2
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +7 -4
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +11 -0
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.js +7 -1
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.js +5 -0
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/MPD.js +5 -0
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Period.js +13 -0
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +23 -0
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.js +5 -0
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/XLink.js +6 -0
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/root.js +6 -0
- package/dist/_esm5.processed/parsers/manifest/local/parse_local_manifest.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +4 -2
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/smooth/get_codecs.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +3 -1
- package/dist/_esm5.processed/parsers/manifest/utils/check_manifest_ids.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +11 -3
- package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.js +5 -5
- package/dist/_esm5.processed/parsers/manifest/utils/is_segment_still_available.js +3 -6
- package/dist/_esm5.processed/parsers/texttracks/sami/html.js +2 -2
- package/dist/_esm5.processed/parsers/texttracks/sami/native.js +2 -2
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_font_size.js +13 -1
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/generate_css_test_outline.js +4 -4
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_default_style_elements.js +2 -2
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_style_attribute.js +5 -5
- package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +2 -2
- package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +89 -20
- package/dist/_esm5.processed/transports/dash/segment_loader.js +1 -1
- package/dist/_esm5.processed/transports/local/segment_loader.js +2 -2
- package/dist/_esm5.processed/transports/local/segment_parser.d.ts +2 -2
- package/dist/_esm5.processed/transports/local/text_parser.d.ts +2 -2
- package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
- package/dist/_esm5.processed/transports/smooth/extract_timings_infos.js +1 -1
- package/dist/_esm5.processed/transports/smooth/pipelines.js +2 -2
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +3 -3
- package/dist/_esm5.processed/transports/types.d.ts +29 -15
- package/dist/_esm5.processed/transports/utils/byte_range.js +2 -2
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
- package/dist/_esm5.processed/transports/utils/get_isobmff_timing_infos.js +6 -1
- package/dist/_esm5.processed/transports/utils/parse_text_track.js +6 -4
- package/dist/_esm5.processed/utils/assert.js +3 -3
- package/dist/_esm5.processed/utils/concat_map_latest.js +1 -2
- package/dist/_esm5.processed/utils/defer_subscriptions.js +1 -2
- package/dist/_esm5.processed/utils/filter_map.js +1 -2
- package/dist/_esm5.processed/utils/reference.d.ts +108 -0
- package/dist/_esm5.processed/utils/reference.js +137 -0
- package/dist/_esm5.processed/utils/request/fetch.d.ts +1 -1
- package/dist/_esm5.processed/utils/request/fetch.js +3 -3
- package/dist/_esm5.processed/utils/request/xhr.d.ts +1 -1
- package/dist/_esm5.processed/utils/request/xhr.js +1 -1
- package/dist/_esm5.processed/utils/rx-retry_with_backoff.js +1 -2
- package/dist/mpd-parser.wasm +0 -0
- package/dist/rx-player.d.ts +1 -15
- package/dist/rx-player.js +3666 -2470
- package/dist/rx-player.min.d.ts +1 -15
- package/dist/rx-player.min.js +1 -1
- package/jest.config.js +28 -1
- package/package.json +43 -43
- package/scripts/build/constants.d.ts +50 -0
- package/scripts/build/generate_build.js +1 -189
- package/scripts/doc-generator/construct_table_of_contents.js +31 -24
- package/scripts/doc-generator/convert_MD_to_HMTL.js +4 -8
- package/scripts/doc-generator/create_documentation.js +331 -0
- package/scripts/doc-generator/create_documentation_page.js +209 -0
- package/scripts/doc-generator/create_page.js +117 -35
- package/scripts/doc-generator/generate_header_html.js +148 -0
- package/scripts/doc-generator/generate_page_html.js +116 -0
- package/scripts/doc-generator/generate_page_list_html.js +93 -0
- package/scripts/doc-generator/generate_sidebar_html.js +88 -0
- package/scripts/doc-generator/get_search_data_for_content.js +137 -0
- package/scripts/doc-generator/index.js +14 -15
- package/scripts/doc-generator/parse_doc_configs.js +327 -0
- package/scripts/doc-generator/scripts/lunr.js +10 -0
- package/scripts/doc-generator/scripts/script.js +451 -0
- package/scripts/doc-generator/styles/style.css +712 -144
- package/scripts/doc-generator/utils.js +85 -0
- package/scripts/fast_demo_build.js +143 -0
- package/scripts/generate_documentation_list.js +6 -2
- package/scripts/generate_full_demo.js +26 -49
- package/scripts/start_demo_web_server.js +14 -4
- package/scripts/update-version +1 -1
- package/sonar-project.properties +2 -1
- package/src/compat/__tests__/add_text_track.test.ts +1 -0
- package/src/compat/__tests__/clear_element_src.test.ts +55 -28
- package/src/compat/__tests__/set_element_src.test.ts +2 -2
- package/src/compat/__tests__/when_loaded_metadata.test.ts +4 -5
- package/src/compat/__tests__/when_media_source_open.test.ts +4 -5
- package/src/compat/clear_element_src.ts +8 -6
- package/src/compat/eme/close_session.ts +3 -5
- package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
- package/src/compat/eme/custom_media_keys/index.ts +6 -6
- package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +6 -3
- package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +1 -1
- package/src/compat/eme/generate_key_request.ts +1 -1
- package/src/compat/eme/load_session.ts +4 -6
- package/src/compat/event_listeners.ts +12 -21
- package/src/compat/on_height_width_change.ts +3 -5
- package/src/compat/set_element_src.ts +1 -1
- package/src/compat/when_loaded_metadata.ts +1 -1
- package/src/compat/when_media_source_open.ts +1 -1
- package/src/config.ts +4 -9
- package/src/core/abr/README.md +7 -7
- package/src/core/abr/abr_manager.ts +62 -21
- package/src/core/abr/bandwidth_estimator.ts +1 -1
- package/src/core/abr/buffer_based_chooser.ts +8 -6
- package/src/core/abr/get_buffer_levels.ts +3 -0
- package/src/core/abr/get_estimate_from_buffer_levels.ts +4 -4
- package/src/core/abr/guess_based_chooser.ts +308 -0
- package/src/core/abr/index.ts +7 -3
- package/src/core/abr/last_estimate_storage.ts +79 -0
- package/src/core/abr/network_analyzer.ts +74 -31
- package/src/core/abr/pending_requests_store.ts +76 -42
- package/src/core/abr/representation_estimator.ts +200 -125
- package/src/core/abr/representation_score_calculator.ts +33 -26
- package/src/core/abr/{__tests__ → utils/__tests__}/ewma.test.ts +0 -0
- package/src/core/abr/{__tests__ → utils/__tests__}/filter_by_bitrate.test.ts +1 -1
- package/src/core/abr/{__tests__ → utils/__tests__}/filter_by_width.test.ts +1 -1
- package/src/core/abr/{__tests__ → utils/__tests__}/select_optimal_representation.test.ts +1 -1
- package/src/core/abr/{ewma.ts → utils/ewma.ts} +0 -0
- package/src/core/abr/{filter_by_bitrate.ts → utils/filter_by_bitrate.ts} +2 -2
- package/src/core/abr/{filter_by_width.ts → utils/filter_by_width.ts} +3 -3
- package/src/core/abr/{select_optimal_representation.ts → utils/select_optimal_representation.ts} +2 -2
- package/src/core/api/README.md +4 -3
- package/src/core/api/__tests__/option_utils.test.ts +1 -0
- package/src/core/api/emit_seek_events.ts +21 -20
- package/src/core/api/index.ts +6 -2
- package/src/core/api/playback_observer.ts +768 -0
- package/src/core/api/public_api.ts +111 -111
- package/src/core/api/track_choice_manager.ts +6 -3
- package/src/core/eme/__tests__/__global__/get_license.test.ts +5 -3
- package/src/core/eme/__tests__/__global__/init_data.test.ts +11 -12
- package/src/core/eme/__tests__/__global__/media_key_system_access.test.ts +2 -1
- package/src/core/eme/__tests__/__global__/media_keys.test.ts +5 -8
- package/src/core/eme/__tests__/__global__/server_certificate.test.ts +8 -6
- package/src/core/eme/__tests__/__global__/utils.ts +1 -0
- package/src/core/eme/__tests__/init_media_keys.test.ts +6 -65
- package/src/core/eme/attach_media_keys.ts +2 -1
- package/src/core/eme/check_key_statuses.ts +10 -8
- package/src/core/eme/clean_old_loaded_sessions.ts +2 -4
- package/src/core/eme/clear_eme_session.ts +6 -1
- package/src/core/eme/create_session.ts +3 -5
- package/src/core/eme/dispose_media_keys.ts +2 -2
- package/src/core/eme/eme_manager.ts +10 -12
- package/src/core/eme/find_key_system.ts +3 -5
- package/src/core/eme/get_media_keys.ts +4 -6
- package/src/core/eme/get_session.ts +2 -4
- package/src/core/eme/init_media_keys.ts +9 -9
- package/src/core/eme/session_events_listener.ts +14 -15
- package/src/core/eme/set_server_certificate.ts +9 -5
- package/src/core/eme/types.ts +15 -4
- package/src/core/eme/utils/close_session.ts +7 -7
- package/src/core/eme/utils/is_session_usable.ts +1 -1
- package/src/core/eme/utils/loaded_sessions_store.ts +2 -2
- package/src/core/eme/utils/persistent_sessions_store.ts +2 -2
- package/src/core/fetchers/index.ts +2 -2
- package/src/core/fetchers/manifest/manifest_fetcher.ts +1 -1
- package/src/core/fetchers/segment/__tests__/prioritizer.test.ts +3 -4
- package/src/core/fetchers/segment/index.ts +2 -2
- package/src/core/fetchers/segment/prioritized_segment_fetcher.ts +37 -45
- package/src/core/fetchers/segment/prioritizer.ts +82 -82
- package/src/core/fetchers/segment/segment_fetcher.ts +178 -80
- package/src/core/fetchers/segment/segment_fetcher_creator.ts +23 -31
- package/src/core/init/create_eme_manager.ts +1 -1
- package/src/core/init/create_media_source.ts +5 -7
- package/src/core/init/create_stream_playback_observer.ts +88 -0
- package/src/core/init/duration_updater.ts +20 -17
- package/src/core/init/emit_loaded_event.ts +11 -15
- package/src/core/init/end_of_stream.ts +2 -4
- package/src/core/init/get_initial_time.ts +0 -1
- package/src/core/init/initial_seek_and_play.ts +67 -51
- package/src/core/init/initialize_directfile.ts +26 -35
- package/src/core/init/initialize_media_source.ts +28 -28
- package/src/core/init/load_on_media_source.ts +51 -58
- package/src/core/init/manifest_update_scheduler.ts +11 -12
- package/src/core/init/stall_avoider.ts +64 -47
- package/src/core/init/stream_events_emitter/stream_events_emitter.ts +24 -21
- package/src/core/init/throw_on_media_error.ts +1 -1
- package/src/core/init/types.ts +0 -24
- package/src/core/init/update_playback_rate.ts +15 -16
- package/src/core/segment_buffers/README.md +3 -3
- package/src/core/segment_buffers/garbage_collector.ts +15 -11
- package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +10 -7
- package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +14 -16
- package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +1 -1
- package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
- package/src/core/segment_buffers/implementations/utils/manual_time_ranges.ts +2 -2
- package/src/core/segment_buffers/inventory/buffered_history.ts +2 -2
- package/src/core/segment_buffers/inventory/segment_inventory.ts +1 -13
- package/src/core/stream/adaptation/adaptation_stream.ts +78 -56
- package/src/core/stream/adaptation/create_representation_estimator.ts +19 -45
- package/src/core/stream/adaptation/index.ts +2 -2
- package/src/core/stream/index.ts +2 -2
- package/src/core/stream/orchestrator/active_period_emitter.ts +6 -8
- package/src/core/stream/orchestrator/are_streams_complete.ts +2 -4
- package/src/core/stream/orchestrator/index.ts +2 -2
- package/src/core/stream/orchestrator/stream_orchestrator.ts +58 -49
- package/src/core/stream/period/create_empty_adaptation_stream.ts +14 -10
- package/src/core/stream/period/index.ts +2 -2
- package/src/core/stream/period/period_stream.ts +118 -75
- package/src/core/stream/reload_after_switch.ts +13 -10
- package/src/core/stream/representation/append_segment_to_buffer.ts +20 -16
- package/src/core/stream/representation/downloading_queue.ts +21 -24
- package/src/core/stream/representation/force_garbage_collection.ts +16 -23
- package/src/core/stream/representation/get_buffer_status.ts +9 -11
- package/src/core/stream/representation/get_needed_segments.ts +1 -1
- package/src/core/stream/representation/get_segment_priority.ts +8 -10
- package/src/core/stream/representation/index.ts +2 -2
- package/src/core/stream/representation/push_init_segment.ts +19 -16
- package/src/core/stream/representation/push_media_segment.ts +21 -17
- package/src/core/stream/representation/representation_stream.ts +50 -47
- package/src/experimental/features/__tests__/dash_wasm.test.ts +1 -0
- package/src/experimental/tools/VideoThumbnailLoader/create_request.ts +32 -17
- package/src/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.ts +6 -9
- package/src/experimental/tools/VideoThumbnailLoader/load_segments.ts +12 -6
- package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +4 -2
- package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +2 -2
- package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +21 -12
- package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +1 -1
- package/src/experimental/tools/createMetaplaylist/index.ts +1 -1
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +4 -2
- package/src/features/__tests__/initialize_features.test.ts +191 -101
- package/src/features/initialize_features.ts +40 -37
- package/src/features/list/__tests__/bif_parser.test.ts +1 -0
- package/src/features/list/__tests__/dash.test.ts +1 -0
- package/src/features/list/__tests__/directfile.test.ts +1 -0
- package/src/features/list/__tests__/eme.test.ts +1 -0
- package/src/features/list/__tests__/html_sami_parser.test.ts +1 -0
- package/src/features/list/__tests__/html_srt_parser.test.ts +1 -0
- package/src/features/list/__tests__/html_text_buffer.test.ts +1 -0
- package/src/features/list/__tests__/html_ttml_parser.test.ts +1 -0
- package/src/features/list/__tests__/html_vtt_parser.test.ts +1 -0
- package/src/features/list/__tests__/image_buffer.test.ts +1 -0
- package/src/features/list/__tests__/native_sami_parser.test.ts +1 -0
- package/src/features/list/__tests__/native_srt_parser.test.ts +1 -0
- package/src/features/list/__tests__/native_text_buffer.test.ts +1 -0
- package/src/features/list/__tests__/native_ttml_parser.test.ts +1 -0
- package/src/features/list/__tests__/native_vtt_parser.test.ts +1 -0
- package/src/features/list/__tests__/smooth.test.ts +1 -0
- package/src/index.ts +2 -2
- package/src/manifest/__tests__/manifest.test.ts +1 -0
- package/src/manifest/index.ts +7 -1
- package/src/manifest/representation_index/__tests__/static.test.ts +1 -0
- package/src/manifest/representation_index/static.ts +1 -0
- package/src/manifest/representation_index/types.ts +25 -3
- package/src/manifest/{are_same_content.ts → utils.ts} +26 -9
- package/src/minimal.ts +3 -2
- package/src/parsers/containers/isobmff/get_box.ts +35 -8
- package/src/parsers/containers/isobmff/read.ts +32 -5
- package/src/parsers/containers/isobmff/utils.ts +52 -47
- package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +4 -4
- package/src/parsers/manifest/dash/common/flatten_overlapping_periods.ts +4 -2
- package/src/parsers/manifest/dash/common/get_clock_offset.ts +3 -3
- package/src/parsers/manifest/dash/common/get_http_utc-timing_url.ts +15 -6
- package/src/parsers/manifest/dash/common/indexes/base.ts +5 -3
- package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +1 -0
- package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +9 -9
- package/src/parsers/manifest/dash/common/indexes/list.ts +6 -3
- package/src/parsers/manifest/dash/common/indexes/template.ts +13 -6
- package/src/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.ts +10 -9
- package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +13 -5
- package/src/parsers/manifest/dash/common/indexes/tokens.ts +4 -4
- package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +10 -4
- package/src/parsers/manifest/dash/common/parse_mpd.ts +21 -13
- package/src/parsers/manifest/dash/common/parse_periods.ts +7 -8
- package/src/parsers/manifest/dash/common/parse_representation_index.ts +12 -12
- package/src/parsers/manifest/dash/common/parse_representations.ts +23 -4
- package/src/parsers/manifest/dash/common/resolve_base_urls.ts +33 -24
- package/src/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.ts +12 -0
- package/src/parsers/manifest/dash/js-parser/node_parsers/BaseURL.ts +13 -9
- package/src/parsers/manifest/dash/js-parser/node_parsers/Representation.ts +28 -0
- package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.ts +8 -5
- package/src/parsers/manifest/dash/js-parser/node_parsers/utils.ts +3 -0
- package/src/parsers/manifest/dash/js-parser/parse_from_document.ts +5 -2
- package/src/parsers/manifest/dash/node_parser_types.ts +8 -0
- package/src/parsers/manifest/dash/parsers_types.ts +8 -2
- package/src/parsers/manifest/dash/wasm-parser/rs/lib.rs +1 -8
- package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +26 -5
- package/src/parsers/manifest/dash/wasm-parser/rs/processor/mod.rs +75 -521
- package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +7 -4
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.ts +13 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.ts +8 -1
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.ts +6 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/MPD.ts +6 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/Period.ts +14 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/Representation.ts +26 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.ts +6 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/XLink.ts +7 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/root.ts +7 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +1 -1
- package/src/parsers/manifest/local/representation_index.ts +2 -0
- package/src/parsers/manifest/smooth/create_parser.ts +1 -1
- package/src/parsers/manifest/smooth/representation_index.ts +3 -1
- package/src/parsers/manifest/utils/clear_timeline_from_position.ts +1 -1
- package/src/parsers/manifest/utils/index_helpers.ts +21 -11
- package/src/parsers/manifest/utils/is_segment_still_available.ts +4 -6
- package/src/parsers/texttracks/sami/html.ts +1 -1
- package/src/parsers/texttracks/sami/native.ts +1 -1
- package/src/parsers/texttracks/ttml/html/apply_font_size.ts +11 -1
- package/src/transports/dash/image_pipelines.ts +4 -4
- package/src/transports/dash/init_segment_loader.ts +1 -1
- package/src/transports/dash/manifest_parser.ts +99 -25
- package/src/transports/dash/segment_loader.ts +1 -1
- package/src/transports/dash/segment_parser.ts +4 -4
- package/src/transports/dash/text_parser.ts +8 -8
- package/src/transports/local/segment_loader.ts +2 -2
- package/src/transports/local/segment_parser.ts +4 -4
- package/src/transports/local/text_parser.ts +8 -8
- package/src/transports/metaplaylist/pipelines.ts +11 -11
- package/src/transports/smooth/extract_timings_infos.ts +1 -1
- package/src/transports/smooth/pipelines.ts +8 -8
- package/src/transports/smooth/segment_loader.ts +3 -3
- package/src/transports/types.ts +31 -17
- package/src/transports/utils/call_custom_manifest_loader.ts +1 -1
- package/src/transports/utils/get_isobmff_timing_infos.ts +6 -1
- package/src/transports/utils/parse_text_track.ts +4 -2
- package/src/typings/globals.d.ts +57 -40
- package/src/utils/__tests__/concat_map_latest.test.ts +7 -9
- package/src/utils/__tests__/defer_subscriptions.test.ts +4 -4
- package/src/utils/__tests__/event_emitter.test.ts +1 -1
- package/src/utils/__tests__/initialization_segment_cache.test.ts +7 -0
- package/src/utils/assert.ts +1 -1
- package/src/utils/concat_map_latest.ts +2 -4
- package/src/utils/defer_subscriptions.ts +1 -1
- package/src/utils/filter_map.ts +2 -4
- package/src/utils/reference.ts +234 -0
- package/src/utils/request/fetch.ts +3 -3
- package/src/utils/request/xhr.ts +2 -2
- package/src/utils/rx-retry_with_backoff.ts +2 -4
- package/tsconfig.json +4 -1
- package/tsconfig.modules.json +8 -3
- package/dist/_esm5.processed/core/abr/create_filters.d.ts +0 -27
- package/dist/_esm5.processed/core/abr/create_filters.js +0 -56
- package/dist/_esm5.processed/core/api/clock.d.ts +0 -157
- package/dist/_esm5.processed/core/api/clock.js +0 -363
- package/dist/_esm5.processed/core/init/create_stream_clock.d.ts +0 -34
- package/dist/_esm5.processed/core/init/create_stream_clock.js +0 -55
- package/dist/_esm5.processed/parsers/manifest/dash/common/extract_minimum_availability_time_offset.d.ts +0 -31
- package/dist/_esm5.processed/parsers/manifest/dash/common/extract_minimum_availability_time_offset.js +0 -37
- package/scripts/doc-generator/construct_html.js +0 -135
- package/scripts/doc-generator/construct_page_list.js +0 -120
- package/scripts/doc-generator/create_for_dir.js +0 -151
- package/scripts/doc-generator/get_files_to_convert.js +0 -71
- package/scripts/doc-generator/mkdir_parent.js +0 -21
- package/scripts/doc-generator/read_title_from_md.js +0 -22
- package/scripts/doc-generator/remove_toc_from_md.js +0 -20
- package/src/core/abr/create_filters.ts +0 -59
- package/src/core/api/clock.ts +0 -573
- package/src/core/init/create_stream_clock.ts +0 -93
- package/src/parsers/manifest/dash/common/extract_minimum_availability_time_offset.ts +0 -41
|
@@ -15,27 +15,24 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
|
+
catchError,
|
|
18
19
|
concat as observableConcat,
|
|
20
|
+
concatMap,
|
|
19
21
|
defer as observableDefer,
|
|
20
22
|
EMPTY,
|
|
21
23
|
identity,
|
|
24
|
+
map,
|
|
22
25
|
merge as observableMerge,
|
|
26
|
+
mergeMap,
|
|
23
27
|
Observable,
|
|
24
28
|
of as observableOf,
|
|
25
|
-
Subject,
|
|
26
|
-
TimeoutError,
|
|
27
|
-
} from "rxjs";
|
|
28
|
-
import {
|
|
29
|
-
catchError,
|
|
30
|
-
concatMap,
|
|
31
|
-
map,
|
|
32
|
-
mapTo,
|
|
33
|
-
mergeMap,
|
|
34
29
|
startWith,
|
|
30
|
+
Subject,
|
|
35
31
|
takeUntil,
|
|
36
32
|
tap,
|
|
37
33
|
timeout,
|
|
38
|
-
|
|
34
|
+
TimeoutError,
|
|
35
|
+
} from "rxjs";
|
|
39
36
|
import {
|
|
40
37
|
events,
|
|
41
38
|
ICustomMediaKeySession,
|
|
@@ -109,7 +106,7 @@ export default function SessionEventsListener(
|
|
|
109
106
|
IKeysUpdateEvent |
|
|
110
107
|
ISessionUpdatedEvent>
|
|
111
108
|
{
|
|
112
|
-
log.info("EME: Binding session events", session);
|
|
109
|
+
log.info("EME: Binding session events", session.sessionId);
|
|
113
110
|
const sessionWarningSubject$ = new Subject<IEMEWarningEvent>();
|
|
114
111
|
const { getLicenseConfig = {} } = keySystemOptions;
|
|
115
112
|
|
|
@@ -132,7 +129,9 @@ export default function SessionEventsListener(
|
|
|
132
129
|
messageEvent.messageType :
|
|
133
130
|
"license-request";
|
|
134
131
|
|
|
135
|
-
log.info(`EME: Received message event, type ${messageType}`,
|
|
132
|
+
log.info(`EME: Received message event, type ${messageType}`,
|
|
133
|
+
session.sessionId,
|
|
134
|
+
messageEvent);
|
|
136
135
|
const getLicense$ = observableDefer(() => {
|
|
137
136
|
const getLicense = keySystemOptions.getLicense(message, messageType);
|
|
138
137
|
const getLicenseTimeout = isNullOrUndefined(getLicenseConfig.timeout) ?
|
|
@@ -289,8 +288,8 @@ function updateSessionWithMessage(
|
|
|
289
288
|
throw new EncryptedMediaError("KEY_UPDATE_ERROR", reason);
|
|
290
289
|
}),
|
|
291
290
|
tap(() => { log.info("EME: MediaKeySession update succeeded."); }),
|
|
292
|
-
|
|
293
|
-
|
|
291
|
+
map(() => ({ type: "session-updated" as const,
|
|
292
|
+
value: { session, license: message, initializationData } }))
|
|
294
293
|
);
|
|
295
294
|
}
|
|
296
295
|
|
|
@@ -306,7 +305,7 @@ function handleKeyStatusesChangeEvent(
|
|
|
306
305
|
keySystem : string,
|
|
307
306
|
keyStatusesEvent : Event
|
|
308
307
|
) : Observable<IKeyStatusChangeHandledEvent | IKeysUpdateEvent | IEMEWarningEvent> {
|
|
309
|
-
log.info("EME: keystatuseschange event received", session
|
|
308
|
+
log.info("EME: keystatuseschange event received", session.sessionId);
|
|
310
309
|
const callback$ = observableDefer(() => {
|
|
311
310
|
return tryCatch(() => {
|
|
312
311
|
if (typeof keySystemOptions.onKeyStatusesChange !== "function") {
|
|
@@ -15,16 +15,14 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
|
+
catchError,
|
|
18
19
|
defer as observableDefer,
|
|
19
20
|
EMPTY,
|
|
21
|
+
ignoreElements,
|
|
22
|
+
tap,
|
|
20
23
|
Observable,
|
|
21
24
|
of as observableOf,
|
|
22
25
|
} from "rxjs";
|
|
23
|
-
import {
|
|
24
|
-
catchError,
|
|
25
|
-
ignoreElements,
|
|
26
|
-
tap,
|
|
27
|
-
} from "rxjs/operators";
|
|
28
26
|
import { ICustomMediaKeys } from "../../compat";
|
|
29
27
|
import { EncryptedMediaError } from "../../errors";
|
|
30
28
|
import log from "../../log";
|
|
@@ -96,6 +94,12 @@ export default function trySettingServerCertificate(
|
|
|
96
94
|
ServerCertificateStore.prepare(mediaKeys);
|
|
97
95
|
return setServerCertificate(mediaKeys, serverCertificate).pipe(
|
|
98
96
|
tap(() => { ServerCertificateStore.set(mediaKeys, serverCertificate); }),
|
|
97
|
+
|
|
98
|
+
// NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
|
|
99
|
+
// first type parameter as `any` instead of the perfectly fine `unknown`,
|
|
100
|
+
// leading to linter issues, as it forbids the usage of `any`.
|
|
101
|
+
// This is why we're disabling the eslint rule.
|
|
102
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
99
103
|
ignoreElements(),
|
|
100
104
|
catchError(error => observableOf({
|
|
101
105
|
type: "warning" as const,
|
package/src/core/eme/types.ts
CHANGED
|
@@ -14,13 +14,13 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import { Subject } from "rxjs";
|
|
18
17
|
import {
|
|
19
18
|
ICustomMediaKeys,
|
|
20
19
|
ICustomMediaKeySession,
|
|
21
20
|
ICustomMediaKeySystemAccess,
|
|
22
21
|
} from "../../compat";
|
|
23
22
|
import { ICustomError } from "../../errors";
|
|
23
|
+
import { ISharedReference } from "../../utils/reference";
|
|
24
24
|
import LoadedSessionsStore from "./utils/loaded_sessions_store";
|
|
25
25
|
import PersistentSessionsStore from "./utils/persistent_sessions_store";
|
|
26
26
|
|
|
@@ -78,8 +78,10 @@ export interface IEncryptedEvent { type: "encrypted-event-received";
|
|
|
78
78
|
* current content.
|
|
79
79
|
* This is necessary before creating a MediaKeySession which will allow
|
|
80
80
|
* encryption keys to be communicated.
|
|
81
|
-
*
|
|
82
|
-
*
|
|
81
|
+
*
|
|
82
|
+
* It carries a shared reference (`canAttachMediaKeys`) that should be setted to
|
|
83
|
+
* `true` to indicate that RxPlayer's EME logic can start to attach the
|
|
84
|
+
* `MediaKeys` instance to the HTMLMediaElement.
|
|
83
85
|
*/
|
|
84
86
|
export interface ICreatedMediaKeysEvent {
|
|
85
87
|
type: "created-media-keys";
|
|
@@ -115,9 +117,18 @@ export interface ICreatedMediaKeysEvent {
|
|
|
115
117
|
/** The MediaKeys instance. */
|
|
116
118
|
mediaKeys : MediaKeys |
|
|
117
119
|
ICustomMediaKeys;
|
|
120
|
+
|
|
121
|
+
/** Stores allowing to cache MediaKeySession instances. */
|
|
118
122
|
stores : IMediaKeySessionStores;
|
|
123
|
+
|
|
124
|
+
/** key system options considered. */
|
|
119
125
|
options : IKeySystemOption;
|
|
120
|
-
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Shared reference that should be set to `true` once the `MediaKeys`
|
|
129
|
+
* instance can be attached to the HTMLMediaElement.
|
|
130
|
+
*/
|
|
131
|
+
canAttachMediaKeys: ISharedReference<boolean>;
|
|
121
132
|
};
|
|
122
133
|
}
|
|
123
134
|
|
|
@@ -15,17 +15,15 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
|
+
catchError,
|
|
19
|
+
mergeMap,
|
|
18
20
|
Observable,
|
|
19
21
|
of as observableOf,
|
|
22
|
+
take,
|
|
23
|
+
tap,
|
|
20
24
|
timer,
|
|
21
25
|
race as observableRace,
|
|
22
26
|
} from "rxjs";
|
|
23
|
-
import {
|
|
24
|
-
catchError,
|
|
25
|
-
mergeMap,
|
|
26
|
-
take,
|
|
27
|
-
tap,
|
|
28
|
-
} from "rxjs/operators";
|
|
29
27
|
import {
|
|
30
28
|
closeSession,
|
|
31
29
|
ICustomMediaKeySession,
|
|
@@ -62,7 +60,9 @@ export default function safelyCloseMediaKeySession(
|
|
|
62
60
|
function recursivelyTryToCloseMediaKeySession(
|
|
63
61
|
retryNb : number
|
|
64
62
|
) : Observable<unknown> {
|
|
65
|
-
log.debug("EME: Trying to close a MediaKeySession",
|
|
63
|
+
log.debug("EME: Trying to close a MediaKeySession",
|
|
64
|
+
mediaKeySession.sessionId,
|
|
65
|
+
retryNb);
|
|
66
66
|
return closeSession(mediaKeySession).pipe(
|
|
67
67
|
tap(() => { log.debug("EME: Succeeded to close MediaKeySession"); }),
|
|
68
68
|
catchError((err : unknown) => {
|
|
@@ -18,11 +18,11 @@ import {
|
|
|
18
18
|
concat as observableConcat,
|
|
19
19
|
defer as observableDefer,
|
|
20
20
|
EMPTY,
|
|
21
|
+
ignoreElements,
|
|
21
22
|
merge as observableMerge,
|
|
22
23
|
Observable,
|
|
23
24
|
of as observableOf,
|
|
24
25
|
} from "rxjs";
|
|
25
|
-
import { ignoreElements } from "rxjs/operators";
|
|
26
26
|
import {
|
|
27
27
|
ICustomMediaKeys,
|
|
28
28
|
ICustomMediaKeySession,
|
|
@@ -167,7 +167,7 @@ export default class LoadedSessionsStore {
|
|
|
167
167
|
});
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
-
log.debug("EME-LSS: Add MediaKeySession", entry);
|
|
170
|
+
log.debug("EME-LSS: Add MediaKeySession", entry.sessionType);
|
|
171
171
|
this._storage.store(initializationData, entry);
|
|
172
172
|
return mediaKeySession;
|
|
173
173
|
}
|
|
@@ -183,7 +183,7 @@ export default class PersistentSessionsStore {
|
|
|
183
183
|
this.delete(initData);
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
-
log.info("EME-PSS: Add new session", sessionId
|
|
186
|
+
log.info("EME-PSS: Add new session", sessionId);
|
|
187
187
|
|
|
188
188
|
this._entries.push({ version: 3,
|
|
189
189
|
sessionId,
|
|
@@ -205,7 +205,7 @@ export default class PersistentSessionsStore {
|
|
|
205
205
|
return;
|
|
206
206
|
}
|
|
207
207
|
const entry = this._entries[index];
|
|
208
|
-
log.warn("EME-PSS: Delete session from store", entry);
|
|
208
|
+
log.warn("EME-PSS: Delete session from store", entry.sessionId);
|
|
209
209
|
this._entries.splice(index, 1);
|
|
210
210
|
this._save();
|
|
211
211
|
}
|
|
@@ -26,7 +26,7 @@ import SegmentFetcherCreator, {
|
|
|
26
26
|
ISegmentFetcherChunkEvent,
|
|
27
27
|
ISegmentFetcherCreatorBackoffOptions,
|
|
28
28
|
ISegmentFetcherEvent,
|
|
29
|
-
|
|
29
|
+
ISegmentFetcherRetry,
|
|
30
30
|
} from "./segment";
|
|
31
31
|
|
|
32
32
|
export {
|
|
@@ -46,5 +46,5 @@ export {
|
|
|
46
46
|
|
|
47
47
|
ISegmentFetcherChunkEvent,
|
|
48
48
|
ISegmentFetcherChunkCompleteEvent,
|
|
49
|
-
|
|
49
|
+
ISegmentFetcherRetry,
|
|
50
50
|
};
|
|
@@ -16,21 +16,20 @@
|
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
18
|
defer,
|
|
19
|
+
mapTo,
|
|
19
20
|
merge,
|
|
20
21
|
NEVER,
|
|
21
22
|
of,
|
|
23
|
+
startWith,
|
|
22
24
|
timer,
|
|
23
25
|
} from "rxjs";
|
|
24
|
-
import {
|
|
25
|
-
mapTo,
|
|
26
|
-
startWith,
|
|
27
|
-
} from "rxjs/operators";
|
|
28
26
|
import Prioritizer, {
|
|
29
27
|
ITaskEvent,
|
|
30
28
|
} from "../prioritizer";
|
|
31
29
|
|
|
32
30
|
/* eslint-disable @typescript-eslint/no-floating-promises */
|
|
33
31
|
/* eslint-disable @typescript-eslint/strict-boolean-expressions */
|
|
32
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
34
33
|
/* eslint-disable no-restricted-properties */
|
|
35
34
|
|
|
36
35
|
function assert(condition: boolean, msg?: string): asserts condition {
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
ISegmentFetcherChunkCompleteEvent,
|
|
23
23
|
ISegmentFetcherChunkEvent,
|
|
24
24
|
ISegmentFetcherEvent,
|
|
25
|
-
|
|
25
|
+
ISegmentFetcherRetry,
|
|
26
26
|
} from "./segment_fetcher";
|
|
27
27
|
import SegmentFetcherCreator, {
|
|
28
28
|
ISegmentFetcherCreatorBackoffOptions,
|
|
@@ -35,6 +35,6 @@ export {
|
|
|
35
35
|
ISegmentFetcherChunkCompleteEvent,
|
|
36
36
|
ISegmentFetcherChunkEvent,
|
|
37
37
|
ISegmentFetcherEvent,
|
|
38
|
-
|
|
38
|
+
ISegmentFetcherRetry,
|
|
39
39
|
ISegmentFetcherCreatorBackoffOptions,
|
|
40
40
|
};
|
|
@@ -14,54 +14,27 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import {
|
|
18
|
-
|
|
17
|
+
import {
|
|
18
|
+
map,
|
|
19
|
+
Observable,
|
|
20
|
+
} from "rxjs";
|
|
19
21
|
import log from "../../../log";
|
|
20
|
-
import ObservablePrioritizer, {
|
|
22
|
+
import ObservablePrioritizer, {
|
|
23
|
+
IEndedTaskEvent,
|
|
24
|
+
IInterruptedTaskEvent,
|
|
25
|
+
ITaskEvent,
|
|
26
|
+
} from "./prioritizer";
|
|
21
27
|
import {
|
|
22
28
|
ISegmentFetcher,
|
|
23
|
-
|
|
29
|
+
ISegmentFetcherChunkCompleteEvent,
|
|
30
|
+
ISegmentFetcherChunkEvent,
|
|
31
|
+
ISegmentFetcherRetry,
|
|
24
32
|
ISegmentLoaderContent,
|
|
25
33
|
} from "./segment_fetcher";
|
|
26
34
|
|
|
27
|
-
/**
|
|
28
|
-
* Event sent when a segment request has been temporarly interrupted due to
|
|
29
|
-
* another request with a high priority.
|
|
30
|
-
* The request for that segment will restart (from scratch) when requests with
|
|
31
|
-
* more priority are finished.
|
|
32
|
-
*/
|
|
33
|
-
export interface ISegmentFetcherInterruptedEvent { type : "interrupted" }
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Event sent when a segment request just ended.
|
|
37
|
-
* You can use this event to schedule another task you wanted to perform at best
|
|
38
|
-
* immediately after that one (its priority will be checked).
|
|
39
|
-
*/
|
|
40
|
-
export interface IEndedTaskEvent { type : "ended" }
|
|
41
|
-
|
|
42
|
-
/** Event sent by a `IPrioritizedSegmentFetcher`. */
|
|
43
|
-
export type IPrioritizedSegmentFetcherEvent<TSegmentDataType> =
|
|
44
|
-
ISegmentFetcherEvent<TSegmentDataType> |
|
|
45
|
-
ISegmentFetcherInterruptedEvent |
|
|
46
|
-
IEndedTaskEvent;
|
|
47
|
-
|
|
48
|
-
/** Oject returned by `applyPrioritizerToSegmentFetcher`. */
|
|
49
|
-
export interface IPrioritizedSegmentFetcher<TSegmentDataType> {
|
|
50
|
-
/** Create a new request for a segment with a given priority. */
|
|
51
|
-
createRequest : (content : ISegmentLoaderContent,
|
|
52
|
-
priority? : number) =>
|
|
53
|
-
Observable<IPrioritizedSegmentFetcherEvent<TSegmentDataType>>;
|
|
54
|
-
|
|
55
|
-
/** Update priority of a request created through `createRequest`. */
|
|
56
|
-
updatePriority : (
|
|
57
|
-
observable : Observable<IPrioritizedSegmentFetcherEvent<TSegmentDataType>>,
|
|
58
|
-
priority : number
|
|
59
|
-
) => void;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
35
|
/**
|
|
63
36
|
* This function basically put in relation:
|
|
64
|
-
* -
|
|
37
|
+
* - an `ISegmentFetcher`, which will be used to perform the segment requests
|
|
65
38
|
* - a prioritizer, which will handle the priority of a segment request
|
|
66
39
|
*
|
|
67
40
|
* and returns functions to fetch segments with a given priority.
|
|
@@ -73,15 +46,12 @@ export default function applyPrioritizerToSegmentFetcher<TSegmentDataType>(
|
|
|
73
46
|
prioritizer : ObservablePrioritizer<IPrioritizedSegmentFetcherEvent<TSegmentDataType>>,
|
|
74
47
|
fetcher : ISegmentFetcher<TSegmentDataType>
|
|
75
48
|
) : IPrioritizedSegmentFetcher<TSegmentDataType> {
|
|
76
|
-
/**
|
|
77
|
-
* The Observables returned by `createRequest` are not exactly the same than
|
|
78
|
-
* the one created by the `ObservablePrioritizer`. Because we still have to
|
|
79
|
-
* keep a handle on that value.
|
|
80
|
-
*/
|
|
49
|
+
/** Map returned task to the task as returned by the `ObservablePrioritizer`. */
|
|
81
50
|
const taskHandlers = new WeakMap<
|
|
82
51
|
Observable<IPrioritizedSegmentFetcherEvent<TSegmentDataType>>,
|
|
83
52
|
Observable<ITaskEvent<IPrioritizedSegmentFetcherEvent<TSegmentDataType>>>
|
|
84
53
|
>();
|
|
54
|
+
|
|
85
55
|
return {
|
|
86
56
|
/**
|
|
87
57
|
* Create a Segment request with a given priority.
|
|
@@ -124,3 +94,25 @@ export default function applyPrioritizerToSegmentFetcher<TSegmentDataType>(
|
|
|
124
94
|
},
|
|
125
95
|
};
|
|
126
96
|
}
|
|
97
|
+
|
|
98
|
+
/** Oject returned by `applyPrioritizerToSegmentFetcher`. */
|
|
99
|
+
export interface IPrioritizedSegmentFetcher<TSegmentDataType> {
|
|
100
|
+
/** Create a new request for a segment with a given priority. */
|
|
101
|
+
createRequest : (content : ISegmentLoaderContent,
|
|
102
|
+
priority? : number) =>
|
|
103
|
+
Observable<IPrioritizedSegmentFetcherEvent<TSegmentDataType>>;
|
|
104
|
+
|
|
105
|
+
/** Update priority of a request created through `createRequest`. */
|
|
106
|
+
updatePriority : (
|
|
107
|
+
observable : Observable<IPrioritizedSegmentFetcherEvent<TSegmentDataType>>,
|
|
108
|
+
priority : number
|
|
109
|
+
) => void;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** Event sent by a `IPrioritizedSegmentFetcher`. */
|
|
113
|
+
export type IPrioritizedSegmentFetcherEvent<TSegmentDataType> =
|
|
114
|
+
ISegmentFetcherChunkEvent<TSegmentDataType> |
|
|
115
|
+
ISegmentFetcherChunkCompleteEvent |
|
|
116
|
+
ISegmentFetcherRetry |
|
|
117
|
+
IInterruptedTaskEvent |
|
|
118
|
+
IEndedTaskEvent;
|
|
@@ -22,88 +22,6 @@ import {
|
|
|
22
22
|
import log from "../../../log";
|
|
23
23
|
import arrayFindIndex from "../../../utils/array_find_index";
|
|
24
24
|
|
|
25
|
-
/**
|
|
26
|
-
* Event sent when the corresponding task is a low-priority task that has just
|
|
27
|
-
* been temporarly interrupted due to another task with a high priority.
|
|
28
|
-
* The task will restart (from scratch) when tasks with more priority are
|
|
29
|
-
* finished.
|
|
30
|
-
*/
|
|
31
|
-
export interface IInterruptedTaskEvent { type : "interrupted" }
|
|
32
|
-
|
|
33
|
-
/** Event sent when the corresponding task emit an event. */
|
|
34
|
-
export interface ITaskDataEvent<T> { type : "data";
|
|
35
|
-
value : T; }
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Event sent when the corresponding task has ended (it will then complete).
|
|
39
|
-
* You can use this event to schedule another task you wanted to perform after
|
|
40
|
-
* that one.
|
|
41
|
-
*/
|
|
42
|
-
export interface IEndedTaskEvent { type : "ended" }
|
|
43
|
-
|
|
44
|
-
/** Events sent when a task has been created through the `create` method. */
|
|
45
|
-
export type ITaskEvent<T> = IInterruptedTaskEvent |
|
|
46
|
-
ITaskDataEvent<T> |
|
|
47
|
-
IEndedTaskEvent;
|
|
48
|
-
|
|
49
|
-
/** Stored object representing a single task. */
|
|
50
|
-
interface IPrioritizerTask<T> {
|
|
51
|
-
/**
|
|
52
|
-
* Observable created by the ObservablePrioritizer allowing to identify
|
|
53
|
-
* the task.
|
|
54
|
-
* This is another Observable wrapping the underlying Observable that the
|
|
55
|
-
* ObservablePrioritizer is asked to run.
|
|
56
|
-
*/
|
|
57
|
-
observable : Observable<ITaskEvent<T>>;
|
|
58
|
-
/**
|
|
59
|
-
* Function used to start and interrupt a task:
|
|
60
|
-
* - when `true` is emitted the task should be started. If it was already
|
|
61
|
-
* started, it will be interrupted first.
|
|
62
|
-
* - when `false` is emitted, the task should just be interrupted if running
|
|
63
|
-
*/
|
|
64
|
-
trigger : (shouldRun : boolean) => void;
|
|
65
|
-
/**
|
|
66
|
-
* Subscription of the underlying, wrapped, Observable.
|
|
67
|
-
* Only defined when the task has been started, `null` otherwise.
|
|
68
|
-
*/
|
|
69
|
-
subscription : Subscription | null;
|
|
70
|
-
/** Priority of the task. Lower that number is, higher is the priority. */
|
|
71
|
-
priority : number;
|
|
72
|
-
/** `true` if the underlying wrapped Observable either errored of completed. */
|
|
73
|
-
finished : boolean;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/** Options to give to the ObservablePrioritizer. */
|
|
77
|
-
export interface IPrioritizerOptions {
|
|
78
|
-
/** @see IPrioritizerPrioritySteps */
|
|
79
|
-
prioritySteps : IPrioritizerPrioritySteps;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Define both the `low` and `high` priority steps:
|
|
84
|
-
*
|
|
85
|
-
* - Any Observable with a priority number that is lower or equal to the
|
|
86
|
-
* `high` value will be an Observable with high priority.
|
|
87
|
-
*
|
|
88
|
-
* When Observables with high priorities are scheduled, they immediately
|
|
89
|
-
* abort pending Observables with low priorities (which will have then to
|
|
90
|
-
* wait until all higher-priority Observable have ended before re-starting).
|
|
91
|
-
*
|
|
92
|
-
* - Any Observable with a priority number that is higher or equal to the
|
|
93
|
-
* `low` value will be an Observable with low priority.
|
|
94
|
-
*
|
|
95
|
-
* Pending Observables with low priorities have the added particularity*
|
|
96
|
-
* of being aborted as soon as a high priority Observable is scheduled.
|
|
97
|
-
*
|
|
98
|
-
* * Other pending Observables are not aborted when a higher-priority
|
|
99
|
-
* Observable is scheduled, as their priorities only affect them before
|
|
100
|
-
* they are started (to know when to start them).
|
|
101
|
-
*/
|
|
102
|
-
export interface IPrioritizerPrioritySteps {
|
|
103
|
-
low : number;
|
|
104
|
-
high : number;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
25
|
/**
|
|
108
26
|
* Create Observables which can be priorized between one another.
|
|
109
27
|
*
|
|
@@ -556,3 +474,85 @@ export default class ObservablePrioritizer<T> {
|
|
|
556
474
|
this._minPendingPriority <= this._prioritySteps.high;
|
|
557
475
|
}
|
|
558
476
|
}
|
|
477
|
+
|
|
478
|
+
/**
|
|
479
|
+
* Event sent when the corresponding task is a low-priority task that has just
|
|
480
|
+
* been temporarly interrupted due to another task with a high priority.
|
|
481
|
+
* The task will restart (from scratch) when tasks with more priority are
|
|
482
|
+
* finished.
|
|
483
|
+
*/
|
|
484
|
+
export interface IInterruptedTaskEvent { type : "interrupted" }
|
|
485
|
+
|
|
486
|
+
/** Event sent when the corresponding task emit an event. */
|
|
487
|
+
export interface ITaskDataEvent<T> { type : "data";
|
|
488
|
+
value : T; }
|
|
489
|
+
|
|
490
|
+
/**
|
|
491
|
+
* Event sent when the corresponding task has ended (it will then complete).
|
|
492
|
+
* You can use this event to schedule another task you wanted to perform after
|
|
493
|
+
* that one.
|
|
494
|
+
*/
|
|
495
|
+
export interface IEndedTaskEvent { type : "ended" }
|
|
496
|
+
|
|
497
|
+
/** Events sent when a task has been created through the `create` method. */
|
|
498
|
+
export type ITaskEvent<T> = IInterruptedTaskEvent |
|
|
499
|
+
ITaskDataEvent<T> |
|
|
500
|
+
IEndedTaskEvent;
|
|
501
|
+
|
|
502
|
+
/** Stored object representing a single task. */
|
|
503
|
+
interface IPrioritizerTask<T> {
|
|
504
|
+
/**
|
|
505
|
+
* Observable created by the ObservablePrioritizer allowing to identify
|
|
506
|
+
* the task.
|
|
507
|
+
* This is another Observable wrapping the underlying Observable that the
|
|
508
|
+
* ObservablePrioritizer is asked to run.
|
|
509
|
+
*/
|
|
510
|
+
observable : Observable<ITaskEvent<T>>;
|
|
511
|
+
/**
|
|
512
|
+
* Function used to start and interrupt a task:
|
|
513
|
+
* - when `true` is emitted the task should be started. If it was already
|
|
514
|
+
* started, it will be interrupted first.
|
|
515
|
+
* - when `false` is emitted, the task should just be interrupted if running
|
|
516
|
+
*/
|
|
517
|
+
trigger : (shouldRun : boolean) => void;
|
|
518
|
+
/**
|
|
519
|
+
* Subscription of the underlying, wrapped, Observable.
|
|
520
|
+
* Only defined when the task has been started, `null` otherwise.
|
|
521
|
+
*/
|
|
522
|
+
subscription : Subscription | null;
|
|
523
|
+
/** Priority of the task. Lower that number is, higher is the priority. */
|
|
524
|
+
priority : number;
|
|
525
|
+
/** `true` if the underlying wrapped Observable either errored of completed. */
|
|
526
|
+
finished : boolean;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
/** Options to give to the ObservablePrioritizer. */
|
|
530
|
+
export interface IPrioritizerOptions {
|
|
531
|
+
/** @see IPrioritizerPrioritySteps */
|
|
532
|
+
prioritySteps : IPrioritizerPrioritySteps;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
/**
|
|
536
|
+
* Define both the `low` and `high` priority steps:
|
|
537
|
+
*
|
|
538
|
+
* - Any Observable with a priority number that is lower or equal to the
|
|
539
|
+
* `high` value will be an Observable with high priority.
|
|
540
|
+
*
|
|
541
|
+
* When Observables with high priorities are scheduled, they immediately
|
|
542
|
+
* abort pending Observables with low priorities (which will have then to
|
|
543
|
+
* wait until all higher-priority Observable have ended before re-starting).
|
|
544
|
+
*
|
|
545
|
+
* - Any Observable with a priority number that is higher or equal to the
|
|
546
|
+
* `low` value will be an Observable with low priority.
|
|
547
|
+
*
|
|
548
|
+
* Pending Observables with low priorities have the added particularity*
|
|
549
|
+
* of being aborted as soon as a high priority Observable is scheduled.
|
|
550
|
+
*
|
|
551
|
+
* * Other pending Observables are not aborted when a higher-priority
|
|
552
|
+
* Observable is scheduled, as their priorities only affect them before
|
|
553
|
+
* they are started (to know when to start them).
|
|
554
|
+
*/
|
|
555
|
+
export interface IPrioritizerPrioritySteps {
|
|
556
|
+
low : number;
|
|
557
|
+
high : number;
|
|
558
|
+
}
|