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,12 +14,13 @@
|
|
|
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
|
-
|
|
21
|
-
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const config_1 = require("../../../../config");
|
|
19
|
+
const is_null_or_undefined_1 = require("../../../../utils/is_null_or_undefined");
|
|
20
|
+
const segment_buffers_1 = require("../../../segment_buffers");
|
|
21
|
+
const check_for_discontinuity_1 = require("./check_for_discontinuity");
|
|
22
|
+
const get_needed_segments_1 = require("./get_needed_segments");
|
|
23
|
+
const get_segment_priority_1 = require("./get_segment_priority");
|
|
22
24
|
/**
|
|
23
25
|
* Checks on the current buffered data for the given type and Period
|
|
24
26
|
* and returns what should be done to fill the buffer according to the buffer
|
|
@@ -35,40 +37,45 @@ import getSegmentPriority from "./get_segment_priority";
|
|
|
35
37
|
* @param {Object} segmentBuffer
|
|
36
38
|
* @returns {Object}
|
|
37
39
|
*/
|
|
38
|
-
|
|
40
|
+
function getBufferStatus(content, initialWantedTime, playbackObserver, fastSwitchThreshold, bufferGoal, maxBufferSize, segmentBuffer) {
|
|
39
41
|
segmentBuffer.synchronizeInventory();
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
const { representation } = content;
|
|
43
|
+
const askedStart = playbackObserver.getIsPaused() ||
|
|
42
44
|
playbackObserver.getPlaybackRate() <= 0 ?
|
|
43
45
|
initialWantedTime - 0.1 :
|
|
44
46
|
initialWantedTime;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
const neededRange = getRangeOfNeededSegments(content, askedStart, bufferGoal);
|
|
48
|
+
const shouldRefreshManifest = representation.index.shouldRefresh(neededRange.start, neededRange.end);
|
|
47
49
|
/**
|
|
48
50
|
* Every segment awaiting an "EndOfSegment" operation, which indicates that a
|
|
49
51
|
* completely-loaded segment is still being pushed to the SegmentBuffer.
|
|
50
52
|
*/
|
|
51
|
-
|
|
52
|
-
.filter(
|
|
53
|
-
return operation.type === SegmentBufferOperation.EndOfSegment;
|
|
54
|
-
}).map(function (operation) { return operation.value; });
|
|
53
|
+
const segmentsBeingPushed = segmentBuffer.getPendingOperations()
|
|
54
|
+
.filter((operation) => operation.type === segment_buffers_1.SegmentBufferOperation.EndOfSegment).map(operation => operation.value);
|
|
55
55
|
/** Data on every segments buffered around `neededRange`. */
|
|
56
|
-
|
|
56
|
+
const bufferedSegments = getPlayableBufferedSegments({ start: Math.max(neededRange.start - 0.5, 0),
|
|
57
57
|
end: neededRange.end + 0.5 }, segmentBuffer.getInventory());
|
|
58
|
-
|
|
58
|
+
const currentPlaybackTime = playbackObserver.getCurrentTime();
|
|
59
59
|
/** Callback allowing to retrieve a segment's history in the buffer. */
|
|
60
|
-
|
|
60
|
+
const getBufferedHistory = segmentBuffer.getSegmentHistory.bind(segmentBuffer);
|
|
61
61
|
/** List of segments we will need to download. */
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
const { segmentsToLoad, segmentsOnHold, isBufferFull } = (0, get_needed_segments_1.default)({ content,
|
|
63
|
+
bufferedSegments,
|
|
64
|
+
currentPlaybackTime,
|
|
65
|
+
fastSwitchThreshold,
|
|
66
|
+
getBufferedHistory,
|
|
67
|
+
neededRange,
|
|
68
|
+
segmentsBeingPushed,
|
|
69
|
+
maxBufferSize });
|
|
70
|
+
const prioritizedNeededSegments = segmentsToLoad.map((segment) => ({
|
|
71
|
+
priority: (0, get_segment_priority_1.default)(segment.time, askedStart),
|
|
72
|
+
segment,
|
|
73
|
+
}));
|
|
67
74
|
/**
|
|
68
75
|
* `true` if the current `RepresentationStream` has loaded all the
|
|
69
76
|
* needed segments for this Representation until the end of the Period.
|
|
70
77
|
*/
|
|
71
|
-
|
|
78
|
+
const hasFinishedLoading = representation.index.isInitialized() &&
|
|
72
79
|
representation.index.isFinished() &&
|
|
73
80
|
neededRange.hasReachedPeriodEnd &&
|
|
74
81
|
prioritizedNeededSegments.length === 0 &&
|
|
@@ -77,9 +84,9 @@ export default function getBufferStatus(content, initialWantedTime, playbackObse
|
|
|
77
84
|
* Start time in seconds of the next available not-yet pushed segment.
|
|
78
85
|
* `null` if no segment is wanted for the current wanted range.
|
|
79
86
|
*/
|
|
80
|
-
|
|
87
|
+
let nextSegmentStart = null;
|
|
81
88
|
if (segmentsBeingPushed.length > 0) {
|
|
82
|
-
nextSegmentStart = Math.min
|
|
89
|
+
nextSegmentStart = Math.min(...segmentsBeingPushed.map(info => info.segment.time));
|
|
83
90
|
}
|
|
84
91
|
if (segmentsOnHold.length > 0) {
|
|
85
92
|
nextSegmentStart = nextSegmentStart !== null ?
|
|
@@ -91,9 +98,14 @@ export default function getBufferStatus(content, initialWantedTime, playbackObse
|
|
|
91
98
|
Math.min(nextSegmentStart, prioritizedNeededSegments[0].segment.time) :
|
|
92
99
|
prioritizedNeededSegments[0].segment.time;
|
|
93
100
|
}
|
|
94
|
-
|
|
95
|
-
return { imminentDiscontinuity
|
|
101
|
+
const imminentDiscontinuity = (0, check_for_discontinuity_1.default)(content, neededRange, nextSegmentStart, hasFinishedLoading, bufferedSegments);
|
|
102
|
+
return { imminentDiscontinuity,
|
|
103
|
+
hasFinishedLoading,
|
|
104
|
+
neededSegments: prioritizedNeededSegments,
|
|
105
|
+
isBufferFull,
|
|
106
|
+
shouldRefreshManifest };
|
|
96
107
|
}
|
|
108
|
+
exports.default = getBufferStatus;
|
|
97
109
|
/**
|
|
98
110
|
* Returns both the time range of segments that should be loaded (from a
|
|
99
111
|
* starting position to an ending position) and whether the end of the Period is
|
|
@@ -105,18 +117,18 @@ export default function getBufferStatus(content, initialWantedTime, playbackObse
|
|
|
105
117
|
*/
|
|
106
118
|
function getRangeOfNeededSegments(content, initialWantedTime, bufferGoal) {
|
|
107
119
|
var _a;
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
120
|
+
let wantedStartPosition;
|
|
121
|
+
const { manifest, period, representation } = content;
|
|
122
|
+
const lastIndexPosition = representation.index.getLastAvailablePosition();
|
|
123
|
+
const representationIndex = representation.index;
|
|
112
124
|
// There is an exception for when the current initially wanted time is already
|
|
113
125
|
// after the last position with segments AND when we're playing the absolute
|
|
114
126
|
// last Period in the Manifest.
|
|
115
127
|
// In that case, we want to actually request at least the last segment to
|
|
116
128
|
// avoid ending the last Period - and by extension the content - with a
|
|
117
129
|
// segment which isn't the last one.
|
|
118
|
-
if (!
|
|
119
|
-
|
|
130
|
+
if (!(0, is_null_or_undefined_1.default)(lastIndexPosition) &&
|
|
131
|
+
segment_buffers_1.default.isNative(content.adaptation.type) &&
|
|
120
132
|
initialWantedTime >= lastIndexPosition &&
|
|
121
133
|
representationIndex.isInitialized() &&
|
|
122
134
|
representationIndex.isFinished() &&
|
|
@@ -126,8 +138,8 @@ function getRangeOfNeededSegments(content, initialWantedTime, bufferGoal) {
|
|
|
126
138
|
else {
|
|
127
139
|
wantedStartPosition = initialWantedTime - 0.1;
|
|
128
140
|
}
|
|
129
|
-
|
|
130
|
-
|
|
141
|
+
const wantedEndPosition = wantedStartPosition + bufferGoal;
|
|
142
|
+
let hasReachedPeriodEnd;
|
|
131
143
|
if (!representation.index.isInitialized() ||
|
|
132
144
|
!representation.index.isFinished() ||
|
|
133
145
|
period.end === undefined) {
|
|
@@ -149,7 +161,8 @@ function getRangeOfNeededSegments(content, initialWantedTime, bufferGoal) {
|
|
|
149
161
|
hasReachedPeriodEnd = wantedEndPosition >= lastIndexPosition;
|
|
150
162
|
}
|
|
151
163
|
return { start: Math.max(wantedStartPosition, period.start),
|
|
152
|
-
end: Math.min(wantedEndPosition, (_a = period.end) !== null && _a !== void 0 ? _a : Infinity),
|
|
164
|
+
end: Math.min(wantedEndPosition, (_a = period.end) !== null && _a !== void 0 ? _a : Infinity),
|
|
165
|
+
hasReachedPeriodEnd };
|
|
153
166
|
}
|
|
154
167
|
/**
|
|
155
168
|
* Returns `true` if the given Period is both:
|
|
@@ -176,21 +189,21 @@ function isPeriodTheCurrentAndLastOne(manifest, period, time) {
|
|
|
176
189
|
* @returns {Array.<Object>}
|
|
177
190
|
*/
|
|
178
191
|
function getPlayableBufferedSegments(neededRange, segmentInventory) {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
for (
|
|
185
|
-
|
|
186
|
-
|
|
192
|
+
const { MINIMUM_SEGMENT_SIZE } = config_1.default.getCurrent();
|
|
193
|
+
const segmentRoundingError = Math.max(1 / 60, MINIMUM_SEGMENT_SIZE);
|
|
194
|
+
const minEnd = neededRange.start + segmentRoundingError;
|
|
195
|
+
const maxStart = neededRange.end - segmentRoundingError;
|
|
196
|
+
const overlappingChunks = [];
|
|
197
|
+
for (let i = segmentInventory.length - 1; i >= 0; i--) {
|
|
198
|
+
const eltInventory = segmentInventory[i];
|
|
199
|
+
const { representation } = eltInventory.infos;
|
|
187
200
|
if (!eltInventory.partiallyPushed &&
|
|
188
201
|
representation.decipherable !== false &&
|
|
189
202
|
representation.isSupported) {
|
|
190
|
-
|
|
191
|
-
|
|
203
|
+
const inventorySegment = eltInventory.infos.segment;
|
|
204
|
+
const eltInventoryStart = inventorySegment.time /
|
|
192
205
|
inventorySegment.timescale;
|
|
193
|
-
|
|
206
|
+
const eltInventoryEnd = !inventorySegment.complete ?
|
|
194
207
|
eltInventory.end :
|
|
195
208
|
eltInventoryStart + inventorySegment.duration / inventorySegment.timescale;
|
|
196
209
|
if ((eltInventoryEnd > minEnd && eltInventoryStart < maxStart) ||
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Copyright 2015 CANAL+ Group
|
|
3
4
|
*
|
|
@@ -13,10 +14,11 @@
|
|
|
13
14
|
* See the License for the specific language governing permissions and
|
|
14
15
|
* limitations under the License.
|
|
15
16
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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 object_assign_1 = require("../../../../utils/object_assign");
|
|
20
22
|
/**
|
|
21
23
|
* Return the list of segments that can currently be downloaded to fill holes
|
|
22
24
|
* in the buffer in the given range, including already-pushed segments currently
|
|
@@ -27,59 +29,58 @@ import objectAssign from "../../../../utils/object_assign";
|
|
|
27
29
|
* @param {Object} args
|
|
28
30
|
* @returns {Array.<Object>}
|
|
29
31
|
*/
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
var availableSegmentsForRange = representation.index
|
|
32
|
+
function getNeededSegments({ bufferedSegments, content, currentPlaybackTime, fastSwitchThreshold, getBufferedHistory, neededRange, segmentsBeingPushed, maxBufferSize, }) {
|
|
33
|
+
const { adaptation, representation } = content;
|
|
34
|
+
let availableBufferSize = getAvailableBufferSize(bufferedSegments, segmentsBeingPushed, maxBufferSize);
|
|
35
|
+
const availableSegmentsForRange = representation.index
|
|
35
36
|
.getSegments(neededRange.start, neededRange.end - neededRange.start);
|
|
36
37
|
// Remove from `bufferedSegments` any segments we would prefer to replace:
|
|
37
38
|
// - segments in the wrong track / bad quality
|
|
38
39
|
// - garbage-collected segments
|
|
39
|
-
|
|
40
|
-
.filter(
|
|
41
|
-
.filter(
|
|
42
|
-
|
|
40
|
+
const segmentsToKeep = bufferedSegments
|
|
41
|
+
.filter((bufferedSegment) => !shouldContentBeReplaced(bufferedSegment.infos, content, currentPlaybackTime, fastSwitchThreshold))
|
|
42
|
+
.filter((currentSeg, i, consideredSegments) => {
|
|
43
|
+
const prevSeg = i === 0 ? null :
|
|
43
44
|
consideredSegments[i - 1];
|
|
44
|
-
|
|
45
|
+
const nextSeg = i >= consideredSegments.length - 1 ? null :
|
|
45
46
|
consideredSegments[i + 1];
|
|
46
|
-
|
|
47
|
+
let lazySegmentHistory = null;
|
|
47
48
|
if (doesStartSeemGarbageCollected(currentSeg, prevSeg, neededRange.start)) {
|
|
48
49
|
lazySegmentHistory = getBufferedHistory(currentSeg.infos);
|
|
49
50
|
if (shouldReloadSegmentGCedAtTheStart(lazySegmentHistory, currentSeg.bufferedStart)) {
|
|
50
51
|
return false;
|
|
51
52
|
}
|
|
52
|
-
|
|
53
|
+
log_1.default.debug("Stream: skipping segment gc-ed at the start", currentSeg.start, currentSeg.bufferedStart);
|
|
53
54
|
}
|
|
54
55
|
if (doesEndSeemGarbageCollected(currentSeg, nextSeg, neededRange.end)) {
|
|
55
56
|
lazySegmentHistory = lazySegmentHistory !== null && lazySegmentHistory !== void 0 ? lazySegmentHistory : getBufferedHistory(currentSeg.infos);
|
|
56
57
|
if (shouldReloadSegmentGCedAtTheEnd(lazySegmentHistory, currentSeg.bufferedEnd)) {
|
|
57
58
|
return false;
|
|
58
59
|
}
|
|
59
|
-
|
|
60
|
+
log_1.default.debug("Stream: skipping segment gc-ed at the end", currentSeg.end, currentSeg.bufferedEnd);
|
|
60
61
|
}
|
|
61
62
|
return true;
|
|
62
63
|
});
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
const { MINIMUM_SEGMENT_SIZE, MIN_BUFFER_AHEAD } = config_1.default.getCurrent();
|
|
65
|
+
let shouldStopLoadingSegments = false;
|
|
65
66
|
/**
|
|
66
67
|
* Epsilon compensating for rounding errors when comparing the start and end
|
|
67
68
|
* time of multiple segments.
|
|
68
69
|
*/
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
const ROUNDING_ERROR = Math.min(1 / 60, MINIMUM_SEGMENT_SIZE);
|
|
71
|
+
let isBufferFull = false;
|
|
72
|
+
const segmentsOnHold = [];
|
|
73
|
+
const segmentsToLoad = availableSegmentsForRange.filter(segment => {
|
|
74
|
+
const contentObject = (0, object_assign_1.default)({ segment }, content);
|
|
74
75
|
// First, check that the segment is not already being pushed
|
|
75
76
|
if (segmentsBeingPushed.length > 0) {
|
|
76
|
-
|
|
77
|
-
.some(
|
|
77
|
+
const isAlreadyBeingPushed = segmentsBeingPushed
|
|
78
|
+
.some((pendingSegment) => (0, manifest_1.areSameContent)(contentObject, pendingSegment));
|
|
78
79
|
if (isAlreadyBeingPushed) {
|
|
79
80
|
return false;
|
|
80
81
|
}
|
|
81
82
|
}
|
|
82
|
-
|
|
83
|
+
const { duration, time, end } = segment;
|
|
83
84
|
if (segment.isInit) {
|
|
84
85
|
return true; // never skip initialization segments
|
|
85
86
|
}
|
|
@@ -93,12 +94,12 @@ export default function getNeededSegments(_a) {
|
|
|
93
94
|
// Check if the same segment from another Representation is not already
|
|
94
95
|
// being pushed.
|
|
95
96
|
if (segmentsBeingPushed.length > 0) {
|
|
96
|
-
|
|
97
|
+
const waitForPushedSegment = segmentsBeingPushed.some((pendingSegment) => {
|
|
97
98
|
if (pendingSegment.period.id !== content.period.id ||
|
|
98
99
|
pendingSegment.adaptation.id !== content.adaptation.id) {
|
|
99
100
|
return false;
|
|
100
101
|
}
|
|
101
|
-
|
|
102
|
+
const { segment: oldSegment } = pendingSegment;
|
|
102
103
|
if ((oldSegment.time - ROUNDING_ERROR) > time) {
|
|
103
104
|
return false;
|
|
104
105
|
}
|
|
@@ -112,22 +113,22 @@ export default function getNeededSegments(_a) {
|
|
|
112
113
|
}
|
|
113
114
|
}
|
|
114
115
|
// check if the segment is already downloaded
|
|
115
|
-
for (
|
|
116
|
-
|
|
117
|
-
|
|
116
|
+
for (let i = 0; i < segmentsToKeep.length; i++) {
|
|
117
|
+
const completeSeg = segmentsToKeep[i];
|
|
118
|
+
const areFromSamePeriod = completeSeg.infos.period.id === content.period.id;
|
|
118
119
|
// Check if content are from same period, as there can't be overlapping
|
|
119
120
|
// periods, we should consider a segment as already downloaded if
|
|
120
121
|
// it is from same period (but can be from different adaptation or
|
|
121
122
|
// representation)
|
|
122
123
|
if (areFromSamePeriod) {
|
|
123
|
-
|
|
124
|
+
const completeSegInfos = completeSeg.infos.segment;
|
|
124
125
|
if (time - completeSegInfos.time > -ROUNDING_ERROR &&
|
|
125
126
|
completeSegInfos.end - end > -ROUNDING_ERROR) {
|
|
126
127
|
return false; // already downloaded
|
|
127
128
|
}
|
|
128
129
|
}
|
|
129
130
|
}
|
|
130
|
-
|
|
131
|
+
const estimatedSegmentSize = (duration * content.representation.bitrate); // in bits
|
|
131
132
|
if (availableBufferSize - estimatedSegmentSize < 0) {
|
|
132
133
|
isBufferFull = true;
|
|
133
134
|
if (time > neededRange.start + MIN_BUFFER_AHEAD) {
|
|
@@ -137,13 +138,13 @@ export default function getNeededSegments(_a) {
|
|
|
137
138
|
}
|
|
138
139
|
}
|
|
139
140
|
// check if the browser is not just garbage collecting it
|
|
140
|
-
|
|
141
|
+
const segmentHistory = getBufferedHistory(contentObject);
|
|
141
142
|
if (segmentHistory.length > 1) {
|
|
142
|
-
|
|
143
|
-
|
|
143
|
+
const lastTimeItWasPushed = segmentHistory[segmentHistory.length - 1];
|
|
144
|
+
const beforeLastTimeItWasPushed = segmentHistory[segmentHistory.length - 2];
|
|
144
145
|
if (lastTimeItWasPushed.buffered === null &&
|
|
145
146
|
beforeLastTimeItWasPushed.buffered === null) {
|
|
146
|
-
|
|
147
|
+
log_1.default.warn("Stream: Segment GCed multiple times in a row, ignoring it.", "If this happens a lot and lead to unpleasant experience, please " +
|
|
147
148
|
" check your device's available memory. If it's low when this message " +
|
|
148
149
|
"is emitted, you might want to update the RxPlayer's settings (" +
|
|
149
150
|
"`maxBufferAhead`, `maxVideoBufferSize` etc.) so less memory is used " +
|
|
@@ -153,12 +154,12 @@ export default function getNeededSegments(_a) {
|
|
|
153
154
|
}
|
|
154
155
|
}
|
|
155
156
|
// check if there is an hole in place of the segment currently
|
|
156
|
-
for (
|
|
157
|
-
|
|
157
|
+
for (let i = 0; i < segmentsToKeep.length; i++) {
|
|
158
|
+
const completeSeg = segmentsToKeep[i];
|
|
158
159
|
// For the first already-loaded segment, take the first one ending after
|
|
159
160
|
// this one' s start
|
|
160
161
|
if ((completeSeg.end + ROUNDING_ERROR) > time) {
|
|
161
|
-
|
|
162
|
+
const shouldLoad = completeSeg.start > time + ROUNDING_ERROR ||
|
|
162
163
|
getLastContiguousSegment(segmentsToKeep, i).end <
|
|
163
164
|
end - ROUNDING_ERROR;
|
|
164
165
|
if (shouldLoad) {
|
|
@@ -170,8 +171,9 @@ export default function getNeededSegments(_a) {
|
|
|
170
171
|
availableBufferSize -= estimatedSegmentSize;
|
|
171
172
|
return true;
|
|
172
173
|
});
|
|
173
|
-
return { segmentsToLoad
|
|
174
|
+
return { segmentsToLoad, segmentsOnHold, isBufferFull };
|
|
174
175
|
}
|
|
176
|
+
exports.default = getNeededSegments;
|
|
175
177
|
/**
|
|
176
178
|
* Compute the estimated available buffer size in memory in kilobytes
|
|
177
179
|
* @param bufferedSegments
|
|
@@ -180,15 +182,15 @@ export default function getNeededSegments(_a) {
|
|
|
180
182
|
* @returns availableBufferSize in bits
|
|
181
183
|
*/
|
|
182
184
|
function getAvailableBufferSize(bufferedSegments, segmentsBeingPushed, maxVideoBufferSize) {
|
|
183
|
-
|
|
184
|
-
availableBufferSize -= segmentsBeingPushed.reduce(
|
|
185
|
-
|
|
185
|
+
let availableBufferSize = maxVideoBufferSize * 8000; // in bits
|
|
186
|
+
availableBufferSize -= segmentsBeingPushed.reduce((size, segment) => {
|
|
187
|
+
const { bitrate } = segment.representation;
|
|
186
188
|
// Not taking into account the fact that the segment
|
|
187
189
|
// can still be generated and the duration not fully exact
|
|
188
|
-
|
|
190
|
+
const { duration } = segment.segment;
|
|
189
191
|
return size + (bitrate * duration);
|
|
190
192
|
}, 0);
|
|
191
|
-
return bufferedSegments.reduce(
|
|
193
|
+
return bufferedSegments.reduce((size, chunk) => {
|
|
192
194
|
if (chunk.chunkSize !== undefined) {
|
|
193
195
|
return size - (chunk.chunkSize * 8); // in bits
|
|
194
196
|
}
|
|
@@ -205,13 +207,13 @@ function getAvailableBufferSize(bufferedSegments, segmentsBeingPushed, maxVideoB
|
|
|
205
207
|
* @returns {Object}
|
|
206
208
|
*/
|
|
207
209
|
function getLastContiguousSegment(bufferedSegments, startIndex) {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
+
let j = startIndex + 1;
|
|
211
|
+
const { MINIMUM_SEGMENT_SIZE } = config_1.default.getCurrent();
|
|
210
212
|
/**
|
|
211
213
|
* Epsilon compensating for rounding errors when comparing the start and end
|
|
212
214
|
* time of multiple segments.
|
|
213
215
|
*/
|
|
214
|
-
|
|
216
|
+
const ROUNDING_ERROR = Math.min(1 / 60, MINIMUM_SEGMENT_SIZE);
|
|
215
217
|
// go through all contiguous segments and take the last one
|
|
216
218
|
while (j < bufferedSegments.length - 1 &&
|
|
217
219
|
(bufferedSegments[j - 1].end + ROUNDING_ERROR) >
|
|
@@ -231,11 +233,11 @@ function getLastContiguousSegment(bufferedSegments, startIndex) {
|
|
|
231
233
|
* @returns {boolean}
|
|
232
234
|
*/
|
|
233
235
|
function shouldContentBeReplaced(oldContent, currentContent, currentPlaybackTime, fastSwitchThreshold) {
|
|
234
|
-
|
|
236
|
+
const { CONTENT_REPLACEMENT_PADDING } = config_1.default.getCurrent();
|
|
235
237
|
if (oldContent.period.id !== currentContent.period.id) {
|
|
236
238
|
return false; // keep segments from another Period by default.
|
|
237
239
|
}
|
|
238
|
-
|
|
240
|
+
const { segment } = oldContent;
|
|
239
241
|
if (segment.time < (currentPlaybackTime + CONTENT_REPLACEMENT_PADDING)) {
|
|
240
242
|
return false;
|
|
241
243
|
}
|
|
@@ -255,11 +257,11 @@ function shouldContentBeReplaced(oldContent, currentContent, currentPlaybackTime
|
|
|
255
257
|
* @returns {boolean}
|
|
256
258
|
*/
|
|
257
259
|
function canFastSwitch(oldSegmentRepresentation, newSegmentRepresentation, fastSwitchThreshold) {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
+
const oldContentBitrate = oldSegmentRepresentation.bitrate;
|
|
261
|
+
const { BITRATE_REBUFFERING_RATIO } = config_1.default.getCurrent();
|
|
260
262
|
if (fastSwitchThreshold === undefined) {
|
|
261
263
|
// only re-load comparatively-poor bitrates for the same Adaptation.
|
|
262
|
-
|
|
264
|
+
const bitrateCeil = oldContentBitrate * BITRATE_REBUFFERING_RATIO;
|
|
263
265
|
return newSegmentRepresentation.bitrate > bitrateCeil;
|
|
264
266
|
}
|
|
265
267
|
return oldContentBitrate < fastSwitchThreshold &&
|
|
@@ -278,9 +280,9 @@ function canFastSwitch(oldSegmentRepresentation, newSegmentRepresentation, fastS
|
|
|
278
280
|
* that time, we will return `false`.
|
|
279
281
|
*/
|
|
280
282
|
function doesStartSeemGarbageCollected(currentSeg, prevSeg, maximumStartTime) {
|
|
281
|
-
|
|
283
|
+
const { MAX_TIME_MISSING_FROM_COMPLETE_SEGMENT } = config_1.default.getCurrent();
|
|
282
284
|
if (currentSeg.bufferedStart === undefined) {
|
|
283
|
-
|
|
285
|
+
log_1.default.warn("Stream: Start of a segment unknown. " +
|
|
284
286
|
"Assuming it is garbage collected by default.", currentSeg.start);
|
|
285
287
|
return true;
|
|
286
288
|
}
|
|
@@ -291,7 +293,7 @@ function doesStartSeemGarbageCollected(currentSeg, prevSeg, maximumStartTime) {
|
|
|
291
293
|
if (maximumStartTime < currentSeg.bufferedStart &&
|
|
292
294
|
currentSeg.bufferedStart - currentSeg.start >
|
|
293
295
|
MAX_TIME_MISSING_FROM_COMPLETE_SEGMENT) {
|
|
294
|
-
|
|
296
|
+
log_1.default.info("Stream: The start of the wanted segment has been garbage collected", currentSeg.start, currentSeg.bufferedStart);
|
|
295
297
|
return true;
|
|
296
298
|
}
|
|
297
299
|
return false;
|
|
@@ -309,9 +311,9 @@ function doesStartSeemGarbageCollected(currentSeg, prevSeg, maximumStartTime) {
|
|
|
309
311
|
* that time, we will return `false`.
|
|
310
312
|
*/
|
|
311
313
|
function doesEndSeemGarbageCollected(currentSeg, nextSeg, minimumEndTime) {
|
|
312
|
-
|
|
314
|
+
const { MAX_TIME_MISSING_FROM_COMPLETE_SEGMENT } = config_1.default.getCurrent();
|
|
313
315
|
if (currentSeg.bufferedEnd === undefined) {
|
|
314
|
-
|
|
316
|
+
log_1.default.warn("Stream: End of a segment unknown. " +
|
|
315
317
|
"Assuming it is garbage collected by default.", currentSeg.end);
|
|
316
318
|
return true;
|
|
317
319
|
}
|
|
@@ -321,7 +323,7 @@ function doesEndSeemGarbageCollected(currentSeg, nextSeg, minimumEndTime) {
|
|
|
321
323
|
}
|
|
322
324
|
if (minimumEndTime > currentSeg.bufferedEnd &&
|
|
323
325
|
currentSeg.end - currentSeg.bufferedEnd > MAX_TIME_MISSING_FROM_COMPLETE_SEGMENT) {
|
|
324
|
-
|
|
326
|
+
log_1.default.info("Stream: The end of the wanted segment has been garbage collected", currentSeg.start, currentSeg.bufferedStart);
|
|
325
327
|
return true;
|
|
326
328
|
}
|
|
327
329
|
return false;
|
|
@@ -348,8 +350,8 @@ function shouldReloadSegmentGCedAtTheStart(segmentEntries, currentBufferedStart)
|
|
|
348
350
|
if (segmentEntries.length < 2) {
|
|
349
351
|
return true;
|
|
350
352
|
}
|
|
351
|
-
|
|
352
|
-
|
|
353
|
+
const lastEntry = segmentEntries[segmentEntries.length - 1];
|
|
354
|
+
const lastBufferedStart = (_a = lastEntry.buffered) === null || _a === void 0 ? void 0 : _a.start;
|
|
353
355
|
// If the current segment's buffered start is much higher than what it
|
|
354
356
|
// initially was when we pushed it, the segment has a very high chance of
|
|
355
357
|
// having been truly garbage-collected.
|
|
@@ -358,8 +360,8 @@ function shouldReloadSegmentGCedAtTheStart(segmentEntries, currentBufferedStart)
|
|
|
358
360
|
currentBufferedStart - lastBufferedStart > 0.05) {
|
|
359
361
|
return true;
|
|
360
362
|
}
|
|
361
|
-
|
|
362
|
-
|
|
363
|
+
const prevEntry = segmentEntries[segmentEntries.length - 2];
|
|
364
|
+
const prevBufferedStart = (_b = prevEntry.buffered) === null || _b === void 0 ? void 0 : _b.start;
|
|
363
365
|
if (prevBufferedStart === undefined || lastBufferedStart === undefined) {
|
|
364
366
|
return true;
|
|
365
367
|
}
|
|
@@ -397,8 +399,8 @@ function shouldReloadSegmentGCedAtTheEnd(segmentEntries, currentBufferedEnd) {
|
|
|
397
399
|
if (segmentEntries.length < 2) {
|
|
398
400
|
return true;
|
|
399
401
|
}
|
|
400
|
-
|
|
401
|
-
|
|
402
|
+
const lastEntry = segmentEntries[segmentEntries.length - 1];
|
|
403
|
+
const lastBufferedEnd = (_a = lastEntry.buffered) === null || _a === void 0 ? void 0 : _a.end;
|
|
402
404
|
// If the current segment's buffered end is much lower than what it
|
|
403
405
|
// initially was when we pushed it, the segment has a very high chance of
|
|
404
406
|
// having been truly garbage-collected.
|
|
@@ -407,8 +409,8 @@ function shouldReloadSegmentGCedAtTheEnd(segmentEntries, currentBufferedEnd) {
|
|
|
407
409
|
lastBufferedEnd - currentBufferedEnd > 0.05) {
|
|
408
410
|
return true;
|
|
409
411
|
}
|
|
410
|
-
|
|
411
|
-
|
|
412
|
+
const prevEntry = segmentEntries[segmentEntries.length - 2];
|
|
413
|
+
const prevBufferedEnd = (_b = prevEntry.buffered) === null || _b === void 0 ? void 0 : _b.end;
|
|
412
414
|
if (prevBufferedEnd === undefined || lastBufferedEnd === undefined) {
|
|
413
415
|
return true;
|
|
414
416
|
}
|
|
@@ -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 config_1 = require("../../../../config");
|
|
17
19
|
/**
|
|
18
20
|
* Calculate the priority number for a given segment start time, in function of
|
|
19
21
|
* the distance with the wanted starting timestamp.
|
|
@@ -26,13 +28,14 @@ import config from "../../../../config";
|
|
|
26
28
|
* @param {Object} wantedStartTimestamp
|
|
27
29
|
* @returns {number}
|
|
28
30
|
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
for (
|
|
31
|
+
function getSegmentPriority(segmentTime, wantedStartTimestamp) {
|
|
32
|
+
const distance = segmentTime - wantedStartTimestamp;
|
|
33
|
+
const { SEGMENT_PRIORITIES_STEPS } = config_1.default.getCurrent();
|
|
34
|
+
for (let priority = 0; priority < SEGMENT_PRIORITIES_STEPS.length; priority++) {
|
|
33
35
|
if (distance < SEGMENT_PRIORITIES_STEPS[priority]) {
|
|
34
36
|
return priority;
|
|
35
37
|
}
|
|
36
38
|
}
|
|
37
39
|
return SEGMENT_PRIORITIES_STEPS.length;
|
|
38
40
|
}
|
|
41
|
+
exports.default = getSegmentPriority;
|