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,21 +13,20 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { combineLatest as observableCombineLatest, EMPTY, from as observableFrom, } from "rxjs";
|
|
17
|
-
import { concatAll, ignoreElements, mergeMap, } from "rxjs/operators";
|
|
16
|
+
import { combineLatest as observableCombineLatest, concatAll, EMPTY, from as observableFrom, ignoreElements, mergeMap, } from "rxjs";
|
|
18
17
|
import log from "../../log";
|
|
19
18
|
import { getInnerAndOuterTimeRanges } from "../../utils/ranges";
|
|
20
19
|
/**
|
|
21
20
|
* Perform cleaning of the buffer according to the values set by the user
|
|
22
|
-
*
|
|
23
|
-
* change.
|
|
21
|
+
* each time `currentTime$` emits and each times the
|
|
22
|
+
* maxBufferBehind/maxBufferAhead values change.
|
|
24
23
|
*
|
|
25
24
|
* @param {Object} opt
|
|
26
25
|
* @returns {Observable}
|
|
27
26
|
*/
|
|
28
27
|
export default function BufferGarbageCollector(_a) {
|
|
29
|
-
var segmentBuffer = _a.segmentBuffer,
|
|
30
|
-
return observableCombineLatest([
|
|
28
|
+
var segmentBuffer = _a.segmentBuffer, currentTime$ = _a.currentTime$, maxBufferBehind$ = _a.maxBufferBehind$, maxBufferAhead$ = _a.maxBufferAhead$;
|
|
29
|
+
return observableCombineLatest([currentTime$, maxBufferBehind$, maxBufferAhead$]).pipe(mergeMap(function (_a) {
|
|
31
30
|
var currentTime = _a[0], maxBufferBehind = _a[1], maxBufferAhead = _a[2];
|
|
32
31
|
return clearBuffer(segmentBuffer, currentTime, maxBufferBehind, maxBufferAhead);
|
|
33
32
|
}));
|
|
@@ -107,6 +106,12 @@ function clearBuffer(segmentBuffer, position, maxBufferBehind, maxBufferAhead) {
|
|
|
107
106
|
var clean$ = observableFrom(cleanedupRanges.map(function (range) {
|
|
108
107
|
log.debug("GC: cleaning range from SegmentBuffer", range);
|
|
109
108
|
return segmentBuffer.removeBuffer(range.start, range.end);
|
|
110
|
-
})).pipe(concatAll(),
|
|
109
|
+
})).pipe(concatAll(),
|
|
110
|
+
// NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
|
|
111
|
+
// first type parameter as `any` instead of the perfectly fine `unknown`,
|
|
112
|
+
// leading to linter issues, as it forbids the usage of `any`.
|
|
113
|
+
// This is why we're disabling the eslint rule.
|
|
114
|
+
/* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
|
|
115
|
+
ignoreElements());
|
|
111
116
|
return clean$;
|
|
112
117
|
}
|
|
@@ -28,11 +28,11 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
28
28
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
29
29
|
};
|
|
30
30
|
})();
|
|
31
|
-
import { fromEvent, interval, Observable, Subject, } from "rxjs";
|
|
32
|
-
import { takeUntil, tap, } from "rxjs/operators";
|
|
31
|
+
import { fromEvent, interval, Observable, Subject, takeUntil, tap, } from "rxjs";
|
|
33
32
|
import { tryToChangeSourceBufferType, } from "../../../../compat";
|
|
34
33
|
import config from "../../../../config";
|
|
35
34
|
import log from "../../../../log";
|
|
35
|
+
import { getLoggableSegmentId } from "../../../../manifest";
|
|
36
36
|
import areArraysOfNumbersEqual from "../../../../utils/are_arrays_of_numbers_equal";
|
|
37
37
|
import assertUnreachable from "../../../../utils/assert_unreachable";
|
|
38
38
|
import { toUint8Array } from "../../../../utils/byte_parsing";
|
|
@@ -108,7 +108,7 @@ var AudioVideoSegmentBuffer = /** @class */ (function (_super) {
|
|
|
108
108
|
*/
|
|
109
109
|
AudioVideoSegmentBuffer.prototype.pushChunk = function (infos) {
|
|
110
110
|
assertPushedDataIsBufferSource(infos);
|
|
111
|
-
log.debug("AVSB: receiving order to push data to the SourceBuffer", this.bufferType, infos);
|
|
111
|
+
log.debug("AVSB: receiving order to push data to the SourceBuffer", this.bufferType, getLoggableSegmentId(infos.inventoryInfos));
|
|
112
112
|
return this._addToQueue({ type: SegmentBufferOperation.Push,
|
|
113
113
|
value: infos });
|
|
114
114
|
};
|
|
@@ -133,7 +133,7 @@ var AudioVideoSegmentBuffer = /** @class */ (function (_super) {
|
|
|
133
133
|
* @returns {Observable}
|
|
134
134
|
*/
|
|
135
135
|
AudioVideoSegmentBuffer.prototype.endOfSegment = function (infos) {
|
|
136
|
-
log.debug("AVSB: receiving order for validating end of segment", this.bufferType, infos
|
|
136
|
+
log.debug("AVSB: receiving order for validating end of segment", this.bufferType, getLoggableSegmentId(infos));
|
|
137
137
|
return this._addToQueue({ type: SegmentBufferOperation.EndOfSegment,
|
|
138
138
|
value: infos });
|
|
139
139
|
};
|
|
@@ -192,7 +192,7 @@ var AudioVideoSegmentBuffer = /** @class */ (function (_super) {
|
|
|
192
192
|
this._sourceBuffer.abort();
|
|
193
193
|
}
|
|
194
194
|
catch (e) {
|
|
195
|
-
log.warn("AVSB: Failed to abort a "
|
|
195
|
+
log.warn("AVSB: Failed to abort a ".concat(this.bufferType, " SourceBuffer:"), e);
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
198
|
};
|
|
@@ -312,7 +312,7 @@ var AudioVideoSegmentBuffer = /** @class */ (function (_super) {
|
|
|
312
312
|
switch (this._pendingTask.type) {
|
|
313
313
|
case SegmentBufferOperation.EndOfSegment:
|
|
314
314
|
// nothing to do, we will just acknowledge the segment.
|
|
315
|
-
log.debug("AVSB: Acknowledging complete segment", this._pendingTask.value);
|
|
315
|
+
log.debug("AVSB: Acknowledging complete segment", getLoggableSegmentId(this._pendingTask.value));
|
|
316
316
|
this._flush();
|
|
317
317
|
return;
|
|
318
318
|
case SegmentBufferOperation.Push:
|
|
@@ -321,6 +321,7 @@ var AudioVideoSegmentBuffer = /** @class */ (function (_super) {
|
|
|
321
321
|
this._flush();
|
|
322
322
|
return;
|
|
323
323
|
}
|
|
324
|
+
log.debug("AVSB: pushing segment", this.bufferType, getLoggableSegmentId(this._pendingTask.inventoryData));
|
|
324
325
|
this._sourceBuffer.appendBuffer(segmentData);
|
|
325
326
|
break;
|
|
326
327
|
case SegmentBufferOperation.Remove:
|
|
@@ -434,7 +435,7 @@ export default AudioVideoSegmentBuffer;
|
|
|
434
435
|
* @param {Object} pushedData
|
|
435
436
|
*/
|
|
436
437
|
function assertPushedDataIsBufferSource(pushedData) {
|
|
437
|
-
if (
|
|
438
|
+
if (0 /* CURRENT_ENV */ === 0 /* PRODUCTION */) {
|
|
438
439
|
return;
|
|
439
440
|
}
|
|
440
441
|
var _a = pushedData.data, chunk = _a.chunk, initSegment = _a.initSegment;
|
|
@@ -28,8 +28,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
28
28
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
29
29
|
};
|
|
30
30
|
})();
|
|
31
|
-
import { concat as observableConcat, defer as observableDefer, interval as observableInterval, merge as observableMerge, of as observableOf, Subject, } from "rxjs";
|
|
32
|
-
import { mapTo, startWith, switchMapTo, takeUntil, } from "rxjs/operators";
|
|
31
|
+
import { concat as observableConcat, defer as observableDefer, interval as observableInterval, map, merge as observableMerge, of as observableOf, startWith, Subject, switchMap, takeUntil, } from "rxjs";
|
|
33
32
|
import { events, onHeightWidthChange, } from "../../../../../compat";
|
|
34
33
|
import config from "../../../../../config";
|
|
35
34
|
import log from "../../../../../log";
|
|
@@ -41,18 +40,18 @@ import updateProportionalElements from "./update_proportional_elements";
|
|
|
41
40
|
var onEnded$ = events.onEnded$, onSeeked$ = events.onSeeked$, onSeeking$ = events.onSeeking$;
|
|
42
41
|
var MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL = config.MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL, TEXT_TRACK_SIZE_CHECKS_INTERVAL = config.TEXT_TRACK_SIZE_CHECKS_INTERVAL;
|
|
43
42
|
/**
|
|
44
|
-
* Generate the
|
|
43
|
+
* Generate the interval at which TextTrack HTML Cues should be refreshed.
|
|
45
44
|
* @param {HTMLMediaElement} videoElement
|
|
46
45
|
* @returns {Observable}
|
|
47
46
|
*/
|
|
48
|
-
function
|
|
47
|
+
function generateRefreshInterval(videoElement) {
|
|
49
48
|
var seeking$ = onSeeking$(videoElement);
|
|
50
49
|
var seeked$ = onSeeked$(videoElement);
|
|
51
50
|
var ended$ = onEnded$(videoElement);
|
|
52
51
|
var manualRefresh$ = observableMerge(seeked$, ended$);
|
|
53
52
|
var autoRefresh$ = observableInterval(MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL)
|
|
54
53
|
.pipe(startWith(null));
|
|
55
|
-
return manualRefresh$.pipe(startWith(null),
|
|
54
|
+
return manualRefresh$.pipe(startWith(null), switchMap(function () { return observableConcat(autoRefresh$.pipe(map(function () { return true; }), takeUntil(seeking$)), observableOf(false)); }));
|
|
56
55
|
}
|
|
57
56
|
/**
|
|
58
57
|
* @param {Element} element
|
|
@@ -107,7 +106,7 @@ var HTMLTextSegmentBuffer = /** @class */ (function (_super) {
|
|
|
107
106
|
_this._buffer = new TextTrackCuesStore();
|
|
108
107
|
_this._currentCues = [];
|
|
109
108
|
// update text tracks
|
|
110
|
-
|
|
109
|
+
generateRefreshInterval(_this._videoElement)
|
|
111
110
|
.pipe(takeUntil(_this._destroy$))
|
|
112
111
|
.subscribe(function (shouldDisplay) {
|
|
113
112
|
if (!shouldDisplay) {
|
|
@@ -338,7 +337,7 @@ export default HTMLTextSegmentBuffer;
|
|
|
338
337
|
* @param {Object} chunk
|
|
339
338
|
*/
|
|
340
339
|
function assertChunkIsTextTrackSegmentData(chunk) {
|
|
341
|
-
if (
|
|
340
|
+
if (0 /* CURRENT_ENV */ === 0 /* PRODUCTION */) {
|
|
342
341
|
return;
|
|
343
342
|
}
|
|
344
343
|
if (typeof chunk !== "object" ||
|
|
@@ -348,9 +347,9 @@ function assertChunkIsTextTrackSegmentData(chunk) {
|
|
|
348
347
|
(chunk.language !== undefined &&
|
|
349
348
|
typeof chunk.language !== "string") ||
|
|
350
349
|
(chunk.start !== undefined &&
|
|
351
|
-
typeof chunk.start !== "
|
|
350
|
+
typeof chunk.start !== "number") ||
|
|
352
351
|
(chunk.end !== undefined &&
|
|
353
|
-
typeof chunk.end !== "
|
|
352
|
+
typeof chunk.end !== "number")) {
|
|
354
353
|
throw new Error("Invalid format given to a NativeTextSegmentBuffer");
|
|
355
354
|
}
|
|
356
355
|
}
|
|
@@ -363,7 +362,7 @@ function assertChunkIsTextTrackSegmentData(chunk) {
|
|
|
363
362
|
* It doesn't correspond at all to real code that will be called. This is just
|
|
364
363
|
* a hack to tell TypeScript to perform that check.
|
|
365
364
|
*/
|
|
366
|
-
if (
|
|
365
|
+
if (0 /* CURRENT_ENV */ === 1 /* DEV */) {
|
|
367
366
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
368
367
|
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
369
368
|
// @ts-ignore
|
package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js
CHANGED
|
@@ -68,7 +68,7 @@ var TextTrackCuesStore = /** @class */ (function () {
|
|
|
68
68
|
* @param {Number} to
|
|
69
69
|
*/
|
|
70
70
|
TextTrackCuesStore.prototype.remove = function (from, _to) {
|
|
71
|
-
if (
|
|
71
|
+
if (0 /* CURRENT_ENV */ === 1 /* DEV */) {
|
|
72
72
|
assert(from >= 0);
|
|
73
73
|
assert(_to >= 0);
|
|
74
74
|
assert(_to > from);
|
|
@@ -230,7 +230,7 @@ export default NativeTextSegmentBuffer;
|
|
|
230
230
|
* @param {Object} chunk
|
|
231
231
|
*/
|
|
232
232
|
function assertChunkIsTextTrackSegmentData(chunk) {
|
|
233
|
-
if (
|
|
233
|
+
if (0 /* CURRENT_ENV */ === 0 /* PRODUCTION */) {
|
|
234
234
|
return;
|
|
235
235
|
}
|
|
236
236
|
if (typeof chunk !== "object" ||
|
|
@@ -240,9 +240,9 @@ function assertChunkIsTextTrackSegmentData(chunk) {
|
|
|
240
240
|
(chunk.language !== undefined &&
|
|
241
241
|
typeof chunk.language !== "string") ||
|
|
242
242
|
(chunk.start !== undefined &&
|
|
243
|
-
typeof chunk.start !== "
|
|
243
|
+
typeof chunk.start !== "number") ||
|
|
244
244
|
(chunk.end !== undefined &&
|
|
245
|
-
typeof chunk.end !== "
|
|
245
|
+
typeof chunk.end !== "number")) {
|
|
246
246
|
throw new Error("Invalid format given to a NativeTextSegmentBuffer");
|
|
247
247
|
}
|
|
248
248
|
}
|
|
@@ -255,7 +255,7 @@ function assertChunkIsTextTrackSegmentData(chunk) {
|
|
|
255
255
|
* It doesn't correspond at all to real code that will be called. This is just
|
|
256
256
|
* a hack to tell TypeScript to perform that check.
|
|
257
257
|
*/
|
|
258
|
-
if (
|
|
258
|
+
if (0 /* CURRENT_ENV */ === 1 /* DEV */) {
|
|
259
259
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
260
260
|
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
261
261
|
// @ts-ignore
|
package/dist/_esm5.processed/core/segment_buffers/implementations/utils/manual_time_ranges.js
CHANGED
|
@@ -26,7 +26,7 @@ var ManualTimeRanges = /** @class */ (function () {
|
|
|
26
26
|
this.length = 0;
|
|
27
27
|
}
|
|
28
28
|
ManualTimeRanges.prototype.insert = function (start, end) {
|
|
29
|
-
if (
|
|
29
|
+
if (0 /* CURRENT_ENV */ === 1 /* DEV */) {
|
|
30
30
|
assert(start >= 0, "invalid start time");
|
|
31
31
|
assert(end - start > 0, "invalid end time");
|
|
32
32
|
}
|
|
@@ -34,7 +34,7 @@ var ManualTimeRanges = /** @class */ (function () {
|
|
|
34
34
|
this.length = this._ranges.length;
|
|
35
35
|
};
|
|
36
36
|
ManualTimeRanges.prototype.remove = function (start, end) {
|
|
37
|
-
if (
|
|
37
|
+
if (0 /* CURRENT_ENV */ === 1 /* DEV */) {
|
|
38
38
|
assert(start >= 0, "invalid start time");
|
|
39
39
|
assert(end - start > 0, "invalid end time");
|
|
40
40
|
}
|
|
@@ -79,11 +79,11 @@ var BufferedHistory = /** @class */ (function () {
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
if (firstKeptIndex > 0) {
|
|
82
|
-
this._history.splice(firstKeptIndex);
|
|
82
|
+
this._history = this._history.splice(firstKeptIndex);
|
|
83
83
|
}
|
|
84
84
|
if (this._history.length > this._maxHistoryLength) {
|
|
85
85
|
var toRemove = this._history.length - this._maxHistoryLength;
|
|
86
|
-
this._history.splice(toRemove);
|
|
86
|
+
this._history = this._history.splice(toRemove);
|
|
87
87
|
}
|
|
88
88
|
};
|
|
89
89
|
return BufferedHistory;
|
|
@@ -32,16 +32,7 @@ export interface IBufferedChunk {
|
|
|
32
32
|
* synchronization for that chunk this value could be more or less precize.
|
|
33
33
|
*/
|
|
34
34
|
bufferedStart: number | undefined;
|
|
35
|
-
/**
|
|
36
|
-
* Supposed end, in seconds, the chunk is expected to end at.
|
|
37
|
-
*
|
|
38
|
-
* If the current `chunk` is part of a "partially pushed" segment (see
|
|
39
|
-
* `partiallyPushed`), the definition of this property is flexible in the way
|
|
40
|
-
* that it can correspond either to the end of the chunk or to the end of the
|
|
41
|
-
* whole segment the chunk is linked to.
|
|
42
|
-
* As such, this property should not be relied on until the segment has been
|
|
43
|
-
* fully-pushed.
|
|
44
|
-
*/
|
|
35
|
+
/** Supposed end, in seconds, the chunk is expected to end at. */
|
|
45
36
|
end: number;
|
|
46
37
|
/**
|
|
47
38
|
* If `true` the `end` property is an estimate the `SegmentInventory` has
|
|
@@ -65,8 +56,6 @@ export interface IBufferedChunk {
|
|
|
65
56
|
infos: IChunkContext;
|
|
66
57
|
/**
|
|
67
58
|
* If `true`, this chunk is only a partial chunk of a whole segment.
|
|
68
|
-
* In this condition, the `start` and `end` properties may be ignored, as it
|
|
69
|
-
* is unclear if they refer to the chunk or to the whole segment.
|
|
70
59
|
*
|
|
71
60
|
* Inversely, if `false`, this chunk is a whole segment whose inner chunks
|
|
72
61
|
* have all been fully pushed.
|
|
@@ -92,7 +92,7 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
92
92
|
end: takeFirstSet(lastDeletedSegment.bufferedEnd, lastDeletedSegment.end),
|
|
93
93
|
precizeEnd: lastDeletedSegment.precizeEnd,
|
|
94
94
|
};
|
|
95
|
-
log.debug("SI: "
|
|
95
|
+
log.debug("SI: ".concat(numberOfSegmentToDelete, " segments GCed."), bufferType);
|
|
96
96
|
inventory.splice(indexBefore, numberOfSegmentToDelete);
|
|
97
97
|
inventoryIndex = indexBefore;
|
|
98
98
|
}
|
|
@@ -150,7 +150,7 @@ var SegmentInventory = /** @class */ (function () {
|
|
|
150
150
|
inventory.splice(inventoryIndex, inventory.length - inventoryIndex);
|
|
151
151
|
}
|
|
152
152
|
if (bufferType !== undefined && log.getLevel() === "DEBUG") {
|
|
153
|
-
log.debug("SI: current "
|
|
153
|
+
log.debug("SI: current ".concat(bufferType, " inventory timeline:\n") +
|
|
154
154
|
prettyPrintInventory(this._inventory));
|
|
155
155
|
}
|
|
156
156
|
};
|
|
@@ -765,17 +765,17 @@ function prettyPrintInventory(inventory) {
|
|
|
765
765
|
currentLetter = encounteredPeriod[representationId];
|
|
766
766
|
}
|
|
767
767
|
if (lastChunk === null) {
|
|
768
|
-
str += chunk.bufferedStart.toFixed(2)
|
|
768
|
+
str += "".concat(chunk.bufferedStart.toFixed(2), "|").concat(currentLetter, "|");
|
|
769
769
|
}
|
|
770
770
|
else if (lastLetter === currentLetter) {
|
|
771
771
|
if (lastChunk.bufferedEnd + roundingError < chunk.bufferedStart) {
|
|
772
|
-
str += lastChunk.bufferedEnd.toFixed(2)
|
|
773
|
-
(chunk.bufferedStart.toFixed(2)
|
|
772
|
+
str += "".concat(lastChunk.bufferedEnd.toFixed(2), " ~ ") +
|
|
773
|
+
"".concat(chunk.bufferedStart.toFixed(2), "|").concat(currentLetter, "|");
|
|
774
774
|
}
|
|
775
775
|
}
|
|
776
776
|
else {
|
|
777
|
-
str += lastChunk.bufferedEnd.toFixed(2)
|
|
778
|
-
(chunk.bufferedStart.toFixed(2)
|
|
777
|
+
str += "".concat(lastChunk.bufferedEnd.toFixed(2), " ~ ") +
|
|
778
|
+
"".concat(chunk.bufferedStart.toFixed(2), "|").concat(currentLetter, "|");
|
|
779
779
|
}
|
|
780
780
|
lastChunk = chunk;
|
|
781
781
|
lastLetter = currentLetter;
|
|
@@ -786,9 +786,9 @@ function prettyPrintInventory(inventory) {
|
|
|
786
786
|
}
|
|
787
787
|
letters.forEach(function (letterInfo) {
|
|
788
788
|
var _a;
|
|
789
|
-
str += "\n["
|
|
790
|
-
|
|
791
|
-
|
|
789
|
+
str += "\n[".concat(letterInfo.letter, "] ") +
|
|
790
|
+
"P: ".concat(letterInfo.periodId, " || R: ").concat(letterInfo.representationId) +
|
|
791
|
+
"(".concat((_a = letterInfo.bitrate) !== null && _a !== void 0 ? _a : "unknown bitrate", ")");
|
|
792
792
|
});
|
|
793
793
|
return str;
|
|
794
794
|
}
|
|
@@ -160,7 +160,7 @@ var SegmentBuffersStore = /** @class */ (function () {
|
|
|
160
160
|
SegmentBuffersStore.prototype.disableSegmentBuffer = function (bufferType) {
|
|
161
161
|
var currentValue = this._initializedSegmentBuffers[bufferType];
|
|
162
162
|
if (currentValue === null) {
|
|
163
|
-
log.warn("SBS: The "
|
|
163
|
+
log.warn("SBS: The ".concat(bufferType, " SegmentBuffer was already disabled."));
|
|
164
164
|
return;
|
|
165
165
|
}
|
|
166
166
|
if (currentValue !== undefined) {
|
|
@@ -22,15 +22,17 @@
|
|
|
22
22
|
* ABRManager, and orchestrates a RepresentationStream, which will download and
|
|
23
23
|
* push segments corresponding to a chosen Representation.
|
|
24
24
|
*/
|
|
25
|
-
import {
|
|
25
|
+
import { Observable } from "rxjs";
|
|
26
26
|
import Manifest, { Adaptation, Period } from "../../../manifest";
|
|
27
|
+
import { IReadOnlySharedReference } from "../../../utils/reference";
|
|
27
28
|
import ABRManager from "../../abr";
|
|
29
|
+
import { IReadOnlyPlaybackObserver } from "../../api";
|
|
28
30
|
import { SegmentFetcherCreator } from "../../fetchers";
|
|
29
31
|
import { SegmentBuffer } from "../../segment_buffers";
|
|
30
|
-
import {
|
|
32
|
+
import { IRepresentationStreamPlaybackObservation } from "../representation";
|
|
31
33
|
import { IAdaptationStreamEvent } from "../types";
|
|
32
|
-
/**
|
|
33
|
-
export interface
|
|
34
|
+
/** Regular playback information needed by the AdaptationStream. */
|
|
35
|
+
export interface IAdaptationStreamPlaybackObservation extends IRepresentationStreamPlaybackObservation {
|
|
34
36
|
/**
|
|
35
37
|
* For the current SegmentBuffer, difference in seconds between the next position
|
|
36
38
|
* where no segment data is available and the current position.
|
|
@@ -38,12 +40,15 @@ export interface IAdaptationStreamClockTick extends IRepresentationStreamClockTi
|
|
|
38
40
|
bufferGap: number;
|
|
39
41
|
/** `duration` property of the HTMLMediaElement on which the content plays. */
|
|
40
42
|
duration: number;
|
|
41
|
-
/** Allows to fetch the current position at any time. */
|
|
42
|
-
getCurrentTime: () => number;
|
|
43
43
|
/** If true, the player has been put on pause. */
|
|
44
44
|
isPaused: boolean;
|
|
45
45
|
/** Last "playback rate" asked by the user. */
|
|
46
46
|
speed: number;
|
|
47
|
+
/**
|
|
48
|
+
* Only set for live contents.
|
|
49
|
+
* Difference between the live edge and the current position, in seconds.
|
|
50
|
+
*/
|
|
51
|
+
liveGap: number | undefined;
|
|
47
52
|
}
|
|
48
53
|
/** Arguments given when creating a new `AdaptationStream`. */
|
|
49
54
|
export interface IAdaptationStreamArguments {
|
|
@@ -52,11 +57,8 @@ export interface IAdaptationStreamArguments {
|
|
|
52
57
|
* conditions like the current network bandwidth.
|
|
53
58
|
*/
|
|
54
59
|
abrManager: ABRManager;
|
|
55
|
-
/**
|
|
56
|
-
|
|
57
|
-
* The main AdaptationStream logic will be triggered on each `tick`.
|
|
58
|
-
*/
|
|
59
|
-
clock$: Observable<IAdaptationStreamClockTick>;
|
|
60
|
+
/** Regularly emit playback conditions. */
|
|
61
|
+
playbackObserver: IReadOnlyPlaybackObserver<IAdaptationStreamPlaybackObservation>;
|
|
60
62
|
/** Content you want to create this Stream for. */
|
|
61
63
|
content: {
|
|
62
64
|
manifest: Manifest;
|
|
@@ -73,7 +75,7 @@ export interface IAdaptationStreamArguments {
|
|
|
73
75
|
* position in the current SegmentBuffer. When this amount has been reached
|
|
74
76
|
* this AdaptationStream won't try to download new segments.
|
|
75
77
|
*/
|
|
76
|
-
wantedBufferAhead
|
|
78
|
+
wantedBufferAhead: IReadOnlySharedReference<number>;
|
|
77
79
|
}
|
|
78
80
|
/**
|
|
79
81
|
* Various specific stream "options" which tweak the behavior of the
|
|
@@ -130,4 +132,4 @@ export interface IAdaptationStreamOptions {
|
|
|
130
132
|
* @param {Object} args
|
|
131
133
|
* @returns {Observable}
|
|
132
134
|
*/
|
|
133
|
-
export default function AdaptationStream({ abrManager,
|
|
135
|
+
export default function AdaptationStream({ abrManager, playbackObserver, content, options, segmentBuffer, segmentFetcherCreator, wantedBufferAhead, }: IAdaptationStreamArguments): Observable<IAdaptationStreamEvent>;
|
|
@@ -22,12 +22,12 @@
|
|
|
22
22
|
* ABRManager, and orchestrates a RepresentationStream, which will download and
|
|
23
23
|
* push segments corresponding to a chosen Representation.
|
|
24
24
|
*/
|
|
25
|
-
import {
|
|
26
|
-
import { catchError, distinctUntilChanged, exhaustMap, filter, map, mergeMap, share, take, tap, } from "rxjs/operators";
|
|
25
|
+
import { catchError, concat as observableConcat, defer as observableDefer, distinctUntilChanged, EMPTY, exhaustMap, filter, map, merge as observableMerge, mergeMap, of as observableOf, share, take, tap, } from "rxjs";
|
|
27
26
|
import config from "../../../config";
|
|
28
27
|
import { formatError } from "../../../errors";
|
|
29
28
|
import log from "../../../log";
|
|
30
29
|
import deferSubscriptions from "../../../utils/defer_subscriptions";
|
|
30
|
+
import { createSharedReference, } from "../../../utils/reference";
|
|
31
31
|
import EVENTS from "../events_generators";
|
|
32
32
|
import reloadAfterSwitch from "../reload_after_switch";
|
|
33
33
|
import RepresentationStream from "../representation";
|
|
@@ -48,7 +48,7 @@ var DELTA_POSITION_AFTER_RELOAD = config.DELTA_POSITION_AFTER_RELOAD;
|
|
|
48
48
|
* @returns {Observable}
|
|
49
49
|
*/
|
|
50
50
|
export default function AdaptationStream(_a) {
|
|
51
|
-
var abrManager = _a.abrManager,
|
|
51
|
+
var abrManager = _a.abrManager, playbackObserver = _a.playbackObserver, content = _a.content, options = _a.options, segmentBuffer = _a.segmentBuffer, segmentFetcherCreator = _a.segmentFetcherCreator, wantedBufferAhead = _a.wantedBufferAhead;
|
|
52
52
|
var directManualBitrateSwitching = options.manualBitrateSwitchingMode === "direct";
|
|
53
53
|
var manifest = content.manifest, period = content.period, adaptation = content.adaptation;
|
|
54
54
|
/**
|
|
@@ -60,25 +60,39 @@ export default function AdaptationStream(_a) {
|
|
|
60
60
|
* https://developers.google.com/web/updates/2017/10/quotaexceedederror
|
|
61
61
|
*/
|
|
62
62
|
var bufferGoalRatioMap = {};
|
|
63
|
-
var _b = createRepresentationEstimator(content, abrManager,
|
|
63
|
+
var _b = createRepresentationEstimator(content, abrManager, playbackObserver.observe(true)), estimator$ = _b.estimator$, abrFeedbacks$ = _b.abrFeedbacks$;
|
|
64
64
|
/** Allows the `RepresentationStream` to easily fetch media segments. */
|
|
65
|
-
var segmentFetcher = segmentFetcherCreator
|
|
65
|
+
var segmentFetcher = segmentFetcherCreator
|
|
66
|
+
.createSegmentFetcher(adaptation.type, {
|
|
67
|
+
onRequestBegin: function (value) {
|
|
68
|
+
abrFeedbacks$.next({ type: "requestBegin", value: value });
|
|
69
|
+
},
|
|
70
|
+
onRequestEnd: function (value) {
|
|
71
|
+
abrFeedbacks$.next({ type: "requestEnd", value: value });
|
|
72
|
+
},
|
|
73
|
+
onProgress: function (value) {
|
|
74
|
+
abrFeedbacks$.next({ type: "progress", value: value });
|
|
75
|
+
},
|
|
76
|
+
onMetrics: function (value) {
|
|
77
|
+
abrFeedbacks$.next({ type: "metrics", value: value });
|
|
78
|
+
},
|
|
79
|
+
});
|
|
66
80
|
/**
|
|
67
|
-
*
|
|
68
|
-
* starting with
|
|
81
|
+
* Stores the last estimate emitted through the `abrEstimate$` Observable,
|
|
82
|
+
* starting with `null`.
|
|
69
83
|
* This allows to easily rely on that value in inner Observables which might also
|
|
70
84
|
* need the last already-considered value.
|
|
71
85
|
*/
|
|
72
|
-
var lastEstimate
|
|
86
|
+
var lastEstimate = createSharedReference(null);
|
|
73
87
|
/** Emits abr estimates on Subscription. */
|
|
74
|
-
var abrEstimate$ = estimator$.pipe(tap(function (estimate) { lastEstimate
|
|
88
|
+
var abrEstimate$ = estimator$.pipe(tap(function (estimate) { lastEstimate.setValue(estimate); }), deferSubscriptions(), share());
|
|
75
89
|
/** Emit at each bitrate estimate done by the ABRManager. */
|
|
76
90
|
var bitrateEstimate$ = abrEstimate$.pipe(filter(function (_a) {
|
|
77
91
|
var bitrate = _a.bitrate;
|
|
78
92
|
return bitrate != null;
|
|
79
93
|
}), distinctUntilChanged(function (old, current) { return old.bitrate === current.bitrate; }), map(function (_a) {
|
|
80
94
|
var bitrate = _a.bitrate;
|
|
81
|
-
log.debug("Stream: new "
|
|
95
|
+
log.debug("Stream: new ".concat(adaptation.type, " bitrate estimate"), bitrate);
|
|
82
96
|
return EVENTS.bitrateEstimationChange(adaptation.type, bitrate);
|
|
83
97
|
}));
|
|
84
98
|
/** Recursively create `RepresentationStream`s according to the last estimate. */
|
|
@@ -106,13 +120,13 @@ export default function AdaptationStream(_a) {
|
|
|
106
120
|
if (directManualBitrateSwitching &&
|
|
107
121
|
fromEstimate.manual &&
|
|
108
122
|
!isFirstEstimate) {
|
|
109
|
-
return reloadAfterSwitch(period, adaptation.type,
|
|
123
|
+
return reloadAfterSwitch(period, adaptation.type, playbackObserver, DELTA_POSITION_AFTER_RELOAD.bitrateSwitch);
|
|
110
124
|
}
|
|
111
125
|
/**
|
|
112
126
|
* Emit when the current RepresentationStream should be terminated to make
|
|
113
127
|
* place for a new one (e.g. when switching quality).
|
|
114
128
|
*/
|
|
115
|
-
var terminateCurrentStream$ = lastEstimate
|
|
129
|
+
var terminateCurrentStream$ = lastEstimate.asObservable().pipe(filter(function (newEstimate) { return newEstimate === null ||
|
|
116
130
|
newEstimate.representation.id !== representation.id ||
|
|
117
131
|
(newEstimate.manual && !fromEstimate.manual); }), take(1), map(function (newEstimate) {
|
|
118
132
|
if (newEstimate === null) {
|
|
@@ -141,21 +155,21 @@ export default function AdaptationStream(_a) {
|
|
|
141
155
|
*/
|
|
142
156
|
var fastSwitchThreshold$ = !options.enableFastSwitching ?
|
|
143
157
|
observableOf(0) : // Do not fast-switch anything
|
|
144
|
-
lastEstimate
|
|
158
|
+
lastEstimate.asObservable().pipe(map(function (estimate) { return estimate === null ? undefined :
|
|
145
159
|
estimate.knownStableBitrate; }), distinctUntilChanged());
|
|
146
160
|
var representationChange$ = observableOf(EVENTS.representationChange(adaptation.type, period, representation));
|
|
147
161
|
return observableConcat(representationChange$, createRepresentationStream(representation, terminateCurrentStream$, fastSwitchThreshold$)).pipe(tap(function (evt) {
|
|
148
162
|
if (evt.type === "representationChange" ||
|
|
149
163
|
evt.type === "added-segment") {
|
|
150
|
-
return
|
|
164
|
+
return abrFeedbacks$.next(evt);
|
|
151
165
|
}
|
|
152
166
|
}), mergeMap(function (evt) {
|
|
153
167
|
if (evt.type === "stream-terminating") {
|
|
154
|
-
var
|
|
155
|
-
if (
|
|
168
|
+
var estimate = lastEstimate.getValue();
|
|
169
|
+
if (estimate === null) {
|
|
156
170
|
return EMPTY;
|
|
157
171
|
}
|
|
158
|
-
return recursivelyCreateRepresentationStreams(
|
|
172
|
+
return recursivelyCreateRepresentationStreams(estimate, false);
|
|
159
173
|
}
|
|
160
174
|
return observableOf(evt);
|
|
161
175
|
}));
|
|
@@ -172,9 +186,9 @@ export default function AdaptationStream(_a) {
|
|
|
172
186
|
var bufferGoalRatio = oldBufferGoalRatio != null ? oldBufferGoalRatio :
|
|
173
187
|
1;
|
|
174
188
|
bufferGoalRatioMap[representation.id] = bufferGoalRatio;
|
|
175
|
-
var bufferGoal$ = wantedBufferAhead
|
|
176
|
-
log.info("Stream: changing representation", adaptation.type, representation);
|
|
177
|
-
return RepresentationStream({
|
|
189
|
+
var bufferGoal$ = wantedBufferAhead.asObservable().pipe(map(function (wba) { return wba * bufferGoalRatio; }));
|
|
190
|
+
log.info("Stream: changing representation", adaptation.type, representation.id, representation.bitrate);
|
|
191
|
+
return RepresentationStream({ playbackObserver: playbackObserver, content: { representation: representation, adaptation: adaptation, period: period, manifest: manifest }, segmentBuffer: segmentBuffer, segmentFetcher: segmentFetcher, terminate$: terminateCurrentStream$,
|
|
178
192
|
options: { bufferGoal$: bufferGoal$, drmSystemId: options.drmSystemId, fastSwitchThreshold$: fastSwitchThreshold$ } })
|
|
179
193
|
.pipe(catchError(function (err) {
|
|
180
194
|
var formattedError = formatError(err, {
|
|
@@ -182,10 +196,9 @@ export default function AdaptationStream(_a) {
|
|
|
182
196
|
defaultReason: "Unknown `RepresentationStream` error",
|
|
183
197
|
});
|
|
184
198
|
if (formattedError.code === "BUFFER_FULL_ERROR") {
|
|
185
|
-
var
|
|
199
|
+
var wba = wantedBufferAhead.getValue();
|
|
186
200
|
var lastBufferGoalRatio = bufferGoalRatio;
|
|
187
|
-
if (lastBufferGoalRatio <= 0.25 ||
|
|
188
|
-
wantedBufferAhead * lastBufferGoalRatio <= 2) {
|
|
201
|
+
if (lastBufferGoalRatio <= 0.25 || wba * lastBufferGoalRatio <= 2) {
|
|
189
202
|
throw formattedError;
|
|
190
203
|
}
|
|
191
204
|
bufferGoalRatioMap[representation.id] = lastBufferGoalRatio - 0.25;
|
|
@@ -15,36 +15,28 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { Observable, Subject } from "rxjs";
|
|
17
17
|
import Manifest, { Adaptation } from "../../../manifest";
|
|
18
|
-
import ABRManager, { IABREstimate,
|
|
19
|
-
import { IRepresentationChangeEvent, IStreamEventAddedSegment } from "../types";
|
|
18
|
+
import ABRManager, { IABREstimate, IABRManagerPlaybackObservation, IABRStreamEvents } from "../../abr";
|
|
20
19
|
/**
|
|
21
20
|
* Create an "estimator$" Observable which will emit which Representation (from
|
|
22
21
|
* the given `Adaptation`) is the best fit (see `IABREstimate` type definition)
|
|
23
22
|
* corresponding to the current network and playback conditions.
|
|
24
23
|
*
|
|
25
|
-
* This function also returns
|
|
26
|
-
* helping the estimator to make its choices
|
|
24
|
+
* This function also returns a subject that should be used to add feedback
|
|
25
|
+
* helping the estimator to make its choices.
|
|
27
26
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* - `streamFeedback$`: Subject through which stream-related events should be
|
|
32
|
-
* emitted.
|
|
33
|
-
*
|
|
34
|
-
* You can look at the types defined for both of those Subjects to have more
|
|
35
|
-
* information on what data is expected. The idea is to provide as much data as
|
|
36
|
-
* possible so the estimation is as adapted as possible.
|
|
27
|
+
* You can look at the types defined for this Subject to have more information
|
|
28
|
+
* on what data is expected. The idea is to provide as much data as possible so
|
|
29
|
+
* the estimation is as adapted as possible.
|
|
37
30
|
*
|
|
38
31
|
* @param {Object} content
|
|
39
32
|
* @param {Object} abrManager
|
|
40
|
-
* @param {Observable}
|
|
33
|
+
* @param {Observable} observation$
|
|
41
34
|
* @returns {Object}
|
|
42
35
|
*/
|
|
43
36
|
export default function createRepresentationEstimator({ manifest, adaptation }: {
|
|
44
37
|
manifest: Manifest;
|
|
45
38
|
adaptation: Adaptation;
|
|
46
|
-
}, abrManager: ABRManager,
|
|
39
|
+
}, abrManager: ABRManager, observation$: Observable<IABRManagerPlaybackObservation>): {
|
|
47
40
|
estimator$: Observable<IABREstimate>;
|
|
48
|
-
|
|
49
|
-
requestFeedback$: Subject<IABRMetricsEvent | IABRRequestBeginEvent | IABRRequestProgressEvent | IABRRequestEndEvent>;
|
|
41
|
+
abrFeedbacks$: Subject<IABRStreamEvents>;
|
|
50
42
|
};
|