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
|
@@ -14,33 +14,27 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import config from "
|
|
18
|
-
import log from "
|
|
17
|
+
import config from "../../../config";
|
|
18
|
+
import log from "../../../log";
|
|
19
19
|
import {
|
|
20
20
|
Adaptation,
|
|
21
21
|
areSameContent,
|
|
22
22
|
ISegment,
|
|
23
23
|
Period,
|
|
24
24
|
Representation,
|
|
25
|
-
} from "
|
|
26
|
-
import takeFirstSet from "
|
|
25
|
+
} from "../../../manifest";
|
|
26
|
+
import takeFirstSet from "../../../utils/take_first_set";
|
|
27
|
+
import BufferedHistory, {
|
|
28
|
+
IBufferedHistoryEntry,
|
|
29
|
+
} from "./buffered_history";
|
|
30
|
+
import { IChunkContext } from "./types";
|
|
27
31
|
|
|
28
|
-
const {
|
|
32
|
+
const { BUFFERED_HISTORY_RETENTION_TIME,
|
|
33
|
+
BUFFERED_HISTORY_MAXIMUM_ENTRIES,
|
|
34
|
+
MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE,
|
|
29
35
|
MAX_MANIFEST_BUFFERED_DURATION_DIFFERENCE,
|
|
30
36
|
MINIMUM_SEGMENT_SIZE } = config;
|
|
31
37
|
|
|
32
|
-
/** Content information for a single buffered chunk */
|
|
33
|
-
interface IBufferedChunkInfos {
|
|
34
|
-
/** Adaptation this chunk is related to. */
|
|
35
|
-
adaptation : Adaptation;
|
|
36
|
-
/** Period this chunk is related to. */
|
|
37
|
-
period : Period;
|
|
38
|
-
/** Representation this chunk is related to. */
|
|
39
|
-
representation : Representation;
|
|
40
|
-
/** Segment this chunk is related to. */
|
|
41
|
-
segment : ISegment;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
38
|
/** Information stored on a single chunk by the SegmentInventory. */
|
|
45
39
|
export interface IBufferedChunk {
|
|
46
40
|
/**
|
|
@@ -57,18 +51,7 @@ export interface IBufferedChunk {
|
|
|
57
51
|
* synchronization for that chunk this value could be more or less precize.
|
|
58
52
|
*/
|
|
59
53
|
bufferedStart : number|undefined;
|
|
60
|
-
/**
|
|
61
|
-
* Supposed end, in seconds, the chunk is expected to end at.
|
|
62
|
-
*
|
|
63
|
-
* It can correspond either to the end of the chunk or to the end of the whole
|
|
64
|
-
* segment the chunk is linked to. This should not matter as chunks linked to
|
|
65
|
-
* the same segment will all be merged once all chunks have been pushed and
|
|
66
|
-
* the `completeSegment` API call is done. Until then, this property should
|
|
67
|
-
* not be relied on.
|
|
68
|
-
*
|
|
69
|
-
* You can know whether the `completeSegment` API has been called by checking
|
|
70
|
-
* the `partiallyPushed` property.
|
|
71
|
-
*/
|
|
54
|
+
/** Supposed end, in seconds, the chunk is expected to end at. */
|
|
72
55
|
end : number;
|
|
73
56
|
/**
|
|
74
57
|
* If `true` the `end` property is an estimate the `SegmentInventory` has
|
|
@@ -89,11 +72,9 @@ export interface IBufferedChunk {
|
|
|
89
72
|
*/
|
|
90
73
|
precizeStart : boolean;
|
|
91
74
|
/** Information on what that chunk actually contains. */
|
|
92
|
-
infos :
|
|
75
|
+
infos : IChunkContext;
|
|
93
76
|
/**
|
|
94
77
|
* If `true`, this chunk is only a partial chunk of a whole segment.
|
|
95
|
-
* In this condition, `start` and `end` may be ignored, as they may either
|
|
96
|
-
* refer to the chunk or to the whole segment.
|
|
97
78
|
*
|
|
98
79
|
* Inversely, if `false`, this chunk is a whole segment whose inner chunks
|
|
99
80
|
* have all been fully pushed.
|
|
@@ -102,16 +83,23 @@ export interface IBufferedChunk {
|
|
|
102
83
|
*/
|
|
103
84
|
partiallyPushed : boolean;
|
|
104
85
|
/**
|
|
105
|
-
*
|
|
86
|
+
* If `true`, the segment as a whole is divided into multiple parts in the
|
|
87
|
+
* buffer, with other segment(s) between them.
|
|
88
|
+
* If `false`, it is contiguous.
|
|
106
89
|
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
90
|
+
* Splitted segments are a rare occurence that is more complicated to handle
|
|
91
|
+
* than contiguous ones.
|
|
92
|
+
*/
|
|
93
|
+
splitted : boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Supposed start, in seconds, the chunk is expected to start at.
|
|
112
96
|
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
97
|
+
* If the current `chunk` is part of a "partially pushed" segment (see
|
|
98
|
+
* `partiallyPushed`), the definition of this property is flexible in the way
|
|
99
|
+
* that it can correspond either to the start of the chunk or to the start of
|
|
100
|
+
* the whole segment the chunk is linked to.
|
|
101
|
+
* As such, this property should not be relied on until the segment has been
|
|
102
|
+
* fully-pushed.
|
|
115
103
|
*/
|
|
116
104
|
start : number; // Supposed start the segment should start from, in seconds
|
|
117
105
|
}
|
|
@@ -161,8 +149,12 @@ export default class SegmentInventory {
|
|
|
161
149
|
*/
|
|
162
150
|
private _inventory : IBufferedChunk[];
|
|
163
151
|
|
|
152
|
+
private _bufferedHistory : BufferedHistory;
|
|
153
|
+
|
|
164
154
|
constructor() {
|
|
165
155
|
this._inventory = [];
|
|
156
|
+
this._bufferedHistory = new BufferedHistory(BUFFERED_HISTORY_RETENTION_TIME,
|
|
157
|
+
BUFFERED_HISTORY_MAXIMUM_ENTRIES);
|
|
166
158
|
}
|
|
167
159
|
|
|
168
160
|
/**
|
|
@@ -173,8 +165,8 @@ export default class SegmentInventory {
|
|
|
173
165
|
}
|
|
174
166
|
|
|
175
167
|
/**
|
|
176
|
-
* Infer each segment's bufferedStart and bufferedEnd from the
|
|
177
|
-
* given.
|
|
168
|
+
* Infer each segment's `bufferedStart` and `bufferedEnd` properties from the
|
|
169
|
+
* TimeRanges given.
|
|
178
170
|
*
|
|
179
171
|
* The TimeRanges object given should come from the media buffer linked to
|
|
180
172
|
* that SegmentInventory.
|
|
@@ -227,7 +219,7 @@ export default class SegmentInventory {
|
|
|
227
219
|
null = null;
|
|
228
220
|
|
|
229
221
|
// remove garbage-collected segments
|
|
230
|
-
// (not in that TimeRange nor in the previous one)
|
|
222
|
+
// (Those not in that TimeRange nor in the previous one)
|
|
231
223
|
const numberOfSegmentToDelete = inventoryIndex - indexBefore;
|
|
232
224
|
if (numberOfSegmentToDelete > 0) {
|
|
233
225
|
const lastDeletedSegment = // last garbage-collected segment
|
|
@@ -259,6 +251,8 @@ export default class SegmentInventory {
|
|
|
259
251
|
bufferType);
|
|
260
252
|
|
|
261
253
|
if (inventoryIndex === inventory.length - 1) {
|
|
254
|
+
// This is the last segment in the inventory.
|
|
255
|
+
// We can directly update the end as the end of the current range.
|
|
262
256
|
guessBufferedEndFromRangeEnd(thisSegment, rangeEnd, bufferType);
|
|
263
257
|
return;
|
|
264
258
|
}
|
|
@@ -347,7 +341,7 @@ export default class SegmentInventory {
|
|
|
347
341
|
|
|
348
342
|
const inventory = this._inventory;
|
|
349
343
|
const newSegment = { partiallyPushed: true,
|
|
350
|
-
|
|
344
|
+
splitted: false,
|
|
351
345
|
start,
|
|
352
346
|
end,
|
|
353
347
|
precizeStart: false,
|
|
@@ -554,6 +548,7 @@ export default class SegmentInventory {
|
|
|
554
548
|
log.debug("SI: Segment pushed is contained in a previous one",
|
|
555
549
|
bufferType, start, end, segmentI.start, segmentI.end);
|
|
556
550
|
const nextSegment = { partiallyPushed: segmentI.partiallyPushed,
|
|
551
|
+
splitted: true,
|
|
557
552
|
start: newSegment.end,
|
|
558
553
|
end: segmentI.end,
|
|
559
554
|
precizeStart: segmentI.precizeStart &&
|
|
@@ -564,6 +559,7 @@ export default class SegmentInventory {
|
|
|
564
559
|
bufferedEnd: segmentI.end,
|
|
565
560
|
infos: segmentI.infos };
|
|
566
561
|
segmentI.end = newSegment.start;
|
|
562
|
+
segmentI.splitted = true;
|
|
567
563
|
segmentI.bufferedEnd = undefined;
|
|
568
564
|
segmentI.precizeEnd = segmentI.precizeEnd &&
|
|
569
565
|
newSegment.precizeStart;
|
|
@@ -677,20 +673,26 @@ export default class SegmentInventory {
|
|
|
677
673
|
content : { period: Period;
|
|
678
674
|
adaptation: Adaptation;
|
|
679
675
|
representation: Representation;
|
|
680
|
-
segment: ISegment; }
|
|
676
|
+
segment: ISegment; },
|
|
677
|
+
newBuffered : TimeRanges
|
|
681
678
|
) : void {
|
|
682
679
|
if (content.segment.isInit) {
|
|
683
680
|
return;
|
|
684
681
|
}
|
|
685
682
|
const inventory = this._inventory;
|
|
686
683
|
|
|
687
|
-
|
|
684
|
+
const resSegments : IBufferedChunk[] = [];
|
|
685
|
+
|
|
688
686
|
for (let i = 0; i < inventory.length; i++) {
|
|
689
687
|
if (areSameContent(inventory[i].infos, content)) {
|
|
690
|
-
|
|
691
|
-
|
|
688
|
+
let splitted = false;
|
|
689
|
+
if (resSegments.length > 0) {
|
|
690
|
+
splitted = true;
|
|
691
|
+
if (resSegments.length === 1) {
|
|
692
|
+
log.warn("SI: Completed Segment is splitted.", content);
|
|
693
|
+
resSegments[0].splitted = true;
|
|
694
|
+
}
|
|
692
695
|
}
|
|
693
|
-
foundIt = true;
|
|
694
696
|
|
|
695
697
|
const firstI = i;
|
|
696
698
|
i += 1;
|
|
@@ -711,11 +713,25 @@ export default class SegmentInventory {
|
|
|
711
713
|
this._inventory[firstI].partiallyPushed = false;
|
|
712
714
|
this._inventory[firstI].end = lastEnd;
|
|
713
715
|
this._inventory[firstI].bufferedEnd = lastBufferedEnd;
|
|
716
|
+
this._inventory[firstI].splitted = splitted;
|
|
717
|
+
resSegments.push(this._inventory[firstI]);
|
|
714
718
|
}
|
|
715
719
|
}
|
|
716
720
|
|
|
717
|
-
if (
|
|
721
|
+
if (resSegments.length === 0) {
|
|
718
722
|
log.warn("SI: Completed Segment not found", content);
|
|
723
|
+
} else {
|
|
724
|
+
this.synchronizeBuffered(newBuffered);
|
|
725
|
+
for (const seg of resSegments) {
|
|
726
|
+
if (seg.bufferedStart !== undefined && seg.bufferedEnd !== undefined) {
|
|
727
|
+
this._bufferedHistory.addBufferedSegment(seg.infos,
|
|
728
|
+
seg.bufferedStart,
|
|
729
|
+
seg.bufferedEnd);
|
|
730
|
+
} else {
|
|
731
|
+
log.debug("SI: buffered range not known after sync. Skipping history.",
|
|
732
|
+
seg);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
719
735
|
}
|
|
720
736
|
}
|
|
721
737
|
|
|
@@ -729,6 +745,23 @@ export default class SegmentInventory {
|
|
|
729
745
|
public getInventory() : IBufferedChunk[] {
|
|
730
746
|
return this._inventory;
|
|
731
747
|
}
|
|
748
|
+
|
|
749
|
+
/**
|
|
750
|
+
* Returns a recent history of registered operations performed and event
|
|
751
|
+
* received linked to the segment given in argument.
|
|
752
|
+
*
|
|
753
|
+
* Not all operations and events are registered in the returned history.
|
|
754
|
+
* Please check the return type for more information on what is available.
|
|
755
|
+
*
|
|
756
|
+
* Note that history is short-lived for memory usage and performance reasons.
|
|
757
|
+
* You may not receive any information on operations that happened too long
|
|
758
|
+
* ago.
|
|
759
|
+
* @param {Object} context
|
|
760
|
+
* @returns {Array.<Object>}
|
|
761
|
+
*/
|
|
762
|
+
public getHistoryFor(context : IChunkContext) : IBufferedHistoryEntry[] {
|
|
763
|
+
return this._bufferedHistory.getHistoryFor(context);
|
|
764
|
+
}
|
|
732
765
|
}
|
|
733
766
|
|
|
734
767
|
/**
|
|
@@ -793,7 +826,7 @@ function guessBufferedStartFromRangeStart(
|
|
|
793
826
|
rangeStart : number,
|
|
794
827
|
lastDeletedSegmentInfos : { end : number; precizeEnd : boolean } |
|
|
795
828
|
null,
|
|
796
|
-
bufferType
|
|
829
|
+
bufferType : string
|
|
797
830
|
) : void {
|
|
798
831
|
if (firstSegmentInRange.bufferedStart !== undefined) {
|
|
799
832
|
if (firstSegmentInRange.bufferedStart < rangeStart) {
|
|
@@ -942,7 +975,7 @@ function prettyPrintInventory(inventory : IBufferedChunk[]) : string {
|
|
|
942
975
|
let lastChunk : IBufferedChunk | null = null;
|
|
943
976
|
let lastLetter : string | null = null;
|
|
944
977
|
|
|
945
|
-
function generateNewLetter(infos :
|
|
978
|
+
function generateNewLetter(infos : IChunkContext) : string {
|
|
946
979
|
const currentLetter = String.fromCharCode(letters.length + 65);
|
|
947
980
|
letters.push({ letter: currentLetter,
|
|
948
981
|
periodId: infos.period.id,
|
|
@@ -13,15 +13,23 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
16
|
+
|
|
17
|
+
import {
|
|
18
|
+
Adaptation,
|
|
19
|
+
ISegment,
|
|
20
|
+
Period,
|
|
21
|
+
Representation,
|
|
22
|
+
} from "../../../manifest";
|
|
23
|
+
|
|
24
|
+
/** Content information for a single buffered chunk */
|
|
25
|
+
export interface IChunkContext {
|
|
26
|
+
/** Adaptation this chunk is related to. */
|
|
27
|
+
adaptation : Adaptation;
|
|
28
|
+
/** Period this chunk is related to. */
|
|
29
|
+
period : Period;
|
|
30
|
+
/** Representation this chunk is related to. */
|
|
31
|
+
representation : Representation;
|
|
32
|
+
/** Segment this chunk is related to. */
|
|
33
|
+
segment : ISegment;
|
|
27
34
|
}
|
|
35
|
+
|
|
@@ -91,16 +91,7 @@ export default class SegmentBuffersStore {
|
|
|
91
91
|
* disabled. This means that the corresponding type (e.g. audio, video etc.)
|
|
92
92
|
* won't be needed when playing the current content.
|
|
93
93
|
*/
|
|
94
|
-
private _initializedSegmentBuffers :
|
|
95
|
-
audio? : SegmentBuffer<BufferSource | null> |
|
|
96
|
-
null;
|
|
97
|
-
video? : SegmentBuffer<BufferSource | null> |
|
|
98
|
-
null;
|
|
99
|
-
text? : SegmentBuffer<unknown> |
|
|
100
|
-
null;
|
|
101
|
-
image? : SegmentBuffer<unknown> |
|
|
102
|
-
null;
|
|
103
|
-
};
|
|
94
|
+
private _initializedSegmentBuffers : Partial<Record<IBufferType, SegmentBuffer | null>>;
|
|
104
95
|
|
|
105
96
|
/**
|
|
106
97
|
* Callbacks called after a SourceBuffer is either created or disabled.
|
|
@@ -172,7 +163,7 @@ export default class SegmentBuffersStore {
|
|
|
172
163
|
* @returns {Object|null}
|
|
173
164
|
*/
|
|
174
165
|
public getStatus(bufferType : IBufferType) : { type : "initialized";
|
|
175
|
-
value : SegmentBuffer
|
|
166
|
+
value : SegmentBuffer; } |
|
|
176
167
|
{ type : "uninitialized" } |
|
|
177
168
|
{ type : "disabled" }
|
|
178
169
|
{
|
|
@@ -251,7 +242,7 @@ export default class SegmentBuffersStore {
|
|
|
251
242
|
bufferType : IBufferType,
|
|
252
243
|
codec : string,
|
|
253
244
|
options : ISegmentBufferOptions = {}
|
|
254
|
-
) : SegmentBuffer
|
|
245
|
+
) : SegmentBuffer {
|
|
255
246
|
const memorizedSegmentBuffer = this._initializedSegmentBuffers[bufferType];
|
|
256
247
|
if (shouldHaveNativeBuffer(bufferType)) {
|
|
257
248
|
if (memorizedSegmentBuffer != null) {
|
|
@@ -279,7 +270,7 @@ export default class SegmentBuffersStore {
|
|
|
279
270
|
return memorizedSegmentBuffer;
|
|
280
271
|
}
|
|
281
272
|
|
|
282
|
-
let segmentBuffer : SegmentBuffer
|
|
273
|
+
let segmentBuffer : SegmentBuffer;
|
|
283
274
|
if (bufferType === "text") {
|
|
284
275
|
log.info("SB: Creating a new text SegmentBuffer");
|
|
285
276
|
|
|
@@ -25,25 +25,22 @@
|
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
27
|
import {
|
|
28
|
-
|
|
28
|
+
catchError,
|
|
29
29
|
concat as observableConcat,
|
|
30
30
|
defer as observableDefer,
|
|
31
|
-
EMPTY,
|
|
32
|
-
merge as observableMerge,
|
|
33
|
-
Observable,
|
|
34
|
-
of as observableOf,
|
|
35
|
-
} from "rxjs";
|
|
36
|
-
import {
|
|
37
|
-
catchError,
|
|
38
31
|
distinctUntilChanged,
|
|
32
|
+
EMPTY,
|
|
39
33
|
exhaustMap,
|
|
40
34
|
filter,
|
|
41
35
|
map,
|
|
36
|
+
merge as observableMerge,
|
|
42
37
|
mergeMap,
|
|
38
|
+
Observable,
|
|
39
|
+
of as observableOf,
|
|
43
40
|
share,
|
|
44
41
|
take,
|
|
45
42
|
tap,
|
|
46
|
-
} from "rxjs
|
|
43
|
+
} from "rxjs";
|
|
47
44
|
import config from "../../../config";
|
|
48
45
|
import { formatError } from "../../../errors";
|
|
49
46
|
import log from "../../../log";
|
|
@@ -53,69 +50,79 @@ import Manifest, {
|
|
|
53
50
|
Representation,
|
|
54
51
|
} from "../../../manifest";
|
|
55
52
|
import deferSubscriptions from "../../../utils/defer_subscriptions";
|
|
53
|
+
import {
|
|
54
|
+
createSharedReference,
|
|
55
|
+
IReadOnlySharedReference,
|
|
56
|
+
} from "../../../utils/reference";
|
|
56
57
|
import ABRManager, {
|
|
57
58
|
IABREstimate,
|
|
59
|
+
IABRMetricsEventValue,
|
|
60
|
+
IABRRequestBeginEventValue,
|
|
61
|
+
IABRRequestEndEventValue,
|
|
62
|
+
IABRRequestProgressEventValue,
|
|
58
63
|
} from "../../abr";
|
|
64
|
+
import { IReadOnlyPlaybackObserver } from "../../api";
|
|
59
65
|
import { SegmentFetcherCreator } from "../../fetchers";
|
|
60
66
|
import { SegmentBuffer } from "../../segment_buffers";
|
|
61
67
|
import EVENTS from "../events_generators";
|
|
68
|
+
import reloadAfterSwitch from "../reload_after_switch";
|
|
62
69
|
import RepresentationStream, {
|
|
63
|
-
|
|
70
|
+
IRepresentationStreamPlaybackObservation,
|
|
64
71
|
ITerminationOrder,
|
|
65
72
|
} from "../representation";
|
|
66
73
|
import {
|
|
67
74
|
IAdaptationStreamEvent,
|
|
68
75
|
IRepresentationStreamEvent,
|
|
69
76
|
} from "../types";
|
|
70
|
-
import reloadAfterSwitch from "../utils";
|
|
71
77
|
import createRepresentationEstimator from "./create_representation_estimator";
|
|
72
78
|
|
|
73
79
|
const { DELTA_POSITION_AFTER_RELOAD } = config;
|
|
74
80
|
|
|
75
|
-
/**
|
|
76
|
-
export interface
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
81
|
+
/** Regular playback information needed by the AdaptationStream. */
|
|
82
|
+
export interface IAdaptationStreamPlaybackObservation extends
|
|
83
|
+
IRepresentationStreamPlaybackObservation {
|
|
84
|
+
/**
|
|
85
|
+
* For the current SegmentBuffer, difference in seconds between the next position
|
|
86
|
+
* where no segment data is available and the current position.
|
|
87
|
+
*/
|
|
88
|
+
bufferGap : number;
|
|
89
|
+
/** `duration` property of the HTMLMediaElement on which the content plays. */
|
|
90
|
+
duration : number;
|
|
91
|
+
/** If true, the player has been put on pause. */
|
|
92
|
+
isPaused: boolean;
|
|
93
|
+
/** Last "playback rate" asked by the user. */
|
|
94
|
+
speed : number;
|
|
95
|
+
/**
|
|
96
|
+
* Only set for live contents.
|
|
97
|
+
* Difference between the live edge and the current position, in seconds.
|
|
98
|
+
*/
|
|
99
|
+
liveGap : number | undefined;
|
|
100
|
+
}
|
|
91
101
|
|
|
92
102
|
/** Arguments given when creating a new `AdaptationStream`. */
|
|
93
|
-
export interface IAdaptationStreamArguments
|
|
103
|
+
export interface IAdaptationStreamArguments {
|
|
94
104
|
/**
|
|
95
105
|
* Module allowing to find the best Representation depending on the current
|
|
96
106
|
* conditions like the current network bandwidth.
|
|
97
107
|
*/
|
|
98
108
|
abrManager : ABRManager;
|
|
99
|
-
/**
|
|
100
|
-
|
|
101
|
-
* The main AdaptationStream logic will be triggered on each `tick`.
|
|
102
|
-
*/
|
|
103
|
-
clock$ : Observable<IAdaptationStreamClockTick>;
|
|
109
|
+
/** Regularly emit playback conditions. */
|
|
110
|
+
playbackObserver : IReadOnlyPlaybackObserver<IAdaptationStreamPlaybackObservation>;
|
|
104
111
|
/** Content you want to create this Stream for. */
|
|
105
112
|
content : { manifest : Manifest;
|
|
106
113
|
period : Period;
|
|
107
114
|
adaptation : Adaptation; };
|
|
108
115
|
options: IAdaptationStreamOptions;
|
|
109
116
|
/** SourceBuffer wrapper - needed to push media segments. */
|
|
110
|
-
segmentBuffer : SegmentBuffer
|
|
117
|
+
segmentBuffer : SegmentBuffer;
|
|
111
118
|
/** Module used to fetch the wanted media segments. */
|
|
112
|
-
segmentFetcherCreator : SegmentFetcherCreator
|
|
119
|
+
segmentFetcherCreator : SegmentFetcherCreator;
|
|
113
120
|
/**
|
|
114
121
|
* "Buffer goal" wanted, or the ideal amount of time ahead of the current
|
|
115
122
|
* position in the current SegmentBuffer. When this amount has been reached
|
|
116
123
|
* this AdaptationStream won't try to download new segments.
|
|
117
124
|
*/
|
|
118
|
-
wantedBufferAhead
|
|
125
|
+
wantedBufferAhead : IReadOnlySharedReference<number>;
|
|
119
126
|
}
|
|
120
127
|
|
|
121
128
|
/**
|
|
@@ -174,15 +181,15 @@ export interface IAdaptationStreamOptions {
|
|
|
174
181
|
* @param {Object} args
|
|
175
182
|
* @returns {Observable}
|
|
176
183
|
*/
|
|
177
|
-
export default function AdaptationStream
|
|
184
|
+
export default function AdaptationStream({
|
|
178
185
|
abrManager,
|
|
179
|
-
|
|
186
|
+
playbackObserver,
|
|
180
187
|
content,
|
|
181
188
|
options,
|
|
182
189
|
segmentBuffer,
|
|
183
190
|
segmentFetcherCreator,
|
|
184
|
-
wantedBufferAhead
|
|
185
|
-
} : IAdaptationStreamArguments
|
|
191
|
+
wantedBufferAhead,
|
|
192
|
+
} : IAdaptationStreamArguments) : Observable<IAdaptationStreamEvent> {
|
|
186
193
|
const directManualBitrateSwitching = options.manualBitrateSwitchingMode === "direct";
|
|
187
194
|
const { manifest, period, adaptation } = content;
|
|
188
195
|
|
|
@@ -196,24 +203,38 @@ export default function AdaptationStream<T>({
|
|
|
196
203
|
*/
|
|
197
204
|
const bufferGoalRatioMap: Partial<Record<string, number>> = {};
|
|
198
205
|
|
|
199
|
-
const { estimator$,
|
|
200
|
-
createRepresentationEstimator(content, abrManager,
|
|
206
|
+
const { estimator$, abrFeedbacks$ } =
|
|
207
|
+
createRepresentationEstimator(content, abrManager, playbackObserver.observe(true));
|
|
201
208
|
|
|
202
209
|
/** Allows the `RepresentationStream` to easily fetch media segments. */
|
|
203
|
-
const segmentFetcher = segmentFetcherCreator
|
|
204
|
-
|
|
210
|
+
const segmentFetcher = segmentFetcherCreator
|
|
211
|
+
.createSegmentFetcher(adaptation.type,
|
|
212
|
+
{
|
|
213
|
+
onRequestBegin(value : IABRRequestBeginEventValue) {
|
|
214
|
+
abrFeedbacks$.next({ type: "requestBegin", value });
|
|
215
|
+
},
|
|
216
|
+
onRequestEnd(value : IABRRequestEndEventValue) {
|
|
217
|
+
abrFeedbacks$.next({ type: "requestEnd", value });
|
|
218
|
+
},
|
|
219
|
+
onProgress(value : IABRRequestProgressEventValue) {
|
|
220
|
+
abrFeedbacks$.next({ type: "progress", value });
|
|
221
|
+
},
|
|
222
|
+
onMetrics(value : IABRMetricsEventValue) {
|
|
223
|
+
abrFeedbacks$.next({ type: "metrics", value });
|
|
224
|
+
},
|
|
225
|
+
});
|
|
205
226
|
|
|
206
227
|
/**
|
|
207
|
-
*
|
|
208
|
-
* starting with
|
|
228
|
+
* Stores the last estimate emitted through the `abrEstimate$` Observable,
|
|
229
|
+
* starting with `null`.
|
|
209
230
|
* This allows to easily rely on that value in inner Observables which might also
|
|
210
231
|
* need the last already-considered value.
|
|
211
232
|
*/
|
|
212
|
-
const lastEstimate
|
|
233
|
+
const lastEstimate = createSharedReference<IABREstimate | null>(null);
|
|
213
234
|
|
|
214
235
|
/** Emits abr estimates on Subscription. */
|
|
215
236
|
const abrEstimate$ = estimator$.pipe(
|
|
216
|
-
tap((estimate) => { lastEstimate
|
|
237
|
+
tap((estimate) => { lastEstimate.setValue(estimate); }),
|
|
217
238
|
deferSubscriptions(),
|
|
218
239
|
share());
|
|
219
240
|
|
|
@@ -229,7 +250,7 @@ export default function AdaptationStream<T>({
|
|
|
229
250
|
|
|
230
251
|
/** Recursively create `RepresentationStream`s according to the last estimate. */
|
|
231
252
|
const representationStreams$ = abrEstimate$
|
|
232
|
-
.pipe(exhaustMap((estimate, i) : Observable<IAdaptationStreamEvent
|
|
253
|
+
.pipe(exhaustMap((estimate, i) : Observable<IAdaptationStreamEvent> => {
|
|
233
254
|
return recursivelyCreateRepresentationStreams(estimate, i === 0);
|
|
234
255
|
}));
|
|
235
256
|
|
|
@@ -250,7 +271,7 @@ export default function AdaptationStream<T>({
|
|
|
250
271
|
function recursivelyCreateRepresentationStreams(
|
|
251
272
|
fromEstimate : IABREstimate,
|
|
252
273
|
isFirstEstimate : boolean
|
|
253
|
-
) : Observable<IAdaptationStreamEvent
|
|
274
|
+
) : Observable<IAdaptationStreamEvent> {
|
|
254
275
|
const { representation } = fromEstimate;
|
|
255
276
|
|
|
256
277
|
// A manual bitrate switch might need an immediate feedback.
|
|
@@ -259,14 +280,17 @@ export default function AdaptationStream<T>({
|
|
|
259
280
|
fromEstimate.manual &&
|
|
260
281
|
!isFirstEstimate)
|
|
261
282
|
{
|
|
262
|
-
return reloadAfterSwitch(period,
|
|
283
|
+
return reloadAfterSwitch(period,
|
|
284
|
+
adaptation.type,
|
|
285
|
+
playbackObserver,
|
|
286
|
+
DELTA_POSITION_AFTER_RELOAD.bitrateSwitch);
|
|
263
287
|
}
|
|
264
288
|
|
|
265
289
|
/**
|
|
266
290
|
* Emit when the current RepresentationStream should be terminated to make
|
|
267
291
|
* place for a new one (e.g. when switching quality).
|
|
268
292
|
*/
|
|
269
|
-
const terminateCurrentStream$ = lastEstimate
|
|
293
|
+
const terminateCurrentStream$ = lastEstimate.asObservable().pipe(
|
|
270
294
|
filter((newEstimate) => newEstimate === null ||
|
|
271
295
|
newEstimate.representation.id !== representation.id ||
|
|
272
296
|
(newEstimate.manual && !fromEstimate.manual)),
|
|
@@ -298,7 +322,7 @@ export default function AdaptationStream<T>({
|
|
|
298
322
|
*/
|
|
299
323
|
const fastSwitchThreshold$ = !options.enableFastSwitching ?
|
|
300
324
|
observableOf(0) : // Do not fast-switch anything
|
|
301
|
-
lastEstimate
|
|
325
|
+
lastEstimate.asObservable().pipe(
|
|
302
326
|
map((estimate) => estimate === null ? undefined :
|
|
303
327
|
estimate.knownStableBitrate),
|
|
304
328
|
distinctUntilChanged());
|
|
@@ -316,16 +340,16 @@ export default function AdaptationStream<T>({
|
|
|
316
340
|
if (evt.type === "representationChange" ||
|
|
317
341
|
evt.type === "added-segment")
|
|
318
342
|
{
|
|
319
|
-
return
|
|
343
|
+
return abrFeedbacks$.next(evt);
|
|
320
344
|
}
|
|
321
345
|
}),
|
|
322
346
|
mergeMap((evt) => {
|
|
323
347
|
if (evt.type === "stream-terminating") {
|
|
324
|
-
const
|
|
325
|
-
if (
|
|
348
|
+
const estimate = lastEstimate.getValue();
|
|
349
|
+
if (estimate === null) {
|
|
326
350
|
return EMPTY;
|
|
327
351
|
}
|
|
328
|
-
return recursivelyCreateRepresentationStreams(
|
|
352
|
+
return recursivelyCreateRepresentationStreams(estimate, false);
|
|
329
353
|
}
|
|
330
354
|
return observableOf(evt);
|
|
331
355
|
}));
|
|
@@ -341,19 +365,22 @@ export default function AdaptationStream<T>({
|
|
|
341
365
|
representation : Representation,
|
|
342
366
|
terminateCurrentStream$ : Observable<ITerminationOrder>,
|
|
343
367
|
fastSwitchThreshold$ : Observable<number | undefined>
|
|
344
|
-
) : Observable<IRepresentationStreamEvent
|
|
368
|
+
) : Observable<IRepresentationStreamEvent> {
|
|
345
369
|
return observableDefer(() => {
|
|
346
370
|
const oldBufferGoalRatio = bufferGoalRatioMap[representation.id];
|
|
347
371
|
const bufferGoalRatio = oldBufferGoalRatio != null ? oldBufferGoalRatio :
|
|
348
372
|
1;
|
|
349
373
|
bufferGoalRatioMap[representation.id] = bufferGoalRatio;
|
|
350
374
|
|
|
351
|
-
const bufferGoal$ = wantedBufferAhead
|
|
375
|
+
const bufferGoal$ = wantedBufferAhead.asObservable().pipe(
|
|
352
376
|
map((wba) => wba * bufferGoalRatio)
|
|
353
377
|
);
|
|
354
378
|
|
|
355
|
-
log.info("Stream: changing representation",
|
|
356
|
-
|
|
379
|
+
log.info("Stream: changing representation",
|
|
380
|
+
adaptation.type,
|
|
381
|
+
representation.id,
|
|
382
|
+
representation.bitrate);
|
|
383
|
+
return RepresentationStream({ playbackObserver,
|
|
357
384
|
content: { representation,
|
|
358
385
|
adaptation,
|
|
359
386
|
period,
|
|
@@ -370,11 +397,9 @@ export default function AdaptationStream<T>({
|
|
|
370
397
|
defaultReason: "Unknown `RepresentationStream` error",
|
|
371
398
|
});
|
|
372
399
|
if (formattedError.code === "BUFFER_FULL_ERROR") {
|
|
373
|
-
const
|
|
400
|
+
const wba = wantedBufferAhead.getValue();
|
|
374
401
|
const lastBufferGoalRatio = bufferGoalRatio;
|
|
375
|
-
if (lastBufferGoalRatio <= 0.25 ||
|
|
376
|
-
wantedBufferAhead * lastBufferGoalRatio <= 2)
|
|
377
|
-
{
|
|
402
|
+
if (lastBufferGoalRatio <= 0.25 || wba * lastBufferGoalRatio <= 2) {
|
|
378
403
|
throw formattedError;
|
|
379
404
|
}
|
|
380
405
|
bufferGoalRatioMap[representation.id] = lastBufferGoalRatio - 0.25;
|