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,12 @@
|
|
|
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
|
+
const config_1 = require("../../../config");
|
|
19
|
+
const log_1 = require("../../../log");
|
|
20
|
+
const manifest_1 = require("../../../manifest");
|
|
21
|
+
const take_first_set_1 = require("../../../utils/take_first_set");
|
|
22
|
+
const buffered_history_1 = require("./buffered_history");
|
|
21
23
|
/**
|
|
22
24
|
* Keep track of every chunk downloaded and currently in the linked media
|
|
23
25
|
* buffer.
|
|
@@ -27,18 +29,18 @@ import BufferedHistory from "./buffered_history";
|
|
|
27
29
|
* since by the browser (and thus may need to be re-loaded).
|
|
28
30
|
* @class SegmentInventory
|
|
29
31
|
*/
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
class SegmentInventory {
|
|
33
|
+
constructor() {
|
|
34
|
+
const { BUFFERED_HISTORY_RETENTION_TIME, BUFFERED_HISTORY_MAXIMUM_ENTRIES } = config_1.default.getCurrent();
|
|
33
35
|
this._inventory = [];
|
|
34
|
-
this._bufferedHistory = new
|
|
36
|
+
this._bufferedHistory = new buffered_history_1.default(BUFFERED_HISTORY_RETENTION_TIME, BUFFERED_HISTORY_MAXIMUM_ENTRIES);
|
|
35
37
|
}
|
|
36
38
|
/**
|
|
37
39
|
* Reset the whole inventory.
|
|
38
40
|
*/
|
|
39
|
-
|
|
41
|
+
reset() {
|
|
40
42
|
this._inventory.length = 0;
|
|
41
|
-
}
|
|
43
|
+
}
|
|
42
44
|
/**
|
|
43
45
|
* Infer each segment's `bufferedStart` and `bufferedEnd` properties from the
|
|
44
46
|
* TimeRanges given.
|
|
@@ -51,52 +53,51 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
51
53
|
* coming from the same buffer.
|
|
52
54
|
* @param {TimeRanges} buffered
|
|
53
55
|
*/
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
synchronizeBuffered(buffered) {
|
|
57
|
+
const inventory = this._inventory;
|
|
58
|
+
let inventoryIndex = 0; // Current index considered.
|
|
59
|
+
let thisSegment = inventory[0]; // Current segmentInfos considered
|
|
60
|
+
const { MINIMUM_SEGMENT_SIZE } = config_1.default.getCurrent();
|
|
59
61
|
/** Type of buffer considered, used for logs */
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
for (
|
|
62
|
+
const bufferType = thisSegment === null || thisSegment === void 0 ? void 0 : thisSegment.infos.adaptation.type;
|
|
63
|
+
const rangesLength = buffered.length;
|
|
64
|
+
for (let i = 0; i < rangesLength; i++) {
|
|
63
65
|
if (thisSegment === undefined) { // we arrived at the end of our inventory
|
|
64
66
|
return;
|
|
65
67
|
}
|
|
66
68
|
// take the i'nth contiguous buffered TimeRange
|
|
67
|
-
|
|
68
|
-
|
|
69
|
+
const rangeStart = buffered.start(i);
|
|
70
|
+
const rangeEnd = buffered.end(i);
|
|
69
71
|
if (rangeEnd - rangeStart < MINIMUM_SEGMENT_SIZE) {
|
|
70
|
-
|
|
72
|
+
log_1.default.warn("SI: skipped TimeRange when synchronizing because it was too small", bufferType, rangeStart, rangeEnd);
|
|
71
73
|
continue;
|
|
72
74
|
}
|
|
73
|
-
|
|
75
|
+
const indexBefore = inventoryIndex; // keep track of that number
|
|
74
76
|
// Find the first segment either within this TimeRange or completely past
|
|
75
77
|
// it:
|
|
76
78
|
// skip until first segment with at least `MINIMUM_SEGMENT_SIZE` past the
|
|
77
79
|
// start of that range.
|
|
78
80
|
while (thisSegment !== undefined &&
|
|
79
|
-
(
|
|
81
|
+
((0, take_first_set_1.default)(thisSegment.bufferedEnd, thisSegment.end)
|
|
80
82
|
- rangeStart) < MINIMUM_SEGMENT_SIZE) {
|
|
81
83
|
thisSegment = inventory[++inventoryIndex];
|
|
82
84
|
}
|
|
83
85
|
// Contains infos about the last garbage-collected segment before
|
|
84
86
|
// `thisSegment`.
|
|
85
|
-
|
|
87
|
+
let lastDeletedSegmentInfos = null;
|
|
86
88
|
// remove garbage-collected segments
|
|
87
89
|
// (Those not in that TimeRange nor in the previous one)
|
|
88
|
-
|
|
90
|
+
const numberOfSegmentToDelete = inventoryIndex - indexBefore;
|
|
89
91
|
if (numberOfSegmentToDelete > 0) {
|
|
90
|
-
|
|
92
|
+
const lastDeletedSegment = // last garbage-collected segment
|
|
91
93
|
inventory[indexBefore + numberOfSegmentToDelete - 1];
|
|
92
94
|
lastDeletedSegmentInfos = {
|
|
93
|
-
end:
|
|
95
|
+
end: (0, take_first_set_1.default)(lastDeletedSegment.bufferedEnd, lastDeletedSegment.end),
|
|
94
96
|
precizeEnd: lastDeletedSegment.precizeEnd,
|
|
95
97
|
};
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
for (
|
|
99
|
-
var seg = removed_1[_i];
|
|
98
|
+
log_1.default.debug(`SI: ${numberOfSegmentToDelete} segments GCed.`, bufferType);
|
|
99
|
+
const removed = inventory.splice(indexBefore, numberOfSegmentToDelete);
|
|
100
|
+
for (const seg of removed) {
|
|
100
101
|
if (seg.bufferedStart === undefined && seg.bufferedEnd === undefined) {
|
|
101
102
|
this._bufferedHistory.addBufferedSegment(seg.infos, null);
|
|
102
103
|
}
|
|
@@ -109,7 +110,7 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
109
110
|
// If the current segment is actually completely outside that range (it
|
|
110
111
|
// is contained in one of the next one), skip that part.
|
|
111
112
|
if (rangeEnd -
|
|
112
|
-
|
|
113
|
+
(0, take_first_set_1.default)(thisSegment.bufferedStart, thisSegment.start)
|
|
113
114
|
>= MINIMUM_SEGMENT_SIZE) {
|
|
114
115
|
guessBufferedStartFromRangeStart(thisSegment, rangeStart, lastDeletedSegmentInfos, bufferType);
|
|
115
116
|
if (inventoryIndex === inventory.length - 1) {
|
|
@@ -120,32 +121,32 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
120
121
|
}
|
|
121
122
|
thisSegment = inventory[++inventoryIndex];
|
|
122
123
|
// Make contiguous until first segment outside that range
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
let thisSegmentStart = (0, take_first_set_1.default)(thisSegment.bufferedStart, thisSegment.start);
|
|
125
|
+
let thisSegmentEnd = (0, take_first_set_1.default)(thisSegment.bufferedEnd, thisSegment.end);
|
|
126
|
+
const nextRangeStart = i < rangesLength - 1 ? buffered.start(i + 1) :
|
|
126
127
|
undefined;
|
|
127
128
|
while (thisSegment !== undefined &&
|
|
128
129
|
(rangeEnd - thisSegmentStart) >= MINIMUM_SEGMENT_SIZE &&
|
|
129
130
|
(nextRangeStart === undefined ||
|
|
130
131
|
rangeEnd - thisSegmentStart >= thisSegmentEnd - nextRangeStart)) {
|
|
131
|
-
|
|
132
|
+
const prevSegment = inventory[inventoryIndex - 1];
|
|
132
133
|
// those segments are contiguous, we have no way to infer their real
|
|
133
134
|
// end
|
|
134
135
|
if (prevSegment.bufferedEnd === undefined) {
|
|
135
136
|
prevSegment.bufferedEnd = thisSegment.precizeStart ? thisSegment.start :
|
|
136
137
|
prevSegment.end;
|
|
137
|
-
|
|
138
|
+
log_1.default.debug("SI: calculating buffered end of contiguous segment", bufferType, prevSegment.bufferedEnd, prevSegment.end);
|
|
138
139
|
}
|
|
139
140
|
thisSegment.bufferedStart = prevSegment.bufferedEnd;
|
|
140
141
|
thisSegment = inventory[++inventoryIndex];
|
|
141
142
|
if (thisSegment !== undefined) {
|
|
142
|
-
thisSegmentStart =
|
|
143
|
-
thisSegmentEnd =
|
|
143
|
+
thisSegmentStart = (0, take_first_set_1.default)(thisSegment.bufferedStart, thisSegment.start);
|
|
144
|
+
thisSegmentEnd = (0, take_first_set_1.default)(thisSegment.bufferedEnd, thisSegment.end);
|
|
144
145
|
}
|
|
145
146
|
}
|
|
146
147
|
}
|
|
147
148
|
// update the bufferedEnd of the last segment in that range
|
|
148
|
-
|
|
149
|
+
const lastSegmentInRange = inventory[inventoryIndex - 1];
|
|
149
150
|
if (lastSegmentInRange !== undefined) {
|
|
150
151
|
guessBufferedEndFromRangeEnd(lastSegmentInRange, rangeEnd, bufferType);
|
|
151
152
|
}
|
|
@@ -153,20 +154,19 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
153
154
|
// if we still have segments left, they are not affiliated to any range.
|
|
154
155
|
// They might have been garbage collected, delete them from here.
|
|
155
156
|
if (thisSegment != null) {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
for (
|
|
159
|
-
var seg = removed_2[_a];
|
|
157
|
+
log_1.default.debug("SI: last segments have been GCed", bufferType, inventoryIndex, inventory.length);
|
|
158
|
+
const removed = inventory.splice(inventoryIndex, inventory.length - inventoryIndex);
|
|
159
|
+
for (const seg of removed) {
|
|
160
160
|
if (seg.bufferedStart === undefined && seg.bufferedEnd === undefined) {
|
|
161
161
|
this._bufferedHistory.addBufferedSegment(seg.infos, null);
|
|
162
162
|
}
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
|
-
if (bufferType !== undefined &&
|
|
166
|
-
|
|
165
|
+
if (bufferType !== undefined && log_1.default.hasLevel("DEBUG")) {
|
|
166
|
+
log_1.default.debug(`SI: current ${bufferType} inventory timeline:\n` +
|
|
167
167
|
prettyPrintInventory(this._inventory));
|
|
168
168
|
}
|
|
169
|
-
}
|
|
169
|
+
}
|
|
170
170
|
/**
|
|
171
171
|
* Add a new chunk in the inventory.
|
|
172
172
|
*
|
|
@@ -174,25 +174,29 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
174
174
|
* segment have been inserted, you should call the `completeSegment` method.
|
|
175
175
|
* @param {Object} chunkInformation
|
|
176
176
|
*/
|
|
177
|
-
|
|
178
|
-
var period = _a.period, adaptation = _a.adaptation, representation = _a.representation, segment = _a.segment, chunkSize = _a.chunkSize, start = _a.start, end = _a.end;
|
|
177
|
+
insertChunk({ period, adaptation, representation, segment, chunkSize, start, end }) {
|
|
179
178
|
if (segment.isInit) {
|
|
180
179
|
return;
|
|
181
180
|
}
|
|
182
|
-
|
|
181
|
+
const bufferType = adaptation.type;
|
|
183
182
|
if (start >= end) {
|
|
184
|
-
|
|
183
|
+
log_1.default.warn("SI: Invalid chunked inserted: starts before it ends", bufferType, start, end);
|
|
185
184
|
return;
|
|
186
185
|
}
|
|
187
|
-
|
|
188
|
-
|
|
186
|
+
const inventory = this._inventory;
|
|
187
|
+
const newSegment = { partiallyPushed: true,
|
|
188
|
+
chunkSize,
|
|
189
|
+
splitted: false,
|
|
190
|
+
start,
|
|
191
|
+
end,
|
|
192
|
+
precizeStart: false,
|
|
189
193
|
precizeEnd: false,
|
|
190
194
|
bufferedStart: undefined,
|
|
191
195
|
bufferedEnd: undefined,
|
|
192
|
-
infos: { segment
|
|
196
|
+
infos: { segment, period, adaptation, representation } };
|
|
193
197
|
// begin by the end as in most use cases this will be faster
|
|
194
|
-
for (
|
|
195
|
-
|
|
198
|
+
for (let i = inventory.length - 1; i >= 0; i--) {
|
|
199
|
+
const segmentI = inventory[i];
|
|
196
200
|
if ((segmentI.start) <= start) {
|
|
197
201
|
if ((segmentI.end) <= start) {
|
|
198
202
|
// our segment is after, push it after this one
|
|
@@ -206,7 +210,7 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
206
210
|
// prevSegment : |------|
|
|
207
211
|
// newSegment : |======|
|
|
208
212
|
// ===> : |------| |======|
|
|
209
|
-
|
|
213
|
+
log_1.default.debug("SI: Pushing segment strictly after previous one.", bufferType, start, segmentI.end);
|
|
210
214
|
this._inventory.splice(i + 1, 0, newSegment);
|
|
211
215
|
i += 2; // Go to segment immediately after newSegment
|
|
212
216
|
while (i < inventory.length && inventory[i].start < newSegment.end) {
|
|
@@ -219,7 +223,7 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
219
223
|
// newSegment : |======|
|
|
220
224
|
// nextSegment : |----|
|
|
221
225
|
// ===> : |------|======|-|
|
|
222
|
-
|
|
226
|
+
log_1.default.debug("SI: Segment pushed updates the start of the next one", bufferType, newSegment.end, inventory[i].start);
|
|
223
227
|
inventory[i].start = newSegment.end;
|
|
224
228
|
inventory[i].bufferedStart = undefined;
|
|
225
229
|
inventory[i].precizeStart = inventory[i].precizeStart &&
|
|
@@ -240,7 +244,7 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
240
244
|
// newSegment : |======|
|
|
241
245
|
// nextSegment : |----|
|
|
242
246
|
// ===> : |------|======|
|
|
243
|
-
|
|
247
|
+
log_1.default.debug("SI: Segment pushed removes the next one", bufferType, start, end, inventory[i].start, inventory[i].end);
|
|
244
248
|
inventory.splice(i, 1);
|
|
245
249
|
}
|
|
246
250
|
return;
|
|
@@ -259,7 +263,7 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
259
263
|
// prevSegment : |-------|
|
|
260
264
|
// newSegment : |==========|
|
|
261
265
|
// ===> : |==========|
|
|
262
|
-
|
|
266
|
+
log_1.default.debug("SI: Segment pushed replace another one", bufferType, start, end, segmentI.end);
|
|
263
267
|
this._inventory.splice(i, 1, newSegment);
|
|
264
268
|
i += 1; // Go to segment immediately after newSegment
|
|
265
269
|
while (i < inventory.length && inventory[i].start < newSegment.end) {
|
|
@@ -271,7 +275,7 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
271
275
|
// newSegment : |======|
|
|
272
276
|
// nextSegment : |----|
|
|
273
277
|
// ===> : |======|--|
|
|
274
|
-
|
|
278
|
+
log_1.default.debug("SI: Segment pushed updates the start of the next one", bufferType, newSegment.end, inventory[i].start);
|
|
275
279
|
inventory[i].start = newSegment.end;
|
|
276
280
|
inventory[i].bufferedStart = undefined;
|
|
277
281
|
inventory[i].precizeStart = inventory[i].precizeStart &&
|
|
@@ -290,7 +294,7 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
290
294
|
// newSegment : |======|
|
|
291
295
|
// nextSegment : |----|
|
|
292
296
|
// ===> : |======|
|
|
293
|
-
|
|
297
|
+
log_1.default.debug("SI: Segment pushed removes the next one", bufferType, start, end, inventory[i].start, inventory[i].end);
|
|
294
298
|
inventory.splice(i, 1);
|
|
295
299
|
}
|
|
296
300
|
return;
|
|
@@ -305,7 +309,7 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
305
309
|
// prevSegment : |------------|
|
|
306
310
|
// newSegment : |==========|
|
|
307
311
|
// ===> : |==========|-|
|
|
308
|
-
|
|
312
|
+
log_1.default.debug("SI: Segment pushed ends before another with the same start", bufferType, start, end, segmentI.end);
|
|
309
313
|
inventory.splice(i, 0, newSegment);
|
|
310
314
|
segmentI.start = newSegment.end;
|
|
311
315
|
segmentI.bufferedStart = undefined;
|
|
@@ -328,7 +332,7 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
328
332
|
// prevSegment : |-------|
|
|
329
333
|
// newSegment : |====|
|
|
330
334
|
// ===> : |--|====|
|
|
331
|
-
|
|
335
|
+
log_1.default.debug("SI: Segment pushed updates end of previous one", bufferType, start, end, segmentI.start, segmentI.end);
|
|
332
336
|
this._inventory.splice(i + 1, 0, newSegment);
|
|
333
337
|
segmentI.end = newSegment.start;
|
|
334
338
|
segmentI.bufferedEnd = undefined;
|
|
@@ -344,7 +348,7 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
344
348
|
// newSegment : |======|
|
|
345
349
|
// nextSegment : |----|
|
|
346
350
|
// ===> : |======|--|
|
|
347
|
-
|
|
351
|
+
log_1.default.debug("SI: Segment pushed updates the start of the next one", bufferType, newSegment.end, inventory[i].start);
|
|
348
352
|
inventory[i].start = newSegment.end;
|
|
349
353
|
inventory[i].bufferedStart = undefined;
|
|
350
354
|
inventory[i].precizeStart = inventory[i].precizeStart &&
|
|
@@ -363,7 +367,7 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
363
367
|
// newSegment : |======|
|
|
364
368
|
// nextSegment : |----|
|
|
365
369
|
// ===> : |======|
|
|
366
|
-
|
|
370
|
+
log_1.default.debug("SI: Segment pushed removes the next one", bufferType, start, end, inventory[i].start, inventory[i].end);
|
|
367
371
|
inventory.splice(i, 1);
|
|
368
372
|
}
|
|
369
373
|
return;
|
|
@@ -377,8 +381,8 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
377
381
|
// prevSegment : |---------|
|
|
378
382
|
// newSegment : |====|
|
|
379
383
|
// ===> : |--|====|-|
|
|
380
|
-
|
|
381
|
-
|
|
384
|
+
log_1.default.warn("SI: Segment pushed is contained in a previous one", bufferType, start, end, segmentI.start, segmentI.end);
|
|
385
|
+
const nextSegment = { partiallyPushed: segmentI.partiallyPushed,
|
|
382
386
|
/**
|
|
383
387
|
* Note: this sadly means we're doing as if
|
|
384
388
|
* that chunk is present two times.
|
|
@@ -411,9 +415,9 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
411
415
|
}
|
|
412
416
|
// if we got here, we are at the first segment
|
|
413
417
|
// check bounds of the previous first segment
|
|
414
|
-
|
|
418
|
+
const firstSegment = this._inventory[0];
|
|
415
419
|
if (firstSegment === undefined) { // we do not have any segment yet
|
|
416
|
-
|
|
420
|
+
log_1.default.debug("SI: first segment pushed", bufferType, start, end);
|
|
417
421
|
this._inventory.push(newSegment);
|
|
418
422
|
return;
|
|
419
423
|
}
|
|
@@ -429,7 +433,7 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
429
433
|
// firstSegment : |----|
|
|
430
434
|
// newSegment : |====|
|
|
431
435
|
// ===> : |====| |----|
|
|
432
|
-
|
|
436
|
+
log_1.default.debug("SI: Segment pushed comes before all previous ones", bufferType, start, end, firstSegment.start);
|
|
433
437
|
this._inventory.splice(0, 0, newSegment);
|
|
434
438
|
}
|
|
435
439
|
else if (firstSegment.end <= end) {
|
|
@@ -444,7 +448,7 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
444
448
|
// firstSegment : |-----|
|
|
445
449
|
// newSegment : |=======|
|
|
446
450
|
// ===> : |=======|
|
|
447
|
-
|
|
451
|
+
log_1.default.debug("SI: Segment pushed starts before and completely " +
|
|
448
452
|
"recovers the previous first one", bufferType, start, end, firstSegment.start, firstSegment.end);
|
|
449
453
|
this._inventory.splice(0, 1, newSegment);
|
|
450
454
|
while (inventory.length > 1 && inventory[1].start < newSegment.end) {
|
|
@@ -456,7 +460,7 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
456
460
|
// newSegment : |======|
|
|
457
461
|
// nextSegment : |----|
|
|
458
462
|
// ===> : |======|--|
|
|
459
|
-
|
|
463
|
+
log_1.default.debug("SI: Segment pushed updates the start of the next one", bufferType, newSegment.end, inventory[1].start);
|
|
460
464
|
inventory[1].start = newSegment.end;
|
|
461
465
|
inventory[1].bufferedStart = undefined;
|
|
462
466
|
inventory[1].precizeStart = newSegment.precizeEnd;
|
|
@@ -474,7 +478,7 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
474
478
|
// newSegment : |======|
|
|
475
479
|
// nextSegment : |----|
|
|
476
480
|
// ===> : |======|
|
|
477
|
-
|
|
481
|
+
log_1.default.debug("SI: Segment pushed removes the next one", bufferType, start, end, inventory[1].start, inventory[1].end);
|
|
478
482
|
inventory.splice(1, 1);
|
|
479
483
|
}
|
|
480
484
|
return;
|
|
@@ -487,54 +491,54 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
487
491
|
// firstSegment : |------|
|
|
488
492
|
// newSegment : |======|
|
|
489
493
|
// ===> : |======|--|
|
|
490
|
-
|
|
494
|
+
log_1.default.debug("SI: Segment pushed start of the next one", bufferType, start, end, firstSegment.start, firstSegment.end);
|
|
491
495
|
firstSegment.start = end;
|
|
492
496
|
firstSegment.bufferedStart = undefined;
|
|
493
497
|
firstSegment.precizeStart = newSegment.precizeEnd;
|
|
494
498
|
this._inventory.splice(0, 0, newSegment);
|
|
495
499
|
return;
|
|
496
500
|
}
|
|
497
|
-
}
|
|
501
|
+
}
|
|
498
502
|
/**
|
|
499
503
|
* Indicate that inserted chunks can now be considered as a complete segment.
|
|
500
504
|
* Take in argument the same content than what was given to `insertChunk` for
|
|
501
505
|
* the corresponding chunks.
|
|
502
506
|
* @param {Object} content
|
|
503
507
|
*/
|
|
504
|
-
|
|
508
|
+
completeSegment(content, newBuffered) {
|
|
505
509
|
if (content.segment.isInit) {
|
|
506
510
|
return;
|
|
507
511
|
}
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
for (
|
|
511
|
-
if (areSameContent(inventory[i].infos, content)) {
|
|
512
|
-
|
|
512
|
+
const inventory = this._inventory;
|
|
513
|
+
const resSegments = [];
|
|
514
|
+
for (let i = 0; i < inventory.length; i++) {
|
|
515
|
+
if ((0, manifest_1.areSameContent)(inventory[i].infos, content)) {
|
|
516
|
+
let splitted = false;
|
|
513
517
|
if (resSegments.length > 0) {
|
|
514
518
|
splitted = true;
|
|
515
519
|
if (resSegments.length === 1) {
|
|
516
|
-
|
|
520
|
+
log_1.default.warn("SI: Completed Segment is splitted.", content.segment.id, content.segment.time, content.segment.end);
|
|
517
521
|
resSegments[0].splitted = true;
|
|
518
522
|
}
|
|
519
523
|
}
|
|
520
|
-
|
|
521
|
-
|
|
524
|
+
const firstI = i;
|
|
525
|
+
let segmentSize = inventory[i].chunkSize;
|
|
522
526
|
i += 1;
|
|
523
527
|
while (i < inventory.length &&
|
|
524
|
-
areSameContent(inventory[i].infos, content)) {
|
|
525
|
-
|
|
528
|
+
(0, manifest_1.areSameContent)(inventory[i].infos, content)) {
|
|
529
|
+
const chunkSize = inventory[i].chunkSize;
|
|
526
530
|
if (segmentSize !== undefined && chunkSize !== undefined) {
|
|
527
531
|
segmentSize += chunkSize;
|
|
528
532
|
}
|
|
529
533
|
i++;
|
|
530
534
|
}
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
if (
|
|
536
|
-
this._inventory.splice(firstI + 1,
|
|
537
|
-
i -=
|
|
535
|
+
const lastI = i - 1;
|
|
536
|
+
const length = lastI - firstI;
|
|
537
|
+
const lastEnd = inventory[lastI].end;
|
|
538
|
+
const lastBufferedEnd = inventory[lastI].bufferedEnd;
|
|
539
|
+
if (length > 0) {
|
|
540
|
+
this._inventory.splice(firstI + 1, length);
|
|
541
|
+
i -= length;
|
|
538
542
|
}
|
|
539
543
|
this._inventory[firstI].partiallyPushed = false;
|
|
540
544
|
this._inventory[firstI].chunkSize = segmentSize;
|
|
@@ -545,22 +549,21 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
545
549
|
}
|
|
546
550
|
}
|
|
547
551
|
if (resSegments.length === 0) {
|
|
548
|
-
|
|
552
|
+
log_1.default.warn("SI: Completed Segment not found", content.segment.id, content.segment.time);
|
|
549
553
|
}
|
|
550
554
|
else {
|
|
551
555
|
this.synchronizeBuffered(newBuffered);
|
|
552
|
-
for (
|
|
553
|
-
var seg = resSegments_1[_i];
|
|
556
|
+
for (const seg of resSegments) {
|
|
554
557
|
if (seg.bufferedStart !== undefined && seg.bufferedEnd !== undefined) {
|
|
555
558
|
this._bufferedHistory.addBufferedSegment(seg.infos, { start: seg.bufferedStart,
|
|
556
559
|
end: seg.bufferedEnd });
|
|
557
560
|
}
|
|
558
561
|
else {
|
|
559
|
-
|
|
562
|
+
log_1.default.debug("SI: buffered range not known after sync. Skipping history.", seg.start, seg.end);
|
|
560
563
|
}
|
|
561
564
|
}
|
|
562
565
|
}
|
|
563
|
-
}
|
|
566
|
+
}
|
|
564
567
|
/**
|
|
565
568
|
* Returns the whole inventory.
|
|
566
569
|
*
|
|
@@ -568,9 +571,9 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
568
571
|
* you might want to call `synchronizeBuffered` before calling this method.
|
|
569
572
|
* @returns {Array.<Object>}
|
|
570
573
|
*/
|
|
571
|
-
|
|
574
|
+
getInventory() {
|
|
572
575
|
return this._inventory;
|
|
573
|
-
}
|
|
576
|
+
}
|
|
574
577
|
/**
|
|
575
578
|
* Returns a recent history of registered operations performed and event
|
|
576
579
|
* received linked to the segment given in argument.
|
|
@@ -584,12 +587,11 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
584
587
|
* @param {Object} context
|
|
585
588
|
* @returns {Array.<Object>}
|
|
586
589
|
*/
|
|
587
|
-
|
|
590
|
+
getHistoryFor(context) {
|
|
588
591
|
return this._bufferedHistory.getHistoryFor(context);
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
export default SegmentInventory;
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
exports.default = SegmentInventory;
|
|
593
595
|
/**
|
|
594
596
|
* Returns `true` if the buffered start of the given chunk looks coherent enough
|
|
595
597
|
* relatively to what is announced in the Manifest.
|
|
@@ -601,9 +603,9 @@ function bufferedStartLooksCoherent(thisSegment) {
|
|
|
601
603
|
thisSegment.partiallyPushed) {
|
|
602
604
|
return false;
|
|
603
605
|
}
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
606
|
+
const { start, end } = thisSegment;
|
|
607
|
+
const duration = end - start;
|
|
608
|
+
const { MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE, MAX_MANIFEST_BUFFERED_DURATION_DIFFERENCE } = config_1.default.getCurrent();
|
|
607
609
|
return Math.abs(start - thisSegment.bufferedStart) <=
|
|
608
610
|
MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE &&
|
|
609
611
|
(thisSegment.bufferedEnd === undefined ||
|
|
@@ -622,9 +624,9 @@ function bufferedEndLooksCoherent(thisSegment) {
|
|
|
622
624
|
thisSegment.partiallyPushed) {
|
|
623
625
|
return false;
|
|
624
626
|
}
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
627
|
+
const { start, end } = thisSegment;
|
|
628
|
+
const duration = end - start;
|
|
629
|
+
const { MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE, MAX_MANIFEST_BUFFERED_DURATION_DIFFERENCE } = config_1.default.getCurrent();
|
|
628
630
|
return Math.abs(end - thisSegment.bufferedEnd) <=
|
|
629
631
|
MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE &&
|
|
630
632
|
thisSegment.bufferedStart != null &&
|
|
@@ -640,10 +642,10 @@ function bufferedEndLooksCoherent(thisSegment) {
|
|
|
640
642
|
* @param {Object} lastDeletedSegmentInfos
|
|
641
643
|
*/
|
|
642
644
|
function guessBufferedStartFromRangeStart(firstSegmentInRange, rangeStart, lastDeletedSegmentInfos, bufferType) {
|
|
643
|
-
|
|
645
|
+
const { MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE } = config_1.default.getCurrent();
|
|
644
646
|
if (firstSegmentInRange.bufferedStart !== undefined) {
|
|
645
647
|
if (firstSegmentInRange.bufferedStart < rangeStart) {
|
|
646
|
-
|
|
648
|
+
log_1.default.debug("SI: Segment partially GCed at the start", bufferType, firstSegmentInRange.bufferedStart, rangeStart);
|
|
647
649
|
firstSegmentInRange.bufferedStart = rangeStart;
|
|
648
650
|
}
|
|
649
651
|
if (!firstSegmentInRange.precizeStart &&
|
|
@@ -653,7 +655,7 @@ function guessBufferedStartFromRangeStart(firstSegmentInRange, rangeStart, lastD
|
|
|
653
655
|
}
|
|
654
656
|
}
|
|
655
657
|
else if (firstSegmentInRange.precizeStart) {
|
|
656
|
-
|
|
658
|
+
log_1.default.debug("SI: buffered start is precize start", bufferType, firstSegmentInRange.start);
|
|
657
659
|
firstSegmentInRange.bufferedStart = firstSegmentInRange.start;
|
|
658
660
|
}
|
|
659
661
|
else if (lastDeletedSegmentInfos !== null &&
|
|
@@ -661,7 +663,7 @@ function guessBufferedStartFromRangeStart(firstSegmentInRange, rangeStart, lastD
|
|
|
661
663
|
(lastDeletedSegmentInfos.precizeEnd ||
|
|
662
664
|
firstSegmentInRange.start - lastDeletedSegmentInfos.end <=
|
|
663
665
|
MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE)) {
|
|
664
|
-
|
|
666
|
+
log_1.default.debug("SI: buffered start is end of previous segment", bufferType, rangeStart, firstSegmentInRange.start, lastDeletedSegmentInfos.end);
|
|
665
667
|
firstSegmentInRange.bufferedStart = lastDeletedSegmentInfos.end;
|
|
666
668
|
if (bufferedStartLooksCoherent(firstSegmentInRange)) {
|
|
667
669
|
firstSegmentInRange.start = lastDeletedSegmentInfos.end;
|
|
@@ -670,7 +672,7 @@ function guessBufferedStartFromRangeStart(firstSegmentInRange, rangeStart, lastD
|
|
|
670
672
|
}
|
|
671
673
|
else if (firstSegmentInRange.start - rangeStart <=
|
|
672
674
|
MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE) {
|
|
673
|
-
|
|
675
|
+
log_1.default.debug("SI: found true buffered start", bufferType, rangeStart, firstSegmentInRange.start);
|
|
674
676
|
firstSegmentInRange.bufferedStart = rangeStart;
|
|
675
677
|
if (bufferedStartLooksCoherent(firstSegmentInRange)) {
|
|
676
678
|
firstSegmentInRange.start = rangeStart;
|
|
@@ -678,11 +680,11 @@ function guessBufferedStartFromRangeStart(firstSegmentInRange, rangeStart, lastD
|
|
|
678
680
|
}
|
|
679
681
|
}
|
|
680
682
|
else if (rangeStart < firstSegmentInRange.start) {
|
|
681
|
-
|
|
683
|
+
log_1.default.debug("SI: range start too far from expected start", bufferType, rangeStart, firstSegmentInRange.start);
|
|
682
684
|
firstSegmentInRange.bufferedStart = firstSegmentInRange.start;
|
|
683
685
|
}
|
|
684
686
|
else {
|
|
685
|
-
|
|
687
|
+
log_1.default.debug("SI: Segment appears immediately garbage collected at the start", bufferType, firstSegmentInRange.bufferedStart, rangeStart);
|
|
686
688
|
firstSegmentInRange.bufferedStart = rangeStart;
|
|
687
689
|
}
|
|
688
690
|
}
|
|
@@ -694,10 +696,10 @@ function guessBufferedStartFromRangeStart(firstSegmentInRange, rangeStart, lastD
|
|
|
694
696
|
* @param {string} bufferType
|
|
695
697
|
*/
|
|
696
698
|
function guessBufferedEndFromRangeEnd(lastSegmentInRange, rangeEnd, bufferType) {
|
|
697
|
-
|
|
699
|
+
const { MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE } = config_1.default.getCurrent();
|
|
698
700
|
if (lastSegmentInRange.bufferedEnd !== undefined) {
|
|
699
701
|
if (lastSegmentInRange.bufferedEnd > rangeEnd) {
|
|
700
|
-
|
|
702
|
+
log_1.default.debug("SI: Segment partially GCed at the end", bufferType, lastSegmentInRange.bufferedEnd, rangeEnd);
|
|
701
703
|
lastSegmentInRange.bufferedEnd = rangeEnd;
|
|
702
704
|
}
|
|
703
705
|
if (!lastSegmentInRange.precizeEnd &&
|
|
@@ -708,12 +710,12 @@ function guessBufferedEndFromRangeEnd(lastSegmentInRange, rangeEnd, bufferType)
|
|
|
708
710
|
}
|
|
709
711
|
}
|
|
710
712
|
else if (lastSegmentInRange.precizeEnd) {
|
|
711
|
-
|
|
713
|
+
log_1.default.debug("SI: buffered end is precize end", bufferType, lastSegmentInRange.end);
|
|
712
714
|
lastSegmentInRange.bufferedEnd = lastSegmentInRange.end;
|
|
713
715
|
}
|
|
714
716
|
else if (rangeEnd - lastSegmentInRange.end <=
|
|
715
717
|
MAX_MANIFEST_BUFFERED_START_END_DIFFERENCE) {
|
|
716
|
-
|
|
718
|
+
log_1.default.debug("SI: found true buffered end", bufferType, rangeEnd, lastSegmentInRange.end);
|
|
717
719
|
lastSegmentInRange.bufferedEnd = rangeEnd;
|
|
718
720
|
if (bufferedEndLooksCoherent(lastSegmentInRange)) {
|
|
719
721
|
lastSegmentInRange.end = rangeEnd;
|
|
@@ -721,11 +723,11 @@ function guessBufferedEndFromRangeEnd(lastSegmentInRange, rangeEnd, bufferType)
|
|
|
721
723
|
}
|
|
722
724
|
}
|
|
723
725
|
else if (rangeEnd > lastSegmentInRange.end) {
|
|
724
|
-
|
|
726
|
+
log_1.default.debug("SI: range end too far from expected end", bufferType, rangeEnd, lastSegmentInRange.end);
|
|
725
727
|
lastSegmentInRange.bufferedEnd = lastSegmentInRange.end;
|
|
726
728
|
}
|
|
727
729
|
else {
|
|
728
|
-
|
|
730
|
+
log_1.default.debug("SI: Segment appears immediately garbage collected at the end", bufferType, lastSegmentInRange.bufferedEnd, rangeEnd);
|
|
729
731
|
lastSegmentInRange.bufferedEnd = rangeEnd;
|
|
730
732
|
}
|
|
731
733
|
}
|
|
@@ -762,31 +764,30 @@ function guessBufferedEndFromRangeEnd(lastSegmentInRange, rangeEnd, bufferType)
|
|
|
762
764
|
* @returns {string}
|
|
763
765
|
*/
|
|
764
766
|
function prettyPrintInventory(inventory) {
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
var lastLetter = null;
|
|
767
|
+
const roundingError = 1 / 60;
|
|
768
|
+
const encounteredReps = {};
|
|
769
|
+
const letters = [];
|
|
770
|
+
let lastChunk = null;
|
|
771
|
+
let lastLetter = null;
|
|
771
772
|
function generateNewLetter(infos) {
|
|
772
|
-
|
|
773
|
+
const currentLetter = String.fromCharCode(letters.length + 65);
|
|
773
774
|
letters.push({ letter: currentLetter,
|
|
774
775
|
periodId: infos.period.id,
|
|
775
776
|
representationId: infos.representation.id,
|
|
776
777
|
bitrate: infos.representation.bitrate });
|
|
777
778
|
return currentLetter;
|
|
778
779
|
}
|
|
779
|
-
|
|
780
|
-
for (
|
|
781
|
-
|
|
780
|
+
let str = "";
|
|
781
|
+
for (let i = 0; i < inventory.length; i++) {
|
|
782
|
+
const chunk = inventory[i];
|
|
782
783
|
if (chunk.bufferedStart !== undefined && chunk.bufferedEnd !== undefined) {
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
784
|
+
const periodId = chunk.infos.period.id;
|
|
785
|
+
const representationId = chunk.infos.representation.id;
|
|
786
|
+
const encounteredPeriod = encounteredReps[periodId];
|
|
787
|
+
let currentLetter;
|
|
787
788
|
if (encounteredPeriod === undefined) {
|
|
788
789
|
currentLetter = generateNewLetter(chunk.infos);
|
|
789
|
-
encounteredReps[periodId] =
|
|
790
|
+
encounteredReps[periodId] = { [representationId]: currentLetter };
|
|
790
791
|
}
|
|
791
792
|
else if (encounteredPeriod[representationId] === undefined) {
|
|
792
793
|
currentLetter = generateNewLetter(chunk.infos);
|
|
@@ -796,17 +797,17 @@ function prettyPrintInventory(inventory) {
|
|
|
796
797
|
currentLetter = encounteredPeriod[representationId];
|
|
797
798
|
}
|
|
798
799
|
if (lastChunk === null) {
|
|
799
|
-
str +=
|
|
800
|
+
str += `${chunk.bufferedStart.toFixed(2)}|${currentLetter}|`;
|
|
800
801
|
}
|
|
801
802
|
else if (lastLetter === currentLetter) {
|
|
802
803
|
if (lastChunk.bufferedEnd + roundingError < chunk.bufferedStart) {
|
|
803
|
-
str +=
|
|
804
|
-
|
|
804
|
+
str += `${lastChunk.bufferedEnd.toFixed(2)} ~ ` +
|
|
805
|
+
`${chunk.bufferedStart.toFixed(2)}|${currentLetter}|`;
|
|
805
806
|
}
|
|
806
807
|
}
|
|
807
808
|
else {
|
|
808
|
-
str +=
|
|
809
|
-
|
|
809
|
+
str += `${lastChunk.bufferedEnd.toFixed(2)} ~ ` +
|
|
810
|
+
`${chunk.bufferedStart.toFixed(2)}|${currentLetter}|`;
|
|
810
811
|
}
|
|
811
812
|
lastChunk = chunk;
|
|
812
813
|
lastLetter = currentLetter;
|
|
@@ -815,11 +816,11 @@ function prettyPrintInventory(inventory) {
|
|
|
815
816
|
if (lastChunk !== null) {
|
|
816
817
|
str += String(lastChunk.end.toFixed(2));
|
|
817
818
|
}
|
|
818
|
-
letters.forEach(
|
|
819
|
+
letters.forEach(letterInfo => {
|
|
819
820
|
var _a;
|
|
820
|
-
str +=
|
|
821
|
-
|
|
822
|
-
|
|
821
|
+
str += `\n[${letterInfo.letter}] ` +
|
|
822
|
+
`P: ${letterInfo.periodId} || R: ${letterInfo.representationId}` +
|
|
823
|
+
`(${(_a = letterInfo.bitrate) !== null && _a !== void 0 ? _a : "unknown bitrate"})`;
|
|
823
824
|
});
|
|
824
825
|
return str;
|
|
825
826
|
}
|