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
|
@@ -44,12 +44,12 @@ import {
|
|
|
44
44
|
import getWebKitMediaKeysCallbacks from "./webkit_media_keys";
|
|
45
45
|
import { WebKitMediaKeysConstructor } from "./webkit_media_keys_constructor";
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
/** Generic implementation of the navigator.requestMediaKeySystemAccess API. */
|
|
48
|
+
type ICompatRequestMediaKeySystemAccessFn =
|
|
49
|
+
(keyType : string, config : MediaKeySystemConfiguration[]) =>
|
|
50
|
+
Observable<MediaKeySystemAccess | CustomMediaKeySystemAccess>;
|
|
51
|
+
|
|
52
|
+
let requestMediaKeySystemAccess : null | ICompatRequestMediaKeySystemAccessFn = null;
|
|
53
53
|
|
|
54
54
|
let _setMediaKeys :
|
|
55
55
|
((elt: HTMLMediaElement, mediaKeys: MediaKeys | ICustomMediaKeys | null) => void) =
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
import {
|
|
18
18
|
merge as observableMerge,
|
|
19
19
|
Subject,
|
|
20
|
+
takeUntil,
|
|
20
21
|
} from "rxjs";
|
|
21
|
-
import { takeUntil } from "rxjs/operators";
|
|
22
22
|
import { base64ToBytes } from "../../../utils/base64";
|
|
23
23
|
import EventEmitter from "../../../utils/event_emitter";
|
|
24
24
|
import PPromise from "../../../utils/promise";
|
|
@@ -94,12 +94,15 @@ class OldWebkitMediaKeySession
|
|
|
94
94
|
const licenseTypedArray =
|
|
95
95
|
license instanceof ArrayBuffer ? new Uint8Array(license) :
|
|
96
96
|
license;
|
|
97
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
98
|
-
const json = JSON.parse(utf8ToStr(licenseTypedArray));
|
|
99
97
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
98
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
99
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
100
|
+
const json = JSON.parse(utf8ToStr(licenseTypedArray));
|
|
100
101
|
const key = base64ToBytes(json.keys[0].k);
|
|
101
102
|
const kid = base64ToBytes(json.keys[0].kid);
|
|
102
103
|
/* eslint-enable @typescript-eslint/no-unsafe-member-access */
|
|
104
|
+
/* eslint-enable @typescript-eslint/no-unsafe-argument */
|
|
105
|
+
/* eslint-enable @typescript-eslint/no-unsafe-assignment */
|
|
103
106
|
resolve(this._vid.webkitAddKey(this._key, key, kid, /* sessionId */ ""));
|
|
104
107
|
} else {
|
|
105
108
|
resolve(this._vid.webkitAddKey(this._key, license, null, /* sessionId */ ""));
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
import {
|
|
18
18
|
merge as observableMerge,
|
|
19
19
|
Subject,
|
|
20
|
+
takeUntil,
|
|
20
21
|
} from "rxjs";
|
|
21
|
-
import { takeUntil } from "rxjs/operators";
|
|
22
22
|
import EventEmitter from "../../../utils/event_emitter";
|
|
23
23
|
import PPromise from "../../../utils/promise";
|
|
24
24
|
import { ICompatHTMLMediaElement } from "../../browser_compatibility_types";
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
|
+
catchError,
|
|
18
19
|
defer as observableDefer,
|
|
19
20
|
Observable,
|
|
20
21
|
} from "rxjs";
|
|
21
|
-
import { catchError } from "rxjs/operators";
|
|
22
22
|
import log from "../../log";
|
|
23
23
|
import { getNextBoxOffsets } from "../../parsers/containers/isobmff";
|
|
24
24
|
import {
|
|
@@ -16,16 +16,14 @@
|
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
18
|
defer as observableDefer,
|
|
19
|
+
map,
|
|
20
|
+
mergeMap,
|
|
19
21
|
Observable,
|
|
20
22
|
of as observableOf,
|
|
21
23
|
race as observableRace,
|
|
24
|
+
take,
|
|
22
25
|
timer as observableTimer,
|
|
23
26
|
} from "rxjs";
|
|
24
|
-
import {
|
|
25
|
-
mapTo,
|
|
26
|
-
mergeMap,
|
|
27
|
-
take,
|
|
28
|
-
} from "rxjs/operators";
|
|
29
27
|
import log from "../../log";
|
|
30
28
|
import castToObservable from "../../utils/cast_to_observable";
|
|
31
29
|
import tryCatch from "../../utils/rx-try_catch";
|
|
@@ -68,6 +66,6 @@ export default function loadSession(
|
|
|
68
66
|
return observableRace(
|
|
69
67
|
observableTimer(EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES),
|
|
70
68
|
onKeyStatusesChange$(session)
|
|
71
|
-
).pipe(take(1),
|
|
69
|
+
).pipe(take(1), map(() => isLoaded));
|
|
72
70
|
}));
|
|
73
71
|
}
|
|
@@ -20,24 +20,21 @@
|
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
22
|
import {
|
|
23
|
+
NEVER,
|
|
24
|
+
Observable,
|
|
23
25
|
combineLatest as observableCombineLatest,
|
|
24
26
|
defer as observableDefer,
|
|
27
|
+
delay,
|
|
28
|
+
distinctUntilChanged,
|
|
25
29
|
fromEvent as observableFromEvent,
|
|
26
30
|
interval as observableInterval,
|
|
31
|
+
map,
|
|
27
32
|
merge as observableMerge,
|
|
28
|
-
NEVER,
|
|
29
|
-
Observable,
|
|
30
33
|
of as observableOf,
|
|
31
|
-
} from "rxjs";
|
|
32
|
-
import {
|
|
33
|
-
delay,
|
|
34
|
-
distinctUntilChanged,
|
|
35
|
-
map,
|
|
36
|
-
mapTo,
|
|
37
34
|
startWith,
|
|
38
35
|
switchMap,
|
|
39
36
|
throttleTime,
|
|
40
|
-
} from "rxjs
|
|
37
|
+
} from "rxjs";
|
|
41
38
|
import config from "../config";
|
|
42
39
|
import log from "../log";
|
|
43
40
|
import { IEventEmitter } from "../utils/event_emitter";
|
|
@@ -137,7 +134,7 @@ function compatibleListener<T extends Event>(
|
|
|
137
134
|
if (isNonEmptyString(mem)) {
|
|
138
135
|
return observableFromEvent(element, mem) as Observable<T>;
|
|
139
136
|
} else {
|
|
140
|
-
if (
|
|
137
|
+
if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.DEV as number) {
|
|
141
138
|
log.warn(`compat: element ${element.tagName}` +
|
|
142
139
|
" does not support any of these events: " +
|
|
143
140
|
prefixedEvents.join(", "));
|
|
@@ -188,20 +185,13 @@ function visibilityChange() : Observable<boolean> {
|
|
|
188
185
|
});
|
|
189
186
|
}
|
|
190
187
|
|
|
191
|
-
/**
|
|
192
|
-
* @returns {Observable}
|
|
193
|
-
*/
|
|
194
|
-
function videoSizeChange() : Observable<unknown> {
|
|
195
|
-
return observableFromEvent(window, "resize");
|
|
196
|
-
}
|
|
197
|
-
|
|
198
188
|
/**
|
|
199
189
|
* Emit `true` if the page is considered active.
|
|
200
190
|
* `false` when considered inactive.
|
|
201
191
|
* Emit the original value on subscription.
|
|
202
192
|
* @returns {Observable}
|
|
203
193
|
*/
|
|
204
|
-
function
|
|
194
|
+
function isPageActive() : Observable<boolean> {
|
|
205
195
|
return visibilityChange().pipe(
|
|
206
196
|
switchMap((x) => {
|
|
207
197
|
if (!x) {
|
|
@@ -271,7 +261,7 @@ function onPictureInPictureEvent$(
|
|
|
271
261
|
}).pictureInPictureWindow ?? null,
|
|
272
262
|
}))),
|
|
273
263
|
observableFromEvent(mediaElement, "leavepictureinpicture")
|
|
274
|
-
.pipe(
|
|
264
|
+
.pipe(map(() => ({ isEnabled: false, pipWindow: null })))
|
|
275
265
|
).pipe(startWith(initialState));
|
|
276
266
|
});
|
|
277
267
|
}
|
|
@@ -301,6 +291,7 @@ function isVideoVisible(
|
|
|
301
291
|
* Get video width from HTML video element, or video estimated dimensions
|
|
302
292
|
* when Picture-in-Picture is activated.
|
|
303
293
|
* @param {HTMLMediaElement} mediaElement
|
|
294
|
+
* @param {Observable} pip$
|
|
304
295
|
* @returns {Observable}
|
|
305
296
|
*/
|
|
306
297
|
function videoWidth$(
|
|
@@ -310,7 +301,7 @@ function videoWidth$(
|
|
|
310
301
|
return observableCombineLatest([
|
|
311
302
|
pip$,
|
|
312
303
|
observableInterval(20000).pipe(startWith(null)),
|
|
313
|
-
|
|
304
|
+
observableFromEvent(window, "resize").pipe(throttleTime(500), startWith(null)),
|
|
314
305
|
]).pipe(
|
|
315
306
|
switchMap(([ pip ]) : Observable<number> => {
|
|
316
307
|
if (!pip.isEnabled) {
|
|
@@ -451,7 +442,7 @@ const onKeyError$ = compatibleListener(["keyerror", "error"]);
|
|
|
451
442
|
const onKeyStatusesChange$ = compatibleListener(["keystatuseschange"]);
|
|
452
443
|
|
|
453
444
|
export {
|
|
454
|
-
|
|
445
|
+
isPageActive,
|
|
455
446
|
isVideoVisible,
|
|
456
447
|
videoWidth$,
|
|
457
448
|
onPlayPause$,
|
|
@@ -16,15 +16,13 @@
|
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
18
|
defer as observableDefer,
|
|
19
|
+
distinctUntilChanged,
|
|
19
20
|
interval as observableInterval,
|
|
21
|
+
map,
|
|
20
22
|
Observable,
|
|
21
23
|
Observer,
|
|
22
|
-
} from "rxjs";
|
|
23
|
-
import {
|
|
24
|
-
distinctUntilChanged,
|
|
25
|
-
map,
|
|
26
24
|
startWith,
|
|
27
|
-
} from "rxjs
|
|
25
|
+
} from "rxjs";
|
|
28
26
|
import log from "../log";
|
|
29
27
|
import isNode from "./is_node";
|
|
30
28
|
|
|
@@ -35,7 +35,7 @@ export default function setElementSrc$(
|
|
|
35
35
|
url : string
|
|
36
36
|
) : Observable<void> {
|
|
37
37
|
return new Observable((observer : Observer<void>) => {
|
|
38
|
-
log.info("Setting URL to
|
|
38
|
+
log.info("Setting URL to HTMLMediaElement", url);
|
|
39
39
|
|
|
40
40
|
mediaElement.src = url;
|
|
41
41
|
|
package/src/config.ts
CHANGED
|
@@ -323,7 +323,7 @@ export default {
|
|
|
323
323
|
*/
|
|
324
324
|
DEFAULT_LIVE_GAP: {
|
|
325
325
|
DEFAULT: 10,
|
|
326
|
-
LOW_LATENCY: 3,
|
|
326
|
+
LOW_LATENCY: 3.5,
|
|
327
327
|
},
|
|
328
328
|
|
|
329
329
|
/**
|
|
@@ -457,17 +457,12 @@ export default {
|
|
|
457
457
|
},
|
|
458
458
|
|
|
459
459
|
/**
|
|
460
|
-
* Minimum interval at which
|
|
460
|
+
* Minimum interval at which playback information samples will be taken. This
|
|
461
461
|
* variable is for the "regular" mediasource strategy (that is, not for the
|
|
462
462
|
* directfile API.
|
|
463
463
|
*
|
|
464
|
-
*
|
|
465
|
-
*
|
|
466
|
-
* - set the clock for the ABR strategy.
|
|
467
|
-
* - used to trigger positionUpdate events.
|
|
468
|
-
*
|
|
469
|
-
* This common logic is for performance reasons, as we call multiple browser's
|
|
470
|
-
* APIs which are useful for most of these.
|
|
464
|
+
* At each of these interval, various different modules in the RxPlayer will
|
|
465
|
+
* run based on the information communicated.
|
|
471
466
|
*
|
|
472
467
|
* Keep in mind this is the minimum interval. This logic will also be
|
|
473
468
|
* triggered when various events of the media element are received.
|
package/src/core/abr/README.md
CHANGED
|
@@ -20,13 +20,13 @@ be the most adapted, that is the quality which:
|
|
|
20
20
|
be not as pleasant to watch)
|
|
21
21
|
|
|
22
22
|
In order to estimate the quality that maximizes the playback experience, the ABR
|
|
23
|
-
relies on
|
|
24
|
-
1.
|
|
25
|
-
2.
|
|
26
|
-
|
|
23
|
+
relies on multiple algorithms:
|
|
24
|
+
1. One which picks a quality from network conditions.
|
|
25
|
+
2. Another relies on buffering conditions to make its choices.
|
|
26
|
+
3. A third, only used in very rare conditions, "guess" the right quality by
|
|
27
|
+
progressively raising the quality until an un-maintainable one is found.
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
## Bandwidth estimator #########################################################
|
|
29
|
+
## Bandwidth-based algorithm ###################################################
|
|
30
30
|
|
|
31
31
|
```
|
|
32
32
|
Long
|
|
@@ -85,7 +85,7 @@ The quality's bitrate ceiling relies on it to return the chosen quality.
|
|
|
85
85
|
|
|
86
86
|
|
|
87
87
|
|
|
88
|
-
## Buffer
|
|
88
|
+
## Buffer-based algorithm ######################################################
|
|
89
89
|
|
|
90
90
|
```
|
|
91
91
|
Qualities
|
|
@@ -15,22 +15,26 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
|
+
combineLatest as observableCombineLatest,
|
|
19
|
+
map,
|
|
18
20
|
Observable,
|
|
19
21
|
of as observableOf,
|
|
20
22
|
} from "rxjs";
|
|
21
23
|
import log from "../../log";
|
|
22
24
|
import { Representation } from "../../manifest";
|
|
25
|
+
import objectAssign from "../../utils/object_assign";
|
|
26
|
+
import { ISharedReference } from "../../utils/reference";
|
|
23
27
|
import takeFirstSet from "../../utils/take_first_set";
|
|
24
28
|
import { IBufferType } from "../segment_buffers";
|
|
25
29
|
import BandwidthEstimator from "./bandwidth_estimator";
|
|
26
|
-
import createFilters from "./create_filters";
|
|
27
30
|
import RepresentationEstimator, {
|
|
28
31
|
IABREstimate,
|
|
32
|
+
IABRFiltersObject,
|
|
29
33
|
IABRStreamEvents,
|
|
30
|
-
|
|
34
|
+
IRepresentationEstimatorPlaybackObservation,
|
|
31
35
|
} from "./representation_estimator";
|
|
32
36
|
|
|
33
|
-
export type
|
|
37
|
+
export type IABRManagerPlaybackObservation = IRepresentationEstimatorPlaybackObservation;
|
|
34
38
|
|
|
35
39
|
// Options for every RepresentationEstimator
|
|
36
40
|
interface IRepresentationEstimatorsThrottlers {
|
|
@@ -48,15 +52,16 @@ export interface IABRManagerArguments {
|
|
|
48
52
|
lowLatencyMode: boolean; // Some settings can depend on wether you're playing a
|
|
49
53
|
// low-latency content. Set it to `true` if you're playing
|
|
50
54
|
// such content.
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
55
|
+
|
|
56
|
+
/** Minimum bitrate chosen when in auto mode, per type (0 by default) */
|
|
57
|
+
minAutoBitrates: Partial<Record<IBufferType, ISharedReference<number>>>;
|
|
58
|
+
|
|
59
|
+
/** Maximum bitrate chosen when in auto mode, per type (0 by default) */
|
|
60
|
+
maxAutoBitrates: Partial<Record<IBufferType, ISharedReference<number>>>;
|
|
61
|
+
|
|
62
|
+
/** Manually forced bitrate set for a given type (`-1` for auto mode */
|
|
63
|
+
manualBitrates: Partial<Record<IBufferType, ISharedReference<number>>>;
|
|
64
|
+
|
|
60
65
|
throttlers: IRepresentationEstimatorsThrottlers; // Throttle from external events
|
|
61
66
|
}
|
|
62
67
|
|
|
@@ -70,9 +75,9 @@ export interface IABRManagerArguments {
|
|
|
70
75
|
export default class ABRManager {
|
|
71
76
|
private _bandwidthEstimators : Partial<Record<IBufferType, BandwidthEstimator>>;
|
|
72
77
|
private _initialBitrates : Partial<Record<IBufferType, number>>;
|
|
73
|
-
private _manualBitrates : Partial<Record<IBufferType,
|
|
74
|
-
private _minAutoBitrates : Partial<Record<IBufferType,
|
|
75
|
-
private _maxAutoBitrates : Partial<Record<IBufferType,
|
|
78
|
+
private _manualBitrates : Partial<Record<IBufferType, ISharedReference<number>>>;
|
|
79
|
+
private _minAutoBitrates : Partial<Record<IBufferType, ISharedReference<number>>>;
|
|
80
|
+
private _maxAutoBitrates : Partial<Record<IBufferType, ISharedReference<number>>>;
|
|
76
81
|
private _throttlers : IRepresentationEstimatorsThrottlers;
|
|
77
82
|
private _lowLatencyMode : boolean;
|
|
78
83
|
|
|
@@ -95,24 +100,25 @@ export default class ABRManager {
|
|
|
95
100
|
* state).
|
|
96
101
|
* @param {string} type
|
|
97
102
|
* @param {Array.<Representation>} representations
|
|
98
|
-
* @param {Observable<Object>}
|
|
103
|
+
* @param {Observable<Object>} observation$
|
|
99
104
|
* @param {Observable<Object>} streamEvents$
|
|
100
105
|
* @returns {Observable}
|
|
101
106
|
*/
|
|
102
107
|
public get$(
|
|
103
108
|
type : IBufferType,
|
|
104
109
|
representations : Representation[],
|
|
105
|
-
|
|
110
|
+
observation$ : Observable<IABRManagerPlaybackObservation>,
|
|
106
111
|
streamEvents$ : Observable<IABRStreamEvents>
|
|
107
112
|
) : Observable<IABREstimate> {
|
|
108
113
|
const bandwidthEstimator = this._getBandwidthEstimator(type);
|
|
109
114
|
const manualBitrate$ =
|
|
110
|
-
takeFirstSet<Observable<number>>(this._manualBitrates[type]
|
|
115
|
+
takeFirstSet<Observable<number>>(this._manualBitrates[type]?.asObservable(),
|
|
116
|
+
observableOf(-1));
|
|
111
117
|
const minAutoBitrate$ =
|
|
112
|
-
takeFirstSet<Observable<number>>(this._minAutoBitrates[type],
|
|
118
|
+
takeFirstSet<Observable<number>>(this._minAutoBitrates[type]?.asObservable(),
|
|
113
119
|
observableOf(0));
|
|
114
120
|
const maxAutoBitrate$ =
|
|
115
|
-
takeFirstSet<Observable<number>>(this._maxAutoBitrates[type],
|
|
121
|
+
takeFirstSet<Observable<number>>(this._maxAutoBitrates[type]?.asObservable(),
|
|
116
122
|
observableOf(Infinity));
|
|
117
123
|
const initialBitrate = takeFirstSet<number>(this._initialBitrates[type], 0);
|
|
118
124
|
const filters$ = createFilters(this._throttlers.limitWidth[type],
|
|
@@ -120,7 +126,7 @@ export default class ABRManager {
|
|
|
120
126
|
this._throttlers.throttle[type]);
|
|
121
127
|
return RepresentationEstimator({ bandwidthEstimator,
|
|
122
128
|
streamEvents$,
|
|
123
|
-
|
|
129
|
+
observation$,
|
|
124
130
|
filters$,
|
|
125
131
|
initialBitrate,
|
|
126
132
|
manualBitrate$,
|
|
@@ -145,3 +151,38 @@ export default class ABRManager {
|
|
|
145
151
|
return originalBandwidthEstimator;
|
|
146
152
|
}
|
|
147
153
|
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Create Observable that merge several throttling Observables into one.
|
|
157
|
+
* @param {Observable} limitWidth$ - Emit the width at which the chosen
|
|
158
|
+
* Representation should be limited.
|
|
159
|
+
* @param {Observable} throttleBitrate$ - Emit the maximum bitrate authorized.
|
|
160
|
+
* @param {Observable} throttle$ - Also emit the maximum bitrate authorized.
|
|
161
|
+
* Here for legacy reasons.
|
|
162
|
+
* @returns {Observable}
|
|
163
|
+
*/
|
|
164
|
+
function createFilters(
|
|
165
|
+
limitWidth$? : Observable<number>,
|
|
166
|
+
throttleBitrate$? : Observable<number>,
|
|
167
|
+
throttle$? : Observable<number>
|
|
168
|
+
) : Observable<IABRFiltersObject> {
|
|
169
|
+
const deviceEventsArray : Array<Observable<IABRFiltersObject>> = [];
|
|
170
|
+
|
|
171
|
+
if (limitWidth$ != null) {
|
|
172
|
+
deviceEventsArray.push(limitWidth$.pipe(map(width => ({ width }))));
|
|
173
|
+
}
|
|
174
|
+
if (throttle$ != null) {
|
|
175
|
+
deviceEventsArray.push(throttle$.pipe(map(bitrate => ({ bitrate }))));
|
|
176
|
+
}
|
|
177
|
+
if (throttleBitrate$ != null) {
|
|
178
|
+
deviceEventsArray.push(throttleBitrate$.pipe(map(bitrate => ({ bitrate }))));
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Emit restrictions on the pools of available representations to choose
|
|
182
|
+
// from.
|
|
183
|
+
return deviceEventsArray.length > 0 ?
|
|
184
|
+
observableCombineLatest(deviceEventsArray)
|
|
185
|
+
.pipe(map((args : IABRFiltersObject[]) =>
|
|
186
|
+
objectAssign({}, ...args) as IABRFiltersObject)) :
|
|
187
|
+
observableOf({});
|
|
188
|
+
}
|
|
@@ -14,12 +14,14 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import {
|
|
18
|
-
|
|
17
|
+
import {
|
|
18
|
+
map,
|
|
19
|
+
Observable,
|
|
20
|
+
} from "rxjs";
|
|
19
21
|
import log from "../../log";
|
|
20
22
|
import getBufferLevels from "./get_buffer_levels";
|
|
21
23
|
import getEstimateFromBufferLevels, {
|
|
22
|
-
|
|
24
|
+
IBufferBasedChooserPlaybackObservation,
|
|
23
25
|
} from "./get_estimate_from_buffer_levels";
|
|
24
26
|
|
|
25
27
|
/**
|
|
@@ -38,13 +40,13 @@ import getEstimateFromBufferLevels, {
|
|
|
38
40
|
* @returns {Observable}
|
|
39
41
|
*/
|
|
40
42
|
export default function BufferBasedChooser(
|
|
41
|
-
update$ : Observable<
|
|
43
|
+
update$ : Observable<IBufferBasedChooserPlaybackObservation>,
|
|
42
44
|
bitrates: number[]
|
|
43
45
|
) : Observable<number|undefined> {
|
|
44
46
|
const levelsMap = getBufferLevels(bitrates);
|
|
45
47
|
log.debug("ABR: Steps for buffer based chooser.",
|
|
46
48
|
levelsMap.map((l, i) => ({ bufferLevel: l, bitrate: bitrates[i] })));
|
|
47
|
-
return update$.pipe(map((
|
|
48
|
-
return getEstimateFromBufferLevels(
|
|
49
|
+
return update$.pipe(map((playbackObservation) => {
|
|
50
|
+
return getEstimateFromBufferLevels(playbackObservation, bitrates, levelsMap);
|
|
49
51
|
}));
|
|
50
52
|
}
|
|
@@ -40,6 +40,9 @@ export default function getBufferLevels(bitrates : number[]) : number[] {
|
|
|
40
40
|
return 0;
|
|
41
41
|
}
|
|
42
42
|
const boundedIndex = Math.min(Math.max(1, index), bitrates.length - 1);
|
|
43
|
+
if (bitrates[boundedIndex] === bitrates[boundedIndex - 1]) {
|
|
44
|
+
return minBufferLevelForBitrate(index - 1);
|
|
45
|
+
}
|
|
43
46
|
return Vp * (gp + (bitrates[boundedIndex] * utilities[boundedIndex - 1] -
|
|
44
47
|
bitrates[boundedIndex - 1] * utilities[boundedIndex]) / (bitrates[boundedIndex] -
|
|
45
48
|
bitrates[boundedIndex - 1])) + 4;
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
import log from "../../log";
|
|
18
18
|
import arrayFindIndex from "../../utils/array_find_index";
|
|
19
19
|
|
|
20
|
-
export interface
|
|
20
|
+
export interface IBufferBasedChooserPlaybackObservation {
|
|
21
21
|
bufferGap : number; // Difference in seconds between the current position and
|
|
22
22
|
// the next non-buffered position
|
|
23
23
|
currentBitrate? : number; // The bitrate of the currently downloaded segments, in bps
|
|
@@ -28,17 +28,17 @@ export interface IBufferBasedChooserClockTick {
|
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* From the buffer gap, choose a representation.
|
|
31
|
-
* @param {Object}
|
|
31
|
+
* @param {Object} playbackObservation
|
|
32
32
|
* @param {Array.<Number>} bitrates
|
|
33
33
|
* @param {Array.<Number>} bufferLevels
|
|
34
34
|
* @returns {Object|undefined}
|
|
35
35
|
*/
|
|
36
36
|
export default function getEstimateFromBufferLevels(
|
|
37
|
-
|
|
37
|
+
playbackObservation : IBufferBasedChooserPlaybackObservation,
|
|
38
38
|
bitrates : number[],
|
|
39
39
|
bufferLevels : number[]
|
|
40
40
|
) : number|undefined {
|
|
41
|
-
const { bufferGap, currentBitrate, currentScore, speed } =
|
|
41
|
+
const { bufferGap, currentBitrate, currentScore, speed } = playbackObservation;
|
|
42
42
|
if (currentBitrate == null) {
|
|
43
43
|
return bitrates[0];
|
|
44
44
|
}
|