rx-player 4.0.0-dev.2023092900 → 4.0.0-dev.2023102700
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +221 -12
- package/FILES.md +0 -4
- package/MAINTAINERS.md +1 -0
- package/README.md +0 -21
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/add_class_name.js +6 -3
- package/dist/_esm5.processed/compat/add_text_track.js +11 -8
- package/dist/_esm5.processed/compat/browser_compatibility_types.js +13 -9
- package/dist/_esm5.processed/compat/browser_detection.js +49 -34
- package/dist/_esm5.processed/compat/browser_version.js +11 -8
- package/dist/_esm5.processed/compat/can_patch_isobmff.js +6 -3
- package/dist/_esm5.processed/compat/can_rely_on_video_visibility_and_size.js +9 -6
- package/dist/_esm5.processed/compat/can_reuse_media_keys.js +6 -3
- package/dist/_esm5.processed/compat/change_source_buffer_type.js +6 -3
- package/dist/_esm5.processed/compat/clear_element_src.js +12 -9
- package/dist/_esm5.processed/compat/eme/close_session.js +45 -106
- package/dist/_esm5.processed/compat/eme/constants.js +6 -3
- package/dist/_esm5.processed/compat/eme/custom_key_system_access.js +18 -22
- package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +78 -102
- package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +16 -6
- package/dist/_esm5.processed/compat/eme/custom_media_keys/moz_media_keys_constructor.js +18 -15
- package/dist/_esm5.processed/compat/eme/custom_media_keys/ms_media_keys_constructor.js +7 -5
- package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +70 -88
- package/dist/_esm5.processed/compat/eme/custom_media_keys/types.js +2 -1
- package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +91 -117
- package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys_constructor.js +7 -7
- package/dist/_esm5.processed/compat/eme/eme-api-implementation.js +82 -83
- package/dist/_esm5.processed/compat/eme/generate_key_request.js +36 -31
- package/dist/_esm5.processed/compat/eme/get_init_data.js +28 -25
- package/dist/_esm5.processed/compat/eme/get_uuid_kid_from_keystatus_kid.js +8 -5
- package/dist/_esm5.processed/compat/eme/get_webkit_fairplay_initdata.js +17 -14
- package/dist/_esm5.processed/compat/eme/index.js +13 -7
- package/dist/_esm5.processed/compat/eme/load_session.js +26 -69
- package/dist/_esm5.processed/compat/enable_audio_track.js +7 -4
- package/dist/_esm5.processed/compat/event_listeners.js +130 -102
- package/dist/_esm5.processed/compat/get_start_date.js +7 -4
- package/dist/_esm5.processed/compat/global_scope.js +7 -5
- package/dist/_esm5.processed/compat/has_issues_with_high_media_source_duration.js +6 -3
- package/dist/_esm5.processed/compat/index.js +47 -24
- package/dist/_esm5.processed/compat/is_codec_supported.js +8 -5
- package/dist/_esm5.processed/compat/is_debug_mode_enabled.js +4 -1
- package/dist/_esm5.processed/compat/is_node.js +5 -3
- package/dist/_esm5.processed/compat/is_seeking_approximate.js +5 -3
- package/dist/_esm5.processed/compat/is_vtt_cue.js +6 -3
- package/dist/_esm5.processed/compat/is_worker.js +3 -1
- package/dist/_esm5.processed/compat/make_vtt_cue.js +10 -7
- package/dist/_esm5.processed/compat/on_height_width_change.js +25 -22
- package/dist/_esm5.processed/compat/patch_webkit_source_buffer.js +19 -17
- package/dist/_esm5.processed/compat/remove_cue.js +12 -9
- package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +7 -4
- package/dist/_esm5.processed/compat/should_reload_media_source_on_decipherability_update.js +4 -1
- package/dist/_esm5.processed/compat/should_renew_media_key_system_access.js +6 -3
- package/dist/_esm5.processed/compat/should_unset_media_keys.js +6 -3
- package/dist/_esm5.processed/compat/should_validate_metadata.js +6 -3
- package/dist/_esm5.processed/compat/should_wait_for_data_before_loaded.js +6 -3
- package/dist/_esm5.processed/compat/should_wait_for_have_enough_data.js +6 -3
- package/dist/_esm5.processed/config.js +15 -14
- package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +123 -94
- package/dist/_esm5.processed/core/adaptive/buffer_based_chooser.js +43 -42
- package/dist/_esm5.processed/core/adaptive/guess_based_chooser.js +37 -44
- package/dist/_esm5.processed/core/adaptive/index.js +4 -2
- package/dist/_esm5.processed/core/adaptive/network_analyzer.js +75 -74
- package/dist/_esm5.processed/core/adaptive/utils/bandwidth_estimator.js +24 -23
- package/dist/_esm5.processed/core/adaptive/utils/ewma.js +13 -12
- package/dist/_esm5.processed/core/adaptive/utils/filter_by_bitrate.js +9 -6
- package/dist/_esm5.processed/core/adaptive/utils/filter_by_resolution.js +18 -19
- package/dist/_esm5.processed/core/adaptive/utils/get_buffer_levels.js +10 -7
- package/dist/_esm5.processed/core/adaptive/utils/last_estimate_storage.js +8 -7
- package/dist/_esm5.processed/core/adaptive/utils/pending_requests_store.js +26 -23
- package/dist/_esm5.processed/core/adaptive/utils/representation_score_calculator.js +25 -23
- package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.js +6 -3
- package/dist/_esm5.processed/core/api/debug/buffer_graph.js +41 -40
- package/dist/_esm5.processed/core/api/debug/buffer_size_graph.js +31 -30
- package/dist/_esm5.processed/core/api/debug/constants.js +4 -1
- package/dist/_esm5.processed/core/api/debug/index.js +4 -2
- package/dist/_esm5.processed/core/api/debug/modules/general_info.js +64 -72
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +49 -46
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +15 -12
- package/dist/_esm5.processed/core/api/debug/render.js +16 -13
- package/dist/_esm5.processed/core/api/debug/utils.js +18 -13
- package/dist/_esm5.processed/core/api/index.js +7 -4
- package/dist/_esm5.processed/core/api/option_utils.js +85 -58
- package/dist/_esm5.processed/core/api/playback_observer.js +135 -124
- package/dist/_esm5.processed/core/api/public_api.js +610 -684
- package/dist/_esm5.processed/core/api/track_management/index.js +19 -3
- package/dist/_esm5.processed/core/api/track_management/media_element_tracks_store.js +233 -247
- package/dist/_esm5.processed/core/api/track_management/track_dispatcher.js +45 -58
- package/dist/_esm5.processed/core/api/track_management/tracks_store.js +300 -324
- package/dist/_esm5.processed/core/api/utils.js +32 -24
- package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.js +155 -185
- package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +42 -81
- package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +15 -12
- package/dist/_esm5.processed/core/decrypt/content_decryptor.js +392 -510
- package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +44 -90
- package/dist/_esm5.processed/core/decrypt/create_session.js +90 -149
- package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +24 -67
- package/dist/_esm5.processed/core/decrypt/find_key_system.js +94 -155
- package/dist/_esm5.processed/core/decrypt/get_key_system_configuration.js +6 -3
- package/dist/_esm5.processed/core/decrypt/get_media_keys.js +59 -109
- package/dist/_esm5.processed/core/decrypt/index.js +26 -7
- package/dist/_esm5.processed/core/decrypt/init_media_keys.js +17 -59
- package/dist/_esm5.processed/core/decrypt/session_events_listener.js +84 -155
- package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +50 -103
- package/dist/_esm5.processed/core/decrypt/types.js +5 -2
- package/dist/_esm5.processed/core/decrypt/utils/are_init_values_compatible.js +22 -19
- package/dist/_esm5.processed/core/decrypt/utils/check_key_statuses.js +40 -61
- package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +17 -61
- package/dist/_esm5.processed/core/decrypt/utils/clean_old_stored_persistent_info.js +8 -5
- package/dist/_esm5.processed/core/decrypt/utils/get_drm_system_id.js +8 -5
- package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +23 -23
- package/dist/_esm5.processed/core/decrypt/utils/is_session_usable.js +15 -12
- package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +14 -21
- package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +26 -27
- package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +206 -310
- package/dist/_esm5.processed/core/decrypt/utils/media_keys_infos_store.js +8 -6
- package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.js +103 -102
- package/dist/_esm5.processed/core/decrypt/utils/serializable_bytes.js +13 -12
- package/dist/_esm5.processed/core/decrypt/utils/server_certificate_store.js +18 -16
- package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.js +37 -56
- package/dist/_esm5.processed/core/fetchers/index.js +7 -3
- package/dist/_esm5.processed/core/fetchers/manifest/index.js +4 -2
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +233 -313
- package/dist/_esm5.processed/core/fetchers/segment/index.js +4 -2
- package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.js +12 -9
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +218 -234
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +20 -19
- package/dist/_esm5.processed/core/fetchers/segment/task_prioritizer.js +73 -74
- package/dist/_esm5.processed/core/fetchers/utils/error_selector.js +8 -5
- package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +210 -261
- package/dist/_esm5.processed/core/init/directfile_content_initializer.js +73 -99
- package/dist/_esm5.processed/core/init/index.js +5 -1
- package/dist/_esm5.processed/core/init/media_source_content_initializer.js +256 -320
- package/dist/_esm5.processed/core/init/types.js +7 -24
- package/dist/_esm5.processed/core/init/utils/content_time_boundaries_observer.js +109 -135
- package/dist/_esm5.processed/core/init/utils/create_media_source.js +35 -30
- package/dist/_esm5.processed/core/init/utils/create_stream_playback_observer.js +12 -10
- package/dist/_esm5.processed/core/init/utils/end_of_stream.js +30 -26
- package/dist/_esm5.processed/core/init/utils/get_initial_time.js +41 -38
- package/dist/_esm5.processed/core/init/utils/get_loaded_reference.js +13 -10
- package/dist/_esm5.processed/core/init/utils/initial_seek_and_play.js +29 -26
- package/dist/_esm5.processed/core/init/utils/initialize_content_decryption.js +30 -27
- package/dist/_esm5.processed/core/init/utils/media_source_duration_updater.js +58 -60
- package/dist/_esm5.processed/core/init/utils/rebuffering_controller.js +140 -161
- package/dist/_esm5.processed/core/init/utils/stream_events_emitter/are_same_stream_events.js +3 -1
- package/dist/_esm5.processed/core/init/utils/stream_events_emitter/index.js +4 -2
- package/dist/_esm5.processed/core/init/utils/stream_events_emitter/refresh_scheduled_events_list.js +28 -30
- package/dist/_esm5.processed/core/init/utils/stream_events_emitter/stream_events_emitter.js +71 -90
- package/dist/_esm5.processed/core/init/utils/stream_events_emitter/types.js +2 -1
- package/dist/_esm5.processed/core/init/utils/throw_on_media_error.js +16 -13
- package/dist/_esm5.processed/core/segment_buffers/garbage_collector.js +75 -126
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +130 -147
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/index.js +4 -2
- package/dist/_esm5.processed/core/segment_buffers/implementations/index.js +20 -3
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +106 -125
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/index.js +4 -2
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/parsers.js +11 -8
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +48 -47
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/types.js +2 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/update_proportional_elements.js +18 -15
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/utils.js +22 -15
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/index.js +4 -2
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +65 -82
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/parsers.js +11 -8
- package/dist/_esm5.processed/core/segment_buffers/implementations/types.js +19 -17
- package/dist/_esm5.processed/core/segment_buffers/implementations/utils/manual_time_ranges.js +23 -22
- package/dist/_esm5.processed/core/segment_buffers/index.js +13 -6
- package/dist/_esm5.processed/core/segment_buffers/inventory/buffered_history.js +24 -22
- package/dist/_esm5.processed/core/segment_buffers/inventory/index.js +8 -3
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +151 -150
- package/dist/_esm5.processed/core/segment_buffers/inventory/types.js +2 -1
- package/dist/_esm5.processed/core/segment_buffers/inventory/utils.js +9 -4
- package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +82 -89
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +118 -166
- package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.js +31 -28
- package/dist/_esm5.processed/core/stream/adaptation/index.js +19 -3
- package/dist/_esm5.processed/core/stream/adaptation/types.js +2 -1
- package/dist/_esm5.processed/core/stream/index.js +4 -2
- package/dist/_esm5.processed/core/stream/orchestrator/get_time_ranges_for_content.js +14 -16
- package/dist/_esm5.processed/core/stream/orchestrator/index.js +4 -2
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +175 -222
- package/dist/_esm5.processed/core/stream/period/index.js +19 -3
- package/dist/_esm5.processed/core/stream/period/period_stream.js +172 -216
- package/dist/_esm5.processed/core/stream/period/types.js +2 -1
- package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.js +34 -33
- package/dist/_esm5.processed/core/stream/representation/index.js +19 -3
- package/dist/_esm5.processed/core/stream/representation/representation_stream.js +80 -68
- package/dist/_esm5.processed/core/stream/representation/types.js +2 -1
- package/dist/_esm5.processed/core/stream/representation/utils/append_segment_to_buffer.js +33 -84
- package/dist/_esm5.processed/core/stream/representation/utils/check_for_discontinuity.js +32 -29
- package/dist/_esm5.processed/core/stream/representation/utils/downloading_queue.js +126 -145
- package/dist/_esm5.processed/core/stream/representation/utils/force_garbage_collection.js +32 -88
- package/dist/_esm5.processed/core/stream/representation/utils/get_buffer_status.js +61 -48
- package/dist/_esm5.processed/core/stream/representation/utils/get_needed_segments.js +71 -69
- package/dist/_esm5.processed/core/stream/representation/utils/get_segment_priority.js +8 -5
- package/dist/_esm5.processed/core/stream/representation/utils/push_init_segment.js +22 -63
- package/dist/_esm5.processed/core/stream/representation/utils/push_media_segment.js +49 -86
- package/dist/_esm5.processed/default_config.js +4 -2
- package/dist/_esm5.processed/errors/assertion_error.js +10 -26
- package/dist/_esm5.processed/errors/custom_loader_error.js +12 -28
- package/dist/_esm5.processed/errors/encrypted_media_error.js +16 -32
- package/dist/_esm5.processed/errors/error_codes.js +9 -4
- package/dist/_esm5.processed/errors/error_message.js +5 -2
- package/dist/_esm5.processed/errors/format_error.js +9 -7
- package/dist/_esm5.processed/errors/index.js +25 -11
- package/dist/_esm5.processed/errors/is_known_error.js +14 -11
- package/dist/_esm5.processed/errors/media_error.js +17 -33
- package/dist/_esm5.processed/errors/network_error.js +21 -37
- package/dist/_esm5.processed/errors/other_error.js +15 -31
- package/dist/_esm5.processed/errors/request_error.js +17 -33
- package/dist/_esm5.processed/experimental/features/dash_wasm.js +14 -11
- package/dist/_esm5.processed/experimental/features/debug_element.js +7 -4
- package/dist/_esm5.processed/experimental/features/index.d.ts +1 -0
- package/dist/_esm5.processed/experimental/features/index.js +11 -3
- package/dist/_esm5.processed/experimental/features/local.js +9 -6
- package/dist/_esm5.processed/experimental/features/metaplaylist.js +9 -6
- package/dist/_esm5.processed/experimental/index.js +5 -2
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/features/dash.js +6 -3
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/features/metaplaylist.js +6 -3
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/index.js +7 -3
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_and_push_segment.js +22 -16
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +22 -19
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/remove_buffer_around_time.js +6 -3
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/types.js +2 -1
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +125 -186
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader_error.js +11 -27
- package/dist/_esm5.processed/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +76 -119
- package/dist/_esm5.processed/experimental/tools/createMetaplaylist/index.js +24 -15
- package/dist/_esm5.processed/experimental/tools/index.js +11 -5
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/index.js +38 -43
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +31 -34
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/capabilities.js +21 -18
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/index.js +4 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/log.js +5 -3
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +20 -17
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +21 -18
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.js +13 -10
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/defaultCodecsFinder.js +16 -13
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/index.js +16 -14
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.js +14 -11
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/format.js +14 -11
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.js +19 -16
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +11 -8
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.js +5 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/utils.js +25 -22
- package/dist/_esm5.processed/experimental/tools/parseBIFThumbnails.js +7 -4
- package/dist/_esm5.processed/features/add_features.js +11 -8
- package/dist/_esm5.processed/features/features_object.js +4 -2
- package/dist/_esm5.processed/features/index.js +7 -4
- package/dist/_esm5.processed/features/list/dash.js +11 -8
- package/dist/_esm5.processed/features/list/directfile.js +9 -5
- package/dist/_esm5.processed/features/list/eme.js +7 -4
- package/dist/_esm5.processed/features/list/html_sami_parser.js +9 -6
- package/dist/_esm5.processed/features/list/html_srt_parser.js +9 -6
- package/dist/_esm5.processed/features/list/html_text_buffer.js +7 -4
- package/dist/_esm5.processed/features/list/html_ttml_parser.js +9 -6
- package/dist/_esm5.processed/features/list/html_vtt_parser.js +9 -6
- package/dist/_esm5.processed/features/list/index.js +31 -14
- package/dist/_esm5.processed/features/list/native_sami_parser.js +9 -6
- package/dist/_esm5.processed/features/list/native_srt_parser.js +9 -6
- package/dist/_esm5.processed/features/list/native_text_buffer.js +7 -4
- package/dist/_esm5.processed/features/list/native_ttml_parser.js +9 -6
- package/dist/_esm5.processed/features/list/native_vtt_parser.js +9 -6
- package/dist/_esm5.processed/features/list/smooth.js +9 -6
- package/dist/_esm5.processed/features/types.js +2 -1
- package/dist/_esm5.processed/index.js +24 -9
- package/dist/_esm5.processed/log.js +5 -3
- package/dist/_esm5.processed/manifest/adaptation.js +52 -55
- package/dist/_esm5.processed/manifest/index.js +32 -13
- package/dist/_esm5.processed/manifest/manifest.js +112 -134
- package/dist/_esm5.processed/manifest/period.js +38 -42
- package/dist/_esm5.processed/manifest/representation.js +78 -61
- package/dist/_esm5.processed/manifest/representation_index/index.js +5 -2
- package/dist/_esm5.processed/manifest/representation_index/static.js +43 -42
- package/dist/_esm5.processed/manifest/representation_index/types.js +2 -1
- package/dist/_esm5.processed/manifest/types.js +5 -2
- package/dist/_esm5.processed/manifest/update_period_in_place.js +38 -48
- package/dist/_esm5.processed/manifest/update_periods.js +59 -69
- package/dist/_esm5.processed/manifest/utils.js +14 -9
- package/dist/_esm5.processed/minimal.js +9 -7
- package/dist/_esm5.processed/parsers/containers/isobmff/constants.js +4 -1
- package/dist/_esm5.processed/parsers/containers/isobmff/create_box.js +14 -10
- package/dist/_esm5.processed/parsers/containers/isobmff/drm/index.js +5 -1
- package/dist/_esm5.processed/parsers/containers/isobmff/drm/playready.js +15 -11
- package/dist/_esm5.processed/parsers/containers/isobmff/get_box.js +48 -40
- package/dist/_esm5.processed/parsers/containers/isobmff/index.js +27 -6
- package/dist/_esm5.processed/parsers/containers/isobmff/read.js +20 -14
- package/dist/_esm5.processed/parsers/containers/isobmff/take_pssh_out.js +25 -20
- package/dist/_esm5.processed/parsers/containers/isobmff/utils.js +130 -112
- package/dist/_esm5.processed/parsers/containers/matroska/index.js +6 -1
- package/dist/_esm5.processed/parsers/containers/matroska/utils.js +67 -63
- package/dist/_esm5.processed/parsers/images/bif.js +40 -29
- package/dist/_esm5.processed/parsers/manifest/dash/common/attach_trickmode_track.js +10 -12
- package/dist/_esm5.processed/parsers/manifest/dash/common/flatten_overlapping_periods.js +10 -7
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_clock_offset.js +8 -5
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.js +10 -6
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_http_utc-timing_url.js +7 -6
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_minimum_and_maximum_positions.js +10 -6
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.js +14 -9
- package/dist/_esm5.processed/parsers/manifest/dash/common/index.js +10 -4
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +73 -67
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.js +9 -4
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +32 -25
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/index.js +11 -5
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +81 -70
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +130 -123
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +15 -12
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_previous_timeline.js +35 -32
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.js +14 -9
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/find_first_common_start_time.js +30 -22
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/index.js +4 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/parse_s_element.js +14 -11
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +131 -129
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.js +16 -10
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/utils.js +7 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.js +19 -18
- package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.js +18 -17
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +111 -111
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_availability_start_time.js +4 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +86 -85
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +97 -82
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +39 -37
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +61 -69
- package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.js +12 -9
- package/dist/_esm5.processed/parsers/manifest/dash/index.js +8 -1
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/index.js +4 -2
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +66 -62
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/BaseURL.js +7 -4
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/ContentComponent.js +7 -4
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/ContentProtection.js +22 -19
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/EventStream.js +22 -19
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Initialization.js +11 -8
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/MPD.js +38 -34
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Period.js +34 -30
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +44 -40
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentBase.js +24 -21
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentList.js +15 -12
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.js +21 -18
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentTimeline.js +6 -3
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentURL.js +12 -9
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +60 -64
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.js +33 -27
- package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.js +2 -1
- package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.js +2 -1
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/index.js +4 -2
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +192 -238
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +67 -62
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.js +8 -4
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/ContentComponent.js +11 -7
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/ContentProtection.js +17 -13
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.js +29 -24
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/MPD.js +38 -33
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Period.js +37 -32
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +43 -38
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Scheme.js +9 -5
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentBase.js +16 -12
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.js +11 -7
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentTemplate.js +20 -16
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentUrl.js +11 -7
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/XLink.js +11 -7
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/index.js +5 -1
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/root.js +10 -6
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/parsers_stack.js +22 -20
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/types.js +2 -1
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/utils.js +6 -2
- package/dist/_esm5.processed/parsers/manifest/index.js +17 -1
- package/dist/_esm5.processed/parsers/manifest/local/index.js +4 -2
- package/dist/_esm5.processed/parsers/manifest/local/parse_local_manifest.js +30 -27
- package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +71 -84
- package/dist/_esm5.processed/parsers/manifest/local/types.js +2 -1
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/index.js +4 -2
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.js +75 -72
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.js +52 -52
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +200 -176
- package/dist/_esm5.processed/parsers/manifest/smooth/get_codecs.js +13 -8
- package/dist/_esm5.processed/parsers/manifest/smooth/index.js +7 -4
- package/dist/_esm5.processed/parsers/manifest/smooth/parse_C_nodes.js +17 -14
- package/dist/_esm5.processed/parsers/manifest/smooth/parse_protection_node.js +17 -15
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +102 -98
- package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.js +49 -48
- package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.js +10 -7
- package/dist/_esm5.processed/parsers/manifest/smooth/utils/parseBoolean.js +4 -1
- package/dist/_esm5.processed/parsers/manifest/smooth/utils/reduceChildren.js +6 -3
- package/dist/_esm5.processed/parsers/manifest/smooth/utils/tokens.js +5 -1
- package/dist/_esm5.processed/parsers/manifest/types.js +2 -1
- package/dist/_esm5.processed/parsers/manifest/utils/check_manifest_ids.js +27 -24
- package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +10 -7
- package/dist/_esm5.processed/parsers/manifest/utils/get_first_time_from_adaptation.js +8 -5
- package/dist/_esm5.processed/parsers/manifest/utils/get_last_time_from_adaptation.js +8 -5
- package/dist/_esm5.processed/parsers/manifest/utils/get_maximum_positions.js +15 -12
- package/dist/_esm5.processed/parsers/manifest/utils/get_minimum_position.js +15 -12
- package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.js +31 -22
- package/dist/_esm5.processed/parsers/manifest/utils/is_segment_still_available.js +9 -6
- package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +38 -45
- package/dist/_esm5.processed/parsers/texttracks/index.js +2 -1
- package/dist/_esm5.processed/parsers/texttracks/sami/html.js +45 -43
- package/dist/_esm5.processed/parsers/texttracks/sami/native.js +41 -39
- package/dist/_esm5.processed/parsers/texttracks/srt/find_end_of_cue_block.js +7 -4
- package/dist/_esm5.processed/parsers/texttracks/srt/get_cue_blocks.js +11 -8
- package/dist/_esm5.processed/parsers/texttracks/srt/html.js +32 -29
- package/dist/_esm5.processed/parsers/texttracks/srt/native.js +16 -13
- package/dist/_esm5.processed/parsers/texttracks/srt/parse_cue.js +21 -18
- package/dist/_esm5.processed/parsers/texttracks/srt/parse_timestamp.js +10 -7
- package/dist/_esm5.processed/parsers/texttracks/ttml/get_parameters.js +37 -30
- package/dist/_esm5.processed/parsers/texttracks/ttml/get_styling.js +48 -48
- package/dist/_esm5.processed/parsers/texttracks/ttml/get_time_delimiters.js +14 -11
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_default_ttml_paragraph_style.js +7 -2
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_extent.js +15 -12
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_font_size.js +15 -12
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_line_height.js +11 -8
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_origin.js +15 -12
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_padding.js +25 -22
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/create_element.js +117 -124
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/generate_css_test_outline.js +11 -8
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/index.js +4 -2
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/parse_cue.js +12 -8
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/parse_ttml_to_div.js +14 -11
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/ttml_color_to_css_color.js +10 -7
- package/dist/_esm5.processed/parsers/texttracks/ttml/native/index.js +4 -2
- package/dist/_esm5.processed/parsers/texttracks/ttml/native/parse_cue.js +38 -35
- package/dist/_esm5.processed/parsers/texttracks/ttml/native/parse_ttml_to_vtt.js +11 -8
- package/dist/_esm5.processed/parsers/texttracks/ttml/parse_ttml.js +58 -58
- package/dist/_esm5.processed/parsers/texttracks/ttml/regexps.js +27 -13
- package/dist/_esm5.processed/parsers/texttracks/ttml/resolve_styles_inheritance.js +18 -18
- package/dist/_esm5.processed/parsers/texttracks/ttml/time_parsing.js +28 -26
- package/dist/_esm5.processed/parsers/texttracks/ttml/xml_utils.js +37 -25
- package/dist/_esm5.processed/parsers/texttracks/types.js +2 -1
- package/dist/_esm5.processed/parsers/texttracks/webvtt/get_cue_blocks.js +12 -9
- package/dist/_esm5.processed/parsers/texttracks/webvtt/get_style_blocks.js +14 -11
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/convert_payload_to_html.js +11 -8
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_default_style_elements.js +8 -5
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_style_attribute.js +60 -60
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_styled_element.js +30 -27
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/index.js +4 -2
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/parse_style_block.js +23 -26
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/parse_webvtt_to_div.js +20 -17
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.js +23 -18
- package/dist/_esm5.processed/parsers/texttracks/webvtt/native/index.js +4 -2
- package/dist/_esm5.processed/parsers/texttracks/webvtt/native/parse_vtt_to_cues.js +19 -16
- package/dist/_esm5.processed/parsers/texttracks/webvtt/native/set_settings_on_cue.js +20 -17
- package/dist/_esm5.processed/parsers/texttracks/webvtt/native/to_native_cue.js +8 -5
- package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.js +26 -18
- package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_timestamp.js +10 -7
- package/dist/_esm5.processed/parsers/texttracks/webvtt/utils.js +15 -7
- package/dist/_esm5.processed/public_types.js +2 -1
- package/dist/_esm5.processed/tools/TextTrackRenderer/index.js +13 -6
- package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +26 -24
- package/dist/_esm5.processed/tools/index.js +6 -4
- package/dist/_esm5.processed/tools/string_utils.js +10 -1
- package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +16 -24
- package/dist/_esm5.processed/transports/dash/construct_segment_url.js +6 -3
- package/dist/_esm5.processed/transports/dash/extract_complete_chunks.js +17 -14
- package/dist/_esm5.processed/transports/dash/get_events_out_of_emsgs.js +19 -16
- package/dist/_esm5.processed/transports/dash/index.js +4 -2
- package/dist/_esm5.processed/transports/dash/init_segment_loader.js +47 -27
- package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.js +23 -16
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +68 -60
- package/dist/_esm5.processed/transports/dash/pipelines.js +20 -17
- package/dist/_esm5.processed/transports/dash/segment_loader.js +49 -39
- package/dist/_esm5.processed/transports/dash/segment_parser.js +58 -39
- package/dist/_esm5.processed/transports/dash/text_loader.js +36 -30
- package/dist/_esm5.processed/transports/dash/text_parser.js +39 -29
- package/dist/_esm5.processed/transports/index.js +17 -1
- package/dist/_esm5.processed/transports/local/index.js +4 -2
- package/dist/_esm5.processed/transports/local/pipelines.js +26 -23
- package/dist/_esm5.processed/transports/local/segment_loader.js +26 -23
- package/dist/_esm5.processed/transports/local/segment_parser.js +36 -25
- package/dist/_esm5.processed/transports/local/text_parser.js +42 -27
- package/dist/_esm5.processed/transports/metaplaylist/index.js +4 -2
- package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.js +11 -7
- package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +91 -96
- package/dist/_esm5.processed/transports/smooth/extract_timings_infos.js +26 -20
- package/dist/_esm5.processed/transports/smooth/index.js +4 -2
- package/dist/_esm5.processed/transports/smooth/is_mp4_embedded_track.js +4 -1
- package/dist/_esm5.processed/transports/smooth/isobmff/create_audio_init_segment.js +22 -19
- package/dist/_esm5.processed/transports/smooth/isobmff/create_boxes.js +92 -67
- package/dist/_esm5.processed/transports/smooth/isobmff/create_init_segment.js +29 -26
- package/dist/_esm5.processed/transports/smooth/isobmff/create_traf_box.js +9 -6
- package/dist/_esm5.processed/transports/smooth/isobmff/create_video_init_segment.js +23 -20
- package/dist/_esm5.processed/transports/smooth/isobmff/get_aaces_header.js +10 -7
- package/dist/_esm5.processed/transports/smooth/isobmff/index.js +13 -6
- package/dist/_esm5.processed/transports/smooth/isobmff/parse_tfrf.js +19 -16
- package/dist/_esm5.processed/transports/smooth/isobmff/parse_tfxd.js +9 -6
- package/dist/_esm5.processed/transports/smooth/isobmff/patch_segment.js +41 -38
- package/dist/_esm5.processed/transports/smooth/pipelines.js +106 -96
- package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +2 -2
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +149 -153
- package/dist/_esm5.processed/transports/smooth/utils.js +7 -3
- package/dist/_esm5.processed/transports/types.js +2 -1
- package/dist/_esm5.processed/transports/utils/byte_range.js +6 -4
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +23 -18
- package/dist/_esm5.processed/transports/utils/check_isobmff_integrity.js +14 -11
- package/dist/_esm5.processed/transports/utils/find_complete_box.js +11 -8
- package/dist/_esm5.processed/transports/utils/generate_manifest_loader.js +22 -14
- package/dist/_esm5.processed/transports/utils/get_isobmff_timing_infos.js +13 -10
- package/dist/_esm5.processed/transports/utils/infer_segment_container.js +4 -1
- package/dist/_esm5.processed/transports/utils/parse_text_track.js +40 -26
- package/dist/_esm5.processed/utils/are_arrays_of_numbers_equal.js +5 -2
- package/dist/_esm5.processed/utils/are_codecs_compatible.js +11 -9
- package/dist/_esm5.processed/utils/array_find.js +7 -4
- package/dist/_esm5.processed/utils/array_find_index.js +6 -3
- package/dist/_esm5.processed/utils/array_includes.js +12 -11
- package/dist/_esm5.processed/utils/assert.js +13 -9
- package/dist/_esm5.processed/utils/assert_unreachable.js +6 -3
- package/dist/_esm5.processed/utils/base64.js +23 -18
- package/dist/_esm5.processed/utils/byte_parsing.js +30 -17
- package/dist/_esm5.processed/utils/cancellable_sleep.js +8 -5
- package/dist/_esm5.processed/utils/create_cancellable_promise.js +7 -4
- package/dist/_esm5.processed/utils/deep_merge.js +10 -21
- package/dist/_esm5.processed/utils/event_emitter.js +24 -24
- package/dist/_esm5.processed/utils/flat_map.js +7 -4
- package/dist/_esm5.processed/utils/get_fuzzed_delay.js +6 -3
- package/dist/_esm5.processed/utils/hash_buffer.js +7 -4
- package/dist/_esm5.processed/utils/id_generator.js +6 -3
- package/dist/_esm5.processed/utils/initialization_segment_cache.js +11 -12
- package/dist/_esm5.processed/utils/is_non_empty_string.js +4 -1
- package/dist/_esm5.processed/utils/is_null_or_undefined.js +4 -1
- package/dist/_esm5.processed/utils/languages/ISO_639-1_to_ISO_639-3.js +4 -2
- package/dist/_esm5.processed/utils/languages/ISO_639-2_to_ISO_639-3.js +4 -2
- package/dist/_esm5.processed/utils/languages/index.js +7 -3
- package/dist/_esm5.processed/utils/languages/normalize.js +26 -20
- package/dist/_esm5.processed/utils/logger.js +24 -23
- package/dist/_esm5.processed/utils/monotonic_timestamp.js +4 -1
- package/dist/_esm5.processed/utils/noop.js +4 -1
- package/dist/_esm5.processed/utils/object_assign.js +8 -10
- package/dist/_esm5.processed/utils/object_values.js +6 -3
- package/dist/_esm5.processed/utils/ranges.js +94 -71
- package/dist/_esm5.processed/utils/reference.js +48 -52
- package/dist/_esm5.processed/utils/request/fetch.js +79 -109
- package/dist/_esm5.processed/utils/request/index.js +9 -4
- package/dist/_esm5.processed/utils/request/xhr.js +49 -37
- package/dist/_esm5.processed/utils/resolve_url.js +18 -18
- package/dist/_esm5.processed/utils/retry_promise_with_backoff.js +34 -81
- package/dist/_esm5.processed/utils/sleep.js +5 -2
- package/dist/_esm5.processed/utils/slice_uint8array.js +3 -1
- package/dist/_esm5.processed/utils/sorted_list.js +37 -40
- package/dist/_esm5.processed/utils/starts_with.js +5 -2
- package/dist/_esm5.processed/utils/string_parsing.js +84 -73
- package/dist/_esm5.processed/utils/take_first_set.js +9 -10
- package/dist/_esm5.processed/utils/task_canceller.js +51 -71
- package/dist/_esm5.processed/utils/warn_once.js +7 -4
- package/dist/_esm5.processed/utils/weak_map_memory.js +12 -11
- package/dist/_esm5.processed/utils/wrapInPromise.js +5 -2
- package/dist/mpd-parser.wasm +0 -0
- package/dist/rx-player.js +43758 -45493
- package/dist/rx-player.min.js +1 -1
- package/jest.config.js +1 -22
- package/package.json +22 -23
- package/scripts/build/constants.d.ts +1 -23
- package/scripts/build/generate_build.js +1 -1
- package/scripts/check_nodejs_import_compatibility.js +1 -1
- package/scripts/update-version +1 -4
- package/sonar-project.properties +1 -1
- package/src/compat/event_listeners.ts +8 -8
- package/src/compat/global_scope.ts +2 -0
- package/src/core/adaptive/__tests__/buffer_based_chooser.test.ts +3 -3
- package/src/core/adaptive/adaptive_representation_selector.ts +27 -9
- package/src/core/adaptive/buffer_based_chooser.ts +1 -1
- package/src/core/adaptive/network_analyzer.ts +5 -4
- package/src/core/api/public_api.ts +2 -2
- package/src/core/api/track_management/track_dispatcher.ts +2 -1
- package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +1 -1
- package/src/core/fetchers/cdn_prioritizer.ts +1 -1
- package/src/experimental/features/__tests__/index.test.ts +19 -0
- package/src/experimental/features/index.ts +1 -0
- package/src/features/list/__tests__/index.test.ts +49 -0
- package/src/index.ts +28 -3
- package/src/transports/smooth/segment_loader.ts +4 -4
- package/src/typings/globals.d.ts +0 -42
- package/src/utils/request/fetch.ts +1 -1
- package/src/utils/request/xhr.ts +1 -1
- package/tsconfig.json +1 -1
- package/tsconfig.modules.json +3 -3
- package/dist/_esm5.processed/features/initialize_features.d.ts +0 -19
- package/dist/_esm5.processed/features/initialize_features.js +0 -108
- package/src/features/__tests__/initialize_features.test.ts +0 -657
- package/src/features/initialize_features.ts +0 -129
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Copyright 2015 CANAL+ Group
|
|
3
4
|
*
|
|
@@ -13,11 +14,14 @@
|
|
|
13
14
|
* See the License for the specific language governing permissions and
|
|
14
15
|
* limitations under the License.
|
|
15
16
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.estimateRequestBandwidth = void 0;
|
|
19
|
+
const config_1 = require("../../config");
|
|
20
|
+
const log_1 = require("../../log");
|
|
21
|
+
const array_find_1 = require("../../utils/array_find");
|
|
22
|
+
const is_null_or_undefined_1 = require("../../utils/is_null_or_undefined");
|
|
23
|
+
const monotonic_timestamp_1 = require("../../utils/monotonic_timestamp");
|
|
24
|
+
const ewma_1 = require("./utils/ewma");
|
|
21
25
|
/**
|
|
22
26
|
* Get pending segment request(s) starting with the asked segment position.
|
|
23
27
|
* @param {Object} requests - Every requests pending, in a chronological
|
|
@@ -27,13 +31,13 @@ import EWMA from "./utils/ewma";
|
|
|
27
31
|
*/
|
|
28
32
|
function getConcernedRequests(requests, neededPosition) {
|
|
29
33
|
/** Index of the request for the next needed segment, in `requests`. */
|
|
30
|
-
|
|
31
|
-
for (
|
|
32
|
-
|
|
34
|
+
let nextSegmentIndex = -1;
|
|
35
|
+
for (let i = 0; i < requests.length; i++) {
|
|
36
|
+
const { segment } = requests[i].content;
|
|
33
37
|
if (segment.duration <= 0) {
|
|
34
38
|
continue;
|
|
35
39
|
}
|
|
36
|
-
|
|
40
|
+
const segmentEnd = segment.time + segment.duration;
|
|
37
41
|
if (!segment.complete) {
|
|
38
42
|
if (i === requests.length - 1 && neededPosition - segment.time > -1.2) {
|
|
39
43
|
nextSegmentIndex = i;
|
|
@@ -48,11 +52,11 @@ function getConcernedRequests(requests, neededPosition) {
|
|
|
48
52
|
if (nextSegmentIndex < 0) { // Not found
|
|
49
53
|
return [];
|
|
50
54
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
55
|
+
const nextRequest = requests[nextSegmentIndex];
|
|
56
|
+
const segmentTime = nextRequest.content.segment.time;
|
|
57
|
+
const filteredRequests = [nextRequest];
|
|
54
58
|
// Get the possibly multiple requests for that segment's position
|
|
55
|
-
for (
|
|
59
|
+
for (let i = nextSegmentIndex + 1; i < requests.length; i++) {
|
|
56
60
|
if (requests[i].content.segment.time === segmentTime) {
|
|
57
61
|
filteredRequests.push(requests[i]);
|
|
58
62
|
}
|
|
@@ -69,23 +73,24 @@ function getConcernedRequests(requests, neededPosition) {
|
|
|
69
73
|
* @param {Object} request
|
|
70
74
|
* @returns {number|undefined}
|
|
71
75
|
*/
|
|
72
|
-
|
|
76
|
+
function estimateRequestBandwidth(request) {
|
|
73
77
|
if (request.progress.length < 5) { // threshold from which we can consider
|
|
74
78
|
// progress events reliably
|
|
75
79
|
return undefined;
|
|
76
80
|
}
|
|
77
81
|
// try to infer quickly the current bitrate based on the
|
|
78
82
|
// progress events
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
for (
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
const ewma1 = new ewma_1.default(2);
|
|
84
|
+
const { progress } = request;
|
|
85
|
+
for (let i = 1; i < progress.length; i++) {
|
|
86
|
+
const bytesDownloaded = progress[i].size - progress[i - 1].size;
|
|
87
|
+
const timeElapsed = progress[i].timestamp - progress[i - 1].timestamp;
|
|
88
|
+
const reqBitrate = (bytesDownloaded * 8) / (timeElapsed / 1000);
|
|
85
89
|
ewma1.addSample(timeElapsed / 1000, reqBitrate);
|
|
86
90
|
}
|
|
87
91
|
return ewma1.getEstimate();
|
|
88
92
|
}
|
|
93
|
+
exports.estimateRequestBandwidth = estimateRequestBandwidth;
|
|
89
94
|
/**
|
|
90
95
|
* Estimate remaining time for a pending request from a progress event.
|
|
91
96
|
* @param {Object} lastProgressEvent
|
|
@@ -93,7 +98,7 @@ export function estimateRequestBandwidth(request) {
|
|
|
93
98
|
* @returns {number}
|
|
94
99
|
*/
|
|
95
100
|
function estimateRemainingTime(lastProgressEvent, bandwidthEstimate) {
|
|
96
|
-
|
|
101
|
+
const remainingData = (lastProgressEvent.totalSize - lastProgressEvent.size) * 8;
|
|
97
102
|
return Math.max(remainingData / bandwidthEstimate, 0);
|
|
98
103
|
}
|
|
99
104
|
/**
|
|
@@ -116,34 +121,34 @@ function estimateStarvationModeBitrate(pendingRequests, playbackInfo, currentRep
|
|
|
116
121
|
// TODO Skip only for newer segments?
|
|
117
122
|
return undefined;
|
|
118
123
|
}
|
|
119
|
-
|
|
120
|
-
|
|
124
|
+
const { bufferGap, speed, position } = playbackInfo;
|
|
125
|
+
const realBufferGap = isFinite(bufferGap) ? bufferGap :
|
|
121
126
|
0;
|
|
122
|
-
|
|
123
|
-
|
|
127
|
+
const nextNeededPosition = position.last + realBufferGap;
|
|
128
|
+
const concernedRequests = getConcernedRequests(pendingRequests, nextNeededPosition);
|
|
124
129
|
if (concernedRequests.length !== 1) { // 0 == no request
|
|
125
130
|
// 2+ == too complicated to calculate
|
|
126
131
|
return undefined;
|
|
127
132
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
133
|
+
const concernedRequest = concernedRequests[0];
|
|
134
|
+
const now = (0, monotonic_timestamp_1.default)();
|
|
135
|
+
let minimumRequestTime = concernedRequest.content.segment.duration * 1.5;
|
|
131
136
|
minimumRequestTime = Math.min(minimumRequestTime, 3000);
|
|
132
137
|
minimumRequestTime = Math.max(minimumRequestTime, 12000);
|
|
133
138
|
if (now - concernedRequest.requestTimestamp < minimumRequestTime) {
|
|
134
139
|
return undefined;
|
|
135
140
|
}
|
|
136
|
-
|
|
141
|
+
const lastProgressEvent = concernedRequest.progress.length > 0 ?
|
|
137
142
|
concernedRequest.progress[concernedRequest.progress.length - 1] :
|
|
138
143
|
undefined;
|
|
139
144
|
// first, try to do a quick estimate from progress events
|
|
140
|
-
|
|
145
|
+
const bandwidthEstimate = estimateRequestBandwidth(concernedRequest);
|
|
141
146
|
if (lastProgressEvent !== undefined && bandwidthEstimate !== undefined) {
|
|
142
|
-
|
|
147
|
+
const remainingTime = estimateRemainingTime(lastProgressEvent, bandwidthEstimate);
|
|
143
148
|
// if the remaining time does seem reliable
|
|
144
149
|
if ((now - lastProgressEvent.timestamp) / 1000 <= remainingTime) {
|
|
145
150
|
// Calculate estimated time spent rebuffering if we continue doing that request.
|
|
146
|
-
|
|
151
|
+
const expectedRebufferingTime = remainingTime -
|
|
147
152
|
(realBufferGap / speed);
|
|
148
153
|
if (expectedRebufferingTime > 2500) {
|
|
149
154
|
return bandwidthEstimate;
|
|
@@ -153,16 +158,16 @@ function estimateStarvationModeBitrate(pendingRequests, playbackInfo, currentRep
|
|
|
153
158
|
if (!concernedRequest.content.segment.complete) {
|
|
154
159
|
return undefined;
|
|
155
160
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
161
|
+
const chunkDuration = concernedRequest.content.segment.duration;
|
|
162
|
+
const requestElapsedTime = (now - concernedRequest.requestTimestamp) / 1000;
|
|
163
|
+
const reasonableElapsedTime = requestElapsedTime <=
|
|
159
164
|
((chunkDuration * 1.5 + 2) / speed);
|
|
160
165
|
if (currentRepresentation == null || reasonableElapsedTime) {
|
|
161
166
|
return undefined;
|
|
162
167
|
}
|
|
163
168
|
// calculate a reduced bitrate from the current one
|
|
164
|
-
|
|
165
|
-
|
|
169
|
+
const factor = chunkDuration / requestElapsedTime;
|
|
170
|
+
const reducedBitrate = currentRepresentation.bitrate * Math.min(0.7, factor);
|
|
166
171
|
if (lastEstimatedBitrate === undefined ||
|
|
167
172
|
reducedBitrate < lastEstimatedBitrate) {
|
|
168
173
|
return reducedBitrate;
|
|
@@ -185,31 +190,28 @@ function shouldDirectlySwitchToLowBitrate(playbackInfo, requests, lowLatencyMode
|
|
|
185
190
|
// TODO only when playing close to the live edge?
|
|
186
191
|
return true;
|
|
187
192
|
}
|
|
188
|
-
|
|
193
|
+
const realBufferGap = isFinite(playbackInfo.bufferGap) ? playbackInfo.bufferGap :
|
|
189
194
|
0;
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
return content.segment.duration > 0 &&
|
|
194
|
-
(content.segment.time + content.segment.duration) > nextNeededPosition;
|
|
195
|
-
});
|
|
195
|
+
const nextNeededPosition = playbackInfo.position.last + realBufferGap;
|
|
196
|
+
const nextRequest = (0, array_find_1.default)(requests, ({ content }) => content.segment.duration > 0 &&
|
|
197
|
+
(content.segment.time + content.segment.duration) > nextNeededPosition);
|
|
196
198
|
if (nextRequest === undefined) {
|
|
197
199
|
return true;
|
|
198
200
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
+
const now = (0, monotonic_timestamp_1.default)();
|
|
202
|
+
const lastProgressEvent = nextRequest.progress.length > 0 ?
|
|
201
203
|
nextRequest.progress[nextRequest.progress.length - 1] :
|
|
202
204
|
undefined;
|
|
203
205
|
// first, try to do a quick estimate from progress events
|
|
204
|
-
|
|
206
|
+
const bandwidthEstimate = estimateRequestBandwidth(nextRequest);
|
|
205
207
|
if (lastProgressEvent === undefined || bandwidthEstimate === undefined) {
|
|
206
208
|
return true;
|
|
207
209
|
}
|
|
208
|
-
|
|
210
|
+
const remainingTime = estimateRemainingTime(lastProgressEvent, bandwidthEstimate);
|
|
209
211
|
if ((now - lastProgressEvent.timestamp) / 1000 > (remainingTime * 1.2)) {
|
|
210
212
|
return true;
|
|
211
213
|
}
|
|
212
|
-
|
|
214
|
+
const expectedRebufferingTime = remainingTime -
|
|
213
215
|
(realBufferGap / playbackInfo.speed);
|
|
214
216
|
return expectedRebufferingTime > -1.5;
|
|
215
217
|
}
|
|
@@ -218,9 +220,9 @@ function shouldDirectlySwitchToLowBitrate(playbackInfo, requests, lowLatencyMode
|
|
|
218
220
|
* as a maximum bitrate a Representation should be.
|
|
219
221
|
* @class NetworkAnalyzer
|
|
220
222
|
*/
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
223
|
+
class NetworkAnalyzer {
|
|
224
|
+
constructor(initialBitrate, lowLatencyMode) {
|
|
225
|
+
const { ABR_STARVATION_GAP, OUT_OF_STARVATION_GAP, ABR_STARVATION_FACTOR, ABR_REGULAR_FACTOR } = config_1.default.getCurrent();
|
|
224
226
|
this._initialBitrate = initialBitrate;
|
|
225
227
|
this._inStarvationMode = false;
|
|
226
228
|
this._lowLatencyMode = lowLatencyMode;
|
|
@@ -253,29 +255,29 @@ var NetworkAnalyzer = /** @class */ (function () {
|
|
|
253
255
|
* last estimate.
|
|
254
256
|
* @returns {Object}
|
|
255
257
|
*/
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
258
|
+
getBandwidthEstimate(playbackInfo, bandwidthEstimator, currentRepresentation, currentRequests, lastEstimatedBitrate) {
|
|
259
|
+
let newBitrateCeil; // bitrate ceil for the chosen Representation
|
|
260
|
+
let bandwidthEstimate;
|
|
261
|
+
const localConf = this._config;
|
|
262
|
+
const { bufferGap, position, duration } = playbackInfo;
|
|
263
|
+
const realBufferGap = isFinite(bufferGap) ? bufferGap :
|
|
262
264
|
0;
|
|
263
|
-
|
|
265
|
+
const { ABR_STARVATION_DURATION_DELTA } = config_1.default.getCurrent();
|
|
264
266
|
// check if should get in/out of starvation mode
|
|
265
267
|
if (isNaN(duration) ||
|
|
266
268
|
realBufferGap + position.last < duration - ABR_STARVATION_DURATION_DELTA) {
|
|
267
269
|
if (!this._inStarvationMode && realBufferGap <= localConf.starvationGap) {
|
|
268
|
-
|
|
270
|
+
log_1.default.info("ABR: enter starvation mode.");
|
|
269
271
|
this._inStarvationMode = true;
|
|
270
272
|
}
|
|
271
273
|
else if (this._inStarvationMode &&
|
|
272
274
|
realBufferGap >= localConf.outOfStarvationGap) {
|
|
273
|
-
|
|
275
|
+
log_1.default.info("ABR: exit starvation mode.");
|
|
274
276
|
this._inStarvationMode = false;
|
|
275
277
|
}
|
|
276
278
|
}
|
|
277
279
|
else if (this._inStarvationMode) {
|
|
278
|
-
|
|
280
|
+
log_1.default.info("ABR: exit starvation mode.");
|
|
279
281
|
this._inStarvationMode = false;
|
|
280
282
|
}
|
|
281
283
|
// If in starvation mode, check if a quick new estimate can be done
|
|
@@ -283,10 +285,10 @@ var NetworkAnalyzer = /** @class */ (function () {
|
|
|
283
285
|
// If so, cancel previous estimates and replace it by the new one
|
|
284
286
|
if (this._inStarvationMode) {
|
|
285
287
|
bandwidthEstimate = estimateStarvationModeBitrate(currentRequests, playbackInfo, currentRepresentation, this._lowLatencyMode, lastEstimatedBitrate);
|
|
286
|
-
if (bandwidthEstimate
|
|
287
|
-
|
|
288
|
+
if (bandwidthEstimate !== undefined) {
|
|
289
|
+
log_1.default.info("ABR: starvation mode emergency estimate:", bandwidthEstimate);
|
|
288
290
|
bandwidthEstimator.reset();
|
|
289
|
-
newBitrateCeil = currentRepresentation
|
|
291
|
+
newBitrateCeil = (0, is_null_or_undefined_1.default)(currentRepresentation) ?
|
|
290
292
|
bandwidthEstimate :
|
|
291
293
|
Math.min(bandwidthEstimate, currentRepresentation.bitrate);
|
|
292
294
|
}
|
|
@@ -294,12 +296,12 @@ var NetworkAnalyzer = /** @class */ (function () {
|
|
|
294
296
|
// if newBitrateCeil is not yet defined, do the normal estimation
|
|
295
297
|
if (newBitrateCeil == null) {
|
|
296
298
|
bandwidthEstimate = bandwidthEstimator.getEstimate();
|
|
297
|
-
if (bandwidthEstimate
|
|
299
|
+
if (bandwidthEstimate !== undefined) {
|
|
298
300
|
newBitrateCeil = bandwidthEstimate *
|
|
299
301
|
(this._inStarvationMode ? localConf.starvationBitrateFactor :
|
|
300
302
|
localConf.regularBitrateFactor);
|
|
301
303
|
}
|
|
302
|
-
else if (lastEstimatedBitrate
|
|
304
|
+
else if (lastEstimatedBitrate !== undefined) {
|
|
303
305
|
newBitrateCeil = lastEstimatedBitrate *
|
|
304
306
|
(this._inStarvationMode ? localConf.starvationBitrateFactor :
|
|
305
307
|
localConf.regularBitrateFactor);
|
|
@@ -311,8 +313,8 @@ var NetworkAnalyzer = /** @class */ (function () {
|
|
|
311
313
|
if (playbackInfo.speed > 1) {
|
|
312
314
|
newBitrateCeil /= playbackInfo.speed;
|
|
313
315
|
}
|
|
314
|
-
return { bandwidthEstimate
|
|
315
|
-
}
|
|
316
|
+
return { bandwidthEstimate, bitrateChosen: newBitrateCeil };
|
|
317
|
+
}
|
|
316
318
|
/**
|
|
317
319
|
* For a given wanted bitrate, tells if should switch urgently.
|
|
318
320
|
* @param {number} bitrate - The new estimated bitrate.
|
|
@@ -323,7 +325,7 @@ var NetworkAnalyzer = /** @class */ (function () {
|
|
|
323
325
|
* @param {Object} playbackInfo - Information on the current playback.
|
|
324
326
|
* @returns {boolean}
|
|
325
327
|
*/
|
|
326
|
-
|
|
328
|
+
isUrgent(bitrate, currentRepresentation, currentRequests, playbackInfo) {
|
|
327
329
|
if (currentRepresentation === null) {
|
|
328
330
|
return true;
|
|
329
331
|
}
|
|
@@ -331,7 +333,6 @@ var NetworkAnalyzer = /** @class */ (function () {
|
|
|
331
333
|
return false;
|
|
332
334
|
}
|
|
333
335
|
return shouldDirectlySwitchToLowBitrate(playbackInfo, currentRequests, this._lowLatencyMode);
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
export default NetworkAnalyzer;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
exports.default = NetworkAnalyzer;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Copyright 2015 CANAL+ Group
|
|
3
4
|
*
|
|
@@ -13,18 +14,19 @@
|
|
|
13
14
|
* See the License for the specific language governing permissions and
|
|
14
15
|
* limitations under the License.
|
|
15
16
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const config_1 = require("../../../config");
|
|
19
|
+
const ewma_1 = require("./ewma");
|
|
18
20
|
/**
|
|
19
21
|
* Calculate a mean bandwidth based on the bytes downloaded and the amount
|
|
20
22
|
* of time needed to do so.
|
|
21
23
|
* @class BandwidthEstimator
|
|
22
24
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
this._fastEWMA = new
|
|
27
|
-
this._slowEWMA = new
|
|
25
|
+
class BandwidthEstimator {
|
|
26
|
+
constructor() {
|
|
27
|
+
const { ABR_FAST_EMA, ABR_SLOW_EMA } = config_1.default.getCurrent();
|
|
28
|
+
this._fastEWMA = new ewma_1.default(ABR_FAST_EMA);
|
|
29
|
+
this._slowEWMA = new ewma_1.default(ABR_SLOW_EMA);
|
|
28
30
|
this._bytesSampled = 0;
|
|
29
31
|
}
|
|
30
32
|
/**
|
|
@@ -34,37 +36,36 @@ var BandwidthEstimator = /** @class */ (function () {
|
|
|
34
36
|
* @param {number} numberOfBytes - The total number of bytes transferred in
|
|
35
37
|
* that request.
|
|
36
38
|
*/
|
|
37
|
-
|
|
38
|
-
|
|
39
|
+
addSample(durationInMs, numberOfBytes) {
|
|
40
|
+
const { ABR_MINIMUM_CHUNK_SIZE } = config_1.default.getCurrent();
|
|
39
41
|
if (numberOfBytes < ABR_MINIMUM_CHUNK_SIZE) {
|
|
40
42
|
return;
|
|
41
43
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
const bandwidth = numberOfBytes * 8000 / durationInMs;
|
|
45
|
+
const weight = durationInMs / 1000;
|
|
44
46
|
this._bytesSampled += numberOfBytes;
|
|
45
47
|
this._fastEWMA.addSample(weight, bandwidth);
|
|
46
48
|
this._slowEWMA.addSample(weight, bandwidth);
|
|
47
|
-
}
|
|
49
|
+
}
|
|
48
50
|
/**
|
|
49
51
|
* Get estimate of the bandwidth, in bits per seconds.
|
|
50
52
|
* @returns {Number|undefined}
|
|
51
53
|
*/
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
getEstimate() {
|
|
55
|
+
const { ABR_MINIMUM_TOTAL_BYTES } = config_1.default.getCurrent();
|
|
54
56
|
if (this._bytesSampled < ABR_MINIMUM_TOTAL_BYTES) {
|
|
55
57
|
return undefined;
|
|
56
58
|
}
|
|
57
59
|
// Take the minimum of these two estimates.
|
|
58
60
|
// This should have the effect of adapting down quickly, but up more slowly.
|
|
59
61
|
return Math.min(this._fastEWMA.getEstimate(), this._slowEWMA.getEstimate());
|
|
60
|
-
}
|
|
62
|
+
}
|
|
61
63
|
/** Reset the bandwidth estimation. */
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
this._fastEWMA = new
|
|
65
|
-
this._slowEWMA = new
|
|
64
|
+
reset() {
|
|
65
|
+
const { ABR_FAST_EMA, ABR_SLOW_EMA } = config_1.default.getCurrent();
|
|
66
|
+
this._fastEWMA = new ewma_1.default(ABR_FAST_EMA);
|
|
67
|
+
this._slowEWMA = new ewma_1.default(ABR_SLOW_EMA);
|
|
66
68
|
this._bytesSampled = 0;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
export default BandwidthEstimator;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.default = BandwidthEstimator;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Copyright 2015 CANAL+ Group
|
|
3
4
|
*
|
|
@@ -13,15 +14,16 @@
|
|
|
13
14
|
* See the License for the specific language governing permissions and
|
|
14
15
|
* limitations under the License.
|
|
15
16
|
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
18
|
/**
|
|
17
19
|
* Tweaked implementation of an exponential weighted Moving Average.
|
|
18
20
|
* @class EWMA
|
|
19
21
|
*/
|
|
20
|
-
|
|
22
|
+
class EWMA {
|
|
21
23
|
/**
|
|
22
24
|
* @param {number} halfLife
|
|
23
25
|
*/
|
|
24
|
-
|
|
26
|
+
constructor(halfLife) {
|
|
25
27
|
// (half-life = log(1/2) / log(Decay Factor)
|
|
26
28
|
this._alpha = Math.exp(Math.log(0.5) / halfLife);
|
|
27
29
|
this._lastEstimate = 0;
|
|
@@ -31,22 +33,21 @@ var EWMA = /** @class */ (function () {
|
|
|
31
33
|
* @param {number} weight
|
|
32
34
|
* @param {number} value
|
|
33
35
|
*/
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
addSample(weight, value) {
|
|
37
|
+
const adjAlpha = Math.pow(this._alpha, weight);
|
|
38
|
+
const newEstimate = value * (1 - adjAlpha) +
|
|
37
39
|
adjAlpha * this._lastEstimate;
|
|
38
40
|
if (!isNaN(newEstimate)) {
|
|
39
41
|
this._lastEstimate = newEstimate;
|
|
40
42
|
this._totalWeight += weight;
|
|
41
43
|
}
|
|
42
|
-
}
|
|
44
|
+
}
|
|
43
45
|
/**
|
|
44
46
|
* @returns {number} value
|
|
45
47
|
*/
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
getEstimate() {
|
|
49
|
+
const zeroFactor = 1 - Math.pow(this._alpha, this._totalWeight);
|
|
48
50
|
return this._lastEstimate / zeroFactor;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
export default EWMA;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.default = EWMA;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Copyright 2015 CANAL+ Group
|
|
3
4
|
*
|
|
@@ -13,7 +14,8 @@
|
|
|
13
14
|
* See the License for the specific language governing permissions and
|
|
14
15
|
* limitations under the License.
|
|
15
16
|
*/
|
|
16
|
-
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const array_find_index_1 = require("../../../utils/array_find_index");
|
|
17
19
|
/**
|
|
18
20
|
* Get only representations lower or equal to a given bitrate.
|
|
19
21
|
* If no representation is lower than the given bitrate, returns an array containing
|
|
@@ -22,16 +24,17 @@ import arrayFindIndex from "../../../utils/array_find_index";
|
|
|
22
24
|
* @param {Number} bitrate
|
|
23
25
|
* @returns {Array.<Object>}
|
|
24
26
|
*/
|
|
25
|
-
|
|
27
|
+
function filterByBitrate(representations, bitrate) {
|
|
26
28
|
if (representations.length === 0) {
|
|
27
29
|
return [];
|
|
28
30
|
}
|
|
29
|
-
representations.sort(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
representations.sort((ra, rb) => ra.bitrate - rb.bitrate);
|
|
32
|
+
const minimumBitrate = representations[0].bitrate;
|
|
33
|
+
const bitrateCeil = Math.max(bitrate, minimumBitrate);
|
|
34
|
+
const firstSuperiorBitrateIndex = (0, array_find_index_1.default)(representations, (representation) => representation.bitrate > bitrateCeil);
|
|
33
35
|
if (firstSuperiorBitrateIndex === -1) {
|
|
34
36
|
return representations; // All representations have lower bitrates.
|
|
35
37
|
}
|
|
36
38
|
return representations.slice(0, firstSuperiorBitrateIndex);
|
|
37
39
|
}
|
|
40
|
+
exports.default = filterByBitrate;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Copyright 2015 CANAL+ Group
|
|
3
4
|
*
|
|
@@ -13,8 +14,9 @@
|
|
|
13
14
|
* See the License for the specific language governing permissions and
|
|
14
15
|
* limitations under the License.
|
|
15
16
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const array_find_1 = require("../../../utils/array_find");
|
|
19
|
+
const take_first_set_1 = require("../../../utils/take_first_set");
|
|
18
20
|
/**
|
|
19
21
|
* Filter representations based on their resolution.
|
|
20
22
|
* - the highest resolution considered will be the one linked to the first
|
|
@@ -24,29 +26,26 @@ import takeFirstSet from "../../../utils/take_first_set";
|
|
|
24
26
|
* @param {Object} resolution
|
|
25
27
|
* @returns {Array.<Object>}
|
|
26
28
|
*/
|
|
27
|
-
|
|
29
|
+
function filterByResolution(representations, resolution) {
|
|
28
30
|
if (resolution.width === undefined || resolution.height === undefined) {
|
|
29
31
|
return representations;
|
|
30
32
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
const width = resolution.width * resolution.pixelRatio;
|
|
34
|
+
const height = resolution.height * resolution.pixelRatio;
|
|
35
|
+
const sortedRepsByWidth = representations
|
|
34
36
|
.slice() // clone
|
|
35
|
-
.sort(
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
representation.height >= height;
|
|
42
|
-
});
|
|
37
|
+
.sort((a, b) => (0, take_first_set_1.default)(a.width, 0) -
|
|
38
|
+
(0, take_first_set_1.default)(b.width, 0));
|
|
39
|
+
const repWithMaxWidth = (0, array_find_1.default)(sortedRepsByWidth, (representation) => typeof representation.width === "number" &&
|
|
40
|
+
representation.width >= width &&
|
|
41
|
+
typeof representation.height === "number" &&
|
|
42
|
+
representation.height >= height);
|
|
43
43
|
if (repWithMaxWidth === undefined) {
|
|
44
44
|
return representations;
|
|
45
45
|
}
|
|
46
|
-
|
|
46
|
+
const maxWidth = typeof repWithMaxWidth.width === "number" ? repWithMaxWidth.width :
|
|
47
47
|
0;
|
|
48
|
-
return representations.filter(
|
|
49
|
-
|
|
50
|
-
true;
|
|
51
|
-
});
|
|
48
|
+
return representations.filter(representation => typeof representation.width === "number" ? representation.width <= maxWidth :
|
|
49
|
+
true);
|
|
52
50
|
}
|
|
51
|
+
exports.default = filterByResolution;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Copyright 2015 CANAL+ Group
|
|
3
4
|
*
|
|
@@ -13,6 +14,7 @@
|
|
|
13
14
|
* See the License for the specific language governing permissions and
|
|
14
15
|
* limitations under the License.
|
|
15
16
|
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
18
|
/**
|
|
17
19
|
* Return "Buffer Levels" which are steps of available buffers from which we
|
|
18
20
|
* are normally able switch safely to the next available bitrate.
|
|
@@ -21,12 +23,12 @@
|
|
|
21
23
|
* ascending order.
|
|
22
24
|
* @returns {Array.<number>}
|
|
23
25
|
*/
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return bitrates.map(
|
|
26
|
+
function getBufferLevels(bitrates) {
|
|
27
|
+
const logs = bitrates.map((b) => Math.log(b / bitrates[0]));
|
|
28
|
+
const utilities = logs.map(l => l - logs[0] + 1); // normalize
|
|
29
|
+
const gp = (utilities[utilities.length - 1] - 1) / ((bitrates.length * 2) + 10);
|
|
30
|
+
const Vp = 1 / gp;
|
|
31
|
+
return bitrates.map((_, i) => minBufferLevelForBitrate(i));
|
|
30
32
|
/**
|
|
31
33
|
* Get minimum buffer we should keep ahead to pick this bitrate.
|
|
32
34
|
* @param {number} index
|
|
@@ -36,7 +38,7 @@ export default function getBufferLevels(bitrates) {
|
|
|
36
38
|
if (index === 0) {
|
|
37
39
|
return 0;
|
|
38
40
|
}
|
|
39
|
-
|
|
41
|
+
const boundedIndex = Math.min(Math.max(1, index), bitrates.length - 1);
|
|
40
42
|
if (bitrates[boundedIndex] === bitrates[boundedIndex - 1]) {
|
|
41
43
|
return minBufferLevelForBitrate(index - 1);
|
|
42
44
|
}
|
|
@@ -45,3 +47,4 @@ export default function getBufferLevels(bitrates) {
|
|
|
45
47
|
bitrates[boundedIndex - 1])) + 4;
|
|
46
48
|
}
|
|
47
49
|
}
|
|
50
|
+
exports.default = getBufferLevels;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Copyright 2015 CANAL+ Group
|
|
3
4
|
*
|
|
@@ -13,9 +14,10 @@
|
|
|
13
14
|
* See the License for the specific language governing permissions and
|
|
14
15
|
* limitations under the License.
|
|
15
16
|
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
18
|
/** Stores the last estimate made by the `RepresentationEstimator`. */
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
class LastEstimateStorage {
|
|
20
|
+
constructor() {
|
|
19
21
|
this.bandwidth = undefined;
|
|
20
22
|
this.representation = null;
|
|
21
23
|
this.algorithmType = 3 /* ABRAlgorithmType.None */;
|
|
@@ -27,11 +29,10 @@ var LastEstimateStorage = /** @class */ (function () {
|
|
|
27
29
|
* @param {number} algorithmType - The type of algorithm used to produce that
|
|
28
30
|
* estimate.
|
|
29
31
|
*/
|
|
30
|
-
|
|
32
|
+
update(representation, bandwidth, algorithmType) {
|
|
31
33
|
this.representation = representation;
|
|
32
34
|
this.bandwidth = bandwidth;
|
|
33
35
|
this.algorithmType = algorithmType;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
export default LastEstimateStorage;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.default = LastEstimateStorage;
|