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
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { concat as observableConcat, EMPTY, merge as observableMerge, of as observableOf, ReplaySubject, throwError, } from "rxjs";
|
|
17
|
-
import { catchError, filter, ignoreElements, map, mergeMap, shareReplay, take, tap, } from "rxjs/operators";
|
|
16
|
+
import { catchError, concat as observableConcat, EMPTY, filter, ignoreElements, map, merge as observableMerge, mergeMap, of as observableOf, ReplaySubject, shareReplay, take, tap, throwError, } from "rxjs";
|
|
18
17
|
import { events, generateKeyRequest, getInitData, } from "../../compat/";
|
|
19
18
|
import config from "../../config";
|
|
20
19
|
import { EncryptedMediaError } from "../../errors";
|
|
@@ -80,12 +79,12 @@ export default function EMEManager(mediaElement, keySystemsConfigs, contentProte
|
|
|
80
79
|
return evt.type === "attached-media-keys";
|
|
81
80
|
}), take(1));
|
|
82
81
|
/** Parsed `encrypted` events coming from the HTMLMediaElement. */
|
|
83
|
-
var mediaEncryptedEvents$ = onEncrypted$(mediaElement).pipe(tap(function (
|
|
84
|
-
log.debug("EME: Encrypted event received from media element."
|
|
82
|
+
var mediaEncryptedEvents$ = onEncrypted$(mediaElement).pipe(tap(function () {
|
|
83
|
+
log.debug("EME: Encrypted event received from media element.");
|
|
85
84
|
}), filterMap(function (evt) { return getInitData(evt); }, null), shareReplay({ refCount: true })); // multiple Observables listen to that one
|
|
86
85
|
// as soon as the EMEManager is subscribed
|
|
87
86
|
/** Encryption events coming from the `contentProtections$` argument. */
|
|
88
|
-
var externalEvents$ = contentProtections$.pipe(tap(function (
|
|
87
|
+
var externalEvents$ = contentProtections$.pipe(tap(function () { log.debug("EME: Encrypted event received from Player"); }));
|
|
89
88
|
/** Emit events signaling that an encryption initialization data is encountered. */
|
|
90
89
|
var initializationData$ = observableMerge(externalEvents$, mediaEncryptedEvents$);
|
|
91
90
|
/** Create MediaKeySessions and handle the corresponding events. */
|
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { defer as observableDefer, of as observableOf, throwError as observableThrow, } from "rxjs";
|
|
17
|
-
import { catchError, map, } from "rxjs/operators";
|
|
16
|
+
import { catchError, defer as observableDefer, map, of as observableOf, throwError as observableThrow, } from "rxjs";
|
|
18
17
|
import { requestMediaKeySystemAccess, shouldRenewMediaKeys, } from "../../compat";
|
|
19
18
|
import config from "../../config";
|
|
20
19
|
import { EncryptedMediaError } from "../../errors";
|
|
@@ -170,7 +169,7 @@ export default function getMediaKeySystemAccess(mediaElement, keySystemsConfigs)
|
|
|
170
169
|
// one as exactly the same compatibility options.
|
|
171
170
|
var cachedKeySystemAccess = checkCachedMediaKeySystemAccess(keySystemsConfigs, currentState.mediaKeySystemAccess, currentState.keySystemOptions);
|
|
172
171
|
if (cachedKeySystemAccess !== null) {
|
|
173
|
-
log.info("EME: Found cached compatible keySystem"
|
|
172
|
+
log.info("EME: Found cached compatible keySystem");
|
|
174
173
|
return observableOf({
|
|
175
174
|
type: "reuse-media-key-system-access",
|
|
176
175
|
value: { mediaKeySystemAccess: cachedKeySystemAccess.keySystemAccess,
|
|
@@ -228,8 +227,8 @@ export default function getMediaKeySystemAccess(mediaElement, keySystemsConfigs)
|
|
|
228
227
|
}
|
|
229
228
|
var _a = keySystemsType[index], keyName = _a.keyName, keyType = _a.keyType, keySystemOptions = _a.keySystemOptions;
|
|
230
229
|
var keySystemConfigurations = buildKeySystemConfigurations(keyName, keySystemOptions);
|
|
231
|
-
log.debug("EME: Request keysystem access "
|
|
232
|
-
(index + 1
|
|
230
|
+
log.debug("EME: Request keysystem access ".concat(keyType, ",") +
|
|
231
|
+
"".concat(index + 1, " of ").concat(keySystemsType.length), keySystemConfigurations);
|
|
233
232
|
return requestMediaKeySystemAccess(keyType, keySystemConfigurations).pipe(map(function (keySystemAccess) {
|
|
234
233
|
log.info("EME: Found compatible keysystem", keyType, keySystemConfigurations);
|
|
235
234
|
return { type: "create-media-key-system-access",
|
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { of as observableOf, } from "rxjs";
|
|
17
|
-
import { catchError, map, mergeMap, } from "rxjs/operators";
|
|
16
|
+
import { catchError, map, mergeMap, of as observableOf, } from "rxjs";
|
|
18
17
|
import { EncryptedMediaError } from "../../errors";
|
|
19
18
|
import log from "../../log";
|
|
20
19
|
import castToObservable from "../../utils/cast_to_observable";
|
|
@@ -63,7 +62,7 @@ export default function getMediaKeysInfos(mediaElement, keySystemsConfigs) {
|
|
|
63
62
|
}
|
|
64
63
|
}
|
|
65
64
|
return createMediaKeys(mediaKeySystemAccess).pipe(map(function (mediaKeys) {
|
|
66
|
-
log.info("EME: MediaKeys created with success"
|
|
65
|
+
log.info("EME: MediaKeys created with success");
|
|
67
66
|
var loadedSessionsStore = new LoadedSessionsStore(mediaKeys);
|
|
68
67
|
return { mediaKeys: mediaKeys, mediaKeySystemAccess: mediaKeySystemAccess, stores: { loadedSessionsStore: loadedSessionsStore, persistentSessionsStore: persistentSessionsStore }, options: options };
|
|
69
68
|
}));
|
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { concat as observableConcat, defer as observableDefer, of as observableOf, } from "rxjs";
|
|
17
|
-
import { map, mergeMap, } from "rxjs/operators";
|
|
16
|
+
import { concat as observableConcat, defer as observableDefer, map, mergeMap, of as observableOf, } from "rxjs";
|
|
18
17
|
import log from "../../log";
|
|
19
18
|
import cleanOldLoadedSessions from "./clean_old_loaded_sessions";
|
|
20
19
|
import createSession from "./create_session";
|
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { of as observableOf,
|
|
17
|
-
import { mapTo, mergeMap, startWith, take, } from "rxjs/operators";
|
|
16
|
+
import { filter, mapTo, mergeMap, of as observableOf, startWith, take, } from "rxjs";
|
|
18
17
|
import log from "../../log";
|
|
19
18
|
import isNullOrUndefined from "../../utils/is_null_or_undefined";
|
|
19
|
+
import createSharedReference from "../../utils/reference";
|
|
20
20
|
import attachMediaKeys, { disableMediaKeys, } from "./attach_media_keys";
|
|
21
21
|
import getDrmSystemId from "./get_drm_system_id";
|
|
22
22
|
import getMediaKeysInfos from "./get_media_keys";
|
|
@@ -44,7 +44,7 @@ export default function initMediaKeys(mediaElement, keySystemsConfigs) {
|
|
|
44
44
|
options.licenseStorage.disableRetroCompatibility === true) {
|
|
45
45
|
initializationDataSystemId = getDrmSystemId(mediaKeySystemAccess.keySystem);
|
|
46
46
|
}
|
|
47
|
-
var
|
|
47
|
+
var canAttachMediaKeys = createSharedReference(false);
|
|
48
48
|
var shouldDisableOldMediaKeys = mediaElement.mediaKeys !== null &&
|
|
49
49
|
mediaElement.mediaKeys !== undefined &&
|
|
50
50
|
mediaKeys !== mediaElement.mediaKeys;
|
|
@@ -55,12 +55,12 @@ export default function initMediaKeys(mediaElement, keySystemsConfigs) {
|
|
|
55
55
|
}
|
|
56
56
|
return disableOldMediaKeys$.pipe(mergeMap(function () {
|
|
57
57
|
log.debug("EME: Attaching current MediaKeys");
|
|
58
|
-
return
|
|
58
|
+
return canAttachMediaKeys.asObservable().pipe(filter(function (canAttach) { return canAttach; }), mergeMap(function () {
|
|
59
59
|
var stateToAttatch = { loadedSessionsStore: stores.loadedSessionsStore, mediaKeySystemAccess: mediaKeySystemAccess, mediaKeys: mediaKeys, keySystemOptions: options };
|
|
60
60
|
return attachMediaKeys(mediaElement, stateToAttatch);
|
|
61
61
|
}), take(1), mapTo({ type: "attached-media-keys",
|
|
62
62
|
value: { mediaKeySystemAccess: mediaKeySystemAccess, mediaKeys: mediaKeys, stores: stores, options: options } }), startWith({ type: "created-media-keys",
|
|
63
|
-
value: { mediaKeySystemAccess: mediaKeySystemAccess, initializationDataSystemId: initializationDataSystemId, mediaKeys: mediaKeys, stores: stores, options: options,
|
|
63
|
+
value: { mediaKeySystemAccess: mediaKeySystemAccess, initializationDataSystemId: initializationDataSystemId, mediaKeys: mediaKeys, stores: stores, options: options, canAttachMediaKeys: canAttachMediaKeys } }));
|
|
64
64
|
}));
|
|
65
65
|
}));
|
|
66
66
|
}
|
|
@@ -28,8 +28,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
28
28
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
29
29
|
};
|
|
30
30
|
})();
|
|
31
|
-
import { concat as observableConcat, defer as observableDefer, EMPTY, identity, merge as observableMerge, of as observableOf, Subject, TimeoutError, } from "rxjs";
|
|
32
|
-
import { catchError, concatMap, map, mapTo, mergeMap, startWith, takeUntil, tap, timeout, } from "rxjs/operators";
|
|
31
|
+
import { catchError, concat as observableConcat, concatMap, defer as observableDefer, EMPTY, identity, map, merge as observableMerge, mergeMap, of as observableOf, startWith, Subject, takeUntil, tap, timeout, TimeoutError, } from "rxjs";
|
|
33
32
|
import { events, } from "../../compat";
|
|
34
33
|
import { EncryptedMediaError, } from "../../errors";
|
|
35
34
|
import log from "../../log";
|
|
@@ -70,7 +69,7 @@ export { BlacklistedSessionError };
|
|
|
70
69
|
* @returns {Observable}
|
|
71
70
|
*/
|
|
72
71
|
export default function SessionEventsListener(session, keySystemOptions, keySystem, initializationData) {
|
|
73
|
-
log.info("EME: Binding session events", session);
|
|
72
|
+
log.info("EME: Binding session events", session.sessionId);
|
|
74
73
|
var sessionWarningSubject$ = new Subject();
|
|
75
74
|
var _a = keySystemOptions.getLicenseConfig, getLicenseConfig = _a === void 0 ? {} : _a;
|
|
76
75
|
var keyErrors = onKeyError$(session)
|
|
@@ -84,7 +83,7 @@ export default function SessionEventsListener(session, keySystemOptions, keySyst
|
|
|
84
83
|
var messageType = isNonEmptyString(messageEvent.messageType) ?
|
|
85
84
|
messageEvent.messageType :
|
|
86
85
|
"license-request";
|
|
87
|
-
log.info("EME: Received message event, type "
|
|
86
|
+
log.info("EME: Received message event, type ".concat(messageType), session.sessionId, messageEvent);
|
|
88
87
|
var getLicense$ = observableDefer(function () {
|
|
89
88
|
var getLicense = keySystemOptions.getLicense(message, messageType);
|
|
90
89
|
var getLicenseTimeout = isNullOrUndefined(getLicenseConfig.timeout) ?
|
|
@@ -192,8 +191,8 @@ function updateSessionWithMessage(session, message, initializationData) {
|
|
|
192
191
|
var reason = error instanceof Error ? error.toString() :
|
|
193
192
|
"`session.update` failed";
|
|
194
193
|
throw new EncryptedMediaError("KEY_UPDATE_ERROR", reason);
|
|
195
|
-
}), tap(function () { log.info("EME: MediaKeySession update succeeded."); }),
|
|
196
|
-
value: { session: session, license: message, initializationData: initializationData } }));
|
|
194
|
+
}), tap(function () { log.info("EME: MediaKeySession update succeeded."); }), map(function () { return ({ type: "session-updated",
|
|
195
|
+
value: { session: session, license: message, initializationData: initializationData } }); }));
|
|
197
196
|
}
|
|
198
197
|
/**
|
|
199
198
|
* @param {MediaKeySession}
|
|
@@ -202,7 +201,7 @@ function updateSessionWithMessage(session, message, initializationData) {
|
|
|
202
201
|
* @returns {Observable}
|
|
203
202
|
*/
|
|
204
203
|
function handleKeyStatusesChangeEvent(session, keySystemOptions, keySystem, keyStatusesEvent) {
|
|
205
|
-
log.info("EME: keystatuseschange event received", session
|
|
204
|
+
log.info("EME: keystatuseschange event received", session.sessionId);
|
|
206
205
|
var callback$ = observableDefer(function () {
|
|
207
206
|
return tryCatch(function () {
|
|
208
207
|
if (typeof keySystemOptions.onKeyStatusesChange !== "function") {
|
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { defer as observableDefer, EMPTY, of as observableOf, } from "rxjs";
|
|
17
|
-
import { catchError, ignoreElements, tap, } from "rxjs/operators";
|
|
16
|
+
import { catchError, defer as observableDefer, EMPTY, ignoreElements, tap, of as observableOf, } from "rxjs";
|
|
18
17
|
import { EncryptedMediaError } from "../../errors";
|
|
19
18
|
import log from "../../log";
|
|
20
19
|
import castToObservable from "../../utils/cast_to_observable";
|
|
@@ -70,7 +69,13 @@ export default function trySettingServerCertificate(mediaKeys, serverCertificate
|
|
|
70
69
|
// know if we attached the server certificate or not.
|
|
71
70
|
// Calling `prepare` allow to invalidate temporarily that status.
|
|
72
71
|
ServerCertificateStore.prepare(mediaKeys);
|
|
73
|
-
return setServerCertificate(mediaKeys, serverCertificate).pipe(tap(function () { ServerCertificateStore.set(mediaKeys, serverCertificate); }),
|
|
72
|
+
return setServerCertificate(mediaKeys, serverCertificate).pipe(tap(function () { ServerCertificateStore.set(mediaKeys, serverCertificate); }),
|
|
73
|
+
// NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
|
|
74
|
+
// first type parameter as `any` instead of the perfectly fine `unknown`,
|
|
75
|
+
// leading to linter issues, as it forbids the usage of `any`.
|
|
76
|
+
// This is why we're disabling the eslint rule.
|
|
77
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
78
|
+
ignoreElements(), catchError(function (error) { return observableOf({
|
|
74
79
|
type: "warning",
|
|
75
80
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
76
81
|
value: error,
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { Subject } from "rxjs";
|
|
17
16
|
import { ICustomMediaKeys, ICustomMediaKeySession, ICustomMediaKeySystemAccess } from "../../compat";
|
|
18
17
|
import { ICustomError } from "../../errors";
|
|
18
|
+
import { ISharedReference } from "../../utils/reference";
|
|
19
19
|
import LoadedSessionsStore from "./utils/loaded_sessions_store";
|
|
20
20
|
import PersistentSessionsStore from "./utils/persistent_sessions_store";
|
|
21
21
|
/** Information about the encryption initialization data. */
|
|
@@ -73,8 +73,10 @@ export interface IEncryptedEvent {
|
|
|
73
73
|
* current content.
|
|
74
74
|
* This is necessary before creating a MediaKeySession which will allow
|
|
75
75
|
* encryption keys to be communicated.
|
|
76
|
-
*
|
|
77
|
-
*
|
|
76
|
+
*
|
|
77
|
+
* It carries a shared reference (`canAttachMediaKeys`) that should be setted to
|
|
78
|
+
* `true` to indicate that RxPlayer's EME logic can start to attach the
|
|
79
|
+
* `MediaKeys` instance to the HTMLMediaElement.
|
|
78
80
|
*/
|
|
79
81
|
export interface ICreatedMediaKeysEvent {
|
|
80
82
|
type: "created-media-keys";
|
|
@@ -106,9 +108,15 @@ export interface ICreatedMediaKeysEvent {
|
|
|
106
108
|
initializationDataSystemId: string | undefined;
|
|
107
109
|
/** The MediaKeys instance. */
|
|
108
110
|
mediaKeys: MediaKeys | ICustomMediaKeys;
|
|
111
|
+
/** Stores allowing to cache MediaKeySession instances. */
|
|
109
112
|
stores: IMediaKeySessionStores;
|
|
113
|
+
/** key system options considered. */
|
|
110
114
|
options: IKeySystemOption;
|
|
111
|
-
|
|
115
|
+
/**
|
|
116
|
+
* Shared reference that should be set to `true` once the `MediaKeys`
|
|
117
|
+
* instance can be attached to the HTMLMediaElement.
|
|
118
|
+
*/
|
|
119
|
+
canAttachMediaKeys: ISharedReference<boolean>;
|
|
112
120
|
};
|
|
113
121
|
}
|
|
114
122
|
/**
|
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { of as observableOf, timer, race as observableRace, } from "rxjs";
|
|
17
|
-
import { catchError, mergeMap, take, tap, } from "rxjs/operators";
|
|
16
|
+
import { catchError, mergeMap, of as observableOf, take, tap, timer, race as observableRace, } from "rxjs";
|
|
18
17
|
import { closeSession, } from "../../../compat";
|
|
19
18
|
import { onKeyMessage$, onKeyStatusesChange$ } from "../../../compat/event_listeners";
|
|
20
19
|
import config from "../../../config";
|
|
@@ -39,7 +38,7 @@ export default function safelyCloseMediaKeySession(mediaKeySession) {
|
|
|
39
38
|
* @returns {Observable}
|
|
40
39
|
*/
|
|
41
40
|
function recursivelyTryToCloseMediaKeySession(retryNb) {
|
|
42
|
-
log.debug("EME: Trying to close a MediaKeySession", mediaKeySession, retryNb);
|
|
41
|
+
log.debug("EME: Trying to close a MediaKeySession", mediaKeySession.sessionId, retryNb);
|
|
43
42
|
return closeSession(mediaKeySession).pipe(tap(function () { log.debug("EME: Succeeded to close MediaKeySession"); }), catchError(function (err) {
|
|
44
43
|
// Unitialized MediaKeySession may not close properly until their
|
|
45
44
|
// corresponding `generateRequest` or `load` call are handled by the
|
|
@@ -33,7 +33,7 @@ export default function isSessionUsable(loadedSession) {
|
|
|
33
33
|
keyStatuses.push(keyStatus);
|
|
34
34
|
});
|
|
35
35
|
if (keyStatuses.length <= 0) {
|
|
36
|
-
log.debug("EME: isSessionUsable: MediaKeySession given has an empty keyStatuses", loadedSession);
|
|
36
|
+
log.debug("EME: isSessionUsable: MediaKeySession given has an empty keyStatuses", loadedSession.sessionId);
|
|
37
37
|
return false;
|
|
38
38
|
}
|
|
39
39
|
if (arrayIncludes(keyStatuses, "expired")) {
|
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { concat as observableConcat, defer as observableDefer, EMPTY, merge as observableMerge, of as observableOf, } from "rxjs";
|
|
17
|
-
import { ignoreElements } from "rxjs/operators";
|
|
16
|
+
import { concat as observableConcat, defer as observableDefer, EMPTY, ignoreElements, merge as observableMerge, of as observableOf, } from "rxjs";
|
|
18
17
|
import { EncryptedMediaError } from "../../../errors";
|
|
19
18
|
import log from "../../../log";
|
|
20
19
|
import isNullOrUndefined from "../../../utils/is_null_or_undefined";
|
|
@@ -110,10 +109,10 @@ var LoadedSessionsStore = /** @class */ (function () {
|
|
|
110
109
|
})
|
|
111
110
|
.catch(function (e) {
|
|
112
111
|
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
113
|
-
log.warn("EME-LSS: MediaKeySession.closed rejected: "
|
|
112
|
+
log.warn("EME-LSS: MediaKeySession.closed rejected: ".concat(e));
|
|
114
113
|
});
|
|
115
114
|
}
|
|
116
|
-
log.debug("EME-LSS: Add MediaKeySession", entry);
|
|
115
|
+
log.debug("EME-LSS: Add MediaKeySession", entry.sessionType);
|
|
117
116
|
this._storage.store(initializationData, entry);
|
|
118
117
|
return mediaKeySession;
|
|
119
118
|
};
|
|
@@ -154,7 +154,7 @@ var PersistentSessionsStore = /** @class */ (function () {
|
|
|
154
154
|
else if (currentEntry !== null) { // currentEntry has a different sessionId
|
|
155
155
|
this.delete(initData);
|
|
156
156
|
}
|
|
157
|
-
log.info("EME-PSS: Add new session", sessionId
|
|
157
|
+
log.info("EME-PSS: Add new session", sessionId);
|
|
158
158
|
this._entries.push({ version: 3, sessionId: sessionId, values: this._formatValuesForStore(initData.values),
|
|
159
159
|
initDataType: initData.type });
|
|
160
160
|
this._save();
|
|
@@ -172,12 +172,12 @@ var PersistentSessionsStore = /** @class */ (function () {
|
|
|
172
172
|
return;
|
|
173
173
|
}
|
|
174
174
|
var entry = this._entries[index];
|
|
175
|
-
log.warn("EME-PSS: Delete session from store", entry);
|
|
175
|
+
log.warn("EME-PSS: Delete session from store", entry.sessionId);
|
|
176
176
|
this._entries.splice(index, 1);
|
|
177
177
|
this._save();
|
|
178
178
|
};
|
|
179
179
|
PersistentSessionsStore.prototype.deleteOldSessions = function (sessionsToDelete) {
|
|
180
|
-
log.info("EME-PSS: Deleting last "
|
|
180
|
+
log.info("EME-PSS: Deleting last ".concat(sessionsToDelete, " sessions."));
|
|
181
181
|
if (sessionsToDelete <= 0) {
|
|
182
182
|
return;
|
|
183
183
|
}
|
|
@@ -14,5 +14,5 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import ManifestFetcher, { IManifestFetcherParsedResult, IManifestFetcherParserOptions, IManifestFetcherWarningEvent } from "./manifest";
|
|
17
|
-
import SegmentFetcherCreator, { IPrioritizedSegmentFetcher, IPrioritizedSegmentFetcherEvent, ISegmentFetcherChunkCompleteEvent, ISegmentFetcherChunkEvent, ISegmentFetcherCreatorBackoffOptions, ISegmentFetcherEvent,
|
|
18
|
-
export { ManifestFetcher, SegmentFetcherCreator, IManifestFetcherParserOptions, IManifestFetcherParsedResult, IManifestFetcherWarningEvent, IPrioritizedSegmentFetcher, IPrioritizedSegmentFetcherEvent, ISegmentFetcherEvent, ISegmentFetcherCreatorBackoffOptions, ISegmentFetcherChunkEvent, ISegmentFetcherChunkCompleteEvent,
|
|
17
|
+
import SegmentFetcherCreator, { IPrioritizedSegmentFetcher, IPrioritizedSegmentFetcherEvent, ISegmentFetcherChunkCompleteEvent, ISegmentFetcherChunkEvent, ISegmentFetcherCreatorBackoffOptions, ISegmentFetcherEvent, ISegmentFetcherRetry } from "./segment";
|
|
18
|
+
export { ManifestFetcher, SegmentFetcherCreator, IManifestFetcherParserOptions, IManifestFetcherParsedResult, IManifestFetcherWarningEvent, IPrioritizedSegmentFetcher, IPrioritizedSegmentFetcherEvent, ISegmentFetcherEvent, ISegmentFetcherCreatorBackoffOptions, ISegmentFetcherChunkEvent, ISegmentFetcherChunkCompleteEvent, ISegmentFetcherRetry, };
|
|
@@ -186,7 +186,7 @@ var ManifestFetcher = /** @class */ (function () {
|
|
|
186
186
|
ManifestFetcher.prototype.parse = function (manifest, parserOptions) {
|
|
187
187
|
return this._parseLoadedManifest({ responseData: manifest,
|
|
188
188
|
size: undefined,
|
|
189
|
-
|
|
189
|
+
requestDuration: undefined }, parserOptions);
|
|
190
190
|
};
|
|
191
191
|
/**
|
|
192
192
|
* Parse a Manifest.
|
|
@@ -285,7 +285,7 @@ var ManifestFetcher = /** @class */ (function () {
|
|
|
285
285
|
function emitManifestAndComplete(manifest) {
|
|
286
286
|
onWarnings(manifest.contentWarnings);
|
|
287
287
|
var parsingTime = performance.now() - parsingTimeStart;
|
|
288
|
-
log.info("MF: Manifest parsed in "
|
|
288
|
+
log.info("MF: Manifest parsed in ".concat(parsingTime, "ms"));
|
|
289
289
|
obs.next({ type: "parsed", manifest: manifest, sendingTime: sendingTime, receivedTime: receivedTime, parsingTime: parsingTime });
|
|
290
290
|
obs.complete();
|
|
291
291
|
}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import { IPrioritizedSegmentFetcher, IPrioritizedSegmentFetcherEvent } from "./prioritized_segment_fetcher";
|
|
17
|
-
import { ISegmentFetcherChunkCompleteEvent, ISegmentFetcherChunkEvent, ISegmentFetcherEvent,
|
|
17
|
+
import { ISegmentFetcherChunkCompleteEvent, ISegmentFetcherChunkEvent, ISegmentFetcherEvent, ISegmentFetcherRetry } from "./segment_fetcher";
|
|
18
18
|
import SegmentFetcherCreator, { ISegmentFetcherCreatorBackoffOptions } from "./segment_fetcher_creator";
|
|
19
19
|
export default SegmentFetcherCreator;
|
|
20
|
-
export { IPrioritizedSegmentFetcher, IPrioritizedSegmentFetcherEvent, ISegmentFetcherChunkCompleteEvent, ISegmentFetcherChunkEvent, ISegmentFetcherEvent,
|
|
20
|
+
export { IPrioritizedSegmentFetcher, IPrioritizedSegmentFetcherEvent, ISegmentFetcherChunkCompleteEvent, ISegmentFetcherChunkEvent, ISegmentFetcherEvent, ISegmentFetcherRetry, ISegmentFetcherCreatorBackoffOptions, };
|
|
@@ -14,37 +14,11 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import { Observable } from "rxjs";
|
|
17
|
-
import ObservablePrioritizer from "./prioritizer";
|
|
18
|
-
import { ISegmentFetcher,
|
|
19
|
-
/**
|
|
20
|
-
* Event sent when a segment request has been temporarly interrupted due to
|
|
21
|
-
* another request with a high priority.
|
|
22
|
-
* The request for that segment will restart (from scratch) when requests with
|
|
23
|
-
* more priority are finished.
|
|
24
|
-
*/
|
|
25
|
-
export interface ISegmentFetcherInterruptedEvent {
|
|
26
|
-
type: "interrupted";
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Event sent when a segment request just ended.
|
|
30
|
-
* You can use this event to schedule another task you wanted to perform at best
|
|
31
|
-
* immediately after that one (its priority will be checked).
|
|
32
|
-
*/
|
|
33
|
-
export interface IEndedTaskEvent {
|
|
34
|
-
type: "ended";
|
|
35
|
-
}
|
|
36
|
-
/** Event sent by a `IPrioritizedSegmentFetcher`. */
|
|
37
|
-
export declare type IPrioritizedSegmentFetcherEvent<TSegmentDataType> = ISegmentFetcherEvent<TSegmentDataType> | ISegmentFetcherInterruptedEvent | IEndedTaskEvent;
|
|
38
|
-
/** Oject returned by `applyPrioritizerToSegmentFetcher`. */
|
|
39
|
-
export interface IPrioritizedSegmentFetcher<TSegmentDataType> {
|
|
40
|
-
/** Create a new request for a segment with a given priority. */
|
|
41
|
-
createRequest: (content: ISegmentLoaderContent, priority?: number) => Observable<IPrioritizedSegmentFetcherEvent<TSegmentDataType>>;
|
|
42
|
-
/** Update priority of a request created through `createRequest`. */
|
|
43
|
-
updatePriority: (observable: Observable<IPrioritizedSegmentFetcherEvent<TSegmentDataType>>, priority: number) => void;
|
|
44
|
-
}
|
|
17
|
+
import ObservablePrioritizer, { IEndedTaskEvent, IInterruptedTaskEvent } from "./prioritizer";
|
|
18
|
+
import { ISegmentFetcher, ISegmentFetcherChunkCompleteEvent, ISegmentFetcherChunkEvent, ISegmentFetcherRetry, ISegmentLoaderContent } from "./segment_fetcher";
|
|
45
19
|
/**
|
|
46
20
|
* This function basically put in relation:
|
|
47
|
-
* -
|
|
21
|
+
* - an `ISegmentFetcher`, which will be used to perform the segment requests
|
|
48
22
|
* - a prioritizer, which will handle the priority of a segment request
|
|
49
23
|
*
|
|
50
24
|
* and returns functions to fetch segments with a given priority.
|
|
@@ -53,3 +27,12 @@ export interface IPrioritizedSegmentFetcher<TSegmentDataType> {
|
|
|
53
27
|
* @returns {Object}
|
|
54
28
|
*/
|
|
55
29
|
export default function applyPrioritizerToSegmentFetcher<TSegmentDataType>(prioritizer: ObservablePrioritizer<IPrioritizedSegmentFetcherEvent<TSegmentDataType>>, fetcher: ISegmentFetcher<TSegmentDataType>): IPrioritizedSegmentFetcher<TSegmentDataType>;
|
|
30
|
+
/** Oject returned by `applyPrioritizerToSegmentFetcher`. */
|
|
31
|
+
export interface IPrioritizedSegmentFetcher<TSegmentDataType> {
|
|
32
|
+
/** Create a new request for a segment with a given priority. */
|
|
33
|
+
createRequest: (content: ISegmentLoaderContent, priority?: number) => Observable<IPrioritizedSegmentFetcherEvent<TSegmentDataType>>;
|
|
34
|
+
/** Update priority of a request created through `createRequest`. */
|
|
35
|
+
updatePriority: (observable: Observable<IPrioritizedSegmentFetcherEvent<TSegmentDataType>>, priority: number) => void;
|
|
36
|
+
}
|
|
37
|
+
/** Event sent by a `IPrioritizedSegmentFetcher`. */
|
|
38
|
+
export declare type IPrioritizedSegmentFetcherEvent<TSegmentDataType> = ISegmentFetcherChunkEvent<TSegmentDataType> | ISegmentFetcherChunkCompleteEvent | ISegmentFetcherRetry | IInterruptedTaskEvent | IEndedTaskEvent;
|
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { map } from "rxjs
|
|
16
|
+
import { map, } from "rxjs";
|
|
17
17
|
import log from "../../../log";
|
|
18
18
|
/**
|
|
19
19
|
* This function basically put in relation:
|
|
20
|
-
* -
|
|
20
|
+
* - an `ISegmentFetcher`, which will be used to perform the segment requests
|
|
21
21
|
* - a prioritizer, which will handle the priority of a segment request
|
|
22
22
|
*
|
|
23
23
|
* and returns functions to fetch segments with a given priority.
|
|
@@ -26,11 +26,7 @@ import log from "../../../log";
|
|
|
26
26
|
* @returns {Object}
|
|
27
27
|
*/
|
|
28
28
|
export default function applyPrioritizerToSegmentFetcher(prioritizer, fetcher) {
|
|
29
|
-
/**
|
|
30
|
-
* The Observables returned by `createRequest` are not exactly the same than
|
|
31
|
-
* the one created by the `ObservablePrioritizer`. Because we still have to
|
|
32
|
-
* keep a handle on that value.
|
|
33
|
-
*/
|
|
29
|
+
/** Map returned task to the task as returned by the `ObservablePrioritizer`. */
|
|
34
30
|
var taskHandlers = new WeakMap();
|
|
35
31
|
return {
|
|
36
32
|
/**
|
|
@@ -14,59 +14,6 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import { Observable } from "rxjs";
|
|
17
|
-
/**
|
|
18
|
-
* Event sent when the corresponding task is a low-priority task that has just
|
|
19
|
-
* been temporarly interrupted due to another task with a high priority.
|
|
20
|
-
* The task will restart (from scratch) when tasks with more priority are
|
|
21
|
-
* finished.
|
|
22
|
-
*/
|
|
23
|
-
export interface IInterruptedTaskEvent {
|
|
24
|
-
type: "interrupted";
|
|
25
|
-
}
|
|
26
|
-
/** Event sent when the corresponding task emit an event. */
|
|
27
|
-
export interface ITaskDataEvent<T> {
|
|
28
|
-
type: "data";
|
|
29
|
-
value: T;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Event sent when the corresponding task has ended (it will then complete).
|
|
33
|
-
* You can use this event to schedule another task you wanted to perform after
|
|
34
|
-
* that one.
|
|
35
|
-
*/
|
|
36
|
-
export interface IEndedTaskEvent {
|
|
37
|
-
type: "ended";
|
|
38
|
-
}
|
|
39
|
-
/** Events sent when a task has been created through the `create` method. */
|
|
40
|
-
export declare type ITaskEvent<T> = IInterruptedTaskEvent | ITaskDataEvent<T> | IEndedTaskEvent;
|
|
41
|
-
/** Options to give to the ObservablePrioritizer. */
|
|
42
|
-
export interface IPrioritizerOptions {
|
|
43
|
-
/** @see IPrioritizerPrioritySteps */
|
|
44
|
-
prioritySteps: IPrioritizerPrioritySteps;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Define both the `low` and `high` priority steps:
|
|
48
|
-
*
|
|
49
|
-
* - Any Observable with a priority number that is lower or equal to the
|
|
50
|
-
* `high` value will be an Observable with high priority.
|
|
51
|
-
*
|
|
52
|
-
* When Observables with high priorities are scheduled, they immediately
|
|
53
|
-
* abort pending Observables with low priorities (which will have then to
|
|
54
|
-
* wait until all higher-priority Observable have ended before re-starting).
|
|
55
|
-
*
|
|
56
|
-
* - Any Observable with a priority number that is higher or equal to the
|
|
57
|
-
* `low` value will be an Observable with low priority.
|
|
58
|
-
*
|
|
59
|
-
* Pending Observables with low priorities have the added particularity*
|
|
60
|
-
* of being aborted as soon as a high priority Observable is scheduled.
|
|
61
|
-
*
|
|
62
|
-
* * Other pending Observables are not aborted when a higher-priority
|
|
63
|
-
* Observable is scheduled, as their priorities only affect them before
|
|
64
|
-
* they are started (to know when to start them).
|
|
65
|
-
*/
|
|
66
|
-
export interface IPrioritizerPrioritySteps {
|
|
67
|
-
low: number;
|
|
68
|
-
high: number;
|
|
69
|
-
}
|
|
70
17
|
/**
|
|
71
18
|
* Create Observables which can be priorized between one another.
|
|
72
19
|
*
|
|
@@ -230,3 +177,56 @@ export default class ObservablePrioritizer<T> {
|
|
|
230
177
|
*/
|
|
231
178
|
private _isRunningHighPriorityTasks;
|
|
232
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Event sent when the corresponding task is a low-priority task that has just
|
|
182
|
+
* been temporarly interrupted due to another task with a high priority.
|
|
183
|
+
* The task will restart (from scratch) when tasks with more priority are
|
|
184
|
+
* finished.
|
|
185
|
+
*/
|
|
186
|
+
export interface IInterruptedTaskEvent {
|
|
187
|
+
type: "interrupted";
|
|
188
|
+
}
|
|
189
|
+
/** Event sent when the corresponding task emit an event. */
|
|
190
|
+
export interface ITaskDataEvent<T> {
|
|
191
|
+
type: "data";
|
|
192
|
+
value: T;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Event sent when the corresponding task has ended (it will then complete).
|
|
196
|
+
* You can use this event to schedule another task you wanted to perform after
|
|
197
|
+
* that one.
|
|
198
|
+
*/
|
|
199
|
+
export interface IEndedTaskEvent {
|
|
200
|
+
type: "ended";
|
|
201
|
+
}
|
|
202
|
+
/** Events sent when a task has been created through the `create` method. */
|
|
203
|
+
export declare type ITaskEvent<T> = IInterruptedTaskEvent | ITaskDataEvent<T> | IEndedTaskEvent;
|
|
204
|
+
/** Options to give to the ObservablePrioritizer. */
|
|
205
|
+
export interface IPrioritizerOptions {
|
|
206
|
+
/** @see IPrioritizerPrioritySteps */
|
|
207
|
+
prioritySteps: IPrioritizerPrioritySteps;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Define both the `low` and `high` priority steps:
|
|
211
|
+
*
|
|
212
|
+
* - Any Observable with a priority number that is lower or equal to the
|
|
213
|
+
* `high` value will be an Observable with high priority.
|
|
214
|
+
*
|
|
215
|
+
* When Observables with high priorities are scheduled, they immediately
|
|
216
|
+
* abort pending Observables with low priorities (which will have then to
|
|
217
|
+
* wait until all higher-priority Observable have ended before re-starting).
|
|
218
|
+
*
|
|
219
|
+
* - Any Observable with a priority number that is higher or equal to the
|
|
220
|
+
* `low` value will be an Observable with low priority.
|
|
221
|
+
*
|
|
222
|
+
* Pending Observables with low priorities have the added particularity*
|
|
223
|
+
* of being aborted as soon as a high priority Observable is scheduled.
|
|
224
|
+
*
|
|
225
|
+
* * Other pending Observables are not aborted when a higher-priority
|
|
226
|
+
* Observable is scheduled, as their priorities only affect them before
|
|
227
|
+
* they are started (to know when to start them).
|
|
228
|
+
*/
|
|
229
|
+
export interface IPrioritizerPrioritySteps {
|
|
230
|
+
low: number;
|
|
231
|
+
high: number;
|
|
232
|
+
}
|