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
|
@@ -18,17 +18,15 @@ import {
|
|
|
18
18
|
concat as observableConcat,
|
|
19
19
|
defer as observableDefer,
|
|
20
20
|
interval as observableInterval,
|
|
21
|
+
map,
|
|
21
22
|
merge as observableMerge,
|
|
22
23
|
Observable,
|
|
23
24
|
of as observableOf,
|
|
24
|
-
Subject,
|
|
25
|
-
} from "rxjs";
|
|
26
|
-
import {
|
|
27
|
-
mapTo,
|
|
28
25
|
startWith,
|
|
29
|
-
|
|
26
|
+
Subject,
|
|
27
|
+
switchMap,
|
|
30
28
|
takeUntil,
|
|
31
|
-
} from "rxjs
|
|
29
|
+
} from "rxjs";
|
|
32
30
|
import {
|
|
33
31
|
events,
|
|
34
32
|
onHeightWidthChange,
|
|
@@ -54,11 +52,11 @@ const { MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL,
|
|
|
54
52
|
TEXT_TRACK_SIZE_CHECKS_INTERVAL } = config;
|
|
55
53
|
|
|
56
54
|
/**
|
|
57
|
-
* Generate the
|
|
55
|
+
* Generate the interval at which TextTrack HTML Cues should be refreshed.
|
|
58
56
|
* @param {HTMLMediaElement} videoElement
|
|
59
57
|
* @returns {Observable}
|
|
60
58
|
*/
|
|
61
|
-
function
|
|
59
|
+
function generateRefreshInterval(videoElement : HTMLMediaElement) : Observable<boolean> {
|
|
62
60
|
const seeking$ = onSeeking$(videoElement);
|
|
63
61
|
const seeked$ = onSeeked$(videoElement);
|
|
64
62
|
const ended$ = onEnded$(videoElement);
|
|
@@ -69,9 +67,9 @@ function generateClock(videoElement : HTMLMediaElement) : Observable<boolean> {
|
|
|
69
67
|
|
|
70
68
|
return manualRefresh$.pipe(
|
|
71
69
|
startWith(null),
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
70
|
+
switchMap(() => observableConcat(autoRefresh$.pipe(map(() => true),
|
|
71
|
+
takeUntil(seeking$)),
|
|
72
|
+
observableOf(false))));
|
|
75
73
|
}
|
|
76
74
|
|
|
77
75
|
/**
|
|
@@ -177,7 +175,7 @@ export default class HTMLTextSegmentBuffer extends SegmentBuffer {
|
|
|
177
175
|
this._currentCues = [];
|
|
178
176
|
|
|
179
177
|
// update text tracks
|
|
180
|
-
|
|
178
|
+
generateRefreshInterval(this._videoElement)
|
|
181
179
|
.pipe(takeUntil(this._destroy$))
|
|
182
180
|
.subscribe((shouldDisplay) => {
|
|
183
181
|
if (!shouldDisplay) {
|
|
@@ -463,7 +461,7 @@ export interface INativeTextTracksBufferSegmentData {
|
|
|
463
461
|
function assertChunkIsTextTrackSegmentData(
|
|
464
462
|
chunk : unknown
|
|
465
463
|
) : asserts chunk is INativeTextTracksBufferSegmentData {
|
|
466
|
-
if (
|
|
464
|
+
if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.PRODUCTION as number) {
|
|
467
465
|
return;
|
|
468
466
|
}
|
|
469
467
|
if (
|
|
@@ -477,11 +475,11 @@ function assertChunkIsTextTrackSegmentData(
|
|
|
477
475
|
) ||
|
|
478
476
|
(
|
|
479
477
|
(chunk as INativeTextTracksBufferSegmentData).start !== undefined &&
|
|
480
|
-
typeof (chunk as INativeTextTracksBufferSegmentData).start !== "
|
|
478
|
+
typeof (chunk as INativeTextTracksBufferSegmentData).start !== "number"
|
|
481
479
|
) ||
|
|
482
480
|
(
|
|
483
481
|
(chunk as INativeTextTracksBufferSegmentData).end !== undefined &&
|
|
484
|
-
typeof (chunk as INativeTextTracksBufferSegmentData).end !== "
|
|
482
|
+
typeof (chunk as INativeTextTracksBufferSegmentData).end !== "number"
|
|
485
483
|
)
|
|
486
484
|
) {
|
|
487
485
|
throw new Error("Invalid format given to a NativeTextSegmentBuffer");
|
|
@@ -497,7 +495,7 @@ function assertChunkIsTextTrackSegmentData(
|
|
|
497
495
|
* It doesn't correspond at all to real code that will be called. This is just
|
|
498
496
|
* a hack to tell TypeScript to perform that check.
|
|
499
497
|
*/
|
|
500
|
-
if (
|
|
498
|
+
if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.DEV as number) {
|
|
501
499
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
502
500
|
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
503
501
|
// @ts-ignore
|
|
@@ -84,7 +84,7 @@ export default class TextTrackCuesStore {
|
|
|
84
84
|
* @param {Number} to
|
|
85
85
|
*/
|
|
86
86
|
remove(from : number, _to : number) : void {
|
|
87
|
-
if (
|
|
87
|
+
if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.DEV as number) {
|
|
88
88
|
assert(from >= 0);
|
|
89
89
|
assert(_to >= 0);
|
|
90
90
|
assert(_to > from);
|
|
@@ -284,7 +284,7 @@ export interface INativeTextTracksBufferSegmentData {
|
|
|
284
284
|
function assertChunkIsTextTrackSegmentData(
|
|
285
285
|
chunk : unknown
|
|
286
286
|
) : asserts chunk is INativeTextTracksBufferSegmentData {
|
|
287
|
-
if (
|
|
287
|
+
if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.PRODUCTION as number) {
|
|
288
288
|
return;
|
|
289
289
|
}
|
|
290
290
|
if (
|
|
@@ -298,11 +298,11 @@ function assertChunkIsTextTrackSegmentData(
|
|
|
298
298
|
) ||
|
|
299
299
|
(
|
|
300
300
|
(chunk as INativeTextTracksBufferSegmentData).start !== undefined &&
|
|
301
|
-
typeof (chunk as INativeTextTracksBufferSegmentData).start !== "
|
|
301
|
+
typeof (chunk as INativeTextTracksBufferSegmentData).start !== "number"
|
|
302
302
|
) ||
|
|
303
303
|
(
|
|
304
304
|
(chunk as INativeTextTracksBufferSegmentData).end !== undefined &&
|
|
305
|
-
typeof (chunk as INativeTextTracksBufferSegmentData).end !== "
|
|
305
|
+
typeof (chunk as INativeTextTracksBufferSegmentData).end !== "number"
|
|
306
306
|
)
|
|
307
307
|
) {
|
|
308
308
|
throw new Error("Invalid format given to a NativeTextSegmentBuffer");
|
|
@@ -318,7 +318,7 @@ function assertChunkIsTextTrackSegmentData(
|
|
|
318
318
|
* It doesn't correspond at all to real code that will be called. This is just
|
|
319
319
|
* a hack to tell TypeScript to perform that check.
|
|
320
320
|
*/
|
|
321
|
-
if (
|
|
321
|
+
if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.DEV as number) {
|
|
322
322
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
323
323
|
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
324
324
|
// @ts-ignore
|
|
@@ -39,7 +39,7 @@ export default class ManualTimeRanges implements TimeRanges {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
insert(start : number, end : number) : void {
|
|
42
|
-
if (
|
|
42
|
+
if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.DEV as number) {
|
|
43
43
|
assert(start >= 0, "invalid start time");
|
|
44
44
|
assert(end - start > 0, "invalid end time");
|
|
45
45
|
}
|
|
@@ -48,7 +48,7 @@ export default class ManualTimeRanges implements TimeRanges {
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
remove(start : number, end : number) : void {
|
|
51
|
-
if (
|
|
51
|
+
if (__ENVIRONMENT__.CURRENT_ENV === __ENVIRONMENT__.DEV as number) {
|
|
52
52
|
assert(start >= 0, "invalid start time");
|
|
53
53
|
assert(end - start > 0, "invalid end time");
|
|
54
54
|
}
|
|
@@ -116,12 +116,12 @@ export default class BufferedHistory {
|
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
if (firstKeptIndex > 0) {
|
|
119
|
-
this._history.splice(firstKeptIndex);
|
|
119
|
+
this._history = this._history.splice(firstKeptIndex);
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
if (this._history.length > this._maxHistoryLength) {
|
|
123
123
|
const toRemove = this._history.length - this._maxHistoryLength;
|
|
124
|
-
this._history.splice(toRemove);
|
|
124
|
+
this._history = this._history.splice(toRemove);
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
127
|
}
|
|
@@ -51,16 +51,7 @@ export interface IBufferedChunk {
|
|
|
51
51
|
* synchronization for that chunk this value could be more or less precize.
|
|
52
52
|
*/
|
|
53
53
|
bufferedStart : number|undefined;
|
|
54
|
-
/**
|
|
55
|
-
* Supposed end, in seconds, the chunk is expected to end at.
|
|
56
|
-
*
|
|
57
|
-
* If the current `chunk` is part of a "partially pushed" segment (see
|
|
58
|
-
* `partiallyPushed`), the definition of this property is flexible in the way
|
|
59
|
-
* that it can correspond either to the end of the chunk or to the end of the
|
|
60
|
-
* whole segment the chunk is linked to.
|
|
61
|
-
* As such, this property should not be relied on until the segment has been
|
|
62
|
-
* fully-pushed.
|
|
63
|
-
*/
|
|
54
|
+
/** Supposed end, in seconds, the chunk is expected to end at. */
|
|
64
55
|
end : number;
|
|
65
56
|
/**
|
|
66
57
|
* If `true` the `end` property is an estimate the `SegmentInventory` has
|
|
@@ -84,8 +75,6 @@ export interface IBufferedChunk {
|
|
|
84
75
|
infos : IChunkContext;
|
|
85
76
|
/**
|
|
86
77
|
* If `true`, this chunk is only a partial chunk of a whole segment.
|
|
87
|
-
* In this condition, the `start` and `end` properties may be ignored, as it
|
|
88
|
-
* is unclear if they refer to the chunk or to the whole segment.
|
|
89
78
|
*
|
|
90
79
|
* Inversely, if `false`, this chunk is a whole segment whose inner chunks
|
|
91
80
|
* have all been fully pushed.
|
|
@@ -692,7 +681,6 @@ export default class SegmentInventory {
|
|
|
692
681
|
}
|
|
693
682
|
const inventory = this._inventory;
|
|
694
683
|
|
|
695
|
-
|
|
696
684
|
const resSegments : IBufferedChunk[] = [];
|
|
697
685
|
|
|
698
686
|
for (let i = 0; i < inventory.length; i++) {
|
|
@@ -25,25 +25,22 @@
|
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
27
|
import {
|
|
28
|
-
|
|
28
|
+
catchError,
|
|
29
29
|
concat as observableConcat,
|
|
30
30
|
defer as observableDefer,
|
|
31
|
-
EMPTY,
|
|
32
|
-
merge as observableMerge,
|
|
33
|
-
Observable,
|
|
34
|
-
of as observableOf,
|
|
35
|
-
} from "rxjs";
|
|
36
|
-
import {
|
|
37
|
-
catchError,
|
|
38
31
|
distinctUntilChanged,
|
|
32
|
+
EMPTY,
|
|
39
33
|
exhaustMap,
|
|
40
34
|
filter,
|
|
41
35
|
map,
|
|
36
|
+
merge as observableMerge,
|
|
42
37
|
mergeMap,
|
|
38
|
+
Observable,
|
|
39
|
+
of as observableOf,
|
|
43
40
|
share,
|
|
44
41
|
take,
|
|
45
42
|
tap,
|
|
46
|
-
} from "rxjs
|
|
43
|
+
} from "rxjs";
|
|
47
44
|
import config from "../../../config";
|
|
48
45
|
import { formatError } from "../../../errors";
|
|
49
46
|
import log from "../../../log";
|
|
@@ -53,15 +50,24 @@ import Manifest, {
|
|
|
53
50
|
Representation,
|
|
54
51
|
} from "../../../manifest";
|
|
55
52
|
import deferSubscriptions from "../../../utils/defer_subscriptions";
|
|
53
|
+
import {
|
|
54
|
+
createSharedReference,
|
|
55
|
+
IReadOnlySharedReference,
|
|
56
|
+
} from "../../../utils/reference";
|
|
56
57
|
import ABRManager, {
|
|
57
58
|
IABREstimate,
|
|
59
|
+
IABRMetricsEventValue,
|
|
60
|
+
IABRRequestBeginEventValue,
|
|
61
|
+
IABRRequestEndEventValue,
|
|
62
|
+
IABRRequestProgressEventValue,
|
|
58
63
|
} from "../../abr";
|
|
64
|
+
import { IReadOnlyPlaybackObserver } from "../../api";
|
|
59
65
|
import { SegmentFetcherCreator } from "../../fetchers";
|
|
60
66
|
import { SegmentBuffer } from "../../segment_buffers";
|
|
61
67
|
import EVENTS from "../events_generators";
|
|
62
68
|
import reloadAfterSwitch from "../reload_after_switch";
|
|
63
69
|
import RepresentationStream, {
|
|
64
|
-
|
|
70
|
+
IRepresentationStreamPlaybackObservation,
|
|
65
71
|
ITerminationOrder,
|
|
66
72
|
} from "../representation";
|
|
67
73
|
import {
|
|
@@ -72,22 +78,26 @@ import createRepresentationEstimator from "./create_representation_estimator";
|
|
|
72
78
|
|
|
73
79
|
const { DELTA_POSITION_AFTER_RELOAD } = config;
|
|
74
80
|
|
|
75
|
-
/**
|
|
76
|
-
export interface
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
81
|
+
/** Regular playback information needed by the AdaptationStream. */
|
|
82
|
+
export interface IAdaptationStreamPlaybackObservation extends
|
|
83
|
+
IRepresentationStreamPlaybackObservation {
|
|
84
|
+
/**
|
|
85
|
+
* For the current SegmentBuffer, difference in seconds between the next position
|
|
86
|
+
* where no segment data is available and the current position.
|
|
87
|
+
*/
|
|
88
|
+
bufferGap : number;
|
|
89
|
+
/** `duration` property of the HTMLMediaElement on which the content plays. */
|
|
90
|
+
duration : number;
|
|
91
|
+
/** If true, the player has been put on pause. */
|
|
92
|
+
isPaused: boolean;
|
|
93
|
+
/** Last "playback rate" asked by the user. */
|
|
94
|
+
speed : number;
|
|
95
|
+
/**
|
|
96
|
+
* Only set for live contents.
|
|
97
|
+
* Difference between the live edge and the current position, in seconds.
|
|
98
|
+
*/
|
|
99
|
+
liveGap : number | undefined;
|
|
100
|
+
}
|
|
91
101
|
|
|
92
102
|
/** Arguments given when creating a new `AdaptationStream`. */
|
|
93
103
|
export interface IAdaptationStreamArguments {
|
|
@@ -96,11 +106,8 @@ export interface IAdaptationStreamArguments {
|
|
|
96
106
|
* conditions like the current network bandwidth.
|
|
97
107
|
*/
|
|
98
108
|
abrManager : ABRManager;
|
|
99
|
-
/**
|
|
100
|
-
|
|
101
|
-
* The main AdaptationStream logic will be triggered on each `tick`.
|
|
102
|
-
*/
|
|
103
|
-
clock$ : Observable<IAdaptationStreamClockTick>;
|
|
109
|
+
/** Regularly emit playback conditions. */
|
|
110
|
+
playbackObserver : IReadOnlyPlaybackObserver<IAdaptationStreamPlaybackObservation>;
|
|
104
111
|
/** Content you want to create this Stream for. */
|
|
105
112
|
content : { manifest : Manifest;
|
|
106
113
|
period : Period;
|
|
@@ -115,7 +122,7 @@ export interface IAdaptationStreamArguments {
|
|
|
115
122
|
* position in the current SegmentBuffer. When this amount has been reached
|
|
116
123
|
* this AdaptationStream won't try to download new segments.
|
|
117
124
|
*/
|
|
118
|
-
wantedBufferAhead
|
|
125
|
+
wantedBufferAhead : IReadOnlySharedReference<number>;
|
|
119
126
|
}
|
|
120
127
|
|
|
121
128
|
/**
|
|
@@ -176,12 +183,12 @@ export interface IAdaptationStreamOptions {
|
|
|
176
183
|
*/
|
|
177
184
|
export default function AdaptationStream({
|
|
178
185
|
abrManager,
|
|
179
|
-
|
|
186
|
+
playbackObserver,
|
|
180
187
|
content,
|
|
181
188
|
options,
|
|
182
189
|
segmentBuffer,
|
|
183
190
|
segmentFetcherCreator,
|
|
184
|
-
wantedBufferAhead
|
|
191
|
+
wantedBufferAhead,
|
|
185
192
|
} : IAdaptationStreamArguments) : Observable<IAdaptationStreamEvent> {
|
|
186
193
|
const directManualBitrateSwitching = options.manualBitrateSwitchingMode === "direct";
|
|
187
194
|
const { manifest, period, adaptation } = content;
|
|
@@ -196,24 +203,38 @@ export default function AdaptationStream({
|
|
|
196
203
|
*/
|
|
197
204
|
const bufferGoalRatioMap: Partial<Record<string, number>> = {};
|
|
198
205
|
|
|
199
|
-
const { estimator$,
|
|
200
|
-
createRepresentationEstimator(content, abrManager,
|
|
206
|
+
const { estimator$, abrFeedbacks$ } =
|
|
207
|
+
createRepresentationEstimator(content, abrManager, playbackObserver.observe(true));
|
|
201
208
|
|
|
202
209
|
/** Allows the `RepresentationStream` to easily fetch media segments. */
|
|
203
|
-
const segmentFetcher = segmentFetcherCreator
|
|
204
|
-
|
|
210
|
+
const segmentFetcher = segmentFetcherCreator
|
|
211
|
+
.createSegmentFetcher(adaptation.type,
|
|
212
|
+
{
|
|
213
|
+
onRequestBegin(value : IABRRequestBeginEventValue) {
|
|
214
|
+
abrFeedbacks$.next({ type: "requestBegin", value });
|
|
215
|
+
},
|
|
216
|
+
onRequestEnd(value : IABRRequestEndEventValue) {
|
|
217
|
+
abrFeedbacks$.next({ type: "requestEnd", value });
|
|
218
|
+
},
|
|
219
|
+
onProgress(value : IABRRequestProgressEventValue) {
|
|
220
|
+
abrFeedbacks$.next({ type: "progress", value });
|
|
221
|
+
},
|
|
222
|
+
onMetrics(value : IABRMetricsEventValue) {
|
|
223
|
+
abrFeedbacks$.next({ type: "metrics", value });
|
|
224
|
+
},
|
|
225
|
+
});
|
|
205
226
|
|
|
206
227
|
/**
|
|
207
|
-
*
|
|
208
|
-
* starting with
|
|
228
|
+
* Stores the last estimate emitted through the `abrEstimate$` Observable,
|
|
229
|
+
* starting with `null`.
|
|
209
230
|
* This allows to easily rely on that value in inner Observables which might also
|
|
210
231
|
* need the last already-considered value.
|
|
211
232
|
*/
|
|
212
|
-
const lastEstimate
|
|
233
|
+
const lastEstimate = createSharedReference<IABREstimate | null>(null);
|
|
213
234
|
|
|
214
235
|
/** Emits abr estimates on Subscription. */
|
|
215
236
|
const abrEstimate$ = estimator$.pipe(
|
|
216
|
-
tap((estimate) => { lastEstimate
|
|
237
|
+
tap((estimate) => { lastEstimate.setValue(estimate); }),
|
|
217
238
|
deferSubscriptions(),
|
|
218
239
|
share());
|
|
219
240
|
|
|
@@ -261,7 +282,7 @@ export default function AdaptationStream({
|
|
|
261
282
|
{
|
|
262
283
|
return reloadAfterSwitch(period,
|
|
263
284
|
adaptation.type,
|
|
264
|
-
|
|
285
|
+
playbackObserver,
|
|
265
286
|
DELTA_POSITION_AFTER_RELOAD.bitrateSwitch);
|
|
266
287
|
}
|
|
267
288
|
|
|
@@ -269,7 +290,7 @@ export default function AdaptationStream({
|
|
|
269
290
|
* Emit when the current RepresentationStream should be terminated to make
|
|
270
291
|
* place for a new one (e.g. when switching quality).
|
|
271
292
|
*/
|
|
272
|
-
const terminateCurrentStream$ = lastEstimate
|
|
293
|
+
const terminateCurrentStream$ = lastEstimate.asObservable().pipe(
|
|
273
294
|
filter((newEstimate) => newEstimate === null ||
|
|
274
295
|
newEstimate.representation.id !== representation.id ||
|
|
275
296
|
(newEstimate.manual && !fromEstimate.manual)),
|
|
@@ -301,7 +322,7 @@ export default function AdaptationStream({
|
|
|
301
322
|
*/
|
|
302
323
|
const fastSwitchThreshold$ = !options.enableFastSwitching ?
|
|
303
324
|
observableOf(0) : // Do not fast-switch anything
|
|
304
|
-
lastEstimate
|
|
325
|
+
lastEstimate.asObservable().pipe(
|
|
305
326
|
map((estimate) => estimate === null ? undefined :
|
|
306
327
|
estimate.knownStableBitrate),
|
|
307
328
|
distinctUntilChanged());
|
|
@@ -319,16 +340,16 @@ export default function AdaptationStream({
|
|
|
319
340
|
if (evt.type === "representationChange" ||
|
|
320
341
|
evt.type === "added-segment")
|
|
321
342
|
{
|
|
322
|
-
return
|
|
343
|
+
return abrFeedbacks$.next(evt);
|
|
323
344
|
}
|
|
324
345
|
}),
|
|
325
346
|
mergeMap((evt) => {
|
|
326
347
|
if (evt.type === "stream-terminating") {
|
|
327
|
-
const
|
|
328
|
-
if (
|
|
348
|
+
const estimate = lastEstimate.getValue();
|
|
349
|
+
if (estimate === null) {
|
|
329
350
|
return EMPTY;
|
|
330
351
|
}
|
|
331
|
-
return recursivelyCreateRepresentationStreams(
|
|
352
|
+
return recursivelyCreateRepresentationStreams(estimate, false);
|
|
332
353
|
}
|
|
333
354
|
return observableOf(evt);
|
|
334
355
|
}));
|
|
@@ -351,12 +372,15 @@ export default function AdaptationStream({
|
|
|
351
372
|
1;
|
|
352
373
|
bufferGoalRatioMap[representation.id] = bufferGoalRatio;
|
|
353
374
|
|
|
354
|
-
const bufferGoal$ = wantedBufferAhead
|
|
375
|
+
const bufferGoal$ = wantedBufferAhead.asObservable().pipe(
|
|
355
376
|
map((wba) => wba * bufferGoalRatio)
|
|
356
377
|
);
|
|
357
378
|
|
|
358
|
-
log.info("Stream: changing representation",
|
|
359
|
-
|
|
379
|
+
log.info("Stream: changing representation",
|
|
380
|
+
adaptation.type,
|
|
381
|
+
representation.id,
|
|
382
|
+
representation.bitrate);
|
|
383
|
+
return RepresentationStream({ playbackObserver,
|
|
360
384
|
content: { representation,
|
|
361
385
|
adaptation,
|
|
362
386
|
period,
|
|
@@ -373,11 +397,9 @@ export default function AdaptationStream({
|
|
|
373
397
|
defaultReason: "Unknown `RepresentationStream` error",
|
|
374
398
|
});
|
|
375
399
|
if (formattedError.code === "BUFFER_FULL_ERROR") {
|
|
376
|
-
const
|
|
400
|
+
const wba = wantedBufferAhead.getValue();
|
|
377
401
|
const lastBufferGoalRatio = bufferGoalRatio;
|
|
378
|
-
if (lastBufferGoalRatio <= 0.25 ||
|
|
379
|
-
wantedBufferAhead * lastBufferGoalRatio <= 2)
|
|
380
|
-
{
|
|
402
|
+
if (lastBufferGoalRatio <= 0.25 || wba * lastBufferGoalRatio <= 2) {
|
|
381
403
|
throw formattedError;
|
|
382
404
|
}
|
|
383
405
|
bufferGoalRatioMap[representation.id] = lastBufferGoalRatio - 0.25;
|
|
@@ -15,16 +15,14 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
|
-
merge as observableMerge,
|
|
19
18
|
Observable,
|
|
20
|
-
of as observableOf,
|
|
21
19
|
Subject,
|
|
22
|
-
} from "rxjs";
|
|
23
|
-
import {
|
|
24
20
|
distinctUntilChanged,
|
|
25
21
|
map,
|
|
22
|
+
merge as observableMerge,
|
|
23
|
+
of as observableOf,
|
|
26
24
|
switchMap,
|
|
27
|
-
} from "rxjs
|
|
25
|
+
} from "rxjs";
|
|
28
26
|
import { MediaError } from "../../../errors";
|
|
29
27
|
import Manifest, {
|
|
30
28
|
Adaptation,
|
|
@@ -33,61 +31,36 @@ import Manifest, {
|
|
|
33
31
|
import { fromEvent } from "../../../utils/event_emitter";
|
|
34
32
|
import ABRManager, {
|
|
35
33
|
IABREstimate,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
IABRRequestBeginEvent,
|
|
39
|
-
IABRRequestEndEvent,
|
|
40
|
-
IABRRequestProgressEvent,
|
|
34
|
+
IABRManagerPlaybackObservation,
|
|
35
|
+
IABRStreamEvents,
|
|
41
36
|
} from "../../abr";
|
|
42
|
-
import {
|
|
43
|
-
IRepresentationChangeEvent,
|
|
44
|
-
IStreamEventAddedSegment,
|
|
45
|
-
} from "../types";
|
|
46
37
|
|
|
47
38
|
/**
|
|
48
39
|
* Create an "estimator$" Observable which will emit which Representation (from
|
|
49
40
|
* the given `Adaptation`) is the best fit (see `IABREstimate` type definition)
|
|
50
41
|
* corresponding to the current network and playback conditions.
|
|
51
42
|
*
|
|
52
|
-
* This function also returns
|
|
53
|
-
* helping the estimator to make its choices
|
|
54
|
-
*
|
|
55
|
-
* - `requestFeedback$`: Subject through which information about new requests
|
|
56
|
-
* and network metrics should be emitted.
|
|
43
|
+
* This function also returns a subject that should be used to add feedback
|
|
44
|
+
* helping the estimator to make its choices.
|
|
57
45
|
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
* You can look at the types defined for both of those Subjects to have more
|
|
62
|
-
* information on what data is expected. The idea is to provide as much data as
|
|
63
|
-
* possible so the estimation is as adapted as possible.
|
|
46
|
+
* You can look at the types defined for this Subject to have more information
|
|
47
|
+
* on what data is expected. The idea is to provide as much data as possible so
|
|
48
|
+
* the estimation is as adapted as possible.
|
|
64
49
|
*
|
|
65
50
|
* @param {Object} content
|
|
66
51
|
* @param {Object} abrManager
|
|
67
|
-
* @param {Observable}
|
|
52
|
+
* @param {Observable} observation$
|
|
68
53
|
* @returns {Object}
|
|
69
54
|
*/
|
|
70
55
|
export default function createRepresentationEstimator(
|
|
71
56
|
{ manifest, adaptation } : { manifest : Manifest;
|
|
72
57
|
adaptation : Adaptation; },
|
|
73
58
|
abrManager : ABRManager,
|
|
74
|
-
|
|
59
|
+
observation$ : Observable<IABRManagerPlaybackObservation>
|
|
75
60
|
) : { estimator$ : Observable<IABREstimate>;
|
|
76
|
-
|
|
77
|
-
IRepresentationChangeEvent>;
|
|
78
|
-
requestFeedback$ : Subject<IABRMetricsEvent |
|
|
79
|
-
IABRRequestBeginEvent |
|
|
80
|
-
IABRRequestProgressEvent |
|
|
81
|
-
IABRRequestEndEvent>; }
|
|
61
|
+
abrFeedbacks$ : Subject<IABRStreamEvents>; }
|
|
82
62
|
{
|
|
83
|
-
const
|
|
84
|
-
IRepresentationChangeEvent>();
|
|
85
|
-
const requestFeedback$ = new Subject<IABRMetricsEvent |
|
|
86
|
-
IABRRequestBeginEvent |
|
|
87
|
-
IABRRequestProgressEvent |
|
|
88
|
-
IABRRequestEndEvent>();
|
|
89
|
-
const abrEvents$ = observableMerge(streamFeedback$, requestFeedback$);
|
|
90
|
-
|
|
63
|
+
const abrFeedbacks$ = new Subject<IABRStreamEvents>();
|
|
91
64
|
const estimator$ = observableMerge(
|
|
92
65
|
// subscribe "first" (hack as it is a merge here) to event
|
|
93
66
|
fromEvent(manifest, "decipherabilityUpdate"),
|
|
@@ -117,9 +90,10 @@ export default function createRepresentationEstimator(
|
|
|
117
90
|
return true;
|
|
118
91
|
}),
|
|
119
92
|
switchMap((playableRepresentations) =>
|
|
120
|
-
abrManager.get$(adaptation.type,
|
|
93
|
+
abrManager.get$(adaptation.type,
|
|
94
|
+
playableRepresentations,
|
|
95
|
+
observation$,
|
|
96
|
+
abrFeedbacks$)));
|
|
121
97
|
|
|
122
|
-
return { estimator$,
|
|
123
|
-
streamFeedback$,
|
|
124
|
-
requestFeedback$ };
|
|
98
|
+
return { estimator$, abrFeedbacks$ };
|
|
125
99
|
}
|
|
@@ -16,13 +16,13 @@
|
|
|
16
16
|
|
|
17
17
|
import AdaptationStream, {
|
|
18
18
|
IAdaptationStreamArguments,
|
|
19
|
-
|
|
19
|
+
IAdaptationStreamPlaybackObservation,
|
|
20
20
|
IAdaptationStreamOptions,
|
|
21
21
|
} from "./adaptation_stream";
|
|
22
22
|
|
|
23
23
|
export default AdaptationStream;
|
|
24
24
|
export {
|
|
25
25
|
IAdaptationStreamArguments,
|
|
26
|
-
|
|
26
|
+
IAdaptationStreamPlaybackObservation,
|
|
27
27
|
IAdaptationStreamOptions,
|
|
28
28
|
};
|
package/src/core/stream/index.ts
CHANGED
|
@@ -15,13 +15,13 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import StreamOrchestrator, {
|
|
18
|
-
IStreamOrchestratorClockTick,
|
|
19
18
|
IStreamOrchestratorOptions,
|
|
19
|
+
IStreamOrchestratorPlaybackObservation,
|
|
20
20
|
} from "./orchestrator";
|
|
21
21
|
export * from "./types";
|
|
22
22
|
|
|
23
23
|
export default StreamOrchestrator;
|
|
24
24
|
export {
|
|
25
|
-
|
|
25
|
+
IStreamOrchestratorPlaybackObservation,
|
|
26
26
|
IStreamOrchestratorOptions,
|
|
27
27
|
};
|
|
@@ -14,16 +14,14 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import {
|
|
18
|
-
merge as observableMerge,
|
|
19
|
-
Observable,
|
|
20
|
-
} from "rxjs";
|
|
21
17
|
import {
|
|
22
18
|
distinctUntilChanged,
|
|
23
19
|
filter,
|
|
24
20
|
map,
|
|
21
|
+
merge as observableMerge,
|
|
22
|
+
Observable,
|
|
25
23
|
scan,
|
|
26
|
-
} from "rxjs
|
|
24
|
+
} from "rxjs";
|
|
27
25
|
import { Period } from "../../../manifest";
|
|
28
26
|
import { IBufferType } from "../../segment_buffers";
|
|
29
27
|
import { IStreamOrchestratorEvent } from "../types";
|
|
@@ -111,12 +109,12 @@ export default function ActivePeriodEmitter(
|
|
|
111
109
|
case "representationChange": {
|
|
112
110
|
const { period, type } = evt.value;
|
|
113
111
|
const currentInfos = acc[period.id];
|
|
114
|
-
if (currentInfos
|
|
115
|
-
currentInfos.buffers.add(type);
|
|
116
|
-
} else {
|
|
112
|
+
if (currentInfos === undefined) {
|
|
117
113
|
const bufferSet = new Set<IBufferType>();
|
|
118
114
|
bufferSet.add(type);
|
|
119
115
|
acc[period.id] = { period, buffers: bufferSet };
|
|
116
|
+
} else if (!currentInfos.buffers.has(type)) {
|
|
117
|
+
currentInfos.buffers.add(type);
|
|
120
118
|
}
|
|
121
119
|
}
|
|
122
120
|
break;
|
|
@@ -16,14 +16,12 @@
|
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
18
|
combineLatest as observableCombineLatest,
|
|
19
|
-
Observable,
|
|
20
|
-
} from "rxjs";
|
|
21
|
-
import {
|
|
22
19
|
distinctUntilChanged,
|
|
23
20
|
filter,
|
|
24
21
|
map,
|
|
22
|
+
Observable,
|
|
25
23
|
startWith,
|
|
26
|
-
} from "rxjs
|
|
24
|
+
} from "rxjs";
|
|
27
25
|
import { IStreamOrchestratorEvent } from "../types";
|
|
28
26
|
|
|
29
27
|
/**
|