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
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
export interface
|
|
16
|
+
export interface IBufferBasedChooserPlaybackObservation {
|
|
17
17
|
bufferGap: number;
|
|
18
18
|
currentBitrate?: number;
|
|
19
19
|
currentScore?: number;
|
|
@@ -21,9 +21,9 @@ export interface IBufferBasedChooserClockTick {
|
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
23
|
* From the buffer gap, choose a representation.
|
|
24
|
-
* @param {Object}
|
|
24
|
+
* @param {Object} playbackObservation
|
|
25
25
|
* @param {Array.<Number>} bitrates
|
|
26
26
|
* @param {Array.<Number>} bufferLevels
|
|
27
27
|
* @returns {Object|undefined}
|
|
28
28
|
*/
|
|
29
|
-
export default function getEstimateFromBufferLevels(
|
|
29
|
+
export default function getEstimateFromBufferLevels(playbackObservation: IBufferBasedChooserPlaybackObservation, bitrates: number[], bufferLevels: number[]): number | undefined;
|
|
@@ -17,13 +17,13 @@ import log from "../../log";
|
|
|
17
17
|
import arrayFindIndex from "../../utils/array_find_index";
|
|
18
18
|
/**
|
|
19
19
|
* From the buffer gap, choose a representation.
|
|
20
|
-
* @param {Object}
|
|
20
|
+
* @param {Object} playbackObservation
|
|
21
21
|
* @param {Array.<Number>} bitrates
|
|
22
22
|
* @param {Array.<Number>} bufferLevels
|
|
23
23
|
* @returns {Object|undefined}
|
|
24
24
|
*/
|
|
25
|
-
export default function getEstimateFromBufferLevels(
|
|
26
|
-
var bufferGap =
|
|
25
|
+
export default function getEstimateFromBufferLevels(playbackObservation, bitrates, bufferLevels) {
|
|
26
|
+
var bufferGap = playbackObservation.bufferGap, currentBitrate = playbackObservation.currentBitrate, currentScore = playbackObservation.currentScore, speed = playbackObservation.speed;
|
|
27
27
|
if (currentBitrate == null) {
|
|
28
28
|
return bitrates[0];
|
|
29
29
|
}
|
|
@@ -0,0 +1,95 @@
|
|
|
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 { Representation } from "../../manifest";
|
|
17
|
+
import LastEstimateStorage from "./last_estimate_storage";
|
|
18
|
+
import { IRequestInfo } from "./pending_requests_store";
|
|
19
|
+
import RepresentationScoreCalculator from "./representation_score_calculator";
|
|
20
|
+
/**
|
|
21
|
+
* Estimate which Representation should be played based on risky "guesses".
|
|
22
|
+
*
|
|
23
|
+
* Basically, this `GuessBasedChooser` will attempt switching to the superior
|
|
24
|
+
* quality when conditions allows this and then check if we're able to maintain
|
|
25
|
+
* this quality. If we're not, it will rollbacks to the previous, maintaninable,
|
|
26
|
+
* guess.
|
|
27
|
+
*
|
|
28
|
+
* The algorithm behind the `GuessBasedChooser` is very risky in terms of
|
|
29
|
+
* rebuffering chances. As such, it should only be used when other approach
|
|
30
|
+
* don't work (e.g. low-latency contents).
|
|
31
|
+
* @class GuessBasedChooser
|
|
32
|
+
*/
|
|
33
|
+
export default class GuessBasedChooser {
|
|
34
|
+
private _lastAbrEstimate;
|
|
35
|
+
private _scoreCalculator;
|
|
36
|
+
private _consecutiveWrongGuesses;
|
|
37
|
+
private _blockGuessesUntil;
|
|
38
|
+
private _lastMaintanableBitrate;
|
|
39
|
+
/**
|
|
40
|
+
* Create a new `GuessBasedChooser`.
|
|
41
|
+
* @param {Object} scoreCalculator
|
|
42
|
+
* @param {Object} prevEstimate
|
|
43
|
+
*/
|
|
44
|
+
constructor(scoreCalculator: RepresentationScoreCalculator, prevEstimate: LastEstimateStorage);
|
|
45
|
+
/**
|
|
46
|
+
* Perform a "guess", which basically indicates which Representation should be
|
|
47
|
+
* chosen according to the `GuessBasedChooser`.
|
|
48
|
+
*
|
|
49
|
+
* @param {Array.<Object>} representations - Array of all Representation the
|
|
50
|
+
* GuessBasedChooser can choose from, sorted by bitrate ascending.
|
|
51
|
+
* /!\ It is very important that Representation in that Array are sorted by
|
|
52
|
+
* bitrate ascending for this method to work as intented.
|
|
53
|
+
* @param {Object} observation - Last playback observation performed.
|
|
54
|
+
* @param {Object} currentRepresentation - The Representation currently
|
|
55
|
+
* loading.
|
|
56
|
+
* @param {number} incomingBestBitrate - The bitrate of the Representation
|
|
57
|
+
* chosen by the more optimistic of the other ABR algorithms currently.
|
|
58
|
+
* @param {Array.<Object>} requests - Information on all pending requests.
|
|
59
|
+
* @returns {Object|null} - If a guess is made, return that guess, else
|
|
60
|
+
* returns `null` (in which case you should fallback to another ABR
|
|
61
|
+
* algorithm).
|
|
62
|
+
*/
|
|
63
|
+
getGuess(representations: Representation[], observation: {
|
|
64
|
+
/**
|
|
65
|
+
* For the concerned media buffer, difference in seconds between the next
|
|
66
|
+
* position where no segment data is available and the current position.
|
|
67
|
+
*/
|
|
68
|
+
bufferGap: number;
|
|
69
|
+
/**
|
|
70
|
+
* Last "playback rate" set by the user. This is the ideal "playback rate" at
|
|
71
|
+
* which the media should play.
|
|
72
|
+
*/
|
|
73
|
+
speed: number;
|
|
74
|
+
}, currentRepresentation: Representation, incomingBestBitrate: number, requests: IRequestInfo[]): Representation | null;
|
|
75
|
+
/**
|
|
76
|
+
* Returns `true` if we've enough confidence on the current situation to make
|
|
77
|
+
* a higher guess.
|
|
78
|
+
* @param {number} bufferGap
|
|
79
|
+
* @param {number} speed
|
|
80
|
+
* @param {Array} scoreData
|
|
81
|
+
* @returns {boolean}
|
|
82
|
+
*/
|
|
83
|
+
private _canGuessHigher;
|
|
84
|
+
/**
|
|
85
|
+
* Returns `true` if the pending guess of `lastGuess` seems to not
|
|
86
|
+
* be maintainable and as such should be stopped.
|
|
87
|
+
* @param {Object} lastGuess
|
|
88
|
+
* @param {Array} scoreData
|
|
89
|
+
* @param {number} bufferGap
|
|
90
|
+
* @param {Array.<Object>} requests
|
|
91
|
+
* @returns {boolean}
|
|
92
|
+
*/
|
|
93
|
+
private _shouldStopGuess;
|
|
94
|
+
private _isLastGuessValidated;
|
|
95
|
+
}
|
|
@@ -0,0 +1,242 @@
|
|
|
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 log from "../../log";
|
|
17
|
+
import arrayFindIndex from "../../utils/array_find_index";
|
|
18
|
+
import { estimateRequestBandwidth } from "./network_analyzer";
|
|
19
|
+
/**
|
|
20
|
+
* Estimate which Representation should be played based on risky "guesses".
|
|
21
|
+
*
|
|
22
|
+
* Basically, this `GuessBasedChooser` will attempt switching to the superior
|
|
23
|
+
* quality when conditions allows this and then check if we're able to maintain
|
|
24
|
+
* this quality. If we're not, it will rollbacks to the previous, maintaninable,
|
|
25
|
+
* guess.
|
|
26
|
+
*
|
|
27
|
+
* The algorithm behind the `GuessBasedChooser` is very risky in terms of
|
|
28
|
+
* rebuffering chances. As such, it should only be used when other approach
|
|
29
|
+
* don't work (e.g. low-latency contents).
|
|
30
|
+
* @class GuessBasedChooser
|
|
31
|
+
*/
|
|
32
|
+
var GuessBasedChooser = /** @class */ (function () {
|
|
33
|
+
/**
|
|
34
|
+
* Create a new `GuessBasedChooser`.
|
|
35
|
+
* @param {Object} scoreCalculator
|
|
36
|
+
* @param {Object} prevEstimate
|
|
37
|
+
*/
|
|
38
|
+
function GuessBasedChooser(scoreCalculator, prevEstimate) {
|
|
39
|
+
this._scoreCalculator = scoreCalculator;
|
|
40
|
+
this._lastAbrEstimate = prevEstimate;
|
|
41
|
+
this._consecutiveWrongGuesses = 0;
|
|
42
|
+
this._blockGuessesUntil = 0;
|
|
43
|
+
this._lastMaintanableBitrate = null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Perform a "guess", which basically indicates which Representation should be
|
|
47
|
+
* chosen according to the `GuessBasedChooser`.
|
|
48
|
+
*
|
|
49
|
+
* @param {Array.<Object>} representations - Array of all Representation the
|
|
50
|
+
* GuessBasedChooser can choose from, sorted by bitrate ascending.
|
|
51
|
+
* /!\ It is very important that Representation in that Array are sorted by
|
|
52
|
+
* bitrate ascending for this method to work as intented.
|
|
53
|
+
* @param {Object} observation - Last playback observation performed.
|
|
54
|
+
* @param {Object} currentRepresentation - The Representation currently
|
|
55
|
+
* loading.
|
|
56
|
+
* @param {number} incomingBestBitrate - The bitrate of the Representation
|
|
57
|
+
* chosen by the more optimistic of the other ABR algorithms currently.
|
|
58
|
+
* @param {Array.<Object>} requests - Information on all pending requests.
|
|
59
|
+
* @returns {Object|null} - If a guess is made, return that guess, else
|
|
60
|
+
* returns `null` (in which case you should fallback to another ABR
|
|
61
|
+
* algorithm).
|
|
62
|
+
*/
|
|
63
|
+
GuessBasedChooser.prototype.getGuess = function (representations, observation, currentRepresentation, incomingBestBitrate, requests) {
|
|
64
|
+
var bufferGap = observation.bufferGap, speed = observation.speed;
|
|
65
|
+
var lastChosenRep = this._lastAbrEstimate.representation;
|
|
66
|
+
if (lastChosenRep === null) {
|
|
67
|
+
return null; // There's nothing to base our guess on
|
|
68
|
+
}
|
|
69
|
+
if (incomingBestBitrate > lastChosenRep.bitrate) {
|
|
70
|
+
// ABR estimates are already superior or equal to the guess
|
|
71
|
+
// we'll be doing here, so no need to guess
|
|
72
|
+
if (this._lastAbrEstimate.algorithmType === 2 /* GuessBased */) {
|
|
73
|
+
if (this._lastAbrEstimate.representation !== null) {
|
|
74
|
+
this._lastMaintanableBitrate = this._lastAbrEstimate.representation.bitrate;
|
|
75
|
+
}
|
|
76
|
+
this._consecutiveWrongGuesses = 0;
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
var scoreData = this._scoreCalculator.getEstimate(currentRepresentation);
|
|
81
|
+
if (this._lastAbrEstimate.algorithmType !== 2 /* GuessBased */) {
|
|
82
|
+
if (scoreData === undefined) {
|
|
83
|
+
return null; // not enough information to start guessing
|
|
84
|
+
}
|
|
85
|
+
if (this._canGuessHigher(bufferGap, speed, scoreData)) {
|
|
86
|
+
var nextRepresentation = getNextRepresentation(representations, currentRepresentation);
|
|
87
|
+
if (nextRepresentation !== null) {
|
|
88
|
+
return nextRepresentation;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
// If we reached here, we're currently already in guessing mode
|
|
94
|
+
if (this._isLastGuessValidated(lastChosenRep, incomingBestBitrate, scoreData)) {
|
|
95
|
+
log.debug("ABR: Guessed Representation validated", lastChosenRep.bitrate);
|
|
96
|
+
this._lastMaintanableBitrate = lastChosenRep.bitrate;
|
|
97
|
+
this._consecutiveWrongGuesses = 0;
|
|
98
|
+
}
|
|
99
|
+
if (currentRepresentation.id !== lastChosenRep.id) {
|
|
100
|
+
return lastChosenRep;
|
|
101
|
+
}
|
|
102
|
+
var shouldStopGuess = this._shouldStopGuess(currentRepresentation, scoreData, bufferGap, requests);
|
|
103
|
+
if (shouldStopGuess) {
|
|
104
|
+
// Block guesses for a time
|
|
105
|
+
this._consecutiveWrongGuesses++;
|
|
106
|
+
this._blockGuessesUntil = performance.now() +
|
|
107
|
+
Math.min(this._consecutiveWrongGuesses * 15000, 120000);
|
|
108
|
+
return getPreviousRepresentation(representations, currentRepresentation);
|
|
109
|
+
}
|
|
110
|
+
else if (scoreData === undefined) {
|
|
111
|
+
return currentRepresentation;
|
|
112
|
+
}
|
|
113
|
+
if (this._canGuessHigher(bufferGap, speed, scoreData)) {
|
|
114
|
+
var nextRepresentation = getNextRepresentation(representations, currentRepresentation);
|
|
115
|
+
if (nextRepresentation !== null) {
|
|
116
|
+
return nextRepresentation;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return currentRepresentation;
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Returns `true` if we've enough confidence on the current situation to make
|
|
123
|
+
* a higher guess.
|
|
124
|
+
* @param {number} bufferGap
|
|
125
|
+
* @param {number} speed
|
|
126
|
+
* @param {Array} scoreData
|
|
127
|
+
* @returns {boolean}
|
|
128
|
+
*/
|
|
129
|
+
GuessBasedChooser.prototype._canGuessHigher = function (bufferGap, speed, _a) {
|
|
130
|
+
var score = _a[0], scoreConfidenceLevel = _a[1];
|
|
131
|
+
return isFinite(bufferGap) && bufferGap >= 2.5 &&
|
|
132
|
+
performance.now() > this._blockGuessesUntil &&
|
|
133
|
+
scoreConfidenceLevel === 1 /* HIGH */ &&
|
|
134
|
+
score / speed > 1.01;
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Returns `true` if the pending guess of `lastGuess` seems to not
|
|
138
|
+
* be maintainable and as such should be stopped.
|
|
139
|
+
* @param {Object} lastGuess
|
|
140
|
+
* @param {Array} scoreData
|
|
141
|
+
* @param {number} bufferGap
|
|
142
|
+
* @param {Array.<Object>} requests
|
|
143
|
+
* @returns {boolean}
|
|
144
|
+
*/
|
|
145
|
+
GuessBasedChooser.prototype._shouldStopGuess = function (lastGuess, scoreData, bufferGap, requests) {
|
|
146
|
+
if (scoreData !== undefined && scoreData[0] < 1.01) {
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
else if ((scoreData === undefined || scoreData[0] < 1.2) && bufferGap < 0.6) {
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
var guessedRepresentationRequests = requests.filter(function (req) {
|
|
153
|
+
return req.content.representation.id === lastGuess.id;
|
|
154
|
+
});
|
|
155
|
+
var now = performance.now();
|
|
156
|
+
for (var _i = 0, guessedRepresentationRequests_1 = guessedRepresentationRequests; _i < guessedRepresentationRequests_1.length; _i++) {
|
|
157
|
+
var req = guessedRepresentationRequests_1[_i];
|
|
158
|
+
var requestElapsedTime = now - req.requestTimestamp;
|
|
159
|
+
if (req.content.segment.isInit) {
|
|
160
|
+
if (requestElapsedTime > 1000) {
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else if (requestElapsedTime > req.content.segment.duration * 1000 + 200) {
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
var fastBw = estimateRequestBandwidth(req);
|
|
169
|
+
if (fastBw !== undefined && fastBw < lastGuess.bitrate * 0.8) {
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return false;
|
|
175
|
+
};
|
|
176
|
+
GuessBasedChooser.prototype._isLastGuessValidated = function (lastGuess, incomingBestBitrate, scoreData) {
|
|
177
|
+
if (scoreData !== undefined &&
|
|
178
|
+
scoreData[1] === 1 /* HIGH */ &&
|
|
179
|
+
scoreData[0] > 1.5) {
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
return incomingBestBitrate >= lastGuess.bitrate &&
|
|
183
|
+
(this._lastMaintanableBitrate === null ||
|
|
184
|
+
this._lastMaintanableBitrate < lastGuess.bitrate);
|
|
185
|
+
};
|
|
186
|
+
return GuessBasedChooser;
|
|
187
|
+
}());
|
|
188
|
+
export default GuessBasedChooser;
|
|
189
|
+
/**
|
|
190
|
+
* From the array of Representations given, returns the Representation with a
|
|
191
|
+
* bitrate immediately superior to the current one.
|
|
192
|
+
* Returns `null` if that "next" Representation is not found.
|
|
193
|
+
*
|
|
194
|
+
* /!\ The representations have to be already sorted by bitrate, in ascending
|
|
195
|
+
* order.
|
|
196
|
+
* @param {Array.<Object>} representations - Available representations to choose
|
|
197
|
+
* from, sorted by bitrate in ascending order.
|
|
198
|
+
* @param {Object} currentRepresentation - The Representation currently
|
|
199
|
+
* considered.
|
|
200
|
+
* @returns {Object|null}
|
|
201
|
+
*/
|
|
202
|
+
function getNextRepresentation(representations, currentRepresentation) {
|
|
203
|
+
var len = representations.length;
|
|
204
|
+
var index = arrayFindIndex(representations, function (_a) {
|
|
205
|
+
var id = _a.id;
|
|
206
|
+
return id === currentRepresentation.id;
|
|
207
|
+
});
|
|
208
|
+
if (index < 0) {
|
|
209
|
+
log.error("ABR: Current Representation not found.");
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
while (++index < len) {
|
|
213
|
+
if (representations[index].bitrate > currentRepresentation.bitrate) {
|
|
214
|
+
return representations[index];
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* From the array of Representations given, returns the Representation with a
|
|
221
|
+
* bitrate immediately inferior.
|
|
222
|
+
* Returns `null` if that "previous" Representation is not found.
|
|
223
|
+
* @param {Array.<Object>} representations
|
|
224
|
+
* @param {Object} representation
|
|
225
|
+
* @returns {Object|null}
|
|
226
|
+
*/
|
|
227
|
+
function getPreviousRepresentation(representations, currentRepresentation) {
|
|
228
|
+
var index = arrayFindIndex(representations, function (_a) {
|
|
229
|
+
var id = _a.id;
|
|
230
|
+
return id === currentRepresentation.id;
|
|
231
|
+
});
|
|
232
|
+
if (index < 0) {
|
|
233
|
+
log.error("ABR: Current Representation not found.");
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
while (--index >= 0) {
|
|
237
|
+
if (representations[index].bitrate < currentRepresentation.bitrate) {
|
|
238
|
+
return representations[index];
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import ABRManager, { IABRManagerArguments,
|
|
17
|
-
export { IABRAddedSegmentEvent,
|
|
16
|
+
import ABRManager, { IABRManagerArguments, IABRManagerPlaybackObservation } from "./abr_manager";
|
|
17
|
+
export { IABRAddedSegmentEvent, IABREstimate, IABRMetricsEvent, IABRMetricsEventValue, IABRRepresentationChangeEvent, IABRRequestBeginEvent, IABRRequestBeginEventValue, IABRRequestEndEvent, IABRRequestEndEventValue, IABRRequestProgressEvent, IABRRequestProgressEventValue, IABRStreamEvents, } from "./representation_estimator";
|
|
18
18
|
export default ABRManager;
|
|
19
|
-
export { IABRManagerArguments,
|
|
19
|
+
export { IABRManagerArguments, IABRManagerPlaybackObservation, };
|
|
@@ -0,0 +1,61 @@
|
|
|
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 { Representation } from "../../manifest";
|
|
17
|
+
/** Stores the last estimate made by the `RepresentationEstimator`. */
|
|
18
|
+
export default class LastEstimateStorage {
|
|
19
|
+
/**
|
|
20
|
+
* Estimated bandwitdh in the last estimate.
|
|
21
|
+
* `undefined` either if no estimate has been performed yet or if the
|
|
22
|
+
* bandwidth was unknown during the last estimate.
|
|
23
|
+
*/
|
|
24
|
+
bandwidth: number | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Estimated Representation in the last estimate.
|
|
27
|
+
* `null` if no estimate has been performed yet.
|
|
28
|
+
*/
|
|
29
|
+
representation: Representation | null;
|
|
30
|
+
/** Algorithm type used to make the last Representation estimate. */
|
|
31
|
+
algorithmType: ABRAlgorithmType;
|
|
32
|
+
constructor();
|
|
33
|
+
/**
|
|
34
|
+
* Update this `LastEstimateStorage` with new values.
|
|
35
|
+
* @param {Object} representation - Estimated Representation.
|
|
36
|
+
* @param {number|undefined} bandwidth - Estimated bandwidth.
|
|
37
|
+
* @param {boolean} wasGuessed - If `true`, this estimate was a guess made by
|
|
38
|
+
* the `GuessingEstimator`.
|
|
39
|
+
*/
|
|
40
|
+
update(representation: Representation, bandwidth: number | undefined, algorithmType: ABRAlgorithmType): void;
|
|
41
|
+
}
|
|
42
|
+
/** Identify an algorithm used to perform a Representation estimate. */
|
|
43
|
+
export declare const enum ABRAlgorithmType {
|
|
44
|
+
/**
|
|
45
|
+
* Buffer-based algorithm using mostly the size of the buffer to determine the
|
|
46
|
+
* best Representation.
|
|
47
|
+
*/
|
|
48
|
+
BufferBased = 0,
|
|
49
|
+
/**
|
|
50
|
+
* Bandwidth-based algorithm using mostly the speed at which segments are
|
|
51
|
+
* downloaded to determine the best Representation.
|
|
52
|
+
*/
|
|
53
|
+
BandwidthBased = 1,
|
|
54
|
+
/**
|
|
55
|
+
* Guess-based algorithm, which iterates through Representation and
|
|
56
|
+
* try to find the best one empirically.
|
|
57
|
+
*/
|
|
58
|
+
GuessBased = 2,
|
|
59
|
+
/** None of the other or no algorithm was used yet. */
|
|
60
|
+
None = 3
|
|
61
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
/** Stores the last estimate made by the `RepresentationEstimator`. */
|
|
17
|
+
var LastEstimateStorage = /** @class */ (function () {
|
|
18
|
+
function LastEstimateStorage() {
|
|
19
|
+
this.bandwidth = undefined;
|
|
20
|
+
this.representation = null;
|
|
21
|
+
this.algorithmType = 3 /* None */;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Update this `LastEstimateStorage` with new values.
|
|
25
|
+
* @param {Object} representation - Estimated Representation.
|
|
26
|
+
* @param {number|undefined} bandwidth - Estimated bandwidth.
|
|
27
|
+
* @param {boolean} wasGuessed - If `true`, this estimate was a guess made by
|
|
28
|
+
* the `GuessingEstimator`.
|
|
29
|
+
*/
|
|
30
|
+
LastEstimateStorage.prototype.update = function (representation, bandwidth, algorithmType) {
|
|
31
|
+
this.representation = representation;
|
|
32
|
+
this.bandwidth = bandwidth;
|
|
33
|
+
this.algorithmType = algorithmType;
|
|
34
|
+
};
|
|
35
|
+
return LastEstimateStorage;
|
|
36
|
+
}());
|
|
37
|
+
export default LastEstimateStorage;
|
|
@@ -33,12 +33,21 @@ interface IPlaybackConditionsInfo {
|
|
|
33
33
|
/** `duration` property of the HTMLMediaElement on which the content plays. */
|
|
34
34
|
duration: number;
|
|
35
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Estimate the __VERY__ recent bandwidth based on a single unfinished request.
|
|
38
|
+
* Useful when the current bandwidth seemed to have fallen quickly.
|
|
39
|
+
*
|
|
40
|
+
* @param {Object} request
|
|
41
|
+
* @returns {number|undefined}
|
|
42
|
+
*/
|
|
43
|
+
export declare function estimateRequestBandwidth(request: IRequestInfo): number | undefined;
|
|
36
44
|
/**
|
|
37
45
|
* Analyze the current network conditions and give a bandwidth estimate as well
|
|
38
46
|
* as a maximum bitrate a Representation should be.
|
|
39
47
|
* @class NetworkAnalyzer
|
|
40
48
|
*/
|
|
41
49
|
export default class NetworkAnalyzer {
|
|
50
|
+
private _lowLatencyMode;
|
|
42
51
|
private _inStarvationMode;
|
|
43
52
|
private _initialBitrate;
|
|
44
53
|
private _config;
|
|
@@ -47,11 +56,16 @@ export default class NetworkAnalyzer {
|
|
|
47
56
|
* Gives an estimate of the current bandwidth and of the bitrate that should
|
|
48
57
|
* be considered for chosing a `representation`.
|
|
49
58
|
* This estimate is only based on network metrics.
|
|
50
|
-
* @param {Object} playbackInfo - Gives current information about playback
|
|
51
|
-
* @param {Object} bandwidthEstimator
|
|
52
|
-
*
|
|
53
|
-
* @param {
|
|
54
|
-
*
|
|
59
|
+
* @param {Object} playbackInfo - Gives current information about playback.
|
|
60
|
+
* @param {Object} bandwidthEstimator - `BandwidthEstimator` allowing to
|
|
61
|
+
* produce network bandwidth estimates.
|
|
62
|
+
* @param {Object|null} currentRepresentation - The Representation currently
|
|
63
|
+
* chosen.
|
|
64
|
+
* `null` if no Representation has been chosen yet.
|
|
65
|
+
* @param {Array.<Object>} currentRequests - All segment requests by segment's
|
|
66
|
+
* start chronological order
|
|
67
|
+
* @param {number|undefined} lastEstimatedBitrate - Bitrate emitted during the
|
|
68
|
+
* last estimate.
|
|
55
69
|
* @returns {Object}
|
|
56
70
|
*/
|
|
57
71
|
getBandwidthEstimate(playbackInfo: IPlaybackConditionsInfo, bandwidthEstimator: BandwidthEstimator, currentRepresentation: Representation | null, currentRequests: IRequestInfo[], lastEstimatedBitrate: number | undefined): {
|
|
@@ -60,8 +74,12 @@ export default class NetworkAnalyzer {
|
|
|
60
74
|
};
|
|
61
75
|
/**
|
|
62
76
|
* For a given wanted bitrate, tells if should switch urgently.
|
|
63
|
-
* @param {number} bitrate
|
|
64
|
-
* @param {Object}
|
|
77
|
+
* @param {number} bitrate - The new estimated bitrate.
|
|
78
|
+
* @param {Object|null} currentRepresentation - The Representation being
|
|
79
|
+
* presently being loaded.
|
|
80
|
+
* @param {Array.<Object>} currentRequests - All segment requests by segment's
|
|
81
|
+
* start chronological order
|
|
82
|
+
* @param {Object} playbackInfo - Information on the current playback.
|
|
65
83
|
* @returns {boolean}
|
|
66
84
|
*/
|
|
67
85
|
isUrgent(bitrate: number, currentRepresentation: Representation | null, currentRequests: IRequestInfo[], playbackInfo: IPlaybackConditionsInfo): boolean;
|