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,73 +14,18 @@
|
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
29
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
30
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
31
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
32
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
33
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
34
|
-
});
|
|
35
|
-
};
|
|
36
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
37
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
38
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
39
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
40
|
-
function step(op) {
|
|
41
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
42
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
43
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
44
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
45
|
-
switch (op[0]) {
|
|
46
|
-
case 0: case 1: t = op; break;
|
|
47
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
48
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
49
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
50
|
-
default:
|
|
51
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
52
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
53
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
54
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
55
|
-
if (t[2]) _.ops.pop();
|
|
56
|
-
_.trys.pop(); continue;
|
|
57
|
-
}
|
|
58
|
-
op = body.call(thisArg, _);
|
|
59
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
60
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
64
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
65
|
-
if (ar || !(i in from)) {
|
|
66
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
67
|
-
ar[i] = from[i];
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
71
|
-
};
|
|
72
|
-
import nextTick from "next-tick";
|
|
73
|
-
import config from "../../../config";
|
|
74
|
-
import { MediaError } from "../../../errors";
|
|
75
|
-
import log from "../../../log";
|
|
76
|
-
import { createMappedReference, } from "../../../utils/reference";
|
|
77
|
-
import SortedList from "../../../utils/sorted_list";
|
|
78
|
-
import TaskCanceller from "../../../utils/task_canceller";
|
|
79
|
-
import WeakMapMemory from "../../../utils/weak_map_memory";
|
|
80
|
-
import { BufferGarbageCollector, } from "../../segment_buffers";
|
|
81
|
-
import PeriodStream from "../period";
|
|
82
|
-
import getTimeRangesForContent from "./get_time_ranges_for_content";
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const next_tick_1 = require("next-tick");
|
|
19
|
+
const config_1 = require("../../../config");
|
|
20
|
+
const errors_1 = require("../../../errors");
|
|
21
|
+
const log_1 = require("../../../log");
|
|
22
|
+
const reference_1 = require("../../../utils/reference");
|
|
23
|
+
const sorted_list_1 = require("../../../utils/sorted_list");
|
|
24
|
+
const task_canceller_1 = require("../../../utils/task_canceller");
|
|
25
|
+
const weak_map_memory_1 = require("../../../utils/weak_map_memory");
|
|
26
|
+
const segment_buffers_1 = require("../../segment_buffers");
|
|
27
|
+
const period_1 = require("../period");
|
|
28
|
+
const get_time_ranges_for_content_1 = require("./get_time_ranges_for_content");
|
|
83
29
|
/**
|
|
84
30
|
* Create and manage the various "Streams" needed for the content to
|
|
85
31
|
* play:
|
|
@@ -122,32 +68,29 @@ import getTimeRangesForContent from "./get_time_ranges_for_content";
|
|
|
122
68
|
* when triggered, to immediately stop all operations the `PeriodStream` is
|
|
123
69
|
* doing.
|
|
124
70
|
*/
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
71
|
+
function StreamOrchestrator(content, playbackObserver, representationEstimator, segmentBuffersStore, segmentFetcherCreator, options, callbacks, orchestratorCancelSignal) {
|
|
72
|
+
const { manifest, initialPeriod } = content;
|
|
73
|
+
const { maxBufferAhead, maxBufferBehind, wantedBufferAhead, maxVideoBufferSize } = options;
|
|
74
|
+
const { MAXIMUM_MAX_BUFFER_AHEAD, MAXIMUM_MAX_BUFFER_BEHIND } = config_1.default.getCurrent();
|
|
129
75
|
// Keep track of a unique BufferGarbageCollector created per
|
|
130
76
|
// SegmentBuffer.
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
77
|
+
const garbageCollectors = new weak_map_memory_1.default((segmentBuffer) => {
|
|
78
|
+
const { bufferType } = segmentBuffer;
|
|
79
|
+
const defaultMaxBehind = MAXIMUM_MAX_BUFFER_BEHIND[bufferType] != null ?
|
|
134
80
|
MAXIMUM_MAX_BUFFER_BEHIND[bufferType] :
|
|
135
81
|
Infinity;
|
|
136
|
-
|
|
82
|
+
const defaultMaxAhead = MAXIMUM_MAX_BUFFER_AHEAD[bufferType] != null ?
|
|
137
83
|
MAXIMUM_MAX_BUFFER_AHEAD[bufferType] :
|
|
138
84
|
Infinity;
|
|
139
|
-
return
|
|
140
|
-
BufferGarbageCollector({ segmentBuffer
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
maxBufferAhead: createMappedReference(maxBufferAhead,
|
|
144
|
-
return Math.min(val, defaultMaxAhead);
|
|
145
|
-
}, gcCancelSignal) }, gcCancelSignal);
|
|
85
|
+
return (gcCancelSignal) => {
|
|
86
|
+
(0, segment_buffers_1.BufferGarbageCollector)({ segmentBuffer,
|
|
87
|
+
playbackObserver,
|
|
88
|
+
maxBufferBehind: (0, reference_1.createMappedReference)(maxBufferBehind, (val) => Math.min(val, defaultMaxBehind), gcCancelSignal),
|
|
89
|
+
maxBufferAhead: (0, reference_1.createMappedReference)(maxBufferAhead, (val) => Math.min(val, defaultMaxAhead), gcCancelSignal) }, gcCancelSignal);
|
|
146
90
|
};
|
|
147
91
|
});
|
|
148
92
|
// Create automatically the right `PeriodStream` for every possible types
|
|
149
|
-
for (
|
|
150
|
-
var bufferType = _b[_i];
|
|
93
|
+
for (const bufferType of segmentBuffersStore.getBufferTypes()) {
|
|
151
94
|
manageEveryStreams(bufferType, initialPeriod);
|
|
152
95
|
}
|
|
153
96
|
/**
|
|
@@ -161,7 +104,7 @@ export default function StreamOrchestrator(content, playbackObserver, representa
|
|
|
161
104
|
*/
|
|
162
105
|
function manageEveryStreams(bufferType, basePeriod) {
|
|
163
106
|
/** Each Period for which there is currently a Stream, chronologically */
|
|
164
|
-
|
|
107
|
+
const periodList = new sorted_list_1.default((a, b) => a.start - b.start);
|
|
165
108
|
/**
|
|
166
109
|
* When set to `true`, all the currently active PeriodStream will be destroyed
|
|
167
110
|
* and re-created from the new current position if we detect it to be out of
|
|
@@ -169,41 +112,40 @@ export default function StreamOrchestrator(content, playbackObserver, representa
|
|
|
169
112
|
* This is set to false when we're in the process of creating the first
|
|
170
113
|
* PeriodStream, to avoid interferences while no PeriodStream is available.
|
|
171
114
|
*/
|
|
172
|
-
|
|
115
|
+
let enableOutOfBoundsCheck = false;
|
|
173
116
|
/** Cancels currently created `PeriodStream`s. */
|
|
174
|
-
|
|
117
|
+
let currentCanceller = new task_canceller_1.default();
|
|
175
118
|
currentCanceller.linkToSignal(orchestratorCancelSignal);
|
|
176
119
|
// Restart the current Stream when the wanted time is in another period
|
|
177
120
|
// than the ones already considered
|
|
178
|
-
playbackObserver.listen(
|
|
179
|
-
var
|
|
180
|
-
|
|
181
|
-
var time = (_b = position.pending) !== null && _b !== void 0 ? _b : position.last;
|
|
121
|
+
playbackObserver.listen(({ position }) => {
|
|
122
|
+
var _a, _b;
|
|
123
|
+
const time = (_a = position.pending) !== null && _a !== void 0 ? _a : position.last;
|
|
182
124
|
if (!enableOutOfBoundsCheck || !isOutOfPeriodList(time)) {
|
|
183
125
|
return;
|
|
184
126
|
}
|
|
185
|
-
|
|
127
|
+
log_1.default.info("Stream: Destroying all PeriodStreams due to out of bounds situation", bufferType, time);
|
|
186
128
|
enableOutOfBoundsCheck = false;
|
|
187
129
|
while (periodList.length() > 0) {
|
|
188
|
-
|
|
130
|
+
const period = periodList.get(periodList.length() - 1);
|
|
189
131
|
periodList.removeElement(period);
|
|
190
|
-
callbacks.periodStreamCleared({ type: bufferType, manifest
|
|
132
|
+
callbacks.periodStreamCleared({ type: bufferType, manifest, period });
|
|
191
133
|
}
|
|
192
134
|
currentCanceller.cancel();
|
|
193
|
-
currentCanceller = new
|
|
135
|
+
currentCanceller = new task_canceller_1.default();
|
|
194
136
|
currentCanceller.linkToSignal(orchestratorCancelSignal);
|
|
195
|
-
|
|
137
|
+
const nextPeriod = (_b = manifest.getPeriodForTime(time)) !== null && _b !== void 0 ? _b : manifest.getNextPeriod(time);
|
|
196
138
|
if (nextPeriod === undefined) {
|
|
197
|
-
|
|
139
|
+
log_1.default.warn("Stream: The wanted position is not found in the Manifest.");
|
|
198
140
|
return;
|
|
199
141
|
}
|
|
200
142
|
launchConsecutiveStreamsForPeriod(nextPeriod);
|
|
201
143
|
}, { clearSignal: orchestratorCancelSignal, includeLastObservation: true });
|
|
202
|
-
manifest.addEventListener("decipherabilityUpdate",
|
|
144
|
+
manifest.addEventListener("decipherabilityUpdate", (evt) => {
|
|
203
145
|
if (orchestratorCancelSignal.isCancelled()) {
|
|
204
146
|
return;
|
|
205
147
|
}
|
|
206
|
-
onDecipherabilityUpdates(evt).catch(
|
|
148
|
+
onDecipherabilityUpdates(evt).catch(err => {
|
|
207
149
|
if (orchestratorCancelSignal.isCancelled()) {
|
|
208
150
|
return;
|
|
209
151
|
}
|
|
@@ -216,10 +158,10 @@ export default function StreamOrchestrator(content, playbackObserver, representa
|
|
|
216
158
|
* @param {Object} period
|
|
217
159
|
*/
|
|
218
160
|
function launchConsecutiveStreamsForPeriod(period) {
|
|
219
|
-
|
|
161
|
+
const consecutivePeriodStreamCb = Object.assign(Object.assign({}, callbacks), { waitingMediaSourceReload(payload) {
|
|
220
162
|
// Only reload the MediaSource when the more immediately required
|
|
221
163
|
// Period is the one it is asked for
|
|
222
|
-
|
|
164
|
+
const firstPeriod = periodList.head();
|
|
223
165
|
if (firstPeriod === undefined ||
|
|
224
166
|
firstPeriod.id !== payload.period.id) {
|
|
225
167
|
callbacks.lockedStream({ bufferType: payload.bufferType,
|
|
@@ -232,14 +174,17 @@ export default function StreamOrchestrator(content, playbackObserver, representa
|
|
|
232
174
|
maximumPosition: payload.stayInPeriod ? payload.period.end : undefined,
|
|
233
175
|
});
|
|
234
176
|
}
|
|
235
|
-
},
|
|
177
|
+
},
|
|
178
|
+
periodStreamReady(payload) {
|
|
236
179
|
enableOutOfBoundsCheck = true;
|
|
237
180
|
periodList.add(payload.period);
|
|
238
181
|
callbacks.periodStreamReady(payload);
|
|
239
|
-
},
|
|
182
|
+
},
|
|
183
|
+
periodStreamCleared(payload) {
|
|
240
184
|
periodList.removeElement(payload.period);
|
|
241
185
|
callbacks.periodStreamCleared(payload);
|
|
242
|
-
},
|
|
186
|
+
},
|
|
187
|
+
error(err) {
|
|
243
188
|
currentCanceller.cancel();
|
|
244
189
|
callbacks.error(err);
|
|
245
190
|
} });
|
|
@@ -253,8 +198,8 @@ export default function StreamOrchestrator(content, playbackObserver, representa
|
|
|
253
198
|
* @returns {boolean}
|
|
254
199
|
*/
|
|
255
200
|
function isOutOfPeriodList(time) {
|
|
256
|
-
|
|
257
|
-
|
|
201
|
+
const head = periodList.head();
|
|
202
|
+
const last = periodList.last();
|
|
258
203
|
if (head == null || last == null) { // if no period
|
|
259
204
|
return true;
|
|
260
205
|
}
|
|
@@ -267,96 +212,87 @@ export default function StreamOrchestrator(content, playbackObserver, representa
|
|
|
267
212
|
* @param {Array.<Object>}
|
|
268
213
|
* @returns {Promise}
|
|
269
214
|
*/
|
|
270
|
-
function onDecipherabilityUpdates(updates) {
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
}
|
|
319
|
-
return [4 /*yield*/, segmentBuffer.removeBuffer(start, end, orchestratorCancelSignal)];
|
|
320
|
-
case 2:
|
|
321
|
-
_c.sent();
|
|
322
|
-
_c.label = 3;
|
|
323
|
-
case 3:
|
|
324
|
-
_i++;
|
|
325
|
-
return [3 /*break*/, 1];
|
|
326
|
-
case 4:
|
|
327
|
-
// Schedule micro task before checking the last playback observation
|
|
328
|
-
// to reduce the risk of race conditions where the next observation
|
|
329
|
-
// was going to be emitted synchronously.
|
|
330
|
-
nextTick(function () {
|
|
331
|
-
var _a;
|
|
332
|
-
if (orchestratorCancelSignal.isCancelled()) {
|
|
333
|
-
return;
|
|
334
|
-
}
|
|
335
|
-
var observation = playbackObserver.getReference().getValue();
|
|
336
|
-
if (needsFlushingAfterClean(observation, undecipherableRanges)) {
|
|
337
|
-
// Bind to Period start and end
|
|
338
|
-
callbacks.needsDecipherabilityFlush();
|
|
339
|
-
if (orchestratorCancelSignal.isCancelled()) {
|
|
340
|
-
return;
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
else if (needsFlushingAfterClean(observation, rangesToRemove)) {
|
|
344
|
-
callbacks.needsBufferFlush();
|
|
345
|
-
if (orchestratorCancelSignal.isCancelled()) {
|
|
346
|
-
return;
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
var lastPosition = (_a = observation.position.pending) !== null && _a !== void 0 ? _a : observation.position.last;
|
|
350
|
-
var newInitialPeriod = manifest.getPeriodForTime(lastPosition);
|
|
351
|
-
if (newInitialPeriod == null) {
|
|
352
|
-
callbacks.error(new MediaError("MEDIA_TIME_NOT_FOUND", "The wanted position is not found in the Manifest."));
|
|
353
|
-
return;
|
|
354
|
-
}
|
|
355
|
-
launchConsecutiveStreamsForPeriod(newInitialPeriod);
|
|
356
|
-
});
|
|
357
|
-
return [2 /*return*/];
|
|
215
|
+
async function onDecipherabilityUpdates(updates) {
|
|
216
|
+
const segmentBufferStatus = segmentBuffersStore.getStatus(bufferType);
|
|
217
|
+
const ofCurrentType = updates
|
|
218
|
+
.filter(update => update.adaptation.type === bufferType);
|
|
219
|
+
if (
|
|
220
|
+
// No update concerns the current type of data
|
|
221
|
+
ofCurrentType.length === 0 ||
|
|
222
|
+
segmentBufferStatus.type !== "initialized" ||
|
|
223
|
+
// The update only notifies of now-decipherable streams
|
|
224
|
+
ofCurrentType.every(x => x.representation.decipherable === true)) {
|
|
225
|
+
// Data won't have to be removed from the buffers, no need to stop the
|
|
226
|
+
// current Streams.
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const segmentBuffer = segmentBufferStatus.value;
|
|
230
|
+
const resettedContent = ofCurrentType.filter(update => update.representation.decipherable === undefined);
|
|
231
|
+
const undecipherableContent = ofCurrentType.filter(update => update.representation.decipherable === false);
|
|
232
|
+
/**
|
|
233
|
+
* Time ranges now containing undecipherable content.
|
|
234
|
+
* Those should first be removed and, depending on the platform, may
|
|
235
|
+
* need Supplementary actions as playback issues may remain even after
|
|
236
|
+
* removal.
|
|
237
|
+
*/
|
|
238
|
+
const undecipherableRanges = (0, get_time_ranges_for_content_1.default)(segmentBuffer, undecipherableContent);
|
|
239
|
+
/**
|
|
240
|
+
* Time ranges now containing content whose decipherability status came
|
|
241
|
+
* back to being unknown.
|
|
242
|
+
* To simplify its handling, those are just removed from the buffer.
|
|
243
|
+
* Less considerations have to be taken than for the `undecipherableRanges`.
|
|
244
|
+
*/
|
|
245
|
+
const rangesToRemove = (0, get_time_ranges_for_content_1.default)(segmentBuffer, resettedContent);
|
|
246
|
+
// First close all Stream currently active so they don't continue to
|
|
247
|
+
// load and push segments.
|
|
248
|
+
enableOutOfBoundsCheck = false;
|
|
249
|
+
log_1.default.info("Stream: Destroying all PeriodStreams for decipherability matters", bufferType);
|
|
250
|
+
while (periodList.length() > 0) {
|
|
251
|
+
const period = periodList.get(periodList.length() - 1);
|
|
252
|
+
periodList.removeElement(period);
|
|
253
|
+
callbacks.periodStreamCleared({ type: bufferType, manifest, period });
|
|
254
|
+
}
|
|
255
|
+
currentCanceller.cancel();
|
|
256
|
+
currentCanceller = new task_canceller_1.default();
|
|
257
|
+
currentCanceller.linkToSignal(orchestratorCancelSignal);
|
|
258
|
+
/** Remove from the `SegmentBuffer` all the concerned time ranges. */
|
|
259
|
+
for (const { start, end } of [...undecipherableRanges, ...rangesToRemove]) {
|
|
260
|
+
if (start < end) {
|
|
261
|
+
if (orchestratorCancelSignal.isCancelled()) {
|
|
262
|
+
return;
|
|
358
263
|
}
|
|
359
|
-
|
|
264
|
+
await segmentBuffer.removeBuffer(start, end, orchestratorCancelSignal);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
// Schedule micro task before checking the last playback observation
|
|
268
|
+
// to reduce the risk of race conditions where the next observation
|
|
269
|
+
// was going to be emitted synchronously.
|
|
270
|
+
(0, next_tick_1.default)(() => {
|
|
271
|
+
var _a;
|
|
272
|
+
if (orchestratorCancelSignal.isCancelled()) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
const observation = playbackObserver.getReference().getValue();
|
|
276
|
+
if (needsFlushingAfterClean(observation, undecipherableRanges)) {
|
|
277
|
+
// Bind to Period start and end
|
|
278
|
+
callbacks.needsDecipherabilityFlush();
|
|
279
|
+
if (orchestratorCancelSignal.isCancelled()) {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
else if (needsFlushingAfterClean(observation, rangesToRemove)) {
|
|
284
|
+
callbacks.needsBufferFlush();
|
|
285
|
+
if (orchestratorCancelSignal.isCancelled()) {
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
const lastPosition = (_a = observation.position.pending) !== null && _a !== void 0 ? _a : observation.position.last;
|
|
290
|
+
const newInitialPeriod = manifest.getPeriodForTime(lastPosition);
|
|
291
|
+
if (newInitialPeriod == null) {
|
|
292
|
+
callbacks.error(new errors_1.MediaError("MEDIA_TIME_NOT_FOUND", "The wanted position is not found in the Manifest."));
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
launchConsecutiveStreamsForPeriod(newInitialPeriod);
|
|
360
296
|
});
|
|
361
297
|
}
|
|
362
298
|
}
|
|
@@ -392,32 +328,42 @@ export default function StreamOrchestrator(content, playbackObserver, representa
|
|
|
392
328
|
* signal emitting.
|
|
393
329
|
*/
|
|
394
330
|
function manageConsecutivePeriodStreams(bufferType, basePeriod, consecutivePeriodStreamCb, cancelSignal) {
|
|
395
|
-
|
|
331
|
+
log_1.default.info("Stream: Creating new Stream for", bufferType, basePeriod.start);
|
|
396
332
|
/**
|
|
397
333
|
* Contains properties linnked to the next chronological `PeriodStream` that
|
|
398
334
|
* may be created here.
|
|
399
335
|
*/
|
|
400
|
-
|
|
336
|
+
let nextStreamInfo = null;
|
|
401
337
|
/** Emits when the `PeriodStream` linked to `basePeriod` should be destroyed. */
|
|
402
|
-
|
|
338
|
+
const currentStreamCanceller = new task_canceller_1.default();
|
|
403
339
|
currentStreamCanceller.linkToSignal(cancelSignal);
|
|
404
340
|
// Stop current PeriodStream when the current position goes over the end of
|
|
405
341
|
// that Period.
|
|
406
|
-
playbackObserver.listen(
|
|
407
|
-
var
|
|
408
|
-
var position = _a.position;
|
|
342
|
+
playbackObserver.listen(({ position }, stopListeningObservations) => {
|
|
343
|
+
var _a, _b;
|
|
409
344
|
if (basePeriod.end !== undefined &&
|
|
410
|
-
((
|
|
411
|
-
|
|
345
|
+
((_a = position.pending) !== null && _a !== void 0 ? _a : position.last) >= basePeriod.end) {
|
|
346
|
+
log_1.default.info("Stream: Destroying PeriodStream as the current playhead moved above it", bufferType, basePeriod.start, (_b = position.pending) !== null && _b !== void 0 ? _b : position.last, basePeriod.end);
|
|
412
347
|
stopListeningObservations();
|
|
413
|
-
consecutivePeriodStreamCb.periodStreamCleared({ type: bufferType,
|
|
348
|
+
consecutivePeriodStreamCb.periodStreamCleared({ type: bufferType,
|
|
349
|
+
manifest,
|
|
350
|
+
period: basePeriod });
|
|
414
351
|
currentStreamCanceller.cancel();
|
|
415
352
|
}
|
|
416
353
|
}, { clearSignal: cancelSignal, includeLastObservation: true });
|
|
417
|
-
|
|
418
|
-
|
|
354
|
+
const periodStreamArgs = { bufferType,
|
|
355
|
+
content: { manifest, period: basePeriod },
|
|
356
|
+
garbageCollectors,
|
|
357
|
+
maxVideoBufferSize,
|
|
358
|
+
segmentFetcherCreator,
|
|
359
|
+
segmentBuffersStore,
|
|
360
|
+
options,
|
|
361
|
+
playbackObserver,
|
|
362
|
+
representationEstimator,
|
|
363
|
+
wantedBufferAhead };
|
|
364
|
+
const periodStreamCallbacks = Object.assign(Object.assign({}, consecutivePeriodStreamCb), { streamStatusUpdate(value) {
|
|
419
365
|
if (value.hasFinishedLoading) {
|
|
420
|
-
|
|
366
|
+
const nextPeriod = manifest.getPeriodAfter(basePeriod);
|
|
421
367
|
if (nextPeriod !== null) {
|
|
422
368
|
// current Stream is full, create the next one if not
|
|
423
369
|
checkOrCreateNextPeriodStream(nextPeriod);
|
|
@@ -425,14 +371,17 @@ export default function StreamOrchestrator(content, playbackObserver, representa
|
|
|
425
371
|
}
|
|
426
372
|
else if (nextStreamInfo !== null) {
|
|
427
373
|
// current Stream is active, destroy next Stream if created
|
|
428
|
-
|
|
374
|
+
log_1.default.info("Stream: Destroying next PeriodStream due to current one being active", bufferType, nextStreamInfo.period.start);
|
|
429
375
|
consecutivePeriodStreamCb
|
|
430
|
-
.periodStreamCleared({ type: bufferType,
|
|
376
|
+
.periodStreamCleared({ type: bufferType,
|
|
377
|
+
manifest,
|
|
378
|
+
period: nextStreamInfo.period });
|
|
431
379
|
nextStreamInfo.canceller.cancel();
|
|
432
380
|
nextStreamInfo = null;
|
|
433
381
|
}
|
|
434
382
|
consecutivePeriodStreamCb.streamStatusUpdate(value);
|
|
435
|
-
},
|
|
383
|
+
},
|
|
384
|
+
error(err) {
|
|
436
385
|
if (nextStreamInfo !== null) {
|
|
437
386
|
nextStreamInfo.canceller.cancel();
|
|
438
387
|
nextStreamInfo = null;
|
|
@@ -440,7 +389,7 @@ export default function StreamOrchestrator(content, playbackObserver, representa
|
|
|
440
389
|
currentStreamCanceller.cancel();
|
|
441
390
|
consecutivePeriodStreamCb.error(err);
|
|
442
391
|
} });
|
|
443
|
-
|
|
392
|
+
(0, period_1.default)(periodStreamArgs, periodStreamCallbacks, currentStreamCanceller.signal);
|
|
444
393
|
handleUnexpectedManifestUpdates(currentStreamCanceller.signal);
|
|
445
394
|
/**
|
|
446
395
|
* Create `PeriodStream` for the next Period, specified under `nextPeriod`.
|
|
@@ -451,11 +400,13 @@ export default function StreamOrchestrator(content, playbackObserver, representa
|
|
|
451
400
|
if (nextStreamInfo.period.id === nextPeriod.id) {
|
|
452
401
|
return;
|
|
453
402
|
}
|
|
454
|
-
|
|
455
|
-
consecutivePeriodStreamCb.periodStreamCleared({ type: bufferType,
|
|
403
|
+
log_1.default.warn("Stream: Creating next `PeriodStream` while one was already created.", bufferType, nextPeriod.id, nextStreamInfo.period.id);
|
|
404
|
+
consecutivePeriodStreamCb.periodStreamCleared({ type: bufferType,
|
|
405
|
+
manifest,
|
|
406
|
+
period: nextStreamInfo.period });
|
|
456
407
|
nextStreamInfo.canceller.cancel();
|
|
457
408
|
}
|
|
458
|
-
|
|
409
|
+
const nextStreamCanceller = new task_canceller_1.default();
|
|
459
410
|
nextStreamCanceller.linkToSignal(cancelSignal);
|
|
460
411
|
nextStreamInfo = { canceller: nextStreamCanceller,
|
|
461
412
|
period: nextPeriod };
|
|
@@ -469,10 +420,9 @@ export default function StreamOrchestrator(content, playbackObserver, representa
|
|
|
469
420
|
* performing checks.
|
|
470
421
|
*/
|
|
471
422
|
function handleUnexpectedManifestUpdates(innerCancelSignal) {
|
|
472
|
-
manifest.addEventListener("manifestUpdate",
|
|
423
|
+
manifest.addEventListener("manifestUpdate", updates => {
|
|
473
424
|
// If current period has been unexpectedly removed, ask to reload
|
|
474
|
-
for (
|
|
475
|
-
var period = _a[_i];
|
|
425
|
+
for (const period of updates.removedPeriods) {
|
|
476
426
|
if (period.id === basePeriod.id) {
|
|
477
427
|
// Check that this was not just one of the earliests Periods that
|
|
478
428
|
// was removed, in which case this is a normal cleanup scenario
|
|
@@ -482,7 +432,7 @@ export default function StreamOrchestrator(content, playbackObserver, representa
|
|
|
482
432
|
// conditions where the inner logic would be called synchronously before
|
|
483
433
|
// the next observation (which may reflect very different playback
|
|
484
434
|
// conditions) is actually received.
|
|
485
|
-
return
|
|
435
|
+
return (0, next_tick_1.default)(() => {
|
|
486
436
|
if (innerCancelSignal.isCancelled()) {
|
|
487
437
|
return;
|
|
488
438
|
}
|
|
@@ -499,12 +449,14 @@ export default function StreamOrchestrator(content, playbackObserver, representa
|
|
|
499
449
|
if (updates.addedPeriods.length > 0) {
|
|
500
450
|
// If the next period changed, cancel the next created one if one
|
|
501
451
|
if (nextStreamInfo !== null) {
|
|
502
|
-
|
|
452
|
+
const newNextPeriod = manifest.getPeriodAfter(basePeriod);
|
|
503
453
|
if (newNextPeriod === null ||
|
|
504
454
|
nextStreamInfo.period.id !== newNextPeriod.id) {
|
|
505
|
-
|
|
455
|
+
log_1.default.warn("Stream: Destroying next PeriodStream due to new one being added", bufferType, nextStreamInfo.period.start);
|
|
506
456
|
consecutivePeriodStreamCb
|
|
507
|
-
.periodStreamCleared({ type: bufferType,
|
|
457
|
+
.periodStreamCleared({ type: bufferType,
|
|
458
|
+
manifest,
|
|
459
|
+
period: nextStreamInfo.period });
|
|
508
460
|
nextStreamInfo.canceller.cancel();
|
|
509
461
|
nextStreamInfo = null;
|
|
510
462
|
}
|
|
@@ -514,6 +466,7 @@ export default function StreamOrchestrator(content, playbackObserver, representa
|
|
|
514
466
|
}
|
|
515
467
|
}
|
|
516
468
|
}
|
|
469
|
+
exports.default = StreamOrchestrator;
|
|
517
470
|
/**
|
|
518
471
|
* Returns `true` if low-level buffers have to be "flushed" after the given
|
|
519
472
|
* `cleanedRanges` time ranges have been removed from an audio or video
|
|
@@ -526,7 +479,7 @@ function needsFlushingAfterClean(observation, cleanedRanges) {
|
|
|
526
479
|
if (cleanedRanges.length === 0) {
|
|
527
480
|
return false;
|
|
528
481
|
}
|
|
529
|
-
|
|
482
|
+
const curPos = observation.position.last;
|
|
530
483
|
// Based on the playback direction, we just check whether we may encounter
|
|
531
484
|
// the corresponding ranges, without seeking or re-switching playback
|
|
532
485
|
// direction which is expected to lead to a low-level flush anyway.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Copyright 2015 CANAL+ Group
|
|
3
4
|
*
|
|
@@ -13,6 +14,21 @@
|
|
|
13
14
|
* See the License for the specific language governing permissions and
|
|
14
15
|
* limitations under the License.
|
|
15
16
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
29
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
30
|
+
};
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
const period_stream_1 = require("./period_stream");
|
|
33
|
+
__exportStar(require("./types"), exports);
|
|
34
|
+
exports.default = period_stream_1.default;
|