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,10 +13,11 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { map } from "rxjs
|
|
16
|
+
import { map, } from "rxjs";
|
|
17
17
|
import EVENTS from "./events_generators";
|
|
18
18
|
/**
|
|
19
|
-
* Regularly ask to reload the MediaSource on each
|
|
19
|
+
* Regularly ask to reload the MediaSource on each playback observation
|
|
20
|
+
* performed by the playback observer.
|
|
20
21
|
*
|
|
21
22
|
* If and only if the Period currently played corresponds to `Period`, applies
|
|
22
23
|
* an offset to the reloaded position corresponding to `deltaPos`.
|
|
@@ -26,7 +27,7 @@ import EVENTS from "./events_generators";
|
|
|
26
27
|
*
|
|
27
28
|
* @param {Object} period - The Period linked to the Adaptation or
|
|
28
29
|
* Representation that you want to switch to.
|
|
29
|
-
* @param {Observable}
|
|
30
|
+
* @param {Observable} playbackObserver - emit playback conditions.
|
|
30
31
|
* Has to emit last playback conditions immediately on subscribe.
|
|
31
32
|
* @param {number} deltaPos - If the concerned Period is playing at the time
|
|
32
33
|
* this function is called, we will add this value, in seconds, to the current
|
|
@@ -35,13 +36,13 @@ import EVENTS from "./events_generators";
|
|
|
35
36
|
* a switch.
|
|
36
37
|
* @returns {Observable}
|
|
37
38
|
*/
|
|
38
|
-
export default function reloadAfterSwitch(period, bufferType,
|
|
39
|
-
return
|
|
39
|
+
export default function reloadAfterSwitch(period, bufferType, playbackObserver, deltaPos) {
|
|
40
|
+
return playbackObserver.observe(true).pipe(map(function (observation) {
|
|
40
41
|
var _a;
|
|
41
|
-
var currentTime =
|
|
42
|
+
var currentTime = playbackObserver.getCurrentTime();
|
|
42
43
|
var pos = currentTime + deltaPos;
|
|
43
44
|
// Bind to Period start and end
|
|
44
45
|
var reloadAt = Math.min(Math.max(period.start, pos), (_a = period.end) !== null && _a !== void 0 ? _a : Infinity);
|
|
45
|
-
return EVENTS.waitingMediaSourceReload(bufferType, period, reloadAt, !
|
|
46
|
+
return EVENTS.waitingMediaSourceReload(bufferType, period, reloadAt, !observation.isPaused);
|
|
46
47
|
}));
|
|
47
48
|
}
|
|
@@ -17,17 +17,19 @@
|
|
|
17
17
|
* This file allows any Stream to push data to a SegmentBuffer.
|
|
18
18
|
*/
|
|
19
19
|
import { Observable } from "rxjs";
|
|
20
|
+
import { IReadOnlyPlaybackObserver } from "../../api";
|
|
20
21
|
import { IPushChunkInfos, SegmentBuffer } from "../../segment_buffers";
|
|
21
22
|
/**
|
|
22
23
|
* Append a segment to the given segmentBuffer.
|
|
23
24
|
* If it leads to a QuotaExceededError, try to run our custom range
|
|
24
25
|
* _garbage collector_ then retry.
|
|
25
26
|
*
|
|
26
|
-
* @param {Observable}
|
|
27
|
+
* @param {Observable} playbackObserver
|
|
27
28
|
* @param {Object} segmentBuffer
|
|
28
29
|
* @param {Object} dataInfos
|
|
29
30
|
* @returns {Observable}
|
|
30
31
|
*/
|
|
31
|
-
export default function appendSegmentToBuffer<T>(
|
|
32
|
+
export default function appendSegmentToBuffer<T>(playbackObserver: IReadOnlyPlaybackObserver<{
|
|
32
33
|
position: number;
|
|
34
|
+
wantedTimeOffset: number;
|
|
33
35
|
}>, segmentBuffer: SegmentBuffer, dataInfos: IPushChunkInfos<T>): Observable<unknown>;
|
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
/**
|
|
17
17
|
* This file allows any Stream to push data to a SegmentBuffer.
|
|
18
18
|
*/
|
|
19
|
-
import { concat as observableConcat, } from "rxjs";
|
|
20
|
-
import { catchError, ignoreElements, } from "rxjs/operators";
|
|
19
|
+
import { catchError, concat as observableConcat, mergeMap, ignoreElements, } from "rxjs";
|
|
21
20
|
import { MediaError } from "../../../errors";
|
|
22
21
|
import forceGarbageCollection from "./force_garbage_collection";
|
|
23
22
|
/**
|
|
@@ -25,12 +24,12 @@ import forceGarbageCollection from "./force_garbage_collection";
|
|
|
25
24
|
* If it leads to a QuotaExceededError, try to run our custom range
|
|
26
25
|
* _garbage collector_ then retry.
|
|
27
26
|
*
|
|
28
|
-
* @param {Observable}
|
|
27
|
+
* @param {Observable} playbackObserver
|
|
29
28
|
* @param {Object} segmentBuffer
|
|
30
29
|
* @param {Object} dataInfos
|
|
31
30
|
* @returns {Observable}
|
|
32
31
|
*/
|
|
33
|
-
export default function appendSegmentToBuffer(
|
|
32
|
+
export default function appendSegmentToBuffer(playbackObserver, segmentBuffer, dataInfos) {
|
|
34
33
|
var append$ = segmentBuffer.pushChunk(dataInfos);
|
|
35
34
|
return append$.pipe(catchError(function (appendError) {
|
|
36
35
|
if (!(appendError instanceof Error) || appendError.name !== "QuotaExceededError") {
|
|
@@ -39,10 +38,13 @@ export default function appendSegmentToBuffer(clock$, segmentBuffer, dataInfos)
|
|
|
39
38
|
"An unknown error happened when pushing content";
|
|
40
39
|
throw new MediaError("BUFFER_APPEND_ERROR", reason);
|
|
41
40
|
}
|
|
42
|
-
return
|
|
43
|
-
var
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
return playbackObserver.observe(true).pipe(mergeMap(function (observation) {
|
|
42
|
+
var currentPos = observation.position + observation.wantedTimeOffset;
|
|
43
|
+
return observableConcat(forceGarbageCollection(currentPos, segmentBuffer).pipe(ignoreElements()), append$).pipe(catchError(function (forcedGCError) {
|
|
44
|
+
var reason = forcedGCError instanceof Error ? forcedGCError.toString() :
|
|
45
|
+
"Could not clean the buffer";
|
|
46
|
+
throw new MediaError("BUFFER_FULL_ERROR", reason);
|
|
47
|
+
}));
|
|
46
48
|
}));
|
|
47
49
|
}));
|
|
48
50
|
}
|
|
@@ -13,10 +13,11 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import {
|
|
16
|
+
import { Observable } from "rxjs";
|
|
17
17
|
import { ICustomError } from "../../../errors";
|
|
18
18
|
import Manifest, { Adaptation, ISegment, Period, Representation } from "../../../manifest";
|
|
19
|
-
import {
|
|
19
|
+
import { ISegmentParserParsedInitChunk, ISegmentParserParsedMediaChunk } from "../../../transports";
|
|
20
|
+
import { IReadOnlySharedReference } from "../../../utils/reference";
|
|
20
21
|
import { IPrioritizedSegmentFetcher } from "../../fetchers";
|
|
21
22
|
import { IQueuedSegment } from "../types";
|
|
22
23
|
/**
|
|
@@ -38,7 +39,7 @@ export default class DownloadingQueue<T> {
|
|
|
38
39
|
* Segments whose request are still pending are still in that queue. Segments
|
|
39
40
|
* are only removed from it once their request has succeeded.
|
|
40
41
|
*/
|
|
41
|
-
private _downloadQueue
|
|
42
|
+
private _downloadQueue;
|
|
42
43
|
/**
|
|
43
44
|
* Pending request for the initialization segment.
|
|
44
45
|
* `null` if no request is pending for it.
|
|
@@ -65,8 +66,7 @@ export default class DownloadingQueue<T> {
|
|
|
65
66
|
*
|
|
66
67
|
* @param {Object} content - The context of the Representation you want to
|
|
67
68
|
* load segments for.
|
|
68
|
-
* @param {
|
|
69
|
-
* want to load.
|
|
69
|
+
* @param {Object} downloadQueue - Queue of segments you want to load.
|
|
70
70
|
* @param {Object} segmentFetcher - Interface to facilitate the download of
|
|
71
71
|
* segments.
|
|
72
72
|
* @param {boolean} hasInitSegment - Declare that an initialization segment
|
|
@@ -82,7 +82,7 @@ export default class DownloadingQueue<T> {
|
|
|
82
82
|
* that it should not wait for an initialization segment before parsing a
|
|
83
83
|
* media segment.
|
|
84
84
|
*/
|
|
85
|
-
constructor(content: IDownloadingQueueContext, downloadQueue
|
|
85
|
+
constructor(content: IDownloadingQueueContext, downloadQueue: IReadOnlySharedReference<IDownloadQueueItem>, segmentFetcher: IPrioritizedSegmentFetcher<T>, hasInitSegment: boolean);
|
|
86
86
|
/**
|
|
87
87
|
* Returns the initialization segment currently being requested.
|
|
88
88
|
* Returns `null` if no initialization segment request is pending.
|
|
@@ -128,7 +128,7 @@ export declare type IDownloadingQueueEvent<T> = IParsedInitSegmentEvent<T> | IPa
|
|
|
128
128
|
* In that case, an `IParsedInitSegmentEvent` will always be sent before any
|
|
129
129
|
* `IParsedSegmentEvent` event is sent.
|
|
130
130
|
*/
|
|
131
|
-
export declare type IParsedInitSegmentEvent<T> =
|
|
131
|
+
export declare type IParsedInitSegmentEvent<T> = ISegmentParserParsedInitChunk<T> & {
|
|
132
132
|
segment: ISegment;
|
|
133
133
|
type: "parsed-init";
|
|
134
134
|
};
|
|
@@ -147,7 +147,7 @@ export declare type IParsedInitSegmentEvent<T> = ISegmentParserParsedInitSegment
|
|
|
147
147
|
* You will know that all `IParsedSegmentEvent` have been loaded for a given
|
|
148
148
|
* segment once you received the `IEndOfSegmentEvent` for that segment.
|
|
149
149
|
*/
|
|
150
|
-
export declare type IParsedSegmentEvent<T> =
|
|
150
|
+
export declare type IParsedSegmentEvent<T> = ISegmentParserParsedMediaChunk<T> & {
|
|
151
151
|
segment: ISegment;
|
|
152
152
|
type: "parsed-media";
|
|
153
153
|
};
|
|
@@ -178,7 +178,7 @@ export interface IEndOfQueueEvent {
|
|
|
178
178
|
value: null;
|
|
179
179
|
}
|
|
180
180
|
/**
|
|
181
|
-
* Structure of the object that has to be emitted through the `downloadQueue
|
|
181
|
+
* Structure of the object that has to be emitted through the `downloadQueue`
|
|
182
182
|
* Observable, to signal which segments are currently needed.
|
|
183
183
|
*/
|
|
184
184
|
export interface IDownloadQueueItem {
|
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { concat as observableConcat, defer as observableDefer,
|
|
17
|
-
import { filter, finalize, map, mergeMap, share, switchMap, take, } from "rxjs/operators";
|
|
16
|
+
import { concat as observableConcat, defer as observableDefer, EMPTY, filter, finalize, map, merge as observableMerge, mergeMap, of as observableOf, ReplaySubject, share, switchMap, take, } from "rxjs";
|
|
18
17
|
import log from "../../../log";
|
|
19
18
|
import assert from "../../../utils/assert";
|
|
20
19
|
import assertUnreachable from "../../../utils/assert_unreachable";
|
|
@@ -29,8 +28,7 @@ var DownloadingQueue = /** @class */ (function () {
|
|
|
29
28
|
*
|
|
30
29
|
* @param {Object} content - The context of the Representation you want to
|
|
31
30
|
* load segments for.
|
|
32
|
-
* @param {
|
|
33
|
-
* want to load.
|
|
31
|
+
* @param {Object} downloadQueue - Queue of segments you want to load.
|
|
34
32
|
* @param {Object} segmentFetcher - Interface to facilitate the download of
|
|
35
33
|
* segments.
|
|
36
34
|
* @param {boolean} hasInitSegment - Declare that an initialization segment
|
|
@@ -46,10 +44,10 @@ var DownloadingQueue = /** @class */ (function () {
|
|
|
46
44
|
* that it should not wait for an initialization segment before parsing a
|
|
47
45
|
* media segment.
|
|
48
46
|
*/
|
|
49
|
-
function DownloadingQueue(content, downloadQueue
|
|
47
|
+
function DownloadingQueue(content, downloadQueue, segmentFetcher, hasInitSegment) {
|
|
50
48
|
this._content = content;
|
|
51
49
|
this._currentObs$ = null;
|
|
52
|
-
this._downloadQueue
|
|
50
|
+
this._downloadQueue = downloadQueue;
|
|
53
51
|
this._initSegmentRequest = null;
|
|
54
52
|
this._mediaSegmentRequest = null;
|
|
55
53
|
this._segmentFetcher = segmentFetcher;
|
|
@@ -90,7 +88,7 @@ var DownloadingQueue = /** @class */ (function () {
|
|
|
90
88
|
return this._currentObs$;
|
|
91
89
|
}
|
|
92
90
|
var obs = observableDefer(function () {
|
|
93
|
-
var mediaQueue$ = _this._downloadQueue
|
|
91
|
+
var mediaQueue$ = _this._downloadQueue.asObservable().pipe(filter(function (_a) {
|
|
94
92
|
var segmentQueue = _a.segmentQueue;
|
|
95
93
|
// First, the first elements of the segmentQueue might be already
|
|
96
94
|
// loaded but awaiting the initialization segment to be parsed.
|
|
@@ -122,7 +120,7 @@ var DownloadingQueue = /** @class */ (function () {
|
|
|
122
120
|
return segmentQueue.length > 0 ? _this._requestMediaSegments() :
|
|
123
121
|
EMPTY;
|
|
124
122
|
}));
|
|
125
|
-
var initSegmentPush$ = _this._downloadQueue
|
|
123
|
+
var initSegmentPush$ = _this._downloadQueue.asObservable().pipe(filter(function (next) {
|
|
126
124
|
var initSegmentRequest = _this._initSegmentRequest;
|
|
127
125
|
if (next.initSegment !== null && initSegmentRequest !== null) {
|
|
128
126
|
if (next.initSegment.priority !== initSegmentRequest.priority) {
|
|
@@ -150,7 +148,7 @@ var DownloadingQueue = /** @class */ (function () {
|
|
|
150
148
|
*/
|
|
151
149
|
DownloadingQueue.prototype._requestMediaSegments = function () {
|
|
152
150
|
var _this = this;
|
|
153
|
-
var segmentQueue = this._downloadQueue
|
|
151
|
+
var segmentQueue = this._downloadQueue.getValue().segmentQueue;
|
|
154
152
|
var currentNeededSegment = segmentQueue[0];
|
|
155
153
|
var recursivelyRequestSegments = function (startingSegment) {
|
|
156
154
|
if (startingSegment === undefined) {
|
|
@@ -164,7 +162,7 @@ var DownloadingQueue = /** @class */ (function () {
|
|
|
164
162
|
return request$
|
|
165
163
|
.pipe(mergeMap(function (evt) {
|
|
166
164
|
switch (evt.type) {
|
|
167
|
-
case "
|
|
165
|
+
case "retry":
|
|
168
166
|
return observableOf({ type: "retry",
|
|
169
167
|
value: { segment: segment, error: evt.value } });
|
|
170
168
|
case "interrupted":
|
|
@@ -172,7 +170,7 @@ var DownloadingQueue = /** @class */ (function () {
|
|
|
172
170
|
return EMPTY;
|
|
173
171
|
case "ended":
|
|
174
172
|
_this._mediaSegmentRequest = null;
|
|
175
|
-
var lastQueue = _this._downloadQueue
|
|
173
|
+
var lastQueue = _this._downloadQueue.getValue().segmentQueue;
|
|
176
174
|
if (lastQueue.length === 0) {
|
|
177
175
|
return observableOf({ type: "end-of-queue",
|
|
178
176
|
value: null });
|
|
@@ -222,7 +220,7 @@ var DownloadingQueue = /** @class */ (function () {
|
|
|
222
220
|
return request$
|
|
223
221
|
.pipe(mergeMap(function (evt) {
|
|
224
222
|
switch (evt.type) {
|
|
225
|
-
case "
|
|
223
|
+
case "retry":
|
|
226
224
|
return observableOf({ type: "retry",
|
|
227
225
|
value: { segment: segment, error: evt.value } });
|
|
228
226
|
case "interrupted":
|
|
@@ -25,6 +25,4 @@ import { SegmentBuffer } from "../../segment_buffers";
|
|
|
25
25
|
* @param {Object} bufferingQueue
|
|
26
26
|
* @returns {Observable}
|
|
27
27
|
*/
|
|
28
|
-
export default function forceGarbageCollection(
|
|
29
|
-
position: number;
|
|
30
|
-
}>, bufferingQueue: SegmentBuffer): Observable<unknown>;
|
|
28
|
+
export default function forceGarbageCollection(currentPosition: number, bufferingQueue: SegmentBuffer): Observable<unknown>;
|
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { from as observableFrom, } from "rxjs";
|
|
17
|
-
import { concatAll, mergeMap, take, } from "rxjs/operators";
|
|
16
|
+
import { concatAll, defer as observableDefer, from as observableFrom, } from "rxjs";
|
|
18
17
|
import config from "../../../config";
|
|
19
18
|
import log from "../../../log";
|
|
20
19
|
import { getInnerAndOuterTimeRanges } from "../../../utils/ranges";
|
|
@@ -30,22 +29,21 @@ var GC_GAP_BEEFY = config.BUFFER_GC_GAPS.BEEFY;
|
|
|
30
29
|
* @param {Object} bufferingQueue
|
|
31
30
|
* @returns {Observable}
|
|
32
31
|
*/
|
|
33
|
-
export default function forceGarbageCollection(
|
|
34
|
-
|
|
35
|
-
return timings$.pipe(take(1), mergeMap(function (timing) {
|
|
32
|
+
export default function forceGarbageCollection(currentPosition, bufferingQueue) {
|
|
33
|
+
return observableDefer(function () {
|
|
36
34
|
log.warn("Stream: Running garbage collector");
|
|
37
35
|
var buffered = bufferingQueue.getBufferedRanges();
|
|
38
|
-
var cleanedupRanges = selectGCedRanges(
|
|
36
|
+
var cleanedupRanges = selectGCedRanges(currentPosition, buffered, GC_GAP_CALM);
|
|
39
37
|
// more aggressive GC if we could not find any range to clean
|
|
40
38
|
if (cleanedupRanges.length === 0) {
|
|
41
|
-
cleanedupRanges = selectGCedRanges(
|
|
39
|
+
cleanedupRanges = selectGCedRanges(currentPosition, buffered, GC_GAP_BEEFY);
|
|
42
40
|
}
|
|
43
41
|
log.debug("Stream: GC cleaning", cleanedupRanges);
|
|
44
42
|
return observableFrom(cleanedupRanges.map(function (_a) {
|
|
45
43
|
var start = _a.start, end = _a.end;
|
|
46
44
|
return bufferingQueue.removeBuffer(start, end);
|
|
47
45
|
})).pipe(concatAll());
|
|
48
|
-
})
|
|
46
|
+
});
|
|
49
47
|
}
|
|
50
48
|
/**
|
|
51
49
|
* Buffer garbage collector algorithm.
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import Manifest, { Adaptation, Period, Representation } from "../../../manifest";
|
|
17
|
+
import { IReadOnlyPlaybackObserver } from "../../api";
|
|
17
18
|
import { SegmentBuffer } from "../../segment_buffers";
|
|
18
19
|
import { IBufferDiscontinuity, IQueuedSegment } from "../types";
|
|
19
20
|
/** Analysis of the current buffer's status. */
|
|
@@ -50,7 +51,7 @@ export interface IBufferStatus {
|
|
|
50
51
|
* be filled by any segment, even in the future.
|
|
51
52
|
*
|
|
52
53
|
* @param {Object} content
|
|
53
|
-
* @param {Object}
|
|
54
|
+
* @param {Object} playbackInfo
|
|
54
55
|
* @param {number|undefined} fastSwitchThreshold
|
|
55
56
|
* @param {number} bufferGoal
|
|
56
57
|
* @param {Object} segmentBuffer
|
|
@@ -61,9 +62,4 @@ export default function getBufferStatus(content: {
|
|
|
61
62
|
manifest: Manifest;
|
|
62
63
|
period: Period;
|
|
63
64
|
representation: Representation;
|
|
64
|
-
},
|
|
65
|
-
position: number;
|
|
66
|
-
wantedTimeOffset: number;
|
|
67
|
-
liveGap?: number;
|
|
68
|
-
getCurrentTime(): number;
|
|
69
|
-
}, fastSwitchThreshold: number | undefined, bufferGoal: number, segmentBuffer: SegmentBuffer): IBufferStatus;
|
|
65
|
+
}, wantedStartPosition: number, playbackObserver: IReadOnlyPlaybackObserver<unknown>, fastSwitchThreshold: number | undefined, bufferGoal: number, segmentBuffer: SegmentBuffer): IBufferStatus;
|
|
@@ -27,17 +27,16 @@ var MINIMUM_SEGMENT_SIZE = config.MINIMUM_SEGMENT_SIZE;
|
|
|
27
27
|
* be filled by any segment, even in the future.
|
|
28
28
|
*
|
|
29
29
|
* @param {Object} content
|
|
30
|
-
* @param {Object}
|
|
30
|
+
* @param {Object} playbackInfo
|
|
31
31
|
* @param {number|undefined} fastSwitchThreshold
|
|
32
32
|
* @param {number} bufferGoal
|
|
33
33
|
* @param {Object} segmentBuffer
|
|
34
34
|
* @returns {Object}
|
|
35
35
|
*/
|
|
36
|
-
export default function getBufferStatus(content,
|
|
36
|
+
export default function getBufferStatus(content, wantedStartPosition, playbackObserver, fastSwitchThreshold, bufferGoal, segmentBuffer) {
|
|
37
37
|
var _a;
|
|
38
38
|
var period = content.period, representation = content.representation;
|
|
39
39
|
segmentBuffer.synchronizeInventory();
|
|
40
|
-
var wantedStartPosition = tick.position + tick.wantedTimeOffset;
|
|
41
40
|
var wantedEndPosition = wantedStartPosition + bufferGoal;
|
|
42
41
|
var neededRange = { start: Math.max(wantedStartPosition, period.start),
|
|
43
42
|
end: Math.min(wantedEndPosition, (_a = period.end) !== null && _a !== void 0 ? _a : Infinity) };
|
|
@@ -53,11 +52,12 @@ export default function getBufferStatus(content, tick, fastSwitchThreshold, buff
|
|
|
53
52
|
/** Data on every segments buffered around `neededRange`. */
|
|
54
53
|
var bufferedSegments = getPlayableBufferedSegments({ start: Math.max(neededRange.start - 0.5, 0),
|
|
55
54
|
end: neededRange.end + 0.5 }, segmentBuffer.getInventory());
|
|
55
|
+
var currentPlaybackTime = playbackObserver.getCurrentTime();
|
|
56
56
|
/** Callback allowing to retrieve a segment's history in the buffer. */
|
|
57
57
|
var getBufferedHistory = segmentBuffer.getSegmentHistory.bind(segmentBuffer);
|
|
58
58
|
/** List of segments we will need to download. */
|
|
59
|
-
var neededSegments = getNeededSegments({ content: content, bufferedSegments: bufferedSegments, currentPlaybackTime:
|
|
60
|
-
.map(function (segment) { return ({ priority: getSegmentPriority(segment.time,
|
|
59
|
+
var neededSegments = getNeededSegments({ content: content, bufferedSegments: bufferedSegments, currentPlaybackTime: currentPlaybackTime, fastSwitchThreshold: fastSwitchThreshold, getBufferedHistory: getBufferedHistory, neededRange: neededRange, segmentsBeingPushed: segmentsBeingPushed })
|
|
60
|
+
.map(function (segment) { return ({ priority: getSegmentPriority(segment.time, wantedStartPosition), segment: segment }); });
|
|
61
61
|
/**
|
|
62
62
|
* `true` if the current `RepresentationStream` has loaded all the
|
|
63
63
|
* needed segments for this Representation until the end of the Period.
|
|
@@ -141,10 +141,9 @@ function getPlayableBufferedSegments(neededRange, segmentInventory) {
|
|
|
141
141
|
var inventorySegment = eltInventory.infos.segment;
|
|
142
142
|
var eltInventoryStart = inventorySegment.time /
|
|
143
143
|
inventorySegment.timescale;
|
|
144
|
-
var eltInventoryEnd = inventorySegment.
|
|
144
|
+
var eltInventoryEnd = !inventorySegment.complete ?
|
|
145
145
|
eltInventory.end :
|
|
146
|
-
eltInventoryStart + inventorySegment.duration /
|
|
147
|
-
inventorySegment.timescale;
|
|
146
|
+
eltInventoryStart + inventorySegment.duration / inventorySegment.timescale;
|
|
148
147
|
if ((eltInventoryEnd > minEnd && eltInventoryStart < maxStart) ||
|
|
149
148
|
(eltInventory.end > minEnd && eltInventory.start < maxStart)) {
|
|
150
149
|
overlappingChunks.unshift(eltInventory);
|
|
@@ -80,7 +80,7 @@ export default function getNeededSegments(_a) {
|
|
|
80
80
|
if (segment.isInit) {
|
|
81
81
|
return true; // never skip initialization segments
|
|
82
82
|
}
|
|
83
|
-
if (duration < MINIMUM_SEGMENT_SIZE) {
|
|
83
|
+
if (segment.complete && duration < MINIMUM_SEGMENT_SIZE) {
|
|
84
84
|
return false; // too small, don't download
|
|
85
85
|
}
|
|
86
86
|
// Check if the same segment from another Representation is not already
|
|
@@ -14,18 +14,15 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
/**
|
|
17
|
-
* Calculate the priority number for a given time, in function of
|
|
18
|
-
* with the
|
|
17
|
+
* Calculate the priority number for a given segment start time, in function of
|
|
18
|
+
* the distance with the wanted starting timestamp.
|
|
19
19
|
*
|
|
20
20
|
* The lower is this number, the higher should be the priority of the request.
|
|
21
21
|
*
|
|
22
|
-
* Note that a `
|
|
22
|
+
* Note that a `segmentTime` given behind the current time will always have the
|
|
23
23
|
* highest priority.
|
|
24
|
-
* @param {number}
|
|
25
|
-
* @param {Object}
|
|
24
|
+
* @param {number} segmentTime
|
|
25
|
+
* @param {Object} wantedStartTimestamp
|
|
26
26
|
* @returns {number}
|
|
27
27
|
*/
|
|
28
|
-
export default function getSegmentPriority(
|
|
29
|
-
position: number;
|
|
30
|
-
wantedTimeOffset: number;
|
|
31
|
-
}): number;
|
|
28
|
+
export default function getSegmentPriority(segmentTime: number, wantedStartTimestamp: number): number;
|
|
@@ -16,20 +16,19 @@
|
|
|
16
16
|
import config from "../../../config";
|
|
17
17
|
var SEGMENT_PRIORITIES_STEPS = config.SEGMENT_PRIORITIES_STEPS;
|
|
18
18
|
/**
|
|
19
|
-
* Calculate the priority number for a given time, in function of
|
|
20
|
-
* with the
|
|
19
|
+
* Calculate the priority number for a given segment start time, in function of
|
|
20
|
+
* the distance with the wanted starting timestamp.
|
|
21
21
|
*
|
|
22
22
|
* The lower is this number, the higher should be the priority of the request.
|
|
23
23
|
*
|
|
24
|
-
* Note that a `
|
|
24
|
+
* Note that a `segmentTime` given behind the current time will always have the
|
|
25
25
|
* highest priority.
|
|
26
|
-
* @param {number}
|
|
27
|
-
* @param {Object}
|
|
26
|
+
* @param {number} segmentTime
|
|
27
|
+
* @param {Object} wantedStartTimestamp
|
|
28
28
|
* @returns {number}
|
|
29
29
|
*/
|
|
30
|
-
export default function getSegmentPriority(
|
|
31
|
-
var
|
|
32
|
-
var distance = timeWanted - currentTime;
|
|
30
|
+
export default function getSegmentPriority(segmentTime, wantedStartTimestamp) {
|
|
31
|
+
var distance = segmentTime - wantedStartTimestamp;
|
|
33
32
|
for (var priority = 0; priority < SEGMENT_PRIORITIES_STEPS.length; priority++) {
|
|
34
33
|
if (distance < SEGMENT_PRIORITIES_STEPS[priority]) {
|
|
35
34
|
return priority;
|
|
@@ -13,6 +13,6 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import RepresentationStream, { IRepresentationStreamArguments,
|
|
16
|
+
import RepresentationStream, { IRepresentationStreamArguments, IRepresentationStreamPlaybackObservation, ITerminationOrder } from "./representation_stream";
|
|
17
17
|
export default RepresentationStream;
|
|
18
|
-
export { IRepresentationStreamArguments,
|
|
18
|
+
export { IRepresentationStreamArguments, IRepresentationStreamPlaybackObservation, ITerminationOrder, };
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { Observable } from "rxjs";
|
|
17
17
|
import Manifest, { Adaptation, ISegment, Period, Representation } from "../../../manifest";
|
|
18
|
+
import { IReadOnlyPlaybackObserver } from "../../api";
|
|
18
19
|
import { SegmentBuffer } from "../../segment_buffers";
|
|
19
20
|
import { IStreamEventAddedSegment } from "../types";
|
|
20
21
|
/**
|
|
@@ -25,9 +26,10 @@ import { IStreamEventAddedSegment } from "../types";
|
|
|
25
26
|
* @param {Object} args
|
|
26
27
|
* @returns {Observable}
|
|
27
28
|
*/
|
|
28
|
-
export default function pushInitSegment<T>({
|
|
29
|
-
|
|
29
|
+
export default function pushInitSegment<T>({ playbackObserver, content, segment, segmentData, segmentBuffer }: {
|
|
30
|
+
playbackObserver: IReadOnlyPlaybackObserver<{
|
|
30
31
|
position: number;
|
|
32
|
+
wantedTimeOffset: number;
|
|
31
33
|
}>;
|
|
32
34
|
content: {
|
|
33
35
|
adaptation: Adaptation;
|
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { defer as observableDefer, EMPTY, } from "rxjs";
|
|
17
|
-
import { map } from "rxjs/operators";
|
|
16
|
+
import { defer as observableDefer, EMPTY, map, } from "rxjs";
|
|
18
17
|
import EVENTS from "../events_generators";
|
|
19
18
|
import appendSegmentToBuffer from "./append_segment_to_buffer";
|
|
20
19
|
/**
|
|
@@ -26,7 +25,7 @@ import appendSegmentToBuffer from "./append_segment_to_buffer";
|
|
|
26
25
|
* @returns {Observable}
|
|
27
26
|
*/
|
|
28
27
|
export default function pushInitSegment(_a) {
|
|
29
|
-
var
|
|
28
|
+
var playbackObserver = _a.playbackObserver, content = _a.content, segment = _a.segment, segmentData = _a.segmentData, segmentBuffer = _a.segmentBuffer;
|
|
30
29
|
return observableDefer(function () {
|
|
31
30
|
if (segmentData === null) {
|
|
32
31
|
return EMPTY;
|
|
@@ -36,8 +35,7 @@ export default function pushInitSegment(_a) {
|
|
|
36
35
|
chunk: null,
|
|
37
36
|
timestampOffset: 0,
|
|
38
37
|
appendWindow: [undefined, undefined], codec: codec };
|
|
39
|
-
return appendSegmentToBuffer(
|
|
40
|
-
.pipe(map(function () {
|
|
38
|
+
return appendSegmentToBuffer(playbackObserver, segmentBuffer, { data: data, inventoryInfos: null }).pipe(map(function () {
|
|
41
39
|
var buffered = segmentBuffer.getBufferedRanges();
|
|
42
40
|
return EVENTS.addedSegment(content, segment, buffered, segmentData);
|
|
43
41
|
}));
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { Observable } from "rxjs";
|
|
17
17
|
import Manifest, { Adaptation, ISegment, Period, Representation } from "../../../manifest";
|
|
18
|
-
import {
|
|
18
|
+
import { ISegmentParserParsedMediaChunk } from "../../../transports";
|
|
19
|
+
import { IReadOnlyPlaybackObserver } from "../../api";
|
|
19
20
|
import { SegmentBuffer } from "../../segment_buffers";
|
|
20
21
|
import { IStreamEventAddedSegment } from "../types";
|
|
21
22
|
/**
|
|
@@ -26,9 +27,10 @@ import { IStreamEventAddedSegment } from "../types";
|
|
|
26
27
|
* @param {Object} args
|
|
27
28
|
* @returns {Observable}
|
|
28
29
|
*/
|
|
29
|
-
export default function pushMediaSegment<T>({
|
|
30
|
-
|
|
30
|
+
export default function pushMediaSegment<T>({ playbackObserver, content, initSegmentData, parsedSegment, segment, segmentBuffer }: {
|
|
31
|
+
playbackObserver: IReadOnlyPlaybackObserver<{
|
|
31
32
|
position: number;
|
|
33
|
+
wantedTimeOffset: number;
|
|
32
34
|
}>;
|
|
33
35
|
content: {
|
|
34
36
|
adaptation: Adaptation;
|
|
@@ -37,7 +39,7 @@ export default function pushMediaSegment<T>({ clock$, content, initSegmentData,
|
|
|
37
39
|
representation: Representation;
|
|
38
40
|
};
|
|
39
41
|
initSegmentData: T | null;
|
|
40
|
-
parsedSegment:
|
|
42
|
+
parsedSegment: ISegmentParserParsedMediaChunk<T>;
|
|
41
43
|
segment: ISegment;
|
|
42
44
|
segmentBuffer: SegmentBuffer;
|
|
43
45
|
}): Observable<IStreamEventAddedSegment<T>>;
|
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { defer as observableDefer, EMPTY, } from "rxjs";
|
|
17
|
-
import { map } from "rxjs/operators";
|
|
16
|
+
import { defer as observableDefer, EMPTY, map, } from "rxjs";
|
|
18
17
|
import config from "../../../config";
|
|
19
18
|
import objectAssign from "../../../utils/object_assign";
|
|
20
19
|
import EVENTS from "../events_generators";
|
|
@@ -29,7 +28,7 @@ var APPEND_WINDOW_SECURITIES = config.APPEND_WINDOW_SECURITIES;
|
|
|
29
28
|
* @returns {Observable}
|
|
30
29
|
*/
|
|
31
30
|
export default function pushMediaSegment(_a) {
|
|
32
|
-
var
|
|
31
|
+
var playbackObserver = _a.playbackObserver, content = _a.content, initSegmentData = _a.initSegmentData, parsedSegment = _a.parsedSegment, segment = _a.segment, segmentBuffer = _a.segmentBuffer;
|
|
33
32
|
return observableDefer(function () {
|
|
34
33
|
var _a, _b;
|
|
35
34
|
if (parsedSegment.chunkData === null) {
|
|
@@ -63,8 +62,7 @@ export default function pushMediaSegment(_a) {
|
|
|
63
62
|
}
|
|
64
63
|
var inventoryInfos = objectAssign({ segment: segment, start: estimatedStart,
|
|
65
64
|
end: estimatedEnd }, content);
|
|
66
|
-
return appendSegmentToBuffer(
|
|
67
|
-
.pipe(map(function () {
|
|
65
|
+
return appendSegmentToBuffer(playbackObserver, segmentBuffer, { data: data, inventoryInfos: inventoryInfos }).pipe(map(function () {
|
|
68
66
|
var buffered = segmentBuffer.getBufferedRanges();
|
|
69
67
|
return EVENTS.addedSegment(content, segment, buffered, chunkData);
|
|
70
68
|
}));
|
|
@@ -15,18 +15,17 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { Observable } from "rxjs";
|
|
17
17
|
import Manifest, { Adaptation, Period, Representation } from "../../../manifest";
|
|
18
|
+
import { IReadOnlyPlaybackObserver } from "../../api";
|
|
18
19
|
import { IPrioritizedSegmentFetcher } from "../../fetchers";
|
|
19
20
|
import { SegmentBuffer } from "../../segment_buffers";
|
|
20
21
|
import { IRepresentationStreamEvent } from "../types";
|
|
21
|
-
/** Object emitted by the
|
|
22
|
-
export interface
|
|
23
|
-
/** The position, in seconds, the media element was in at the time of the tick. */
|
|
24
|
-
position: number;
|
|
22
|
+
/** Object that should be emitted by the given `IReadOnlyPlaybackObserver`. */
|
|
23
|
+
export interface IRepresentationStreamPlaybackObservation {
|
|
25
24
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
25
|
+
* The position, in seconds, the media element was in at the time of the
|
|
26
|
+
* playback observation.
|
|
28
27
|
*/
|
|
29
|
-
|
|
28
|
+
position: number;
|
|
30
29
|
/**
|
|
31
30
|
* Offset in seconds to add to the time to obtain the position we
|
|
32
31
|
* actually want to download from.
|
|
@@ -35,8 +34,6 @@ export interface IRepresentationStreamClockTick {
|
|
|
35
34
|
* starting position different from `0`.
|
|
36
35
|
*/
|
|
37
36
|
wantedTimeOffset: number;
|
|
38
|
-
/** Fetch the precize position currently in the HTMLMediaElement. */
|
|
39
|
-
getCurrentTime(): number;
|
|
40
37
|
}
|
|
41
38
|
/** Item emitted by the `terminate$` Observable given to a RepresentationStream. */
|
|
42
39
|
export interface ITerminationOrder {
|
|
@@ -44,8 +41,6 @@ export interface ITerminationOrder {
|
|
|
44
41
|
}
|
|
45
42
|
/** Arguments to give to the RepresentationStream. */
|
|
46
43
|
export interface IRepresentationStreamArguments<TSegmentDataType> {
|
|
47
|
-
/** Periodically emits the current playback conditions. */
|
|
48
|
-
clock$: Observable<IRepresentationStreamClockTick>;
|
|
49
44
|
/** The context of the Representation you want to load. */
|
|
50
45
|
content: {
|
|
51
46
|
adaptation: Adaptation;
|
|
@@ -68,6 +63,8 @@ export interface IRepresentationStreamArguments<TSegmentDataType> {
|
|
|
68
63
|
* Observable once the corresponding segments have been pushed).
|
|
69
64
|
*/
|
|
70
65
|
terminate$: Observable<ITerminationOrder>;
|
|
66
|
+
/** Periodically emits the current playback conditions. */
|
|
67
|
+
playbackObserver: IReadOnlyPlaybackObserver<IRepresentationStreamPlaybackObservation>;
|
|
71
68
|
/** Supplementary arguments which configure the RepresentationStream's behavior. */
|
|
72
69
|
options: IRepresentationStreamOptions;
|
|
73
70
|
}
|
|
@@ -125,4 +122,4 @@ export interface IRepresentationStreamOptions {
|
|
|
125
122
|
* @param {Object} args
|
|
126
123
|
* @returns {Observable}
|
|
127
124
|
*/
|
|
128
|
-
export default function RepresentationStream<TSegmentDataType>({
|
|
125
|
+
export default function RepresentationStream<TSegmentDataType>({ content, options, playbackObserver, segmentBuffer, segmentFetcher, terminate$, }: IRepresentationStreamArguments<TSegmentDataType>): Observable<IRepresentationStreamEvent>;
|