rx-player 3.26.1 → 3.26.2
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/.github/workflows/checks.yml +99 -0
- package/.github/workflows/sonarcloud_analysis.yml +20 -0
- package/CHANGELOG.md +99 -71
- package/README.md +19 -18
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/clear_element_src.js +8 -6
- package/dist/_esm5.processed/compat/eme/close_session.js +1 -2
- package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +1 -2
- package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -1
- package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +6 -4
- package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +1 -2
- package/dist/_esm5.processed/compat/eme/generate_key_request.js +1 -2
- package/dist/_esm5.processed/compat/eme/load_session.js +2 -3
- package/dist/_esm5.processed/compat/event_listeners.d.ts +3 -2
- package/dist/_esm5.processed/compat/event_listeners.js +8 -14
- package/dist/_esm5.processed/compat/make_vtt_cue.js +1 -1
- package/dist/_esm5.processed/compat/on_height_width_change.js +1 -2
- package/dist/_esm5.processed/compat/set_element_src.js +1 -1
- package/dist/_esm5.processed/compat/when_loaded_metadata.js +1 -2
- package/dist/_esm5.processed/compat/when_media_source_open.js +1 -2
- package/dist/_esm5.processed/config.d.ts +3 -8
- package/dist/_esm5.processed/config.js +4 -9
- package/dist/_esm5.processed/core/abr/abr_manager.d.ts +11 -10
- package/dist/_esm5.processed/core/abr/abr_manager.js +47 -8
- package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +1 -1
- package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +2 -2
- package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +3 -3
- package/dist/_esm5.processed/core/abr/get_buffer_levels.js +3 -0
- package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +3 -3
- package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +3 -3
- package/dist/_esm5.processed/core/abr/guess_based_chooser.d.ts +95 -0
- package/dist/_esm5.processed/core/abr/guess_based_chooser.js +242 -0
- package/dist/_esm5.processed/core/abr/index.d.ts +3 -3
- package/dist/_esm5.processed/core/abr/last_estimate_storage.d.ts +61 -0
- package/dist/_esm5.processed/core/abr/last_estimate_storage.js +37 -0
- package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +25 -7
- package/dist/_esm5.processed/core/abr/network_analyzer.js +68 -31
- package/dist/_esm5.processed/core/abr/pending_requests_store.d.ts +56 -28
- package/dist/_esm5.processed/core/abr/pending_requests_store.js +9 -7
- package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +34 -51
- package/dist/_esm5.processed/core/abr/representation_estimator.js +111 -52
- package/dist/_esm5.processed/core/abr/representation_score_calculator.d.ts +5 -8
- package/dist/_esm5.processed/core/abr/representation_score_calculator.js +20 -23
- package/dist/_esm5.processed/core/abr/{ewma.d.ts → utils/ewma.d.ts} +0 -0
- package/dist/_esm5.processed/core/abr/{ewma.js → utils/ewma.js} +0 -0
- package/dist/_esm5.processed/core/abr/{filter_by_bitrate.d.ts → utils/filter_by_bitrate.d.ts} +1 -1
- package/dist/_esm5.processed/core/abr/{filter_by_bitrate.js → utils/filter_by_bitrate.js} +1 -1
- package/dist/_esm5.processed/core/abr/{filter_by_width.d.ts → utils/filter_by_width.d.ts} +1 -1
- package/dist/_esm5.processed/core/abr/{filter_by_width.js → utils/filter_by_width.js} +2 -2
- package/dist/_esm5.processed/core/abr/{select_optimal_representation.d.ts → utils/select_optimal_representation.d.ts} +1 -1
- package/dist/_esm5.processed/core/abr/{select_optimal_representation.js → utils/select_optimal_representation.js} +1 -1
- package/dist/_esm5.processed/core/api/emit_seek_events.d.ts +4 -4
- package/dist/_esm5.processed/core/api/emit_seek_events.js +12 -10
- package/dist/_esm5.processed/core/api/index.d.ts +3 -1
- package/dist/_esm5.processed/core/api/index.js +2 -0
- package/dist/_esm5.processed/core/api/option_utils.js +4 -4
- package/dist/_esm5.processed/core/api/playback_observer.d.ts +280 -0
- package/dist/_esm5.processed/core/api/playback_observer.js +461 -0
- package/dist/_esm5.processed/core/api/public_api.d.ts +8 -7
- package/dist/_esm5.processed/core/api/public_api.js +98 -94
- package/dist/_esm5.processed/core/api/track_choice_manager.js +3 -3
- package/dist/_esm5.processed/core/eme/__tests__/__global__/utils.js +1 -0
- package/dist/_esm5.processed/core/eme/attach_media_keys.js +1 -2
- package/dist/_esm5.processed/core/eme/check_key_statuses.js +4 -5
- package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js +1 -2
- package/dist/_esm5.processed/core/eme/clear_eme_session.js +6 -2
- package/dist/_esm5.processed/core/eme/create_session.js +1 -2
- package/dist/_esm5.processed/core/eme/dispose_media_keys.js +2 -3
- package/dist/_esm5.processed/core/eme/eme_manager.js +4 -5
- package/dist/_esm5.processed/core/eme/find_key_system.js +4 -5
- package/dist/_esm5.processed/core/eme/get_media_keys.js +2 -3
- package/dist/_esm5.processed/core/eme/get_session.js +1 -2
- package/dist/_esm5.processed/core/eme/init_media_keys.js +5 -5
- package/dist/_esm5.processed/core/eme/session_events_listener.js +6 -7
- package/dist/_esm5.processed/core/eme/set_server_certificate.js +8 -3
- package/dist/_esm5.processed/core/eme/types.d.ts +12 -4
- package/dist/_esm5.processed/core/eme/utils/close_session.js +2 -3
- package/dist/_esm5.processed/core/eme/utils/is_session_usable.js +1 -1
- package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +3 -4
- package/dist/_esm5.processed/core/eme/utils/persistent_sessions_store.js +3 -3
- package/dist/_esm5.processed/core/fetchers/index.d.ts +2 -2
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +2 -2
- package/dist/_esm5.processed/core/fetchers/segment/index.d.ts +2 -2
- package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.d.ts +12 -29
- package/dist/_esm5.processed/core/fetchers/segment/prioritized_segment_fetcher.js +3 -7
- package/dist/_esm5.processed/core/fetchers/segment/prioritizer.d.ts +53 -53
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +42 -11
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +118 -46
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +21 -20
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +9 -8
- package/dist/_esm5.processed/core/init/create_eme_manager.js +1 -2
- package/dist/_esm5.processed/core/init/create_media_source.js +3 -4
- package/dist/_esm5.processed/core/init/create_stream_playback_observer.d.ts +39 -0
- package/dist/_esm5.processed/core/init/create_stream_playback_observer.js +50 -0
- package/dist/_esm5.processed/core/init/duration_updater.js +16 -7
- package/dist/_esm5.processed/core/init/emit_loaded_event.d.ts +4 -3
- package/dist/_esm5.processed/core/init/emit_loaded_event.js +8 -8
- package/dist/_esm5.processed/core/init/end_of_stream.js +1 -2
- package/dist/_esm5.processed/core/init/get_initial_time.js +2 -3
- package/dist/_esm5.processed/core/init/initial_seek_and_play.d.ts +32 -31
- package/dist/_esm5.processed/core/init/initial_seek_and_play.js +25 -32
- package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +6 -5
- package/dist/_esm5.processed/core/init/initialize_directfile.js +16 -12
- package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +10 -10
- package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -12
- package/dist/_esm5.processed/core/init/load_on_media_source.d.ts +8 -11
- package/dist/_esm5.processed/core/init/load_on_media_source.js +16 -19
- package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +8 -7
- package/dist/_esm5.processed/core/init/stall_avoider.d.ts +4 -6
- package/dist/_esm5.processed/core/init/stall_avoider.js +56 -42
- package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.d.ts +2 -2
- package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +20 -15
- package/dist/_esm5.processed/core/init/throw_on_media_error.js +1 -2
- package/dist/_esm5.processed/core/init/types.d.ts +0 -20
- package/dist/_esm5.processed/core/init/update_playback_rate.d.ts +5 -4
- package/dist/_esm5.processed/core/init/update_playback_rate.js +10 -11
- package/dist/_esm5.processed/core/segment_buffers/garbage_collector.d.ts +4 -4
- package/dist/_esm5.processed/core/segment_buffers/garbage_collector.js +12 -7
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +8 -7
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +9 -10
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +4 -4
- package/dist/_esm5.processed/core/segment_buffers/implementations/utils/manual_time_ranges.js +2 -2
- package/dist/_esm5.processed/core/segment_buffers/inventory/buffered_history.js +2 -2
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +1 -12
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +10 -10
- package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +1 -1
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +15 -13
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +36 -23
- package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.d.ts +9 -17
- package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.js +11 -20
- package/dist/_esm5.processed/core/stream/adaptation/index.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/index.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/orchestrator/active_period_emitter.js +5 -6
- package/dist/_esm5.processed/core/stream/orchestrator/are_streams_complete.js +1 -2
- package/dist/_esm5.processed/core/stream/orchestrator/index.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +10 -8
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +22 -21
- package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.d.ts +6 -4
- package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +11 -10
- package/dist/_esm5.processed/core/stream/period/index.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +23 -7
- package/dist/_esm5.processed/core/stream/period/period_stream.js +38 -24
- package/dist/_esm5.processed/core/stream/reload_after_switch.d.ts +5 -4
- package/dist/_esm5.processed/core/stream/reload_after_switch.js +8 -7
- package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.d.ts +4 -2
- package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.js +10 -8
- package/dist/_esm5.processed/core/stream/representation/downloading_queue.d.ts +9 -9
- package/dist/_esm5.processed/core/stream/representation/downloading_queue.js +10 -12
- package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.d.ts +1 -3
- package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +6 -8
- package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +3 -7
- package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +7 -8
- package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +1 -1
- package/dist/_esm5.processed/core/stream/representation/get_segment_priority.d.ts +6 -9
- package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +7 -8
- package/dist/_esm5.processed/core/stream/representation/index.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/representation/push_init_segment.d.ts +4 -2
- package/dist/_esm5.processed/core/stream/representation/push_init_segment.js +3 -5
- package/dist/_esm5.processed/core/stream/representation/push_media_segment.d.ts +6 -4
- package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -5
- package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +9 -12
- package/dist/_esm5.processed/core/stream/representation/representation_stream.js +30 -21
- package/dist/_esm5.processed/errors/error_message.js +1 -1
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.d.ts +5 -3
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/create_request.js +21 -8
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.js +2 -3
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.d.ts +2 -2
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_segments.js +4 -0
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +1 -1
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +2 -2
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +17 -6
- package/dist/_esm5.processed/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +1 -2
- package/dist/_esm5.processed/experimental/tools/createMetaplaylist/index.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +1 -1
- package/dist/_esm5.processed/features/initialize_features.js +47 -44
- package/dist/_esm5.processed/index.js +2 -2
- package/dist/_esm5.processed/manifest/index.d.ts +2 -2
- package/dist/_esm5.processed/manifest/index.js +2 -2
- package/dist/_esm5.processed/manifest/representation.js +1 -1
- package/dist/_esm5.processed/manifest/representation_index/static.js +1 -0
- package/dist/_esm5.processed/manifest/representation_index/types.d.ts +24 -3
- package/dist/_esm5.processed/manifest/update_period_in_place.js +1 -1
- package/dist/_esm5.processed/manifest/{are_same_content.d.ts → utils.d.ts} +9 -7
- package/dist/_esm5.processed/manifest/{are_same_content.js → utils.js} +18 -1
- package/dist/_esm5.processed/minimal.js +2 -2
- package/dist/_esm5.processed/parsers/containers/isobmff/get_box.d.ts +18 -9
- package/dist/_esm5.processed/parsers/containers/isobmff/get_box.js +32 -9
- package/dist/_esm5.processed/parsers/containers/isobmff/read.d.ts +18 -5
- package/dist/_esm5.processed/parsers/containers/isobmff/read.js +28 -6
- package/dist/_esm5.processed/parsers/containers/isobmff/utils.js +52 -47
- package/dist/_esm5.processed/parsers/images/bif.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/flatten_overlapping_periods.js +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_http_utc-timing_url.js +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +2 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +3 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.js +2 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +1 -0
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +7 -9
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +2 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +4 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +2 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +11 -5
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.js +10 -9
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/parse_s_element.js +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +6 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +5 -4
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.d.ts +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/tokens.js +4 -4
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +3 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +19 -18
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +2 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +14 -8
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +7 -8
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +3 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +5 -10
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +3 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +17 -8
- package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.d.ts +7 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/resolve_base_urls.js +22 -21
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +10 -0
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/BaseURL.js +9 -9
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +24 -0
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.js +7 -5
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +12 -9
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.js +5 -2
- package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +8 -0
- package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +11 -2
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +7 -4
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +11 -0
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.js +7 -1
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.js +5 -0
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/MPD.js +5 -0
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Period.js +13 -0
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +23 -0
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.js +5 -0
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/XLink.js +6 -0
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/root.js +6 -0
- package/dist/_esm5.processed/parsers/manifest/local/parse_local_manifest.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +4 -2
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/smooth/get_codecs.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +3 -1
- package/dist/_esm5.processed/parsers/manifest/utils/check_manifest_ids.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +11 -3
- package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.js +5 -5
- package/dist/_esm5.processed/parsers/manifest/utils/is_segment_still_available.js +3 -6
- package/dist/_esm5.processed/parsers/texttracks/sami/html.js +2 -2
- package/dist/_esm5.processed/parsers/texttracks/sami/native.js +2 -2
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_font_size.js +13 -1
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/generate_css_test_outline.js +4 -4
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_default_style_elements.js +2 -2
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/create_style_attribute.js +5 -5
- package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +2 -2
- package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +89 -20
- package/dist/_esm5.processed/transports/dash/segment_loader.js +1 -1
- package/dist/_esm5.processed/transports/local/segment_loader.js +2 -2
- package/dist/_esm5.processed/transports/local/segment_parser.d.ts +2 -2
- package/dist/_esm5.processed/transports/local/text_parser.d.ts +2 -2
- package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
- package/dist/_esm5.processed/transports/smooth/extract_timings_infos.js +1 -1
- package/dist/_esm5.processed/transports/smooth/pipelines.js +2 -2
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +3 -3
- package/dist/_esm5.processed/transports/types.d.ts +29 -15
- package/dist/_esm5.processed/transports/utils/byte_range.js +2 -2
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
- package/dist/_esm5.processed/transports/utils/get_isobmff_timing_infos.js +6 -1
- package/dist/_esm5.processed/transports/utils/parse_text_track.js +6 -4
- package/dist/_esm5.processed/utils/assert.js +3 -3
- package/dist/_esm5.processed/utils/concat_map_latest.js +1 -2
- package/dist/_esm5.processed/utils/defer_subscriptions.js +1 -2
- package/dist/_esm5.processed/utils/filter_map.js +1 -2
- package/dist/_esm5.processed/utils/reference.d.ts +108 -0
- package/dist/_esm5.processed/utils/reference.js +137 -0
- package/dist/_esm5.processed/utils/request/fetch.d.ts +1 -1
- package/dist/_esm5.processed/utils/request/fetch.js +3 -3
- package/dist/_esm5.processed/utils/request/xhr.d.ts +1 -1
- package/dist/_esm5.processed/utils/request/xhr.js +1 -1
- package/dist/_esm5.processed/utils/rx-retry_with_backoff.js +1 -2
- package/dist/mpd-parser.wasm +0 -0
- package/dist/rx-player.d.ts +1 -15
- package/dist/rx-player.js +3666 -2470
- package/dist/rx-player.min.d.ts +1 -15
- package/dist/rx-player.min.js +1 -1
- package/jest.config.js +28 -1
- package/package.json +43 -43
- package/scripts/build/constants.d.ts +50 -0
- package/scripts/build/generate_build.js +1 -189
- package/scripts/doc-generator/construct_table_of_contents.js +31 -24
- package/scripts/doc-generator/convert_MD_to_HMTL.js +4 -8
- package/scripts/doc-generator/create_documentation.js +331 -0
- package/scripts/doc-generator/create_documentation_page.js +209 -0
- package/scripts/doc-generator/create_page.js +117 -35
- package/scripts/doc-generator/generate_header_html.js +148 -0
- package/scripts/doc-generator/generate_page_html.js +116 -0
- package/scripts/doc-generator/generate_page_list_html.js +93 -0
- package/scripts/doc-generator/generate_sidebar_html.js +88 -0
- package/scripts/doc-generator/get_search_data_for_content.js +137 -0
- package/scripts/doc-generator/index.js +14 -15
- package/scripts/doc-generator/parse_doc_configs.js +327 -0
- package/scripts/doc-generator/scripts/lunr.js +10 -0
- package/scripts/doc-generator/scripts/script.js +451 -0
- package/scripts/doc-generator/styles/style.css +712 -144
- package/scripts/doc-generator/utils.js +85 -0
- package/scripts/fast_demo_build.js +143 -0
- package/scripts/generate_documentation_list.js +6 -2
- package/scripts/generate_full_demo.js +26 -49
- package/scripts/start_demo_web_server.js +14 -4
- package/scripts/update-version +1 -1
- package/sonar-project.properties +2 -1
- package/src/compat/__tests__/add_text_track.test.ts +1 -0
- package/src/compat/__tests__/clear_element_src.test.ts +55 -28
- package/src/compat/__tests__/set_element_src.test.ts +2 -2
- package/src/compat/__tests__/when_loaded_metadata.test.ts +4 -5
- package/src/compat/__tests__/when_media_source_open.test.ts +4 -5
- package/src/compat/clear_element_src.ts +8 -6
- package/src/compat/eme/close_session.ts +3 -5
- package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
- package/src/compat/eme/custom_media_keys/index.ts +6 -6
- package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +6 -3
- package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +1 -1
- package/src/compat/eme/generate_key_request.ts +1 -1
- package/src/compat/eme/load_session.ts +4 -6
- package/src/compat/event_listeners.ts +12 -21
- package/src/compat/on_height_width_change.ts +3 -5
- package/src/compat/set_element_src.ts +1 -1
- package/src/compat/when_loaded_metadata.ts +1 -1
- package/src/compat/when_media_source_open.ts +1 -1
- package/src/config.ts +4 -9
- package/src/core/abr/README.md +7 -7
- package/src/core/abr/abr_manager.ts +62 -21
- package/src/core/abr/bandwidth_estimator.ts +1 -1
- package/src/core/abr/buffer_based_chooser.ts +8 -6
- package/src/core/abr/get_buffer_levels.ts +3 -0
- package/src/core/abr/get_estimate_from_buffer_levels.ts +4 -4
- package/src/core/abr/guess_based_chooser.ts +308 -0
- package/src/core/abr/index.ts +7 -3
- package/src/core/abr/last_estimate_storage.ts +79 -0
- package/src/core/abr/network_analyzer.ts +74 -31
- package/src/core/abr/pending_requests_store.ts +76 -42
- package/src/core/abr/representation_estimator.ts +200 -125
- package/src/core/abr/representation_score_calculator.ts +33 -26
- package/src/core/abr/{__tests__ → utils/__tests__}/ewma.test.ts +0 -0
- package/src/core/abr/{__tests__ → utils/__tests__}/filter_by_bitrate.test.ts +1 -1
- package/src/core/abr/{__tests__ → utils/__tests__}/filter_by_width.test.ts +1 -1
- package/src/core/abr/{__tests__ → utils/__tests__}/select_optimal_representation.test.ts +1 -1
- package/src/core/abr/{ewma.ts → utils/ewma.ts} +0 -0
- package/src/core/abr/{filter_by_bitrate.ts → utils/filter_by_bitrate.ts} +2 -2
- package/src/core/abr/{filter_by_width.ts → utils/filter_by_width.ts} +3 -3
- package/src/core/abr/{select_optimal_representation.ts → utils/select_optimal_representation.ts} +2 -2
- package/src/core/api/README.md +4 -3
- package/src/core/api/__tests__/option_utils.test.ts +1 -0
- package/src/core/api/emit_seek_events.ts +21 -20
- package/src/core/api/index.ts +6 -2
- package/src/core/api/playback_observer.ts +768 -0
- package/src/core/api/public_api.ts +111 -111
- package/src/core/api/track_choice_manager.ts +6 -3
- package/src/core/eme/__tests__/__global__/get_license.test.ts +5 -3
- package/src/core/eme/__tests__/__global__/init_data.test.ts +11 -12
- package/src/core/eme/__tests__/__global__/media_key_system_access.test.ts +2 -1
- package/src/core/eme/__tests__/__global__/media_keys.test.ts +5 -8
- package/src/core/eme/__tests__/__global__/server_certificate.test.ts +8 -6
- package/src/core/eme/__tests__/__global__/utils.ts +1 -0
- package/src/core/eme/__tests__/init_media_keys.test.ts +6 -65
- package/src/core/eme/attach_media_keys.ts +2 -1
- package/src/core/eme/check_key_statuses.ts +10 -8
- package/src/core/eme/clean_old_loaded_sessions.ts +2 -4
- package/src/core/eme/clear_eme_session.ts +6 -1
- package/src/core/eme/create_session.ts +3 -5
- package/src/core/eme/dispose_media_keys.ts +2 -2
- package/src/core/eme/eme_manager.ts +10 -12
- package/src/core/eme/find_key_system.ts +3 -5
- package/src/core/eme/get_media_keys.ts +4 -6
- package/src/core/eme/get_session.ts +2 -4
- package/src/core/eme/init_media_keys.ts +9 -9
- package/src/core/eme/session_events_listener.ts +14 -15
- package/src/core/eme/set_server_certificate.ts +9 -5
- package/src/core/eme/types.ts +15 -4
- package/src/core/eme/utils/close_session.ts +7 -7
- package/src/core/eme/utils/is_session_usable.ts +1 -1
- package/src/core/eme/utils/loaded_sessions_store.ts +2 -2
- package/src/core/eme/utils/persistent_sessions_store.ts +2 -2
- package/src/core/fetchers/index.ts +2 -2
- package/src/core/fetchers/manifest/manifest_fetcher.ts +1 -1
- package/src/core/fetchers/segment/__tests__/prioritizer.test.ts +3 -4
- package/src/core/fetchers/segment/index.ts +2 -2
- package/src/core/fetchers/segment/prioritized_segment_fetcher.ts +37 -45
- package/src/core/fetchers/segment/prioritizer.ts +82 -82
- package/src/core/fetchers/segment/segment_fetcher.ts +178 -80
- package/src/core/fetchers/segment/segment_fetcher_creator.ts +23 -31
- package/src/core/init/create_eme_manager.ts +1 -1
- package/src/core/init/create_media_source.ts +5 -7
- package/src/core/init/create_stream_playback_observer.ts +88 -0
- package/src/core/init/duration_updater.ts +20 -17
- package/src/core/init/emit_loaded_event.ts +11 -15
- package/src/core/init/end_of_stream.ts +2 -4
- package/src/core/init/get_initial_time.ts +0 -1
- package/src/core/init/initial_seek_and_play.ts +67 -51
- package/src/core/init/initialize_directfile.ts +26 -35
- package/src/core/init/initialize_media_source.ts +28 -28
- package/src/core/init/load_on_media_source.ts +51 -58
- package/src/core/init/manifest_update_scheduler.ts +11 -12
- package/src/core/init/stall_avoider.ts +64 -47
- package/src/core/init/stream_events_emitter/stream_events_emitter.ts +24 -21
- package/src/core/init/throw_on_media_error.ts +1 -1
- package/src/core/init/types.ts +0 -24
- package/src/core/init/update_playback_rate.ts +15 -16
- package/src/core/segment_buffers/README.md +3 -3
- package/src/core/segment_buffers/garbage_collector.ts +15 -11
- package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +10 -7
- package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +14 -16
- package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +1 -1
- package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
- package/src/core/segment_buffers/implementations/utils/manual_time_ranges.ts +2 -2
- package/src/core/segment_buffers/inventory/buffered_history.ts +2 -2
- package/src/core/segment_buffers/inventory/segment_inventory.ts +1 -13
- package/src/core/stream/adaptation/adaptation_stream.ts +78 -56
- package/src/core/stream/adaptation/create_representation_estimator.ts +19 -45
- package/src/core/stream/adaptation/index.ts +2 -2
- package/src/core/stream/index.ts +2 -2
- package/src/core/stream/orchestrator/active_period_emitter.ts +6 -8
- package/src/core/stream/orchestrator/are_streams_complete.ts +2 -4
- package/src/core/stream/orchestrator/index.ts +2 -2
- package/src/core/stream/orchestrator/stream_orchestrator.ts +58 -49
- package/src/core/stream/period/create_empty_adaptation_stream.ts +14 -10
- package/src/core/stream/period/index.ts +2 -2
- package/src/core/stream/period/period_stream.ts +118 -75
- package/src/core/stream/reload_after_switch.ts +13 -10
- package/src/core/stream/representation/append_segment_to_buffer.ts +20 -16
- package/src/core/stream/representation/downloading_queue.ts +21 -24
- package/src/core/stream/representation/force_garbage_collection.ts +16 -23
- package/src/core/stream/representation/get_buffer_status.ts +9 -11
- package/src/core/stream/representation/get_needed_segments.ts +1 -1
- package/src/core/stream/representation/get_segment_priority.ts +8 -10
- package/src/core/stream/representation/index.ts +2 -2
- package/src/core/stream/representation/push_init_segment.ts +19 -16
- package/src/core/stream/representation/push_media_segment.ts +21 -17
- package/src/core/stream/representation/representation_stream.ts +50 -47
- package/src/experimental/features/__tests__/dash_wasm.test.ts +1 -0
- package/src/experimental/tools/VideoThumbnailLoader/create_request.ts +32 -17
- package/src/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.ts +6 -9
- package/src/experimental/tools/VideoThumbnailLoader/load_segments.ts +12 -6
- package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +4 -2
- package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +2 -2
- package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +21 -12
- package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +1 -1
- package/src/experimental/tools/createMetaplaylist/index.ts +1 -1
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +4 -2
- package/src/features/__tests__/initialize_features.test.ts +191 -101
- package/src/features/initialize_features.ts +40 -37
- package/src/features/list/__tests__/bif_parser.test.ts +1 -0
- package/src/features/list/__tests__/dash.test.ts +1 -0
- package/src/features/list/__tests__/directfile.test.ts +1 -0
- package/src/features/list/__tests__/eme.test.ts +1 -0
- package/src/features/list/__tests__/html_sami_parser.test.ts +1 -0
- package/src/features/list/__tests__/html_srt_parser.test.ts +1 -0
- package/src/features/list/__tests__/html_text_buffer.test.ts +1 -0
- package/src/features/list/__tests__/html_ttml_parser.test.ts +1 -0
- package/src/features/list/__tests__/html_vtt_parser.test.ts +1 -0
- package/src/features/list/__tests__/image_buffer.test.ts +1 -0
- package/src/features/list/__tests__/native_sami_parser.test.ts +1 -0
- package/src/features/list/__tests__/native_srt_parser.test.ts +1 -0
- package/src/features/list/__tests__/native_text_buffer.test.ts +1 -0
- package/src/features/list/__tests__/native_ttml_parser.test.ts +1 -0
- package/src/features/list/__tests__/native_vtt_parser.test.ts +1 -0
- package/src/features/list/__tests__/smooth.test.ts +1 -0
- package/src/index.ts +2 -2
- package/src/manifest/__tests__/manifest.test.ts +1 -0
- package/src/manifest/index.ts +7 -1
- package/src/manifest/representation_index/__tests__/static.test.ts +1 -0
- package/src/manifest/representation_index/static.ts +1 -0
- package/src/manifest/representation_index/types.ts +25 -3
- package/src/manifest/{are_same_content.ts → utils.ts} +26 -9
- package/src/minimal.ts +3 -2
- package/src/parsers/containers/isobmff/get_box.ts +35 -8
- package/src/parsers/containers/isobmff/read.ts +32 -5
- package/src/parsers/containers/isobmff/utils.ts +52 -47
- package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +4 -4
- package/src/parsers/manifest/dash/common/flatten_overlapping_periods.ts +4 -2
- package/src/parsers/manifest/dash/common/get_clock_offset.ts +3 -3
- package/src/parsers/manifest/dash/common/get_http_utc-timing_url.ts +15 -6
- package/src/parsers/manifest/dash/common/indexes/base.ts +5 -3
- package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +1 -0
- package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +9 -9
- package/src/parsers/manifest/dash/common/indexes/list.ts +6 -3
- package/src/parsers/manifest/dash/common/indexes/template.ts +13 -6
- package/src/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.ts +10 -9
- package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +13 -5
- package/src/parsers/manifest/dash/common/indexes/tokens.ts +4 -4
- package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +10 -4
- package/src/parsers/manifest/dash/common/parse_mpd.ts +21 -13
- package/src/parsers/manifest/dash/common/parse_periods.ts +7 -8
- package/src/parsers/manifest/dash/common/parse_representation_index.ts +12 -12
- package/src/parsers/manifest/dash/common/parse_representations.ts +23 -4
- package/src/parsers/manifest/dash/common/resolve_base_urls.ts +33 -24
- package/src/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.ts +12 -0
- package/src/parsers/manifest/dash/js-parser/node_parsers/BaseURL.ts +13 -9
- package/src/parsers/manifest/dash/js-parser/node_parsers/Representation.ts +28 -0
- package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.ts +8 -5
- package/src/parsers/manifest/dash/js-parser/node_parsers/utils.ts +3 -0
- package/src/parsers/manifest/dash/js-parser/parse_from_document.ts +5 -2
- package/src/parsers/manifest/dash/node_parser_types.ts +8 -0
- package/src/parsers/manifest/dash/parsers_types.ts +8 -2
- package/src/parsers/manifest/dash/wasm-parser/rs/lib.rs +1 -8
- package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +26 -5
- package/src/parsers/manifest/dash/wasm-parser/rs/processor/mod.rs +75 -521
- package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +7 -4
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.ts +13 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.ts +8 -1
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.ts +6 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/MPD.ts +6 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/Period.ts +14 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/Representation.ts +26 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.ts +6 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/XLink.ts +7 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/root.ts +7 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +1 -1
- package/src/parsers/manifest/local/representation_index.ts +2 -0
- package/src/parsers/manifest/smooth/create_parser.ts +1 -1
- package/src/parsers/manifest/smooth/representation_index.ts +3 -1
- package/src/parsers/manifest/utils/clear_timeline_from_position.ts +1 -1
- package/src/parsers/manifest/utils/index_helpers.ts +21 -11
- package/src/parsers/manifest/utils/is_segment_still_available.ts +4 -6
- package/src/parsers/texttracks/sami/html.ts +1 -1
- package/src/parsers/texttracks/sami/native.ts +1 -1
- package/src/parsers/texttracks/ttml/html/apply_font_size.ts +11 -1
- package/src/transports/dash/image_pipelines.ts +4 -4
- package/src/transports/dash/init_segment_loader.ts +1 -1
- package/src/transports/dash/manifest_parser.ts +99 -25
- package/src/transports/dash/segment_loader.ts +1 -1
- package/src/transports/dash/segment_parser.ts +4 -4
- package/src/transports/dash/text_parser.ts +8 -8
- package/src/transports/local/segment_loader.ts +2 -2
- package/src/transports/local/segment_parser.ts +4 -4
- package/src/transports/local/text_parser.ts +8 -8
- package/src/transports/metaplaylist/pipelines.ts +11 -11
- package/src/transports/smooth/extract_timings_infos.ts +1 -1
- package/src/transports/smooth/pipelines.ts +8 -8
- package/src/transports/smooth/segment_loader.ts +3 -3
- package/src/transports/types.ts +31 -17
- package/src/transports/utils/call_custom_manifest_loader.ts +1 -1
- package/src/transports/utils/get_isobmff_timing_infos.ts +6 -1
- package/src/transports/utils/parse_text_track.ts +4 -2
- package/src/typings/globals.d.ts +57 -40
- package/src/utils/__tests__/concat_map_latest.test.ts +7 -9
- package/src/utils/__tests__/defer_subscriptions.test.ts +4 -4
- package/src/utils/__tests__/event_emitter.test.ts +1 -1
- package/src/utils/__tests__/initialization_segment_cache.test.ts +7 -0
- package/src/utils/assert.ts +1 -1
- package/src/utils/concat_map_latest.ts +2 -4
- package/src/utils/defer_subscriptions.ts +1 -1
- package/src/utils/filter_map.ts +2 -4
- package/src/utils/reference.ts +234 -0
- package/src/utils/request/fetch.ts +3 -3
- package/src/utils/request/xhr.ts +2 -2
- package/src/utils/rx-retry_with_backoff.ts +2 -4
- package/tsconfig.json +4 -1
- package/tsconfig.modules.json +8 -3
- package/dist/_esm5.processed/core/abr/create_filters.d.ts +0 -27
- package/dist/_esm5.processed/core/abr/create_filters.js +0 -56
- package/dist/_esm5.processed/core/api/clock.d.ts +0 -157
- package/dist/_esm5.processed/core/api/clock.js +0 -363
- package/dist/_esm5.processed/core/init/create_stream_clock.d.ts +0 -34
- package/dist/_esm5.processed/core/init/create_stream_clock.js +0 -55
- package/dist/_esm5.processed/parsers/manifest/dash/common/extract_minimum_availability_time_offset.d.ts +0 -31
- package/dist/_esm5.processed/parsers/manifest/dash/common/extract_minimum_availability_time_offset.js +0 -37
- package/scripts/doc-generator/construct_html.js +0 -135
- package/scripts/doc-generator/construct_page_list.js +0 -120
- package/scripts/doc-generator/create_for_dir.js +0 -151
- package/scripts/doc-generator/get_files_to_convert.js +0 -71
- package/scripts/doc-generator/mkdir_parent.js +0 -21
- package/scripts/doc-generator/read_title_from_md.js +0 -22
- package/scripts/doc-generator/remove_toc_from_md.js +0 -20
- package/src/core/abr/create_filters.ts +0 -59
- package/src/core/api/clock.ts +0 -573
- package/src/core/init/create_stream_clock.ts +0 -93
- package/src/parsers/manifest/dash/common/extract_minimum_availability_time_offset.ts +0 -41
|
@@ -45,6 +45,7 @@ const initSegment1 = {
|
|
|
45
45
|
duration: 0,
|
|
46
46
|
timescale: 1 as const,
|
|
47
47
|
mediaURLs: ["http://www.example.com/some.URLinit1"],
|
|
48
|
+
complete: true,
|
|
48
49
|
};
|
|
49
50
|
|
|
50
51
|
const initSegment2 = {
|
|
@@ -55,6 +56,7 @@ const initSegment2 = {
|
|
|
55
56
|
duration: 0,
|
|
56
57
|
timescale: 1 as const,
|
|
57
58
|
mediaURLs: ["http://www.example.com/some.URLinit2"],
|
|
59
|
+
complete: true,
|
|
58
60
|
};
|
|
59
61
|
|
|
60
62
|
const initSegment3 = {
|
|
@@ -65,6 +67,7 @@ const initSegment3 = {
|
|
|
65
67
|
duration: 0,
|
|
66
68
|
timescale: 1 as const,
|
|
67
69
|
mediaURLs: ["http://www.example.com/some.URLinit3"],
|
|
70
|
+
complete: true,
|
|
68
71
|
};
|
|
69
72
|
|
|
70
73
|
const segment1 = {
|
|
@@ -75,6 +78,7 @@ const segment1 = {
|
|
|
75
78
|
end: 2,
|
|
76
79
|
timescale: 1 as const,
|
|
77
80
|
mediaURLs: ["http://www.example.com/some.URL2"],
|
|
81
|
+
complete: true,
|
|
78
82
|
};
|
|
79
83
|
|
|
80
84
|
const segment2 = {
|
|
@@ -85,6 +89,7 @@ const segment2 = {
|
|
|
85
89
|
end: 4,
|
|
86
90
|
timescale: 1 as const,
|
|
87
91
|
mediaURLs: ["http://www.example.com/some.URL2"],
|
|
92
|
+
complete: true,
|
|
88
93
|
};
|
|
89
94
|
|
|
90
95
|
const segment3 = {
|
|
@@ -95,6 +100,7 @@ const segment3 = {
|
|
|
95
100
|
end: 6,
|
|
96
101
|
timescale: 1 as const,
|
|
97
102
|
mediaURLs: ["http://www.example.com/some.URL3"],
|
|
103
|
+
complete: true,
|
|
98
104
|
};
|
|
99
105
|
|
|
100
106
|
const segment4 = {
|
|
@@ -105,6 +111,7 @@ const segment4 = {
|
|
|
105
111
|
end: 8,
|
|
106
112
|
timescale: 1 as const,
|
|
107
113
|
mediaURLs: ["http://www.example.com/some.URL4"],
|
|
114
|
+
complete: true,
|
|
108
115
|
};
|
|
109
116
|
|
|
110
117
|
const data1 = new Uint8Array([0]);
|
package/src/utils/assert.ts
CHANGED
|
@@ -27,7 +27,7 @@ export default function assert(
|
|
|
27
27
|
assertion : boolean,
|
|
28
28
|
message? : string
|
|
29
29
|
) : asserts assertion {
|
|
30
|
-
if (!assertion) {
|
|
30
|
+
if (__ENVIRONMENT__.DEV === __ENVIRONMENT__.CURRENT_ENV as number && !assertion) {
|
|
31
31
|
throw new AssertionError(message === undefined ? "invalid assertion" :
|
|
32
32
|
message);
|
|
33
33
|
}
|
|
@@ -18,12 +18,10 @@ import {
|
|
|
18
18
|
concat as observableConcat,
|
|
19
19
|
defer as observableDefer,
|
|
20
20
|
EMPTY,
|
|
21
|
-
Observable,
|
|
22
|
-
} from "rxjs";
|
|
23
|
-
import {
|
|
24
21
|
mergeMap,
|
|
22
|
+
Observable,
|
|
25
23
|
tap,
|
|
26
|
-
} from "rxjs
|
|
24
|
+
} from "rxjs";
|
|
27
25
|
|
|
28
26
|
/**
|
|
29
27
|
* Same as concatMap, but get last emitted value from source instead of unstack
|
package/src/utils/filter_map.ts
CHANGED
|
@@ -16,12 +16,10 @@
|
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
18
|
defer as observableDefer,
|
|
19
|
-
Observable,
|
|
20
|
-
} from "rxjs";
|
|
21
|
-
import {
|
|
22
19
|
filter,
|
|
23
20
|
map,
|
|
24
|
-
|
|
21
|
+
Observable,
|
|
22
|
+
} from "rxjs";
|
|
25
23
|
|
|
26
24
|
/**
|
|
27
25
|
* Special kind of map which will ignore the result when the value emitted
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2015 CANAL+ Group
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import {
|
|
18
|
+
Observable,
|
|
19
|
+
Subscriber,
|
|
20
|
+
} from "rxjs";
|
|
21
|
+
import log from "../log";
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* A value behind a shared reference, meaning that any update to its value from
|
|
25
|
+
* anywhere can be retrieved from any other parts of the code in posession of
|
|
26
|
+
* the "same" (i.e. not cloned) `ISharedReference`.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* const myVal = 1;
|
|
31
|
+
* const myRef : ISharedReference<number> = createSharedReference(1);
|
|
32
|
+
*
|
|
33
|
+
* function DoThingsWithVal(num : number) {
|
|
34
|
+
* num = 2;
|
|
35
|
+
* }
|
|
36
|
+
*
|
|
37
|
+
* function DoThingsWithRef(num : ISharedReference<number>) {
|
|
38
|
+
* num.setValue(2);
|
|
39
|
+
* }
|
|
40
|
+
*
|
|
41
|
+
* myRef.asObservable().subscribe((val) => {
|
|
42
|
+
* console.log(val); // outputs first `1`, then `2`
|
|
43
|
+
* });
|
|
44
|
+
*
|
|
45
|
+
* DoThingsWithVal(myVal);
|
|
46
|
+
* console.log(myVal); // output: 1
|
|
47
|
+
*
|
|
48
|
+
* DoThingsWithRef(myRef);
|
|
49
|
+
* console.log(myRef.getValue()); // output: 2
|
|
50
|
+
*
|
|
51
|
+
* myRef.asObservable().subscribe((val) => {
|
|
52
|
+
* console.log(val); // outputs only `2`
|
|
53
|
+
* });
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* This type was added because we found that the usage of an explicit type for
|
|
57
|
+
* those use cases makes the intent of the corresponding code clearer.
|
|
58
|
+
*/
|
|
59
|
+
export interface ISharedReference<T> {
|
|
60
|
+
/** Get the last set value for this shared reference. */
|
|
61
|
+
getValue() : T;
|
|
62
|
+
|
|
63
|
+
/** Update the value of this shared reference. */
|
|
64
|
+
setValue(newVal : T) : void;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Returns an Observable which synchronously emits the current value (unless
|
|
68
|
+
* the `skipCurrentValue` argument has been set to `true`) and then each time
|
|
69
|
+
* a new value is set.
|
|
70
|
+
* @param {boolean} [skipCurrentValue]
|
|
71
|
+
* @returns {Observable}
|
|
72
|
+
*/
|
|
73
|
+
asObservable(skipCurrentValue? : boolean) : Observable<T>;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Indicate that no new values will be emitted.
|
|
77
|
+
* Allows to automatically close all Observables generated from this shared
|
|
78
|
+
* reference.
|
|
79
|
+
*/
|
|
80
|
+
finish() : void;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* An `ISharedReference` which can only be read and not updated.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```ts
|
|
88
|
+
* const myReference : ISharedReference<number> = createSharedReference(4);
|
|
89
|
+
*
|
|
90
|
+
* function shouldOnlyReadIt(roRef : IReadOnlySharedReference<number>) {
|
|
91
|
+
* console.log("current value:", roRef.getValue());
|
|
92
|
+
* }
|
|
93
|
+
*
|
|
94
|
+
* shouldOnlyReadIt(myReference); // output: "current value: 4"
|
|
95
|
+
*
|
|
96
|
+
* myReference.setValue(12);
|
|
97
|
+
* shouldOnlyReadIt(myReference); // output: "current value: 12"
|
|
98
|
+
* ```
|
|
99
|
+
*
|
|
100
|
+
* Because an `ISharedReference` is structurally compatible to a
|
|
101
|
+
* `IReadOnlySharedReference`, and because of TypeScript variance rules, it can
|
|
102
|
+
* be upcasted into a `IReadOnlySharedReference` at any time to make it clear in
|
|
103
|
+
* the code that some logic is not supposed to update the referenced value.
|
|
104
|
+
*/
|
|
105
|
+
export interface IReadOnlySharedReference<T> {
|
|
106
|
+
getValue() : T;
|
|
107
|
+
asObservable(skipCurrentValue? : boolean) : Observable<T>;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Create an `ISharedReference` object encapsulating the mutable `initialValue`
|
|
112
|
+
* value of type T.
|
|
113
|
+
*
|
|
114
|
+
* @see ISharedReference
|
|
115
|
+
* @param {*} initialValue
|
|
116
|
+
* @returns {Observable}
|
|
117
|
+
*/
|
|
118
|
+
export function createSharedReference<T>(initialValue : T) : ISharedReference<T> {
|
|
119
|
+
/** Current value referenced by this `ISharedReference`. */
|
|
120
|
+
let value = initialValue;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* List of currently subscribed Observables which listen to the referenced
|
|
124
|
+
* value's updates.
|
|
125
|
+
*
|
|
126
|
+
* Contains two properties:
|
|
127
|
+
* - `subscriber`: interface through which new value will be communicated.
|
|
128
|
+
* - `hasBeenUnsubscribed`: becomes `true` when the Observable becomes
|
|
129
|
+
* unsubscribed and thus when it is removed from the `subs` array.
|
|
130
|
+
* Adding this property allows to detect when a previously-added
|
|
131
|
+
* Observable has since been unsubscribed e.g. as a side-effect during a
|
|
132
|
+
* function call.
|
|
133
|
+
*/
|
|
134
|
+
const subs : Array<{ subscriber : Subscriber<T>;
|
|
135
|
+
hasBeenUnsubscribed : boolean; }> = [];
|
|
136
|
+
|
|
137
|
+
let isFinished = false;
|
|
138
|
+
|
|
139
|
+
return {
|
|
140
|
+
/**
|
|
141
|
+
* Returns the current value of this shared reference.
|
|
142
|
+
* @returns {*}
|
|
143
|
+
*/
|
|
144
|
+
getValue() : T {
|
|
145
|
+
return value;
|
|
146
|
+
},
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Update the value of this shared reference.
|
|
150
|
+
* @param {*}
|
|
151
|
+
*/
|
|
152
|
+
setValue(newVal : T) : void {
|
|
153
|
+
if (isFinished) {
|
|
154
|
+
if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.DEV as number) {
|
|
155
|
+
throw new Error("Finished shared references cannot be updated");
|
|
156
|
+
} else {
|
|
157
|
+
log.error("Finished shared references cannot be updated");
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
value = newVal;
|
|
162
|
+
|
|
163
|
+
if (subs.length === 0) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const clonedSubs = subs.slice();
|
|
167
|
+
for (const subObj of clonedSubs) {
|
|
168
|
+
try {
|
|
169
|
+
if (!subObj.hasBeenUnsubscribed) {
|
|
170
|
+
subObj.subscriber.next(newVal);
|
|
171
|
+
}
|
|
172
|
+
} catch (_) {
|
|
173
|
+
/* nothing */
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Returns an Observable which synchronously emits the current value (unless
|
|
181
|
+
* the `skipCurrentValue` argument has been set to `true`) and then each
|
|
182
|
+
* time a new value is set.
|
|
183
|
+
* @param {boolean} [skipCurrentValue]
|
|
184
|
+
* @returns {Observable}
|
|
185
|
+
*/
|
|
186
|
+
asObservable(skipCurrentValue? : boolean) : Observable<T> {
|
|
187
|
+
return new Observable((obs : Subscriber<T>) => {
|
|
188
|
+
if (skipCurrentValue !== true) {
|
|
189
|
+
obs.next(value);
|
|
190
|
+
}
|
|
191
|
+
if (isFinished) {
|
|
192
|
+
obs.complete();
|
|
193
|
+
return undefined;
|
|
194
|
+
}
|
|
195
|
+
const subObj = { subscriber: obs,
|
|
196
|
+
hasBeenUnsubscribed: false };
|
|
197
|
+
subs.push(subObj);
|
|
198
|
+
return () => {
|
|
199
|
+
/**
|
|
200
|
+
* Code in here can still be running while this is happening.
|
|
201
|
+
* Set `hasBeenUnsubscribed` to `true` to avoid still using the
|
|
202
|
+
* `subscriber` from this object.
|
|
203
|
+
*/
|
|
204
|
+
subObj.hasBeenUnsubscribed = true;
|
|
205
|
+
const indexOf = subs.indexOf(subObj);
|
|
206
|
+
if (indexOf >= 0) {
|
|
207
|
+
subs.splice(indexOf, 1);
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
});
|
|
211
|
+
},
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Indicate that no new values will be emitted.
|
|
215
|
+
* Allows to automatically close all Observables generated from this shared
|
|
216
|
+
* reference.
|
|
217
|
+
*/
|
|
218
|
+
finish() : void {
|
|
219
|
+
isFinished = true;
|
|
220
|
+
const clonedSubs = subs.slice();
|
|
221
|
+
for (const subObj of clonedSubs) {
|
|
222
|
+
try {
|
|
223
|
+
if (!subObj.hasBeenUnsubscribed) {
|
|
224
|
+
subObj.subscriber.complete();
|
|
225
|
+
}
|
|
226
|
+
} catch (_) {
|
|
227
|
+
/* nothing */
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
export default createSharedReference;
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
/** Object returned by `fetchRequest` after the fetch operation succeeded. */
|
|
31
31
|
export interface IFetchedStreamComplete {
|
|
32
32
|
/** Duration of the whole request, in milliseconds. */
|
|
33
|
-
|
|
33
|
+
requestDuration : number;
|
|
34
34
|
/** Result of `performance.now()` at the time the request was received. */
|
|
35
35
|
receivedTime : number;
|
|
36
36
|
/** Result of `performance.now()` at the time the request was started. */
|
|
@@ -211,8 +211,8 @@ export default function fetchRequest(
|
|
|
211
211
|
} else if (data.done) {
|
|
212
212
|
deregisterCancelLstnr();
|
|
213
213
|
const receivedTime = performance.now();
|
|
214
|
-
const
|
|
215
|
-
return {
|
|
214
|
+
const requestDuration = receivedTime - sendingTime;
|
|
215
|
+
return { requestDuration,
|
|
216
216
|
receivedTime,
|
|
217
217
|
sendingTime,
|
|
218
218
|
size,
|
package/src/utils/request/xhr.ts
CHANGED
|
@@ -247,7 +247,7 @@ export default function request<T>(
|
|
|
247
247
|
responseType: loadedResponseType,
|
|
248
248
|
sendingTime,
|
|
249
249
|
receivedTime,
|
|
250
|
-
|
|
250
|
+
requestDuration: receivedTime - sendingTime,
|
|
251
251
|
size: totalSize,
|
|
252
252
|
responseData });
|
|
253
253
|
|
|
@@ -303,7 +303,7 @@ export interface IRequestOptions<ResponseType> {
|
|
|
303
303
|
/** Data emitted by `request`'s Promise when the request succeeded. */
|
|
304
304
|
export interface IRequestResponse<T, U> {
|
|
305
305
|
/** Time taken by the request, in milliseconds. */
|
|
306
|
-
|
|
306
|
+
requestDuration : number;
|
|
307
307
|
/** Time (relative to the "time origin") at which the request ended. */
|
|
308
308
|
receivedTime : number;
|
|
309
309
|
/** Data requested. Its type will depend on the responseType. */
|
|
@@ -15,13 +15,11 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
|
+
catchError,
|
|
19
|
+
mergeMap,
|
|
18
20
|
Observable,
|
|
19
21
|
timer as observableTimer,
|
|
20
22
|
} from "rxjs";
|
|
21
|
-
import {
|
|
22
|
-
catchError,
|
|
23
|
-
mergeMap,
|
|
24
|
-
} from "rxjs/operators";
|
|
25
23
|
import { ICustomError } from "../errors";
|
|
26
24
|
import getFuzzedDelay from "./get_fuzzed_delay";
|
|
27
25
|
import isNullOrUndefined from "./is_null_or_undefined";
|
package/tsconfig.json
CHANGED
|
@@ -17,7 +17,10 @@
|
|
|
17
17
|
"types": ["rxjs", "node", "jest"],
|
|
18
18
|
"moduleResolution": "node",
|
|
19
19
|
"typeRoots": [
|
|
20
|
-
"./src/typings",
|
|
20
|
+
"./src/typings/pinkie.d.ts",
|
|
21
|
+
"./src/typings/next-tick.d.ts",
|
|
22
|
+
"./src/typings/object-assign.d.ts",
|
|
23
|
+
"./src/typings/globals.d.ts",
|
|
21
24
|
"./node_modules/@types"
|
|
22
25
|
]
|
|
23
26
|
},
|
package/tsconfig.modules.json
CHANGED
|
@@ -18,14 +18,19 @@
|
|
|
18
18
|
"moduleResolution": "node",
|
|
19
19
|
"module": "es2015",
|
|
20
20
|
"typeRoots": [
|
|
21
|
-
"./
|
|
21
|
+
"./scripts/build/constants.d.ts",
|
|
22
|
+
"./src/typings/pinkie.d.ts",
|
|
23
|
+
"./src/typings/next-tick.d.ts",
|
|
24
|
+
"./src/typings/object-assign.d.ts",
|
|
22
25
|
"./node_modules/@types"
|
|
23
26
|
]
|
|
24
27
|
},
|
|
25
28
|
"include": [
|
|
26
|
-
"./src/**/*.ts"
|
|
29
|
+
"./src/**/*.ts",
|
|
30
|
+
"./scripts/build/constants.d.ts"
|
|
27
31
|
],
|
|
28
32
|
"exclude":[
|
|
29
|
-
"./src/**/*.test.ts"
|
|
33
|
+
"./src/**/*.test.ts",
|
|
34
|
+
"./src/typings/globals.d.ts"
|
|
30
35
|
]
|
|
31
36
|
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright 2015 CANAL+ Group
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
import { Observable } from "rxjs";
|
|
17
|
-
import { IABRFiltersObject } from "./representation_estimator";
|
|
18
|
-
/**
|
|
19
|
-
* Create Observable that merge several throttling Observables into one.
|
|
20
|
-
* @param {Observable} limitWidth$ - Emit the width at which the chosen
|
|
21
|
-
* Representation should be limited.
|
|
22
|
-
* @param {Observable} throttleBitrate$ - Emit the maximum bitrate authorized.
|
|
23
|
-
* @param {Observable} throttle$ - Also emit the maximum bitrate authorized.
|
|
24
|
-
* Here for legacy reasons.
|
|
25
|
-
* @returns {Observable}
|
|
26
|
-
*/
|
|
27
|
-
export default function createFilters(limitWidth$?: Observable<number>, throttleBitrate$?: Observable<number>, throttle$?: Observable<number>): Observable<IABRFiltersObject>;
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright 2015 CANAL+ Group
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
17
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
18
|
-
if (ar || !(i in from)) {
|
|
19
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
20
|
-
ar[i] = from[i];
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
24
|
-
};
|
|
25
|
-
import { combineLatest as observableCombineLatest, of as observableOf, } from "rxjs";
|
|
26
|
-
import { map } from "rxjs/operators";
|
|
27
|
-
import objectAssign from "../../utils/object_assign";
|
|
28
|
-
/**
|
|
29
|
-
* Create Observable that merge several throttling Observables into one.
|
|
30
|
-
* @param {Observable} limitWidth$ - Emit the width at which the chosen
|
|
31
|
-
* Representation should be limited.
|
|
32
|
-
* @param {Observable} throttleBitrate$ - Emit the maximum bitrate authorized.
|
|
33
|
-
* @param {Observable} throttle$ - Also emit the maximum bitrate authorized.
|
|
34
|
-
* Here for legacy reasons.
|
|
35
|
-
* @returns {Observable}
|
|
36
|
-
*/
|
|
37
|
-
export default function createFilters(limitWidth$, throttleBitrate$, throttle$) {
|
|
38
|
-
var deviceEventsArray = [];
|
|
39
|
-
if (limitWidth$ != null) {
|
|
40
|
-
deviceEventsArray.push(limitWidth$.pipe(map(function (width) { return ({ width: width }); })));
|
|
41
|
-
}
|
|
42
|
-
if (throttle$ != null) {
|
|
43
|
-
deviceEventsArray.push(throttle$.pipe(map(function (bitrate) { return ({ bitrate: bitrate }); })));
|
|
44
|
-
}
|
|
45
|
-
if (throttleBitrate$ != null) {
|
|
46
|
-
deviceEventsArray.push(throttleBitrate$.pipe(map(function (bitrate) { return ({ bitrate: bitrate }); })));
|
|
47
|
-
}
|
|
48
|
-
// Emit restrictions on the pools of available representations to choose
|
|
49
|
-
// from.
|
|
50
|
-
return deviceEventsArray.length > 0 ?
|
|
51
|
-
observableCombineLatest(deviceEventsArray)
|
|
52
|
-
.pipe(map(function (args) {
|
|
53
|
-
return objectAssign.apply(void 0, __spreadArray([{}], args, false));
|
|
54
|
-
})) :
|
|
55
|
-
observableOf({});
|
|
56
|
-
}
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright 2015 CANAL+ Group
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
/**
|
|
17
|
-
* This file defines a global clock for the RxPlayer.
|
|
18
|
-
*
|
|
19
|
-
* Each clock tick also pass information about the current state of the
|
|
20
|
-
* media element to sub-parts of the player.
|
|
21
|
-
*/
|
|
22
|
-
import { Observable } from "rxjs";
|
|
23
|
-
/** "Event" that triggered the clock tick. */
|
|
24
|
-
export declare type IClockMediaEventType =
|
|
25
|
-
/** First clock tick automatically emitted. */
|
|
26
|
-
"init" | // set once on first emit
|
|
27
|
-
/** Regularly emitted clock tick when no event happened in a long time. */
|
|
28
|
-
"timeupdate" |
|
|
29
|
-
/** On the HTML5 event with the same name */
|
|
30
|
-
"canplay" |
|
|
31
|
-
/** On the HTML5 event with the same name */
|
|
32
|
-
"canplaythrough" | // HTML5 Event
|
|
33
|
-
/** On the HTML5 event with the same name */
|
|
34
|
-
"play" |
|
|
35
|
-
/** On the HTML5 event with the same name */
|
|
36
|
-
"seeking" |
|
|
37
|
-
/** On the HTML5 event with the same name */
|
|
38
|
-
"seeked" |
|
|
39
|
-
/** On the HTML5 event with the same name */
|
|
40
|
-
"stalled" |
|
|
41
|
-
/** On the HTML5 event with the same name */
|
|
42
|
-
"loadedmetadata" |
|
|
43
|
-
/** On the HTML5 event with the same name */
|
|
44
|
-
"ratechange" |
|
|
45
|
-
/** An internal seek happens */
|
|
46
|
-
"internal-seeking";
|
|
47
|
-
/** Information recuperated on the media element on each clock tick. */
|
|
48
|
-
interface IMediaInfos {
|
|
49
|
-
/** Gap between `currentTime` and the next position with un-buffered data. */
|
|
50
|
-
bufferGap: number;
|
|
51
|
-
/** Value of `buffered` (buffered ranges) for the media element. */
|
|
52
|
-
buffered: TimeRanges;
|
|
53
|
-
/** The buffered range we are currently playing. */
|
|
54
|
-
currentRange: {
|
|
55
|
-
start: number;
|
|
56
|
-
end: number;
|
|
57
|
-
} | null;
|
|
58
|
-
/** `currentTime` (position) set on the media element at the time of the tick. */
|
|
59
|
-
position: number;
|
|
60
|
-
/** Current `duration` set on the media element. */
|
|
61
|
-
duration: number;
|
|
62
|
-
/** Current `ended` set on the media element. */
|
|
63
|
-
ended: boolean;
|
|
64
|
-
/** Current `paused` set on the media element. */
|
|
65
|
-
paused: boolean;
|
|
66
|
-
/** Current `playbackRate` set on the media element. */
|
|
67
|
-
playbackRate: number;
|
|
68
|
-
/** Current `readyState` value on the media element. */
|
|
69
|
-
readyState: number;
|
|
70
|
-
/** Current `seeking` value on the mediaElement. */
|
|
71
|
-
seeking: boolean;
|
|
72
|
-
/** Event that triggered this clock tick. */
|
|
73
|
-
event: IClockMediaEventType;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Describes when the player is "rebuffering" and what event started that
|
|
77
|
-
* status.
|
|
78
|
-
* "Rebuffering" is a status where the player has not enough buffer ahead to
|
|
79
|
-
* play reliably.
|
|
80
|
-
* The RxPlayer should pause playback when the clock indicates the rebuffering
|
|
81
|
-
* status.
|
|
82
|
-
*/
|
|
83
|
-
export interface IRebufferingStatus {
|
|
84
|
-
/** What started the player to rebuffer. */
|
|
85
|
-
reason: "seeking" | // Building buffer after seeking
|
|
86
|
-
"not-ready" | // Building buffer after low readyState
|
|
87
|
-
"internal-seek" | // Building buffer after a seek happened inside the player
|
|
88
|
-
"buffering";
|
|
89
|
-
/** `performance.now` at the time the rebuffering happened. */
|
|
90
|
-
timestamp: number;
|
|
91
|
-
/**
|
|
92
|
-
* Position, in seconds, at which data is awaited.
|
|
93
|
-
* If `null` the player is rebuffering but not because it is awaiting future data.
|
|
94
|
-
*/
|
|
95
|
-
position: number | null;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Describes when the player is "frozen".
|
|
99
|
-
* This status is reserved for when the player is stuck at the same position for
|
|
100
|
-
* an unknown reason.
|
|
101
|
-
*/
|
|
102
|
-
export interface IFreezingStatus {
|
|
103
|
-
/** `performance.now` at the time the freezing started to be detected. */
|
|
104
|
-
timestamp: number;
|
|
105
|
-
}
|
|
106
|
-
/** Information emitted on each clock tick. */
|
|
107
|
-
export interface IClockTick extends IMediaInfos {
|
|
108
|
-
/**
|
|
109
|
-
* Set if the player is short on audio and/or video media data and is a such,
|
|
110
|
-
* rebuffering.
|
|
111
|
-
* `null` if not.
|
|
112
|
-
*/
|
|
113
|
-
rebuffering: IRebufferingStatus | null;
|
|
114
|
-
/**
|
|
115
|
-
* Set if the player is frozen, that is, stuck in place for unknown reason.
|
|
116
|
-
* Note that this reason can be a valid one, such as a necessary license not
|
|
117
|
-
* being obtained yet.
|
|
118
|
-
*
|
|
119
|
-
* `null` if the player is not frozen.
|
|
120
|
-
*/
|
|
121
|
-
freezing: IFreezingStatus | null;
|
|
122
|
-
getCurrentTime: () => number;
|
|
123
|
-
}
|
|
124
|
-
/** Handle time relative information */
|
|
125
|
-
export interface IClockHandler {
|
|
126
|
-
clock$: Observable<IClockTick>;
|
|
127
|
-
setCurrentTime: (time: number) => void;
|
|
128
|
-
}
|
|
129
|
-
export interface IClockOptions {
|
|
130
|
-
withMediaSource: boolean;
|
|
131
|
-
lowLatencyMode: boolean;
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Timings observable.
|
|
135
|
-
*
|
|
136
|
-
* This Observable samples snapshots of player's current state:
|
|
137
|
-
* * time position
|
|
138
|
-
* * playback rate
|
|
139
|
-
* * current buffered range
|
|
140
|
-
* * gap with current buffered range ending
|
|
141
|
-
* * media duration
|
|
142
|
-
*
|
|
143
|
-
* In addition to sampling, this Observable also reacts to "seeking" and "play"
|
|
144
|
-
* events.
|
|
145
|
-
*
|
|
146
|
-
* Observable is shared for performance reason: reduces the number of event
|
|
147
|
-
* listeners and intervals/timeouts but also limit access to the media element
|
|
148
|
-
* properties and gap calculations.
|
|
149
|
-
*
|
|
150
|
-
* The sampling is manual instead of based on "timeupdate" to reduce the
|
|
151
|
-
* number of events.
|
|
152
|
-
* @param {HTMLMediaElement} mediaElement
|
|
153
|
-
* @param {Object} options
|
|
154
|
-
* @returns {Observable}
|
|
155
|
-
*/
|
|
156
|
-
declare function createClock(mediaElement: HTMLMediaElement, options: IClockOptions): IClockHandler;
|
|
157
|
-
export default createClock;
|