rx-player 3.25.2 → 3.26.3-dev.2022021400
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/.eslintrc.js +1 -1
- package/.github/workflows/checks.yml +99 -0
- package/.github/workflows/perfs.yml +22 -0
- package/.github/workflows/sonarcloud_analysis.yml +20 -0
- package/CHANGELOG.md +142 -70
- package/CONTRIBUTING.md +68 -3
- package/MAINTAINERS.md +1 -1
- package/README.md +121 -73
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/browser_compatibility_types.d.ts +14 -9
- package/dist/_esm5.processed/compat/browser_compatibility_types.js +7 -19
- package/dist/_esm5.processed/compat/browser_detection.js +4 -12
- package/dist/_esm5.processed/compat/can_rely_on_video_visibility_and_size.js +2 -4
- package/dist/_esm5.processed/compat/clear_element_src.js +8 -6
- package/dist/_esm5.processed/compat/eme/close_session.js +4 -2
- package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +7 -20
- package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -1
- package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +18 -27
- package/dist/_esm5.processed/compat/eme/custom_media_keys/moz_media_keys_constructor.js +7 -14
- package/dist/_esm5.processed/compat/eme/custom_media_keys/ms_media_keys_constructor.d.ts +21 -0
- package/dist/_esm5.processed/compat/eme/custom_media_keys/ms_media_keys_constructor.js +9 -10
- package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +6 -12
- package/dist/_esm5.processed/compat/eme/custom_media_keys/types.d.ts +1 -1
- package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +22 -25
- package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys_constructor.js +2 -1
- 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 +5 -4
- package/dist/_esm5.processed/compat/event_listeners.js +21 -35
- package/dist/_esm5.processed/compat/fullscreen.js +1 -5
- package/dist/_esm5.processed/compat/index.d.ts +3 -4
- package/dist/_esm5.processed/compat/index.js +3 -4
- package/dist/_esm5.processed/compat/is_vtt_cue.js +1 -2
- package/dist/_esm5.processed/compat/make_vtt_cue.js +11 -6
- package/dist/_esm5.processed/compat/on_height_width_change.js +1 -2
- package/dist/_esm5.processed/compat/patch_webkit_source_buffer.js +3 -0
- package/dist/_esm5.processed/compat/play.d.ts +1 -1
- package/dist/_esm5.processed/compat/play.js +1 -1
- 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 +72 -13
- package/dist/_esm5.processed/config.js +73 -14
- package/dist/_esm5.processed/core/abr/abr_manager.d.ts +11 -10
- package/dist/_esm5.processed/core/abr/abr_manager.js +47 -17
- package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +1 -1
- package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +28 -6
- package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +63 -12
- package/dist/_esm5.processed/core/abr/get_buffer_levels.js +3 -0
- 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 +26 -8
- 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 +5 -8
- package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +35 -52
- package/dist/_esm5.processed/core/abr/representation_estimator.js +114 -65
- 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/get_player_state.d.ts +3 -4
- package/dist/_esm5.processed/core/api/get_player_state.js +2 -2
- 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/media_element_track_choice_manager.d.ts +6 -0
- package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +25 -15
- package/dist/_esm5.processed/core/api/option_utils.d.ts +5 -5
- package/dist/_esm5.processed/core/api/option_utils.js +6 -40
- 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 +11 -10
- package/dist/_esm5.processed/core/api/public_api.js +118 -140
- package/dist/_esm5.processed/core/api/track_choice_manager.d.ts +7 -8
- package/dist/_esm5.processed/core/api/track_choice_manager.js +54 -57
- package/dist/_esm5.processed/core/eme/__tests__/__global__/utils.d.ts +4 -6
- package/dist/_esm5.processed/core/eme/__tests__/__global__/utils.js +25 -32
- package/dist/_esm5.processed/core/eme/attach_media_keys.js +2 -6
- package/dist/_esm5.processed/core/eme/check_key_statuses.js +4 -9
- 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 +5 -7
- package/dist/_esm5.processed/core/eme/find_key_system.js +20 -21
- package/dist/_esm5.processed/core/eme/get_media_keys.js +4 -11
- package/dist/_esm5.processed/core/eme/get_session.js +3 -6
- package/dist/_esm5.processed/core/eme/init_media_keys.js +6 -14
- package/dist/_esm5.processed/core/eme/session_events_listener.js +12 -10
- package/dist/_esm5.processed/core/eme/set_server_certificate.js +8 -3
- package/dist/_esm5.processed/core/eme/types.d.ts +14 -6
- package/dist/_esm5.processed/core/eme/utils/close_session.js +2 -3
- package/dist/_esm5.processed/core/eme/utils/init_data_store.js +3 -9
- 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 +5 -8
- package/dist/_esm5.processed/core/fetchers/index.d.ts +2 -2
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +28 -13
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +258 -65
- package/dist/_esm5.processed/core/fetchers/segment/index.d.ts +2 -2
- package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.d.ts +13 -31
- 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/prioritizer.js +1 -4
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +101 -19
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +239 -99
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +38 -21
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +13 -10
- package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.d.ts +37 -22
- package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +129 -59
- 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 +17 -8
- package/dist/_esm5.processed/{transports/utils/return_parsed_manifest.d.ts → core/init/emit_loaded_event.d.ts} +9 -8
- package/dist/_esm5.processed/core/init/emit_loaded_event.js +47 -0
- package/dist/_esm5.processed/core/init/end_of_stream.js +1 -2
- package/dist/_esm5.processed/core/init/events_generators.d.ts +3 -5
- package/dist/_esm5.processed/core/init/events_generators.js +5 -16
- package/dist/_esm5.processed/core/init/get_initial_time.js +2 -3
- package/dist/_esm5.processed/core/init/initial_seek_and_play.d.ts +56 -22
- package/dist/_esm5.processed/core/init/initial_seek_and_play.js +65 -56
- package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +8 -7
- package/dist/_esm5.processed/core/init/initialize_directfile.js +31 -33
- package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +12 -12
- package/dist/_esm5.processed/core/init/initialize_media_source.js +20 -18
- package/dist/_esm5.processed/core/init/load_on_media_source.d.ts +9 -12
- package/dist/_esm5.processed/core/init/load_on_media_source.js +30 -43
- package/dist/_esm5.processed/core/init/manifest_update_scheduler.d.ts +4 -4
- package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +11 -18
- package/dist/_esm5.processed/core/init/stall_avoider.d.ts +12 -7
- package/dist/_esm5.processed/core/init/stall_avoider.js +102 -39
- package/dist/_esm5.processed/core/init/stream_events_emitter/are_same_stream_events.d.ts +4 -4
- package/dist/_esm5.processed/core/init/stream_events_emitter/refresh_scheduled_events_list.js +2 -12
- 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/stream_events_emitter/types.d.ts +2 -2
- package/dist/_esm5.processed/core/init/throw_on_media_error.js +1 -2
- package/dist/_esm5.processed/core/init/types.d.ts +11 -28
- package/dist/_esm5.processed/core/init/update_playback_rate.d.ts +7 -6
- package/dist/_esm5.processed/core/init/update_playback_rate.js +11 -12
- package/dist/_esm5.processed/core/segment_buffers/garbage_collector.d.ts +5 -5
- 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.d.ts +2 -2
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +32 -8
- package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.d.ts +15 -15
- package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.js +4 -2
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +20 -4
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +52 -7
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +33 -32
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +20 -4
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +47 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +18 -4
- package/dist/_esm5.processed/core/segment_buffers/implementations/types.js +17 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/utils/manual_time_ranges.js +2 -2
- package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
- package/dist/_esm5.processed/core/segment_buffers/inventory/buffered_history.d.ts +81 -0
- package/dist/_esm5.processed/core/segment_buffers/inventory/buffered_history.js +91 -0
- package/dist/_esm5.processed/core/{fetchers/utils/create_request_scheduler.d.ts → segment_buffers/inventory/index.d.ts} +5 -4
- package/dist/_esm5.processed/core/{fetchers/manifest/get_manifest_backoff_options.d.ts → segment_buffers/inventory/index.js} +2 -11
- package/dist/_esm5.processed/core/segment_buffers/{segment_inventory.d.ts → inventory/segment_inventory.d.ts} +38 -39
- package/dist/_esm5.processed/core/segment_buffers/{segment_inventory.js → inventory/segment_inventory.js} +65 -28
- package/dist/_esm5.processed/core/{abr/cached_segment_detector.d.ts → segment_buffers/inventory/types.d.ts} +10 -9
- package/dist/_esm5.processed/core/segment_buffers/inventory/types.js +16 -0
- package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.d.ts +2 -2
- package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +1 -1
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +18 -16
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +38 -34
- 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 -22
- package/dist/_esm5.processed/core/stream/adaptation/index.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/events_generators.d.ts +13 -6
- package/dist/_esm5.processed/core/stream/events_generators.js +20 -12
- package/dist/_esm5.processed/core/stream/index.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/orchestrator/active_period_emitter.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.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/orchestrator/are_streams_complete.js +1 -2
- package/dist/_esm5.processed/core/stream/orchestrator/get_blacklisted_ranges.d.ts +1 -1
- 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 +41 -41
- 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 +12 -15
- package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.d.ts +1 -1
- package/dist/_esm5.processed/core/stream/period/index.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +25 -11
- package/dist/_esm5.processed/core/stream/period/period_stream.js +39 -30
- package/dist/_esm5.processed/core/stream/reload_after_switch.d.ts +45 -0
- package/dist/_esm5.processed/core/stream/reload_after_switch.js +48 -0
- package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.d.ts +5 -3
- 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 +222 -0
- package/dist/_esm5.processed/core/stream/representation/downloading_queue.js +254 -0
- 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 +9 -12
- 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 +10 -18
- package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +3 -1
- package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +108 -6
- 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 +5 -3
- package/dist/_esm5.processed/core/stream/representation/push_init_segment.js +4 -8
- package/dist/_esm5.processed/core/stream/representation/push_media_segment.d.ts +7 -5
- package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +5 -9
- package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +12 -18
- package/dist/_esm5.processed/core/stream/representation/representation_stream.js +150 -209
- package/dist/_esm5.processed/core/stream/types.d.ts +65 -17
- package/dist/_esm5.processed/errors/error_message.js +1 -1
- package/dist/_esm5.processed/errors/request_error.js +3 -1
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.d.ts +7 -5
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.js +26 -13
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/get_content_infos.js +3 -6
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.d.ts +3 -6
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.js +32 -36
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.d.ts +4 -3
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.js +6 -2
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +2 -3
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +2 -2
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.js +9 -23
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.d.ts +2 -2
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +28 -29
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/types.d.ts +1 -1
- package/dist/_esm5.processed/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +12 -10
- package/dist/_esm5.processed/experimental/tools/createMetaplaylist/index.js +5 -13
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/index.d.ts +1 -1
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/index.js +10 -3
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +1 -1
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -1
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.js +12 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.js +6 -1
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +1 -1
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.d.ts +3 -3
- package/dist/_esm5.processed/features/initialize_features.js +49 -47
- package/dist/_esm5.processed/features/list/directfile.js +1 -2
- package/dist/_esm5.processed/features/types.d.ts +3 -10
- package/dist/_esm5.processed/index.js +2 -2
- package/dist/_esm5.processed/manifest/adaptation.d.ts +10 -16
- package/dist/_esm5.processed/manifest/adaptation.js +3 -25
- package/dist/_esm5.processed/manifest/index.d.ts +5 -4
- package/dist/_esm5.processed/manifest/index.js +3 -2
- package/dist/_esm5.processed/manifest/manifest.d.ts +11 -11
- package/dist/_esm5.processed/manifest/manifest.js +14 -11
- package/dist/_esm5.processed/manifest/period.d.ts +4 -4
- package/dist/_esm5.processed/manifest/period.js +7 -16
- package/dist/_esm5.processed/manifest/representation.d.ts +3 -3
- package/dist/_esm5.processed/manifest/representation.js +3 -7
- package/dist/_esm5.processed/manifest/representation_index/static.js +1 -0
- package/dist/_esm5.processed/manifest/representation_index/types.d.ts +42 -21
- package/dist/_esm5.processed/manifest/types.d.ts +95 -3
- package/dist/_esm5.processed/manifest/update_period_in_place.js +1 -1
- package/dist/_esm5.processed/manifest/update_periods.js +11 -7
- package/dist/_esm5.processed/manifest/{are_same_content.d.ts → utils.d.ts} +9 -7
- package/dist/_esm5.processed/manifest/utils.js +44 -0
- 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 +54 -58
- package/dist/_esm5.processed/parsers/images/bif.js +2 -11
- package/dist/_esm5.processed/parsers/manifest/dash/common/attach_trickmode_track.js +9 -8
- package/dist/_esm5.processed/parsers/manifest/dash/common/flatten_overlapping_periods.js +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.d.ts +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_http_utc-timing_url.js +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.js +1 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +8 -7
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +5 -7
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +2 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +8 -12
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +16 -15
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +7 -15
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +19 -18
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +12 -12
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.js +11 -12
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/find_first_common_start_time.js +3 -8
- 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 +34 -21
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +26 -18
- 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/infer_adaptation_type.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +17 -33
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +50 -57
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +10 -9
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +29 -30
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +26 -26
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +70 -65
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +24 -16
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +30 -42
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +15 -36
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +28 -22
- 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 +13 -11
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.js +6 -6
- package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +70 -29
- package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +14 -5
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +9 -21
- 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 +22 -0
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/MPD.js +23 -0
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Period.js +31 -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/dash/wasm-parser/ts/parsers_stack.js +1 -3
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
- package/dist/_esm5.processed/parsers/manifest/local/parse_local_manifest.js +6 -11
- package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +13 -7
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.js +4 -13
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +7 -7
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +9 -30
- package/dist/_esm5.processed/parsers/manifest/smooth/get_codecs.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +8 -8
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +5 -6
- package/dist/_esm5.processed/parsers/manifest/types.d.ts +28 -28
- package/dist/_esm5.processed/parsers/manifest/utils/check_manifest_ids.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.d.ts +3 -2
- package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +16 -6
- package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +12 -4
- 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/manifest/utils/update_segment_timeline.d.ts +11 -1
- package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +45 -29
- 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/srt/html.js +11 -7
- package/dist/_esm5.processed/parsers/texttracks/srt/parse_cue.js +1 -2
- package/dist/_esm5.processed/parsers/texttracks/ttml/get_parameters.js +1 -5
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_font_size.js +13 -1
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/create_element.js +10 -6
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/generate_css_test_outline.js +4 -4
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/parse_cue.js +1 -2
- package/dist/_esm5.processed/parsers/texttracks/ttml/nodes.js +2 -1
- package/dist/_esm5.processed/parsers/texttracks/ttml/parse_ttml.js +11 -15
- 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/parsers/texttracks/webvtt/html/to_html.d.ts +2 -2
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.js +1 -3
- package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.d.ts +1 -1
- package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.js +2 -7
- package/dist/_esm5.processed/public_types.d.ts +4 -0
- package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +1 -3
- package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.d.ts +3 -4
- package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +70 -9
- package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +12 -6
- package/dist/_esm5.processed/transports/dash/image_pipelines.js +34 -36
- package/dist/_esm5.processed/transports/dash/init_segment_loader.d.ts +8 -4
- package/dist/_esm5.processed/transports/dash/init_segment_loader.js +32 -36
- package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.d.ts +14 -3
- package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.js +38 -40
- package/dist/_esm5.processed/transports/dash/manifest_parser.d.ts +3 -7
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +115 -52
- package/dist/_esm5.processed/transports/dash/pipelines.js +10 -10
- package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +14 -3
- package/dist/_esm5.processed/transports/dash/segment_loader.js +70 -57
- package/dist/_esm5.processed/transports/dash/segment_parser.d.ts +3 -4
- package/dist/_esm5.processed/transports/dash/segment_parser.js +15 -32
- package/dist/_esm5.processed/transports/dash/text_loader.d.ts +3 -4
- package/dist/_esm5.processed/transports/dash/text_loader.js +28 -18
- package/dist/_esm5.processed/transports/dash/text_parser.d.ts +5 -4
- package/dist/_esm5.processed/transports/dash/text_parser.js +58 -51
- package/dist/_esm5.processed/transports/local/pipelines.js +16 -14
- package/dist/_esm5.processed/transports/local/segment_loader.d.ts +8 -5
- package/dist/_esm5.processed/transports/local/segment_loader.js +69 -28
- package/dist/_esm5.processed/transports/local/segment_parser.d.ts +5 -3
- package/dist/_esm5.processed/transports/local/segment_parser.js +15 -27
- package/dist/_esm5.processed/transports/local/text_parser.d.ts +9 -5
- package/dist/_esm5.processed/transports/local/text_parser.js +54 -53
- package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.d.ts +5 -5
- package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.js +7 -9
- package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +82 -138
- package/dist/_esm5.processed/transports/smooth/extract_timings_infos.js +3 -6
- package/dist/_esm5.processed/transports/smooth/isobmff/create_video_init_segment.d.ts +1 -4
- package/dist/_esm5.processed/transports/smooth/isobmff/create_video_init_segment.js +1 -4
- package/dist/_esm5.processed/transports/smooth/pipelines.js +149 -155
- package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +6 -3
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +150 -107
- package/dist/_esm5.processed/transports/smooth/utils.d.ts +9 -1
- package/dist/_esm5.processed/transports/smooth/utils.js +11 -1
- package/dist/_esm5.processed/transports/types.d.ts +533 -376
- package/dist/_esm5.processed/transports/utils/byte_range.js +2 -2
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.d.ts +3 -3
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +45 -32
- package/dist/_esm5.processed/transports/utils/generate_manifest_loader.d.ts +4 -4
- package/dist/_esm5.processed/transports/utils/generate_manifest_loader.js +16 -5
- package/dist/_esm5.processed/transports/utils/get_isobmff_timing_infos.js +6 -1
- package/dist/_esm5.processed/transports/utils/parse_text_track.js +8 -12
- package/dist/_esm5.processed/utils/array_find.d.ts +1 -1
- package/dist/_esm5.processed/utils/array_find.js +0 -5
- package/dist/_esm5.processed/utils/array_find_index.d.ts +1 -1
- package/dist/_esm5.processed/utils/array_find_index.js +0 -5
- package/dist/_esm5.processed/utils/assert.d.ts +1 -1
- package/dist/_esm5.processed/utils/assert.js +3 -3
- package/dist/_esm5.processed/utils/cancellable_sleep.d.ts +30 -0
- package/dist/_esm5.processed/utils/cancellable_sleep.js +42 -0
- package/dist/_esm5.processed/utils/cast_to_observable.d.ts +1 -2
- package/dist/_esm5.processed/utils/cast_to_observable.js +11 -6
- 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/flat_map.js +0 -6
- package/dist/_esm5.processed/utils/id_generator.d.ts +2 -1
- package/dist/_esm5.processed/utils/id_generator.js +2 -1
- package/dist/_esm5.processed/utils/languages/normalize.js +1 -3
- package/dist/_esm5.processed/utils/ranges.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 +64 -27
- package/dist/_esm5.processed/utils/request/fetch.js +95 -113
- package/dist/_esm5.processed/utils/request/index.d.ts +3 -3
- package/dist/_esm5.processed/utils/request/xhr.d.ts +64 -47
- package/dist/_esm5.processed/utils/request/xhr.js +49 -43
- package/dist/_esm5.processed/utils/rx-from_cancellable_promise.d.ts +39 -0
- package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +58 -0
- package/dist/_esm5.processed/utils/rx-retry_with_backoff.js +1 -2
- package/dist/_esm5.processed/utils/task_canceller.d.ts +240 -0
- package/dist/_esm5.processed/utils/task_canceller.js +289 -0
- package/dist/mpd-parser.wasm +0 -0
- package/dist/rx-player.d.ts +1 -15
- package/dist/rx-player.js +8775 -6211
- package/dist/rx-player.min.d.ts +1 -15
- package/dist/rx-player.min.js +1 -1
- package/jest.config.js +28 -4
- package/package.json +122 -106
- package/scripts/README.md +11 -0
- package/scripts/build/constants.d.ts +50 -0
- package/scripts/build/generate_build.js +197 -0
- package/scripts/build/templates/experimental/features/index.d.ts +16 -0
- package/scripts/build/templates/experimental/features/index.js +16 -0
- package/scripts/build/templates/experimental/tools/VideoThumbnailLoader/index.d.ts +18 -0
- package/scripts/build/templates/experimental/tools/VideoThumbnailLoader/index.js +18 -0
- package/scripts/build/templates/experimental/tools/index.d.ts +16 -0
- package/scripts/build/templates/experimental/tools/index.js +16 -0
- package/scripts/build/templates/features/index.d.ts +16 -0
- package/scripts/build/templates/features/index.js +16 -0
- package/scripts/build/templates/logger/index.d.ts +17 -0
- package/scripts/build/templates/logger/index.js +17 -0
- package/scripts/build/templates/minimal/index.d.ts +17 -0
- package/scripts/build/templates/minimal/index.js +17 -0
- package/scripts/build/templates/tools/TextTrackRenderer.d.ts +18 -0
- package/scripts/build/templates/tools/TextTrackRenderer.js +18 -0
- package/scripts/build/templates/tools/index.d.ts +16 -0
- package/scripts/build/templates/tools/index.js +16 -0
- package/scripts/build/templates/tools/string-utils.d.ts +18 -0
- package/{dist/_esm5.processed/core/fetchers/segment/get_segment_backoff_options.d.ts → scripts/build/templates/tools/string-utils.js} +3 -11
- package/scripts/build/templates/types/index.d.ts +16 -0
- package/scripts/build/templates/types/index.js +15 -0
- package/scripts/check_nodejs_import_compatibility.js +35 -1
- 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 +147 -0
- package/scripts/doc-generator/generate_page_html.js +115 -0
- package/scripts/doc-generator/generate_page_list_html.js +92 -0
- package/scripts/doc-generator/generate_sidebar_html.js +85 -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 +74 -0
- package/scripts/fast_demo_build.js +143 -0
- package/scripts/generate_demo_list.js +3 -3
- package/scripts/generate_documentation_list.js +9 -5
- package/scripts/generate_full_demo.js +108 -10
- package/scripts/generate_standalone_demo.js +15 -8
- package/scripts/launch_static_server.js +139 -56
- package/scripts/list-npm-scripts.js +99 -0
- package/scripts/run_standalone_demo.js +1 -0
- package/scripts/{run_full_demo.js → start_demo_web_server.js} +16 -3
- package/scripts/update-version +8 -1
- package/scripts/{display_webpack_errors.js → utils/display_webpack_errors.js} +0 -4
- package/scripts/{get_human_readable_hours.js → utils/get_human_readable_hours.js} +0 -4
- package/sonar-project.properties +2 -1
- package/src/compat/__tests__/add_text_track.test.ts +12 -11
- package/src/compat/__tests__/browser_compatibility_types.test.ts +69 -60
- package/src/compat/__tests__/browser_version.test.ts +3 -1
- package/src/compat/__tests__/change_source_buffer_type.test.ts +3 -3
- package/src/compat/__tests__/clear_element_src.test.ts +62 -36
- package/src/compat/__tests__/fullscreen.test.ts +154 -139
- package/src/compat/__tests__/is_offline.test.ts +20 -12
- package/src/compat/__tests__/is_vtt_cue.test.ts +14 -10
- package/src/compat/__tests__/make_vtt_cue.test.ts +16 -15
- package/src/compat/__tests__/patch_webkit_source_buffer.test.ts +30 -48
- package/src/compat/__tests__/play.test.ts +2 -2
- package/src/compat/__tests__/remove_cue.test.ts +5 -5
- package/src/compat/__tests__/set_element_src.test.ts +3 -3
- package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +14 -6
- 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/browser_compatibility_types.ts +38 -36
- package/src/compat/browser_detection.ts +17 -12
- package/src/compat/can_rely_on_video_visibility_and_size.ts +3 -3
- package/src/compat/clear_element_src.ts +8 -6
- package/src/compat/eme/close_session.ts +7 -6
- package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +22 -26
- package/src/compat/eme/custom_media_keys/index.ts +32 -38
- package/src/compat/eme/custom_media_keys/moz_media_keys_constructor.ts +16 -19
- package/src/compat/eme/custom_media_keys/ms_media_keys_constructor.ts +39 -9
- package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +10 -12
- package/src/compat/eme/custom_media_keys/types.ts +1 -1
- package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +27 -30
- package/src/compat/eme/custom_media_keys/webkit_media_keys_constructor.ts +6 -2
- 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 +30 -46
- package/src/compat/fullscreen.ts +2 -4
- package/src/compat/index.ts +2 -6
- package/src/compat/is_vtt_cue.ts +1 -2
- package/src/compat/make_vtt_cue.ts +10 -8
- package/src/compat/on_height_width_change.ts +4 -6
- package/src/compat/patch_webkit_source_buffer.ts +11 -5
- package/src/compat/play.ts +1 -1
- 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 +79 -14
- package/src/core/abr/README.md +7 -7
- package/src/core/abr/__tests__/{get_estimate_from_buffer_levels.test.ts → buffer_based_chooser.test.ts} +94 -123
- 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 +85 -18
- package/src/core/abr/get_buffer_levels.ts +3 -0
- 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 +75 -32
- package/src/core/abr/pending_requests_store.ts +72 -40
- package/src/core/abr/representation_estimator.ts +205 -135
- 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__/get_player_state.test.ts +58 -110
- package/src/core/api/__tests__/media_element_track_choice_manager.test.ts +35 -31
- package/src/core/api/__tests__/option_utils.test.ts +104 -17
- package/src/core/api/emit_seek_events.ts +21 -20
- package/src/core/api/get_player_state.ts +5 -7
- package/src/core/api/index.ts +8 -3
- package/src/core/api/media_element_track_choice_manager.ts +22 -3
- package/src/core/api/option_utils.ts +7 -7
- package/src/core/api/playback_observer.ts +768 -0
- package/src/core/api/public_api.ts +128 -130
- package/src/core/api/track_choice_manager.ts +82 -78
- package/src/core/eme/__tests__/__global__/get_license.test.ts +14 -9
- package/src/core/eme/__tests__/__global__/init_data.test.ts +12 -12
- package/src/core/eme/__tests__/__global__/media_key_system_access.test.ts +3 -1
- package/src/core/eme/__tests__/__global__/media_keys.test.ts +6 -8
- package/src/core/eme/__tests__/__global__/server_certificate.test.ts +18 -12
- package/src/core/eme/__tests__/__global__/utils.ts +21 -17
- package/src/core/eme/__tests__/clean_old_loaded_sessions.test.ts +4 -4
- package/src/core/eme/__tests__/clean_old_stored_persistent_info.test.ts +3 -2
- package/src/core/eme/__tests__/init_media_keys.test.ts +10 -66
- package/src/core/eme/attach_media_keys.ts +2 -1
- package/src/core/eme/check_key_statuses.ts +24 -13
- 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 +17 -17
- 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 +21 -18
- package/src/core/eme/set_server_certificate.ts +9 -5
- package/src/core/eme/types.ts +17 -6
- 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 +256 -109
- package/src/core/fetchers/segment/__tests__/prioritizer.test.ts +4 -5
- package/src/core/fetchers/segment/index.ts +2 -2
- package/src/core/fetchers/segment/prioritized_segment_fetcher.ts +48 -51
- package/src/core/fetchers/segment/prioritizer.ts +82 -82
- package/src/core/fetchers/segment/segment_fetcher.ts +396 -177
- package/src/core/fetchers/segment/segment_fetcher_creator.ts +56 -39
- package/src/core/fetchers/utils/try_urls_with_backoff.ts +123 -91
- package/src/core/init/__tests__/refresh_scheduled_events_list.test.ts +1 -1
- 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 +21 -18
- package/src/core/init/emit_loaded_event.ts +71 -0
- package/src/core/init/end_of_stream.ts +2 -4
- package/src/core/init/events_generators.ts +4 -5
- package/src/core/init/get_initial_time.ts +0 -1
- package/src/core/init/initial_seek_and_play.ts +128 -96
- package/src/core/init/initialize_directfile.ts +49 -57
- package/src/core/init/initialize_media_source.ts +31 -31
- package/src/core/init/load_on_media_source.ts +70 -74
- package/src/core/init/manifest_update_scheduler.ts +18 -19
- package/src/core/init/stall_avoider.ts +142 -51
- package/src/core/init/stream_events_emitter/are_same_stream_events.ts +4 -4
- package/src/core/init/stream_events_emitter/stream_events_emitter.ts +24 -21
- package/src/core/init/stream_events_emitter/types.ts +2 -2
- package/src/core/init/throw_on_media_error.ts +1 -1
- package/src/core/init/types.ts +15 -28
- package/src/core/init/update_playback_rate.ts +17 -18
- package/src/core/segment_buffers/README.md +3 -3
- package/src/core/segment_buffers/garbage_collector.ts +17 -13
- package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +46 -11
- package/src/core/segment_buffers/implementations/image/image_segment_buffer.ts +21 -18
- package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +92 -18
- package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +33 -32
- package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +82 -6
- package/src/core/segment_buffers/implementations/types.ts +23 -4
- package/src/core/segment_buffers/implementations/utils/manual_time_ranges.ts +2 -2
- package/src/core/segment_buffers/index.ts +6 -1
- package/src/core/segment_buffers/inventory/buffered_history.ts +127 -0
- package/src/core/segment_buffers/inventory/index.ts +28 -0
- package/src/core/segment_buffers/{segment_inventory.ts → inventory/segment_inventory.ts} +85 -52
- package/{dist/_esm5.processed/manifest/are_same_content.js → src/core/segment_buffers/inventory/types.ts} +19 -11
- package/src/core/segment_buffers/segment_buffers_store.ts +4 -13
- package/src/core/stream/adaptation/adaptation_stream.ts +90 -65
- package/src/core/stream/adaptation/create_representation_estimator.ts +19 -45
- package/src/core/stream/adaptation/index.ts +2 -2
- package/src/core/stream/events_generators.ts +31 -7
- package/src/core/stream/index.ts +2 -2
- package/src/core/stream/orchestrator/active_period_emitter.ts +9 -11
- package/src/core/stream/orchestrator/are_streams_complete.ts +4 -6
- package/src/core/stream/orchestrator/get_blacklisted_ranges.ts +1 -1
- package/src/core/stream/orchestrator/index.ts +2 -2
- package/src/core/stream/orchestrator/stream_orchestrator.ts +70 -62
- package/src/core/stream/period/create_empty_adaptation_stream.ts +14 -10
- package/src/core/stream/period/get_adaptation_switch_strategy.ts +1 -1
- package/src/core/stream/period/index.ts +2 -2
- package/src/core/stream/period/period_stream.ts +126 -85
- package/src/core/stream/reload_after_switch.ts +70 -0
- package/src/core/stream/representation/append_segment_to_buffer.ts +21 -17
- package/src/core/stream/representation/downloading_queue.ts +502 -0
- package/src/core/stream/representation/force_garbage_collection.ts +20 -29
- package/src/core/stream/representation/get_buffer_status.ts +15 -13
- package/src/core/stream/representation/get_needed_segments.ts +135 -6
- 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 +238 -307
- package/src/core/stream/types.ts +91 -39
- package/src/errors/request_error.ts +4 -1
- package/src/experimental/features/__tests__/dash_wasm.test.ts +2 -0
- package/src/experimental/tools/VideoThumbnailLoader/create_request.ts +47 -30
- package/src/experimental/tools/VideoThumbnailLoader/get_content_infos.ts +1 -2
- package/src/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.ts +41 -72
- package/src/experimental/tools/VideoThumbnailLoader/load_segments.ts +20 -13
- package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +7 -7
- package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +13 -27
- package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +38 -37
- package/src/experimental/tools/VideoThumbnailLoader/types.ts +0 -1
- package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +56 -47
- package/src/experimental/tools/createMetaplaylist/index.ts +1 -1
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +6 -4
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +3 -3
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/decodingInfos.test.ts +5 -7
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaContentType.test.ts +7 -7
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaDisplayInfos.test.ts +1 -0
- package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +12 -4
- package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +3 -3
- package/src/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.ts +12 -2
- package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.ts +6 -1
- package/src/experimental/tools/mediaCapabilitiesProber/types.ts +3 -3
- package/src/features/__tests__/initialize_features.test.ts +207 -110
- package/src/features/initialize_features.ts +40 -37
- package/src/features/list/__tests__/bif_parser.test.ts +2 -0
- package/src/features/list/__tests__/dash.test.ts +2 -0
- package/src/features/list/__tests__/directfile.test.ts +2 -0
- package/src/features/list/__tests__/eme.test.ts +2 -0
- package/src/features/list/__tests__/html_sami_parser.test.ts +2 -0
- package/src/features/list/__tests__/html_srt_parser.test.ts +2 -0
- package/src/features/list/__tests__/html_text_buffer.test.ts +2 -0
- package/src/features/list/__tests__/html_ttml_parser.test.ts +2 -0
- package/src/features/list/__tests__/html_vtt_parser.test.ts +2 -0
- package/src/features/list/__tests__/image_buffer.test.ts +2 -0
- package/src/features/list/__tests__/native_sami_parser.test.ts +2 -0
- package/src/features/list/__tests__/native_srt_parser.test.ts +2 -0
- package/src/features/list/__tests__/native_text_buffer.test.ts +2 -0
- package/src/features/list/__tests__/native_ttml_parser.test.ts +2 -0
- package/src/features/list/__tests__/native_vtt_parser.test.ts +2 -0
- package/src/features/list/__tests__/smooth.test.ts +2 -0
- package/src/features/types.ts +3 -11
- package/src/index.ts +2 -2
- package/src/manifest/__tests__/adaptation.test.ts +0 -79
- package/src/manifest/__tests__/manifest.test.ts +68 -67
- package/src/manifest/__tests__/period.test.ts +142 -118
- package/src/manifest/__tests__/update_period_in_place.test.ts +85 -62
- package/src/manifest/__tests__/update_periods.test.ts +33 -12
- package/src/manifest/adaptation.ts +17 -51
- package/src/manifest/index.ts +15 -2
- package/src/manifest/manifest.ts +31 -18
- package/src/manifest/period.ts +13 -20
- package/src/manifest/representation.ts +3 -3
- 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 +43 -21
- package/src/manifest/types.ts +97 -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__/attach_trickmode_track.test.ts +7 -4
- package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +4 -4
- package/src/parsers/manifest/dash/common/__tests__/get_periods_time_infos.test.ts +29 -6
- package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +1 -0
- package/src/parsers/manifest/dash/common/attach_trickmode_track.ts +5 -8
- 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_hdr_information.ts +1 -1
- package/src/parsers/manifest/dash/common/get_http_utc-timing_url.ts +15 -6
- package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +3 -3
- package/src/parsers/manifest/dash/common/indexes/base.ts +11 -9
- package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +5 -2
- package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +10 -10
- package/src/parsers/manifest/dash/common/indexes/list.ts +20 -17
- package/src/parsers/manifest/dash/common/indexes/template.ts +30 -22
- package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +1 -1
- 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 +63 -27
- package/src/parsers/manifest/dash/common/indexes/tokens.ts +4 -4
- package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +2 -2
- package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +1 -1
- package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +64 -73
- package/src/parsers/manifest/dash/common/parse_mpd.ts +33 -24
- package/src/parsers/manifest/dash/common/parse_periods.ts +115 -87
- package/src/parsers/manifest/dash/common/parse_representation_index.ts +88 -80
- package/src/parsers/manifest/dash/common/parse_representations.ts +61 -64
- package/src/parsers/manifest/dash/common/resolve_base_urls.ts +33 -24
- package/src/parsers/manifest/dash/js-parser/__tests__/parse_from_document.test.ts +1 -1
- 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 +66 -29
- package/src/parsers/manifest/dash/parsers_types.ts +11 -5
- package/src/parsers/manifest/dash/wasm-parser/Cargo.lock +4 -2
- package/src/parsers/manifest/dash/wasm-parser/Cargo.toml +1 -1
- package/src/parsers/manifest/dash/wasm-parser/rs/events.rs +43 -0
- package/src/parsers/manifest/dash/wasm-parser/rs/lib.rs +1 -8
- package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +41 -8
- package/src/parsers/manifest/dash/wasm-parser/rs/processor/mod.rs +75 -521
- package/src/parsers/manifest/dash/wasm-parser/rs/reportable.rs +22 -1
- package/src/parsers/manifest/dash/wasm-parser/rs/utils.rs +40 -1
- package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +10 -19
- 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 +25 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/MPD.ts +26 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/Period.ts +34 -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/parsers_stack.ts +0 -1
- package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +31 -1
- package/src/parsers/manifest/local/representation_index.ts +2 -0
- package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +6 -5
- package/src/parsers/manifest/smooth/create_parser.ts +24 -22
- package/src/parsers/manifest/smooth/representation_index.ts +17 -15
- package/src/parsers/manifest/types.ts +28 -28
- package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +39 -36
- package/src/parsers/manifest/utils/check_manifest_ids.ts +2 -2
- package/src/parsers/manifest/utils/clear_timeline_from_position.ts +16 -7
- package/src/parsers/manifest/utils/index_helpers.ts +22 -12
- package/src/parsers/manifest/utils/is_segment_still_available.ts +4 -6
- package/src/parsers/manifest/utils/update_segment_timeline.ts +32 -21
- package/src/parsers/texttracks/sami/html.ts +1 -1
- package/src/parsers/texttracks/sami/native.ts +1 -1
- package/src/parsers/texttracks/srt/html.ts +16 -10
- package/src/parsers/texttracks/ttml/html/apply_font_size.ts +11 -1
- package/src/parsers/texttracks/ttml/nodes.ts +2 -1
- package/src/parsers/texttracks/webvtt/html/__tests__/convert_payload_to_html.test.ts +9 -6
- package/src/parsers/texttracks/webvtt/html/to_html.ts +2 -2
- package/src/parsers/texttracks/webvtt/parse_cue_block.ts +1 -1
- package/src/public_types.ts +18 -0
- package/src/transports/README.md +8 -4
- package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +68 -27
- package/src/transports/dash/image_pipelines.ts +58 -45
- package/src/transports/dash/init_segment_loader.ts +68 -45
- package/src/transports/dash/low_latency_segment_loader.ts +52 -68
- package/src/transports/dash/manifest_parser.ts +148 -78
- package/src/transports/dash/pipelines.ts +10 -10
- package/src/transports/dash/segment_loader.ts +117 -90
- package/src/transports/dash/segment_parser.ts +46 -45
- package/src/transports/dash/text_loader.ts +55 -34
- package/src/transports/dash/text_parser.ts +91 -78
- package/src/transports/local/pipelines.ts +19 -21
- package/src/transports/local/segment_loader.ts +86 -40
- package/src/transports/local/segment_parser.ts +31 -38
- package/src/transports/local/text_parser.ts +82 -74
- package/src/transports/metaplaylist/manifest_loader.ts +17 -15
- package/src/transports/metaplaylist/pipelines.ts +158 -181
- package/src/transports/smooth/extract_timings_infos.ts +1 -1
- package/src/transports/smooth/isobmff/create_boxes.ts +5 -5
- package/src/transports/smooth/isobmff/create_video_init_segment.ts +1 -4
- package/src/transports/smooth/pipelines.ts +206 -187
- package/src/transports/smooth/segment_loader.ts +138 -87
- package/src/transports/smooth/utils.ts +13 -0
- package/src/transports/types.ts +639 -439
- package/src/transports/utils/__tests__/check_isobmff_integrity.test.ts +24 -24
- package/src/transports/utils/__tests__/infer_segment_container.test.ts +31 -30
- package/src/transports/utils/call_custom_manifest_loader.ts +83 -60
- package/src/transports/utils/generate_manifest_loader.ts +34 -12
- 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__/array_find.test.ts +5 -5
- package/src/utils/__tests__/array_find_index.test.ts +6 -5
- package/src/utils/__tests__/array_includes.test.ts +1 -0
- package/src/utils/__tests__/assert.test.ts +38 -21
- package/src/utils/__tests__/assert_unreachable.test.ts +8 -7
- 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__/flat_map.test.ts +18 -6
- package/src/utils/__tests__/id_generator.test.ts +3 -3
- package/src/utils/__tests__/initialization_segment_cache.test.ts +7 -0
- package/src/utils/__tests__/promise.test.ts +1 -1
- package/src/utils/__tests__/starts_with.test.ts +2 -0
- package/src/utils/array_find.ts +11 -3
- package/src/utils/array_find_index.ts +11 -3
- package/src/utils/assert.ts +5 -2
- package/src/utils/cancellable_sleep.ts +51 -0
- package/src/utils/cast_to_observable.ts +12 -13
- 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/flat_map.ts +10 -8
- package/src/utils/id_generator.ts +2 -1
- package/src/utils/object_assign.ts +1 -1
- package/src/utils/reference.ts +234 -0
- package/src/utils/request/fetch.ts +175 -147
- package/src/utils/request/index.ts +6 -6
- package/src/utils/request/xhr.ts +144 -128
- package/src/utils/rx-from_cancellable_promise.ts +66 -0
- package/src/utils/rx-retry_with_backoff.ts +2 -4
- package/src/utils/task_canceller.ts +326 -0
- package/src/utils/uniq.ts +1 -1
- package/tsconfig.json +5 -1
- package/tsconfig.modules.json +9 -3
- package/dist/_esm5.processed/compat/is_playback_stuck.d.ts +0 -28
- package/dist/_esm5.processed/compat/is_playback_stuck.js +0 -33
- package/dist/_esm5.processed/core/abr/cached_segment_detector.js +0 -60
- package/dist/_esm5.processed/core/abr/create_filters.d.ts +0 -27
- package/dist/_esm5.processed/core/abr/create_filters.js +0 -52
- package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +0 -29
- package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +0 -67
- package/dist/_esm5.processed/core/api/clock.d.ts +0 -129
- package/dist/_esm5.processed/core/api/clock.js +0 -335
- package/dist/_esm5.processed/core/fetchers/manifest/get_manifest_backoff_options.js +0 -38
- package/dist/_esm5.processed/core/fetchers/segment/create_segment_loader.d.ts +0 -98
- package/dist/_esm5.processed/core/fetchers/segment/create_segment_loader.js +0 -124
- package/dist/_esm5.processed/core/fetchers/segment/get_segment_backoff_options.js +0 -32
- package/dist/_esm5.processed/core/fetchers/utils/create_request_scheduler.js +0 -38
- package/dist/_esm5.processed/core/init/create_stream_clock.d.ts +0 -34
- package/dist/_esm5.processed/core/init/create_stream_clock.js +0 -56
- package/dist/_esm5.processed/core/stream/utils.d.ts +0 -60
- package/dist/_esm5.processed/core/stream/utils.js +0 -70
- 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/dist/_esm5.processed/transports/utils/return_parsed_manifest.js +0 -32
- package/scripts/clean-up_builds +0 -18
- 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/scripts/generate_builds +0 -224
- package/scripts/list-npm-scripts-info.js +0 -39
- package/src/compat/is_playback_stuck.ts +0 -42
- package/src/core/abr/cached_segment_detector.ts +0 -86
- package/src/core/abr/create_filters.ts +0 -59
- package/src/core/abr/get_estimate_from_buffer_levels.ts +0 -85
- package/src/core/api/clock.ts +0 -497
- package/src/core/fetchers/manifest/get_manifest_backoff_options.ts +0 -50
- package/src/core/fetchers/segment/create_segment_loader.ts +0 -251
- package/src/core/fetchers/segment/get_segment_backoff_options.ts +0 -45
- package/src/core/fetchers/utils/create_request_scheduler.ts +0 -56
- package/src/core/init/create_stream_clock.ts +0 -94
- package/src/core/stream/utils.ts +0 -97
- package/src/parsers/manifest/dash/common/extract_minimum_availability_time_offset.ts +0 -41
- package/src/transports/utils/return_parsed_manifest.ts +0 -47
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2015 CANAL+ Group
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { map, } from "rxjs";
|
|
17
|
+
import EVENTS from "./events_generators";
|
|
18
|
+
/**
|
|
19
|
+
* Regularly ask to reload the MediaSource on each playback observation
|
|
20
|
+
* performed by the playback observer.
|
|
21
|
+
*
|
|
22
|
+
* If and only if the Period currently played corresponds to `Period`, applies
|
|
23
|
+
* an offset to the reloaded position corresponding to `deltaPos`.
|
|
24
|
+
* This can be useful for example when switching the audio/video track, where
|
|
25
|
+
* you might want to give back some context if that was the currently played
|
|
26
|
+
* track.
|
|
27
|
+
*
|
|
28
|
+
* @param {Object} period - The Period linked to the Adaptation or
|
|
29
|
+
* Representation that you want to switch to.
|
|
30
|
+
* @param {Observable} playbackObserver - emit playback conditions.
|
|
31
|
+
* Has to emit last playback conditions immediately on subscribe.
|
|
32
|
+
* @param {number} deltaPos - If the concerned Period is playing at the time
|
|
33
|
+
* this function is called, we will add this value, in seconds, to the current
|
|
34
|
+
* position to indicate the position we should reload at.
|
|
35
|
+
* This value allows to give back context (by replaying some media data) after
|
|
36
|
+
* a switch.
|
|
37
|
+
* @returns {Observable}
|
|
38
|
+
*/
|
|
39
|
+
export default function reloadAfterSwitch(period, bufferType, playbackObserver, deltaPos) {
|
|
40
|
+
return playbackObserver.observe(true).pipe(map(function (observation) {
|
|
41
|
+
var _a;
|
|
42
|
+
var currentTime = playbackObserver.getCurrentTime();
|
|
43
|
+
var pos = currentTime + deltaPos;
|
|
44
|
+
// Bind to Period start and end
|
|
45
|
+
var reloadAt = Math.min(Math.max(period.start, pos), (_a = period.end) !== null && _a !== void 0 ? _a : Infinity);
|
|
46
|
+
return EVENTS.waitingMediaSourceReload(bufferType, period, reloadAt, !observation.isPaused);
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
@@ -17,17 +17,19 @@
|
|
|
17
17
|
* This file allows any Stream to push data to a SegmentBuffer.
|
|
18
18
|
*/
|
|
19
19
|
import { Observable } from "rxjs";
|
|
20
|
+
import { IReadOnlyPlaybackObserver } from "../../api";
|
|
20
21
|
import { IPushChunkInfos, SegmentBuffer } from "../../segment_buffers";
|
|
21
22
|
/**
|
|
22
23
|
* Append a segment to the given segmentBuffer.
|
|
23
24
|
* If it leads to a QuotaExceededError, try to run our custom range
|
|
24
25
|
* _garbage collector_ then retry.
|
|
25
26
|
*
|
|
26
|
-
* @param {Observable}
|
|
27
|
+
* @param {Observable} playbackObserver
|
|
27
28
|
* @param {Object} segmentBuffer
|
|
28
29
|
* @param {Object} dataInfos
|
|
29
30
|
* @returns {Observable}
|
|
30
31
|
*/
|
|
31
|
-
export default function appendSegmentToBuffer<T>(
|
|
32
|
+
export default function appendSegmentToBuffer<T>(playbackObserver: IReadOnlyPlaybackObserver<{
|
|
32
33
|
position: number;
|
|
33
|
-
|
|
34
|
+
wantedTimeOffset: number;
|
|
35
|
+
}>, segmentBuffer: SegmentBuffer, dataInfos: IPushChunkInfos<T>): Observable<unknown>;
|
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
/**
|
|
17
17
|
* This file allows any Stream to push data to a SegmentBuffer.
|
|
18
18
|
*/
|
|
19
|
-
import { concat as observableConcat, } from "rxjs";
|
|
20
|
-
import { catchError, ignoreElements, } from "rxjs/operators";
|
|
19
|
+
import { catchError, concat as observableConcat, mergeMap, ignoreElements, } from "rxjs";
|
|
21
20
|
import { MediaError } from "../../../errors";
|
|
22
21
|
import forceGarbageCollection from "./force_garbage_collection";
|
|
23
22
|
/**
|
|
@@ -25,12 +24,12 @@ import forceGarbageCollection from "./force_garbage_collection";
|
|
|
25
24
|
* If it leads to a QuotaExceededError, try to run our custom range
|
|
26
25
|
* _garbage collector_ then retry.
|
|
27
26
|
*
|
|
28
|
-
* @param {Observable}
|
|
27
|
+
* @param {Observable} playbackObserver
|
|
29
28
|
* @param {Object} segmentBuffer
|
|
30
29
|
* @param {Object} dataInfos
|
|
31
30
|
* @returns {Observable}
|
|
32
31
|
*/
|
|
33
|
-
export default function appendSegmentToBuffer(
|
|
32
|
+
export default function appendSegmentToBuffer(playbackObserver, segmentBuffer, dataInfos) {
|
|
34
33
|
var append$ = segmentBuffer.pushChunk(dataInfos);
|
|
35
34
|
return append$.pipe(catchError(function (appendError) {
|
|
36
35
|
if (!(appendError instanceof Error) || appendError.name !== "QuotaExceededError") {
|
|
@@ -39,10 +38,13 @@ export default function appendSegmentToBuffer(clock$, segmentBuffer, dataInfos)
|
|
|
39
38
|
"An unknown error happened when pushing content";
|
|
40
39
|
throw new MediaError("BUFFER_APPEND_ERROR", reason);
|
|
41
40
|
}
|
|
42
|
-
return
|
|
43
|
-
var
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
return playbackObserver.observe(true).pipe(mergeMap(function (observation) {
|
|
42
|
+
var currentPos = observation.position + observation.wantedTimeOffset;
|
|
43
|
+
return observableConcat(forceGarbageCollection(currentPos, segmentBuffer).pipe(ignoreElements()), append$).pipe(catchError(function (forcedGCError) {
|
|
44
|
+
var reason = forcedGCError instanceof Error ? forcedGCError.toString() :
|
|
45
|
+
"Could not clean the buffer";
|
|
46
|
+
throw new MediaError("BUFFER_FULL_ERROR", reason);
|
|
47
|
+
}));
|
|
46
48
|
}));
|
|
47
49
|
}));
|
|
48
50
|
}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2015 CANAL+ Group
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { Observable } from "rxjs";
|
|
17
|
+
import { ICustomError } from "../../../errors";
|
|
18
|
+
import Manifest, { Adaptation, ISegment, Period, Representation } from "../../../manifest";
|
|
19
|
+
import { ISegmentParserParsedInitChunk, ISegmentParserParsedMediaChunk } from "../../../transports";
|
|
20
|
+
import { IReadOnlySharedReference } from "../../../utils/reference";
|
|
21
|
+
import { IPrioritizedSegmentFetcher } from "../../fetchers";
|
|
22
|
+
import { IQueuedSegment } from "../types";
|
|
23
|
+
/**
|
|
24
|
+
* Class scheduling segment downloads for a single Representation.
|
|
25
|
+
* @class DownloadingQueue
|
|
26
|
+
*/
|
|
27
|
+
export default class DownloadingQueue<T> {
|
|
28
|
+
/** Context of the Representation that will be loaded through this DownloadingQueue. */
|
|
29
|
+
private _content;
|
|
30
|
+
/**
|
|
31
|
+
* Observable doing segment requests and emitting related events.
|
|
32
|
+
* We only can have maximum one at a time.
|
|
33
|
+
* `null` when `start` has never been called.
|
|
34
|
+
*/
|
|
35
|
+
private _currentObs$;
|
|
36
|
+
/**
|
|
37
|
+
* Current queue of segments scheduled for download.
|
|
38
|
+
*
|
|
39
|
+
* Segments whose request are still pending are still in that queue. Segments
|
|
40
|
+
* are only removed from it once their request has succeeded.
|
|
41
|
+
*/
|
|
42
|
+
private _downloadQueue;
|
|
43
|
+
/**
|
|
44
|
+
* Pending request for the initialization segment.
|
|
45
|
+
* `null` if no request is pending for it.
|
|
46
|
+
*/
|
|
47
|
+
private _initSegmentRequest;
|
|
48
|
+
/**
|
|
49
|
+
* Pending request for a media (i.e. non-initialization) segment.
|
|
50
|
+
* `null` if no request is pending for it.
|
|
51
|
+
*/
|
|
52
|
+
private _mediaSegmentRequest;
|
|
53
|
+
/** Interface used to load segments. */
|
|
54
|
+
private _segmentFetcher;
|
|
55
|
+
/** Emit the timescale anounced in the initialization segment once parsed. */
|
|
56
|
+
private _initSegmentMetadata$;
|
|
57
|
+
/**
|
|
58
|
+
* Some media segments might have been loaded and are only awaiting for the
|
|
59
|
+
* initialization segment to be parsed before being parsed themselves.
|
|
60
|
+
* This `Set` will contain the `id` property of all segments that are
|
|
61
|
+
* currently awaiting this event.
|
|
62
|
+
*/
|
|
63
|
+
private _mediaSegmentsAwaitingInitMetadata;
|
|
64
|
+
/**
|
|
65
|
+
* Create a new `DownloadingQueue`.
|
|
66
|
+
*
|
|
67
|
+
* @param {Object} content - The context of the Representation you want to
|
|
68
|
+
* load segments for.
|
|
69
|
+
* @param {Object} downloadQueue - Queue of segments you want to load.
|
|
70
|
+
* @param {Object} segmentFetcher - Interface to facilitate the download of
|
|
71
|
+
* segments.
|
|
72
|
+
* @param {boolean} hasInitSegment - Declare that an initialization segment
|
|
73
|
+
* will need to be downloaded.
|
|
74
|
+
*
|
|
75
|
+
* A `DownloadingQueue` ALWAYS wait for the initialization segment to be
|
|
76
|
+
* loaded and parsed before parsing a media segment.
|
|
77
|
+
*
|
|
78
|
+
* In cases where no initialization segment exist, this would lead to the
|
|
79
|
+
* `DownloadingQueue` waiting indefinitely for it.
|
|
80
|
+
*
|
|
81
|
+
* By setting that value to `false`, you anounce to the `DownloadingQueue`
|
|
82
|
+
* that it should not wait for an initialization segment before parsing a
|
|
83
|
+
* media segment.
|
|
84
|
+
*/
|
|
85
|
+
constructor(content: IDownloadingQueueContext, downloadQueue: IReadOnlySharedReference<IDownloadQueueItem>, segmentFetcher: IPrioritizedSegmentFetcher<T>, hasInitSegment: boolean);
|
|
86
|
+
/**
|
|
87
|
+
* Returns the initialization segment currently being requested.
|
|
88
|
+
* Returns `null` if no initialization segment request is pending.
|
|
89
|
+
* @returns {Object}
|
|
90
|
+
*/
|
|
91
|
+
getRequestedInitSegment(): ISegment | null;
|
|
92
|
+
/**
|
|
93
|
+
* Returns the media segment currently being requested.
|
|
94
|
+
* Returns `null` if no media segment request is pending.
|
|
95
|
+
* @returns {Object}
|
|
96
|
+
*/
|
|
97
|
+
getRequestedMediaSegment(): ISegment | null;
|
|
98
|
+
/**
|
|
99
|
+
* Start the current downloading queue, emitting events as it loads and parses
|
|
100
|
+
* initialization and media segments.
|
|
101
|
+
*
|
|
102
|
+
* If it was already started, returns the same - shared - Observable.
|
|
103
|
+
* @returns {Observable}
|
|
104
|
+
*/
|
|
105
|
+
start(): Observable<IDownloadingQueueEvent<T>>;
|
|
106
|
+
/**
|
|
107
|
+
* Internal logic performing media segment requests.
|
|
108
|
+
* @returns {Observable}
|
|
109
|
+
*/
|
|
110
|
+
private _requestMediaSegments;
|
|
111
|
+
/**
|
|
112
|
+
* Internal logic performing initialization segment requests.
|
|
113
|
+
* @param {Object} queuedInitSegment
|
|
114
|
+
* @returns {Observable}
|
|
115
|
+
*/
|
|
116
|
+
private _requestInitSegment;
|
|
117
|
+
}
|
|
118
|
+
/** Event sent by the DownloadingQueue. */
|
|
119
|
+
export declare type IDownloadingQueueEvent<T> = IParsedInitSegmentEvent<T> | IParsedSegmentEvent<T> | IEndOfSegmentEvent | ILoaderRetryEvent | IEndOfQueueEvent;
|
|
120
|
+
/**
|
|
121
|
+
* Notify that the initialization segment has been fully loaded and parsed.
|
|
122
|
+
*
|
|
123
|
+
* You can now push that segment to its corresponding buffer and use its parsed
|
|
124
|
+
* metadata.
|
|
125
|
+
*
|
|
126
|
+
* Only sent if an initialization segment exists (when the `DownloadingQueue`'s
|
|
127
|
+
* `hasInitSegment` constructor option has been set to `true`).
|
|
128
|
+
* In that case, an `IParsedInitSegmentEvent` will always be sent before any
|
|
129
|
+
* `IParsedSegmentEvent` event is sent.
|
|
130
|
+
*/
|
|
131
|
+
export declare type IParsedInitSegmentEvent<T> = ISegmentParserParsedInitChunk<T> & {
|
|
132
|
+
segment: ISegment;
|
|
133
|
+
type: "parsed-init";
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Notify that a media chunk (decodable sub-part of a media segment) has been
|
|
137
|
+
* loaded and parsed.
|
|
138
|
+
*
|
|
139
|
+
* If an initialization segment exists (when the `DownloadingQueue`'s
|
|
140
|
+
* `hasInitSegment` constructor option has been set to `true`), an
|
|
141
|
+
* `IParsedSegmentEvent` will always be sent AFTER the `IParsedInitSegmentEvent`
|
|
142
|
+
* event.
|
|
143
|
+
*
|
|
144
|
+
* It can now be pushed to its corresponding buffer. Note that there might be
|
|
145
|
+
* multiple `IParsedSegmentEvent` for a single segment, if that segment is
|
|
146
|
+
* divided into multiple decodable chunks.
|
|
147
|
+
* You will know that all `IParsedSegmentEvent` have been loaded for a given
|
|
148
|
+
* segment once you received the `IEndOfSegmentEvent` for that segment.
|
|
149
|
+
*/
|
|
150
|
+
export declare type IParsedSegmentEvent<T> = ISegmentParserParsedMediaChunk<T> & {
|
|
151
|
+
segment: ISegment;
|
|
152
|
+
type: "parsed-media";
|
|
153
|
+
};
|
|
154
|
+
/** Notify that a media or initialization segment has been fully-loaded. */
|
|
155
|
+
export interface IEndOfSegmentEvent {
|
|
156
|
+
type: "end-of-segment";
|
|
157
|
+
value: {
|
|
158
|
+
segment: ISegment;
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Notify that a media or initialization segment request is retried.
|
|
163
|
+
* This happened most likely because of an HTTP error.
|
|
164
|
+
*/
|
|
165
|
+
export interface ILoaderRetryEvent {
|
|
166
|
+
type: "retry";
|
|
167
|
+
value: {
|
|
168
|
+
segment: ISegment;
|
|
169
|
+
error: ICustomError;
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Notify that the media segment queue is now empty.
|
|
174
|
+
* This can be used to re-check if any segment are now needed.
|
|
175
|
+
*/
|
|
176
|
+
export interface IEndOfQueueEvent {
|
|
177
|
+
type: "end-of-queue";
|
|
178
|
+
value: null;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Structure of the object that has to be emitted through the `downloadQueue`
|
|
182
|
+
* Observable, to signal which segments are currently needed.
|
|
183
|
+
*/
|
|
184
|
+
export interface IDownloadQueueItem {
|
|
185
|
+
/**
|
|
186
|
+
* A potential initialization segment that needs to be loaded and parsed.
|
|
187
|
+
* It will generally be requested in parralel of the first media segments.
|
|
188
|
+
*
|
|
189
|
+
* Can be set to `null` if you don't need to load the initialization segment
|
|
190
|
+
* for now.
|
|
191
|
+
*
|
|
192
|
+
* If the `DownloadingQueue`'s `hasInitSegment` constructor option has been
|
|
193
|
+
* set to `true`, no media segment will be parsed before the initialization
|
|
194
|
+
* segment has been loaded and parsed.
|
|
195
|
+
*/
|
|
196
|
+
initSegment: IQueuedSegment | null;
|
|
197
|
+
/**
|
|
198
|
+
* The queue of media segments currently needed for download.
|
|
199
|
+
*
|
|
200
|
+
* Those will be loaded from the first element in that queue to the last
|
|
201
|
+
* element in it.
|
|
202
|
+
*
|
|
203
|
+
* Note that any media segments in the segment queue will only be parsed once
|
|
204
|
+
* either of these is true:
|
|
205
|
+
* - An initialization segment has been loaded and parsed by this
|
|
206
|
+
* `DownloadingQueue` instance.
|
|
207
|
+
* - The `DownloadingQueue`'s `hasInitSegment` constructor option has been
|
|
208
|
+
* set to `false`.
|
|
209
|
+
*/
|
|
210
|
+
segmentQueue: IQueuedSegment[];
|
|
211
|
+
}
|
|
212
|
+
/** Context for segments downloaded through the DownloadingQueue. */
|
|
213
|
+
export interface IDownloadingQueueContext {
|
|
214
|
+
/** Adaptation linked to the segments you want to load. */
|
|
215
|
+
adaptation: Adaptation;
|
|
216
|
+
/** Manifest linked to the segments you want to load. */
|
|
217
|
+
manifest: Manifest;
|
|
218
|
+
/** Period linked to the segments you want to load. */
|
|
219
|
+
period: Period;
|
|
220
|
+
/** Representation linked to the segments you want to load. */
|
|
221
|
+
representation: Representation;
|
|
222
|
+
}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2015 CANAL+ Group
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { concat as observableConcat, defer as observableDefer, EMPTY, filter, finalize, map, merge as observableMerge, mergeMap, of as observableOf, ReplaySubject, share, switchMap, take, } from "rxjs";
|
|
17
|
+
import log from "../../../log";
|
|
18
|
+
import assert from "../../../utils/assert";
|
|
19
|
+
import assertUnreachable from "../../../utils/assert_unreachable";
|
|
20
|
+
import objectAssign from "../../../utils/object_assign";
|
|
21
|
+
/**
|
|
22
|
+
* Class scheduling segment downloads for a single Representation.
|
|
23
|
+
* @class DownloadingQueue
|
|
24
|
+
*/
|
|
25
|
+
var DownloadingQueue = /** @class */ (function () {
|
|
26
|
+
/**
|
|
27
|
+
* Create a new `DownloadingQueue`.
|
|
28
|
+
*
|
|
29
|
+
* @param {Object} content - The context of the Representation you want to
|
|
30
|
+
* load segments for.
|
|
31
|
+
* @param {Object} downloadQueue - Queue of segments you want to load.
|
|
32
|
+
* @param {Object} segmentFetcher - Interface to facilitate the download of
|
|
33
|
+
* segments.
|
|
34
|
+
* @param {boolean} hasInitSegment - Declare that an initialization segment
|
|
35
|
+
* will need to be downloaded.
|
|
36
|
+
*
|
|
37
|
+
* A `DownloadingQueue` ALWAYS wait for the initialization segment to be
|
|
38
|
+
* loaded and parsed before parsing a media segment.
|
|
39
|
+
*
|
|
40
|
+
* In cases where no initialization segment exist, this would lead to the
|
|
41
|
+
* `DownloadingQueue` waiting indefinitely for it.
|
|
42
|
+
*
|
|
43
|
+
* By setting that value to `false`, you anounce to the `DownloadingQueue`
|
|
44
|
+
* that it should not wait for an initialization segment before parsing a
|
|
45
|
+
* media segment.
|
|
46
|
+
*/
|
|
47
|
+
function DownloadingQueue(content, downloadQueue, segmentFetcher, hasInitSegment) {
|
|
48
|
+
this._content = content;
|
|
49
|
+
this._currentObs$ = null;
|
|
50
|
+
this._downloadQueue = downloadQueue;
|
|
51
|
+
this._initSegmentRequest = null;
|
|
52
|
+
this._mediaSegmentRequest = null;
|
|
53
|
+
this._segmentFetcher = segmentFetcher;
|
|
54
|
+
this._initSegmentMetadata$ = new ReplaySubject(1);
|
|
55
|
+
this._mediaSegmentsAwaitingInitMetadata = new Set();
|
|
56
|
+
if (!hasInitSegment) {
|
|
57
|
+
this._initSegmentMetadata$.next(undefined);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Returns the initialization segment currently being requested.
|
|
62
|
+
* Returns `null` if no initialization segment request is pending.
|
|
63
|
+
* @returns {Object}
|
|
64
|
+
*/
|
|
65
|
+
DownloadingQueue.prototype.getRequestedInitSegment = function () {
|
|
66
|
+
return this._initSegmentRequest === null ? null :
|
|
67
|
+
this._initSegmentRequest.segment;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Returns the media segment currently being requested.
|
|
71
|
+
* Returns `null` if no media segment request is pending.
|
|
72
|
+
* @returns {Object}
|
|
73
|
+
*/
|
|
74
|
+
DownloadingQueue.prototype.getRequestedMediaSegment = function () {
|
|
75
|
+
return this._mediaSegmentRequest === null ? null :
|
|
76
|
+
this._mediaSegmentRequest.segment;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Start the current downloading queue, emitting events as it loads and parses
|
|
80
|
+
* initialization and media segments.
|
|
81
|
+
*
|
|
82
|
+
* If it was already started, returns the same - shared - Observable.
|
|
83
|
+
* @returns {Observable}
|
|
84
|
+
*/
|
|
85
|
+
DownloadingQueue.prototype.start = function () {
|
|
86
|
+
var _this = this;
|
|
87
|
+
if (this._currentObs$ !== null) {
|
|
88
|
+
return this._currentObs$;
|
|
89
|
+
}
|
|
90
|
+
var obs = observableDefer(function () {
|
|
91
|
+
var mediaQueue$ = _this._downloadQueue.asObservable().pipe(filter(function (_a) {
|
|
92
|
+
var segmentQueue = _a.segmentQueue;
|
|
93
|
+
// First, the first elements of the segmentQueue might be already
|
|
94
|
+
// loaded but awaiting the initialization segment to be parsed.
|
|
95
|
+
// Filter those out.
|
|
96
|
+
var nextSegmentToLoadIdx = 0;
|
|
97
|
+
for (; nextSegmentToLoadIdx < segmentQueue.length; nextSegmentToLoadIdx++) {
|
|
98
|
+
var nextSegment = segmentQueue[nextSegmentToLoadIdx].segment;
|
|
99
|
+
if (!_this._mediaSegmentsAwaitingInitMetadata.has(nextSegment.id)) {
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
var currentSegmentRequest = _this._mediaSegmentRequest;
|
|
104
|
+
if (nextSegmentToLoadIdx >= segmentQueue.length) {
|
|
105
|
+
return currentSegmentRequest !== null;
|
|
106
|
+
}
|
|
107
|
+
else if (currentSegmentRequest === null) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
var nextItem = segmentQueue[nextSegmentToLoadIdx];
|
|
111
|
+
if (currentSegmentRequest.segment.id !== nextItem.segment.id) {
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
if (currentSegmentRequest.priority !== nextItem.priority) {
|
|
115
|
+
_this._segmentFetcher.updatePriority(currentSegmentRequest.request$, nextItem.priority);
|
|
116
|
+
}
|
|
117
|
+
return false;
|
|
118
|
+
}), switchMap(function (_a) {
|
|
119
|
+
var segmentQueue = _a.segmentQueue;
|
|
120
|
+
return segmentQueue.length > 0 ? _this._requestMediaSegments() :
|
|
121
|
+
EMPTY;
|
|
122
|
+
}));
|
|
123
|
+
var initSegmentPush$ = _this._downloadQueue.asObservable().pipe(filter(function (next) {
|
|
124
|
+
var initSegmentRequest = _this._initSegmentRequest;
|
|
125
|
+
if (next.initSegment !== null && initSegmentRequest !== null) {
|
|
126
|
+
if (next.initSegment.priority !== initSegmentRequest.priority) {
|
|
127
|
+
_this._segmentFetcher.updatePriority(initSegmentRequest.request$, next.initSegment.priority);
|
|
128
|
+
}
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
return next.initSegment === null || initSegmentRequest === null;
|
|
133
|
+
}
|
|
134
|
+
}), switchMap(function (nextQueue) {
|
|
135
|
+
if (nextQueue.initSegment === null) {
|
|
136
|
+
return EMPTY;
|
|
137
|
+
}
|
|
138
|
+
return _this._requestInitSegment(nextQueue.initSegment);
|
|
139
|
+
}));
|
|
140
|
+
return observableMerge(initSegmentPush$, mediaQueue$);
|
|
141
|
+
}).pipe(share());
|
|
142
|
+
this._currentObs$ = obs;
|
|
143
|
+
return obs;
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* Internal logic performing media segment requests.
|
|
147
|
+
* @returns {Observable}
|
|
148
|
+
*/
|
|
149
|
+
DownloadingQueue.prototype._requestMediaSegments = function () {
|
|
150
|
+
var _this = this;
|
|
151
|
+
var segmentQueue = this._downloadQueue.getValue().segmentQueue;
|
|
152
|
+
var currentNeededSegment = segmentQueue[0];
|
|
153
|
+
var recursivelyRequestSegments = function (startingSegment) {
|
|
154
|
+
if (startingSegment === undefined) {
|
|
155
|
+
return observableOf({ type: "end-of-queue",
|
|
156
|
+
value: null });
|
|
157
|
+
}
|
|
158
|
+
var segment = startingSegment.segment, priority = startingSegment.priority;
|
|
159
|
+
var context = objectAssign({ segment: segment }, _this._content);
|
|
160
|
+
var request$ = _this._segmentFetcher.createRequest(context, priority);
|
|
161
|
+
_this._mediaSegmentRequest = { segment: segment, priority: priority, request$: request$ };
|
|
162
|
+
return request$
|
|
163
|
+
.pipe(mergeMap(function (evt) {
|
|
164
|
+
switch (evt.type) {
|
|
165
|
+
case "retry":
|
|
166
|
+
return observableOf({ type: "retry",
|
|
167
|
+
value: { segment: segment, error: evt.value } });
|
|
168
|
+
case "interrupted":
|
|
169
|
+
log.info("Stream: segment request interrupted temporarly.", segment);
|
|
170
|
+
return EMPTY;
|
|
171
|
+
case "ended":
|
|
172
|
+
_this._mediaSegmentRequest = null;
|
|
173
|
+
var lastQueue = _this._downloadQueue.getValue().segmentQueue;
|
|
174
|
+
if (lastQueue.length === 0) {
|
|
175
|
+
return observableOf({ type: "end-of-queue",
|
|
176
|
+
value: null });
|
|
177
|
+
}
|
|
178
|
+
else if (lastQueue[0].segment.id === segment.id) {
|
|
179
|
+
lastQueue.shift();
|
|
180
|
+
}
|
|
181
|
+
return recursivelyRequestSegments(lastQueue[0]);
|
|
182
|
+
case "chunk":
|
|
183
|
+
case "chunk-complete":
|
|
184
|
+
_this._mediaSegmentsAwaitingInitMetadata.add(segment.id);
|
|
185
|
+
return _this._initSegmentMetadata$.pipe(take(1), map(function (initTimescale) {
|
|
186
|
+
if (evt.type === "chunk-complete") {
|
|
187
|
+
return { type: "end-of-segment",
|
|
188
|
+
value: { segment: segment } };
|
|
189
|
+
}
|
|
190
|
+
var parsed = evt.parse(initTimescale);
|
|
191
|
+
assert(parsed.segmentType === "media", "Should have loaded a media segment.");
|
|
192
|
+
return objectAssign({}, parsed, { type: "parsed-media", segment: segment });
|
|
193
|
+
}), finalize(function () {
|
|
194
|
+
_this._mediaSegmentsAwaitingInitMetadata.delete(segment.id);
|
|
195
|
+
}));
|
|
196
|
+
default:
|
|
197
|
+
assertUnreachable(evt);
|
|
198
|
+
}
|
|
199
|
+
}));
|
|
200
|
+
};
|
|
201
|
+
return observableDefer(function () {
|
|
202
|
+
return recursivelyRequestSegments(currentNeededSegment);
|
|
203
|
+
}).pipe(finalize(function () { _this._mediaSegmentRequest = null; }));
|
|
204
|
+
};
|
|
205
|
+
/**
|
|
206
|
+
* Internal logic performing initialization segment requests.
|
|
207
|
+
* @param {Object} queuedInitSegment
|
|
208
|
+
* @returns {Observable}
|
|
209
|
+
*/
|
|
210
|
+
DownloadingQueue.prototype._requestInitSegment = function (queuedInitSegment) {
|
|
211
|
+
var _this = this;
|
|
212
|
+
if (queuedInitSegment === null) {
|
|
213
|
+
this._initSegmentRequest = null;
|
|
214
|
+
return EMPTY;
|
|
215
|
+
}
|
|
216
|
+
var segment = queuedInitSegment.segment, priority = queuedInitSegment.priority;
|
|
217
|
+
var context = objectAssign({ segment: segment }, this._content);
|
|
218
|
+
var request$ = this._segmentFetcher.createRequest(context, priority);
|
|
219
|
+
this._initSegmentRequest = { segment: segment, priority: priority, request$: request$ };
|
|
220
|
+
return request$
|
|
221
|
+
.pipe(mergeMap(function (evt) {
|
|
222
|
+
switch (evt.type) {
|
|
223
|
+
case "retry":
|
|
224
|
+
return observableOf({ type: "retry",
|
|
225
|
+
value: { segment: segment, error: evt.value } });
|
|
226
|
+
case "interrupted":
|
|
227
|
+
log.info("Stream: init segment request interrupted temporarly.", segment);
|
|
228
|
+
return EMPTY;
|
|
229
|
+
case "chunk":
|
|
230
|
+
var parsed_1 = evt.parse(undefined);
|
|
231
|
+
assert(parsed_1.segmentType === "init", "Should have loaded an init segment.");
|
|
232
|
+
return observableConcat(observableOf(objectAssign({}, parsed_1, { type: "parsed-init", segment: segment })),
|
|
233
|
+
// We want to emit parsing information strictly AFTER the
|
|
234
|
+
// initialization segment is emitted. Hence why we perform this
|
|
235
|
+
// side-effect a posteriori in a concat operator
|
|
236
|
+
observableDefer(function () {
|
|
237
|
+
if (parsed_1.segmentType === "init") {
|
|
238
|
+
_this._initSegmentMetadata$.next(parsed_1.initTimescale);
|
|
239
|
+
}
|
|
240
|
+
return EMPTY;
|
|
241
|
+
}));
|
|
242
|
+
case "chunk-complete":
|
|
243
|
+
return observableOf({ type: "end-of-segment",
|
|
244
|
+
value: { segment: segment } });
|
|
245
|
+
case "ended":
|
|
246
|
+
return EMPTY; // Do nothing, just here to check every case
|
|
247
|
+
default:
|
|
248
|
+
assertUnreachable(evt);
|
|
249
|
+
}
|
|
250
|
+
})).pipe(finalize(function () { _this._initSegmentRequest = null; }));
|
|
251
|
+
};
|
|
252
|
+
return DownloadingQueue;
|
|
253
|
+
}());
|
|
254
|
+
export default DownloadingQueue;
|
|
@@ -25,6 +25,4 @@ import { SegmentBuffer } from "../../segment_buffers";
|
|
|
25
25
|
* @param {Object} bufferingQueue
|
|
26
26
|
* @returns {Observable}
|
|
27
27
|
*/
|
|
28
|
-
export default function forceGarbageCollection(
|
|
29
|
-
position: number;
|
|
30
|
-
}>, bufferingQueue: SegmentBuffer<unknown>): Observable<unknown>;
|
|
28
|
+
export default function forceGarbageCollection(currentPosition: number, bufferingQueue: SegmentBuffer): Observable<unknown>;
|
|
@@ -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 { from as observableFrom, } from "rxjs";
|
|
17
|
-
import { concatAll, mergeMap, take, } from "rxjs/operators";
|
|
16
|
+
import { concatAll, defer as observableDefer, from as observableFrom, } from "rxjs";
|
|
18
17
|
import config from "../../../config";
|
|
19
18
|
import log from "../../../log";
|
|
20
19
|
import { getInnerAndOuterTimeRanges } from "../../../utils/ranges";
|
|
@@ -30,22 +29,21 @@ var GC_GAP_BEEFY = config.BUFFER_GC_GAPS.BEEFY;
|
|
|
30
29
|
* @param {Object} bufferingQueue
|
|
31
30
|
* @returns {Observable}
|
|
32
31
|
*/
|
|
33
|
-
export default function forceGarbageCollection(
|
|
34
|
-
|
|
35
|
-
return timings$.pipe(take(1), mergeMap(function (timing) {
|
|
32
|
+
export default function forceGarbageCollection(currentPosition, bufferingQueue) {
|
|
33
|
+
return observableDefer(function () {
|
|
36
34
|
log.warn("Stream: Running garbage collector");
|
|
37
35
|
var buffered = bufferingQueue.getBufferedRanges();
|
|
38
|
-
var cleanedupRanges = selectGCedRanges(
|
|
36
|
+
var cleanedupRanges = selectGCedRanges(currentPosition, buffered, GC_GAP_CALM);
|
|
39
37
|
// more aggressive GC if we could not find any range to clean
|
|
40
38
|
if (cleanedupRanges.length === 0) {
|
|
41
|
-
cleanedupRanges = selectGCedRanges(
|
|
39
|
+
cleanedupRanges = selectGCedRanges(currentPosition, buffered, GC_GAP_BEEFY);
|
|
42
40
|
}
|
|
43
41
|
log.debug("Stream: GC cleaning", cleanedupRanges);
|
|
44
42
|
return observableFrom(cleanedupRanges.map(function (_a) {
|
|
45
43
|
var start = _a.start, end = _a.end;
|
|
46
44
|
return bufferingQueue.removeBuffer(start, end);
|
|
47
45
|
})).pipe(concatAll());
|
|
48
|
-
})
|
|
46
|
+
});
|
|
49
47
|
}
|
|
50
48
|
/**
|
|
51
49
|
* Buffer garbage collector algorithm.
|
|
@@ -65,18 +63,17 @@ function selectGCedRanges(position, buffered, gcGap) {
|
|
|
65
63
|
var cleanedupRanges = [];
|
|
66
64
|
// start by trying to remove all ranges that do not contain the
|
|
67
65
|
// current time and respect the gcGap
|
|
68
|
-
// respect the gcGap? FIXME?
|
|
69
66
|
for (var i = 0; i < outerRanges.length; i++) {
|
|
70
67
|
var outerRange = outerRanges[i];
|
|
71
|
-
if (position - gcGap
|
|
68
|
+
if (position - gcGap > outerRange.end) {
|
|
72
69
|
cleanedupRanges.push(outerRange);
|
|
73
70
|
}
|
|
74
|
-
else if (position + gcGap
|
|
71
|
+
else if (position + gcGap < outerRange.start) {
|
|
75
72
|
cleanedupRanges.push(outerRange);
|
|
76
73
|
}
|
|
77
74
|
}
|
|
78
75
|
// try to clean up some space in the current range
|
|
79
|
-
if (innerRange
|
|
76
|
+
if (innerRange !== null) {
|
|
80
77
|
log.debug("Stream: GC removing part of inner range", cleanedupRanges);
|
|
81
78
|
if (position - gcGap > innerRange.start) {
|
|
82
79
|
cleanedupRanges.push({ start: innerRange.start,
|