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,13 +13,12 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { EMPTY, merge as observableMerge, of as observableOf, Subject, throwError, } from "rxjs";
|
|
17
|
-
import { filter, finalize, ignoreElements, mergeMap, switchMap, takeUntil, } from "rxjs/operators";
|
|
16
|
+
import { EMPTY, filter, finalize, ignoreElements, merge as observableMerge, mergeMap, of as observableOf, Subject, switchMap, takeUntil, throwError, } from "rxjs";
|
|
18
17
|
import { MediaError } from "../../errors";
|
|
19
18
|
import log from "../../log";
|
|
20
19
|
import SegmentBuffersStore from "../segment_buffers";
|
|
21
20
|
import StreamOrchestrator from "../stream";
|
|
22
|
-
import
|
|
21
|
+
import createStreamPlaybackObserver from "./create_stream_playback_observer";
|
|
23
22
|
import DurationUpdater from "./duration_updater";
|
|
24
23
|
import emitLoadedEvent from "./emit_loaded_event";
|
|
25
24
|
import { maintainEndOfStream } from "./end_of_stream";
|
|
@@ -34,7 +33,7 @@ import updatePlaybackRate from "./update_playback_rate";
|
|
|
34
33
|
* @returns {Function}
|
|
35
34
|
*/
|
|
36
35
|
export default function createMediaSourceLoader(_a) {
|
|
37
|
-
var mediaElement = _a.mediaElement, manifest = _a.manifest,
|
|
36
|
+
var mediaElement = _a.mediaElement, manifest = _a.manifest, speed = _a.speed, bufferOptions = _a.bufferOptions, abrManager = _a.abrManager, playbackObserver = _a.playbackObserver, segmentFetcherCreator = _a.segmentFetcherCreator;
|
|
38
37
|
/**
|
|
39
38
|
* Load the content on the given MediaSource.
|
|
40
39
|
* @param {MediaSource} mediaSource
|
|
@@ -50,14 +49,13 @@ export default function createMediaSourceLoader(_a) {
|
|
|
50
49
|
var error_1 = new MediaError("MEDIA_STARTING_TIME_NOT_FOUND", "Wanted starting time not found in the Manifest.");
|
|
51
50
|
return throwError(function () { return error_1; });
|
|
52
51
|
}
|
|
53
|
-
/** Interface to create media buffers
|
|
52
|
+
/** Interface to create media buffers. */
|
|
54
53
|
var segmentBuffersStore = new SegmentBuffersStore(mediaElement, mediaSource);
|
|
55
|
-
var _b = initialSeekAndPlay({
|
|
56
|
-
mustAutoPlay: autoPlay
|
|
57
|
-
var
|
|
58
|
-
var streamEvents$ =
|
|
59
|
-
var
|
|
60
|
-
initialSeek$: seek$, manifest: manifest, speed$: speed$, startTime: initialTime });
|
|
54
|
+
var _b = initialSeekAndPlay({ mediaElement: mediaElement, playbackObserver: playbackObserver, startTime: initialTime,
|
|
55
|
+
mustAutoPlay: autoPlay }), seekAndPlay$ = _b.seekAndPlay$, initialPlayPerformed = _b.initialPlayPerformed, initialSeekPerformed = _b.initialSeekPerformed;
|
|
56
|
+
var observation$ = playbackObserver.observe(true);
|
|
57
|
+
var streamEvents$ = initialPlayPerformed.asObservable().pipe(filter(function (hasPlayed) { return hasPlayed; }), mergeMap(function () { return streamEventsEmitter(manifest, mediaElement, observation$); }));
|
|
58
|
+
var streamObserver = createStreamPlaybackObserver(manifest, playbackObserver, { autoPlay: autoPlay, initialPlayPerformed: initialPlayPerformed, initialSeekPerformed: initialSeekPerformed, speed: speed, startTime: initialTime });
|
|
61
59
|
/** Cancel endOfStream calls when streams become active again. */
|
|
62
60
|
var cancelEndOfStream$ = new Subject();
|
|
63
61
|
/** Emits discontinuities detected by the StreamOrchestrator. */
|
|
@@ -65,7 +63,7 @@ export default function createMediaSourceLoader(_a) {
|
|
|
65
63
|
/** Emits event when streams are "locked", meaning they cannot load segments. */
|
|
66
64
|
var lockedStream$ = new Subject();
|
|
67
65
|
// Creates Observable which will manage every Stream for the given Content.
|
|
68
|
-
var streams$ = StreamOrchestrator({ manifest: manifest, initialPeriod: initialPeriod },
|
|
66
|
+
var streams$ = StreamOrchestrator({ manifest: manifest, initialPeriod: initialPeriod }, streamObserver, abrManager, segmentBuffersStore, segmentFetcherCreator, bufferOptions).pipe(mergeMap(function (evt) {
|
|
69
67
|
switch (evt.type) {
|
|
70
68
|
case "end-of-stream":
|
|
71
69
|
log.debug("Init: end-of-stream order received.");
|
|
@@ -90,23 +88,22 @@ export default function createMediaSourceLoader(_a) {
|
|
|
90
88
|
* the user on the media element and force a speed of `0` when the buffer is
|
|
91
89
|
* empty, so it can build back buffer.
|
|
92
90
|
*/
|
|
93
|
-
var playbackRate$ = updatePlaybackRate(mediaElement, speed
|
|
91
|
+
var playbackRate$ = updatePlaybackRate(mediaElement, speed, observation$)
|
|
94
92
|
.pipe(ignoreElements());
|
|
95
93
|
/**
|
|
96
94
|
* Observable trying to avoid various stalling situations, emitting "stalled"
|
|
97
95
|
* events when it cannot, as well as "unstalled" events when it get out of one.
|
|
98
96
|
*/
|
|
99
|
-
var stallAvoider$ = StallAvoider(
|
|
97
|
+
var stallAvoider$ = StallAvoider(playbackObserver, manifest, lockedStream$, discontinuityUpdate$);
|
|
100
98
|
/**
|
|
101
99
|
* Emit a "loaded" events once the initial play has been performed and the
|
|
102
100
|
* media can begin playback.
|
|
103
101
|
* Also emits warning events if issues arise when doing so.
|
|
104
102
|
*/
|
|
105
|
-
var loadingEvts$ =
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
return emitLoadedEvent(clock$, mediaElement, segmentBuffersStore, false);
|
|
103
|
+
var loadingEvts$ = seekAndPlay$.pipe(switchMap(function (evt) {
|
|
104
|
+
return evt.type === "warning" ?
|
|
105
|
+
observableOf(evt) :
|
|
106
|
+
emitLoadedEvent(observation$, mediaElement, segmentBuffersStore, false);
|
|
110
107
|
}));
|
|
111
108
|
return observableMerge(durationUpdater$, loadingEvts$, playbackRate$, stallAvoider$, streams$, streamEvents$).pipe(finalize(function () {
|
|
112
109
|
// clean-up every created SegmentBuffers
|
|
@@ -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 as observableFrom, merge as observableMerge, of as observableOf, timer as observableTimer, } from "rxjs";
|
|
17
|
-
import { mapTo, mergeMap, mergeMapTo, share, take, } from "rxjs/operators";
|
|
16
|
+
import { defer as observableDefer, EMPTY, from as observableFrom, map, merge as observableMerge, mergeMap, of as observableOf, share, take, timer as observableTimer, } from "rxjs";
|
|
18
17
|
import config from "../../config";
|
|
19
18
|
import log from "../../log";
|
|
20
19
|
import throttle from "../../utils/rx-throttle";
|
|
@@ -81,13 +80,15 @@ export default function manifestUpdateScheduler(_a) {
|
|
|
81
80
|
var completeRefresh = _a.completeRefresh, delay = _a.delay, canUseUnsafeMode = _a.canUseUnsafeMode;
|
|
82
81
|
var unsafeMode = canUseUnsafeMode && unsafeModeEnabled;
|
|
83
82
|
return startManualRefreshTimer(delay !== null && delay !== void 0 ? delay : 0, minimumManifestUpdateInterval, sendingTime)
|
|
84
|
-
.pipe(
|
|
83
|
+
.pipe(map(function () { return ({ completeRefresh: completeRefresh, unsafeMode: unsafeMode }); }));
|
|
85
84
|
}));
|
|
86
85
|
/** Emit when the Manifest tells us that it has "expired". */
|
|
87
86
|
var expired$ = manifest.expired === null ?
|
|
88
87
|
EMPTY :
|
|
89
|
-
observableTimer(minInterval)
|
|
90
|
-
|
|
88
|
+
observableTimer(minInterval).pipe(mergeMap(function () {
|
|
89
|
+
return manifest.expired === null ? EMPTY :
|
|
90
|
+
observableFrom(manifest.expired);
|
|
91
|
+
}), map(function () { return ({ completeRefresh: true, unsafeMode: unsafeModeEnabled }); }));
|
|
91
92
|
/** Emit when the Manifest should normally be refreshed. */
|
|
92
93
|
var autoRefresh$ = createAutoRefreshObservable();
|
|
93
94
|
return observableMerge(autoRefresh$, internalRefresh$, expired$).pipe(take(1), mergeMap(function (_a) {
|
|
@@ -149,7 +150,7 @@ export default function manifestUpdateScheduler(_a) {
|
|
|
149
150
|
actualRefreshInterval = regularRefreshDelay;
|
|
150
151
|
}
|
|
151
152
|
return observableTimer(Math.max(actualRefreshInterval, minInterval))
|
|
152
|
-
.pipe(
|
|
153
|
+
.pipe(map(function () { return ({ completeRefresh: false, unsafeMode: unsafeModeEnabled }); }));
|
|
153
154
|
}
|
|
154
155
|
}
|
|
155
156
|
/**
|
|
@@ -192,7 +193,7 @@ export default function manifestUpdateScheduler(_a) {
|
|
|
192
193
|
catch (e) {
|
|
193
194
|
var message = e instanceof Error ? e.message :
|
|
194
195
|
"unknown error";
|
|
195
|
-
log.warn("MUS: Attempt to update Manifest failed: "
|
|
196
|
+
log.warn("MUS: Attempt to update Manifest failed: ".concat(message), "Re-downloading the Manifest fully");
|
|
196
197
|
return startManualRefreshTimer(FAILED_PARTIAL_UPDATE_MANIFEST_REFRESH_DELAY, minimumManifestUpdateInterval, newSendingTime)
|
|
197
198
|
.pipe(mergeMap(function () {
|
|
198
199
|
return refreshManifest({ completeRefresh: true, unsafeMode: false });
|
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { Observable } from "rxjs";
|
|
17
17
|
import Manifest, { Period } from "../../manifest";
|
|
18
|
+
import { PlaybackObserver } from "../api";
|
|
18
19
|
import { IBufferType } from "../segment_buffers";
|
|
19
|
-
import {
|
|
20
|
+
import { IStalledEvent, IUnstalledEvent, IWarningEvent } from "./types";
|
|
20
21
|
export interface ILockedStreamEvent {
|
|
21
22
|
/** Buffer type for which no segment will currently load. */
|
|
22
23
|
bufferType: IBufferType;
|
|
@@ -64,14 +65,11 @@ export interface IDiscontinuityTimeInfo {
|
|
|
64
65
|
* Monitor situations where playback is stalled and try to get out of those.
|
|
65
66
|
* Emit "stalled" then "unstalled" respectively when an unavoidable stall is
|
|
66
67
|
* encountered and exited.
|
|
67
|
-
* @param {
|
|
68
|
-
* conditions.
|
|
69
|
-
* @param {HTMLMediaElement} mediaElement - The HTMLMediaElement on which the
|
|
70
|
-
* media is played.
|
|
68
|
+
* @param {object} playbackObserver - emit the current playback conditions.
|
|
71
69
|
* @param {Object} manifest - The Manifest of the currently-played content.
|
|
72
70
|
* @param {Observable} discontinuityUpdate$ - Observable emitting encountered
|
|
73
71
|
* discontinuities for loaded Period and buffer types.
|
|
74
72
|
* @param {Function} setCurrentTime
|
|
75
73
|
* @returns {Observable}
|
|
76
74
|
*/
|
|
77
|
-
export default function StallAvoider(
|
|
75
|
+
export default function StallAvoider(playbackObserver: PlaybackObserver, manifest: Manifest | null, lockedStream$: Observable<ILockedStreamEvent>, discontinuityUpdate$: Observable<IDiscontinuityEvent>): Observable<IStalledEvent | IUnstalledEvent | IWarningEvent>;
|
|
@@ -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 { merge as observableMerge, } from "rxjs";
|
|
17
|
-
import { ignoreElements, map, scan, tap, withLatestFrom, } from "rxjs/operators";
|
|
16
|
+
import { ignoreElements, map, merge as observableMerge, scan, tap, withLatestFrom, } from "rxjs";
|
|
18
17
|
import isSeekingApproximate from "../../compat/is_seeking_approximate";
|
|
19
18
|
import config from "../../config";
|
|
20
19
|
import { MediaError } from "../../errors";
|
|
@@ -31,26 +30,22 @@ var EPSILON = 1 / 60;
|
|
|
31
30
|
* Monitor situations where playback is stalled and try to get out of those.
|
|
32
31
|
* Emit "stalled" then "unstalled" respectively when an unavoidable stall is
|
|
33
32
|
* encountered and exited.
|
|
34
|
-
* @param {
|
|
35
|
-
* conditions.
|
|
36
|
-
* @param {HTMLMediaElement} mediaElement - The HTMLMediaElement on which the
|
|
37
|
-
* media is played.
|
|
33
|
+
* @param {object} playbackObserver - emit the current playback conditions.
|
|
38
34
|
* @param {Object} manifest - The Manifest of the currently-played content.
|
|
39
35
|
* @param {Observable} discontinuityUpdate$ - Observable emitting encountered
|
|
40
36
|
* discontinuities for loaded Period and buffer types.
|
|
41
37
|
* @param {Function} setCurrentTime
|
|
42
38
|
* @returns {Observable}
|
|
43
39
|
*/
|
|
44
|
-
export default function StallAvoider(
|
|
40
|
+
export default function StallAvoider(playbackObserver, manifest, lockedStream$, discontinuityUpdate$) {
|
|
45
41
|
var initialDiscontinuitiesStore = [];
|
|
46
42
|
/**
|
|
47
43
|
* Emit every known audio and video buffer discontinuities in chronological
|
|
48
44
|
* order (first ordered by Period's start, then by bufferType in any order.
|
|
49
45
|
*/
|
|
50
|
-
var discontinuitiesStore$ = discontinuityUpdate$.pipe(withLatestFrom(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return updateDiscontinuitiesStore(discontinuitiesStore, evt, tick);
|
|
46
|
+
var discontinuitiesStore$ = discontinuityUpdate$.pipe(withLatestFrom(playbackObserver.observe(true)), scan(function (discontinuitiesStore, _a) {
|
|
47
|
+
var evt = _a[0], observation = _a[1];
|
|
48
|
+
return updateDiscontinuitiesStore(discontinuitiesStore, evt, observation);
|
|
54
49
|
}, initialDiscontinuitiesStore));
|
|
55
50
|
/**
|
|
56
51
|
* On some devices (right now only seen on Tizen), seeking through the
|
|
@@ -82,29 +77,35 @@ export default function StallAvoider(clock$, mediaElement, manifest, discontinui
|
|
|
82
77
|
* If we're rebuffering waiting on data of a "locked stream", seek into the
|
|
83
78
|
* Period handled by that stream to unlock the situation.
|
|
84
79
|
*/
|
|
85
|
-
var unlock$ = lockedStream$.pipe(withLatestFrom(
|
|
80
|
+
var unlock$ = lockedStream$.pipe(withLatestFrom(playbackObserver.observe(true)), tap(function (_a) {
|
|
86
81
|
var _b;
|
|
87
|
-
var lockedStreamEvt = _a[0],
|
|
82
|
+
var lockedStreamEvt = _a[0], observation = _a[1];
|
|
88
83
|
// TODO(PaulB) also skip when the user's wanted speed is set to `0`, as we
|
|
89
84
|
// might not want to seek in that case?
|
|
90
|
-
if (!
|
|
91
|
-
|
|
85
|
+
if (!observation.rebuffering ||
|
|
86
|
+
observation.paused || (lockedStreamEvt.bufferType !== "audio" &&
|
|
92
87
|
lockedStreamEvt.bufferType !== "video")) {
|
|
93
88
|
return;
|
|
94
89
|
}
|
|
95
|
-
var currPos =
|
|
96
|
-
var rebufferingPos = (_b =
|
|
90
|
+
var currPos = observation.position;
|
|
91
|
+
var rebufferingPos = (_b = observation.rebuffering.position) !== null && _b !== void 0 ? _b : currPos;
|
|
97
92
|
var lockedPeriodStart = lockedStreamEvt.period.start;
|
|
98
93
|
if (currPos < lockedPeriodStart &&
|
|
99
94
|
Math.abs(rebufferingPos - lockedPeriodStart) < 1) {
|
|
100
95
|
log.warn("Init: rebuffering because of a future locked stream.\n" +
|
|
101
96
|
"Trying to unlock by seeking to the next Period");
|
|
102
|
-
setCurrentTime(lockedPeriodStart + 0.001);
|
|
97
|
+
playbackObserver.setCurrentTime(lockedPeriodStart + 0.001);
|
|
103
98
|
}
|
|
104
|
-
}),
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
99
|
+
}),
|
|
100
|
+
// NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
|
|
101
|
+
// first type parameter as `any` instead of the perfectly fine `unknown`,
|
|
102
|
+
// leading to linter issues, as it forbids the usage of `any`.
|
|
103
|
+
// This is why we're disabling the eslint rule.
|
|
104
|
+
/* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
|
|
105
|
+
ignoreElements());
|
|
106
|
+
var stall$ = playbackObserver.observe(true).pipe(withLatestFrom(discontinuitiesStore$), map(function (_a) {
|
|
107
|
+
var observation = _a[0], discontinuitiesStore = _a[1];
|
|
108
|
+
var buffered = observation.buffered, position = observation.position, readyState = observation.readyState, rebuffering = observation.rebuffering, freezing = observation.freezing;
|
|
108
109
|
if (freezing !== null) {
|
|
109
110
|
var now = performance.now();
|
|
110
111
|
var referenceTimestamp = prevFreezingState === null ?
|
|
@@ -112,7 +113,7 @@ export default function StallAvoider(clock$, mediaElement, manifest, discontinui
|
|
|
112
113
|
prevFreezingState.attemptTimestamp;
|
|
113
114
|
if (now - referenceTimestamp > UNFREEZING_SEEK_DELAY) {
|
|
114
115
|
log.warn("Init: trying to seek to un-freeze player");
|
|
115
|
-
setCurrentTime(
|
|
116
|
+
playbackObserver.setCurrentTime(playbackObserver.getCurrentTime() + UNFREEZING_DELTA_POSITION);
|
|
116
117
|
prevFreezingState = { attemptTimestamp: now };
|
|
117
118
|
}
|
|
118
119
|
if (now - freezing.timestamp > FREEZING_STALLED_DELAY) {
|
|
@@ -125,16 +126,29 @@ export default function StallAvoider(clock$, mediaElement, manifest, discontinui
|
|
|
125
126
|
}
|
|
126
127
|
if (rebuffering === null) {
|
|
127
128
|
if (readyState === 1) {
|
|
128
|
-
// With a readyState set to 1, we should still be
|
|
129
|
-
//
|
|
129
|
+
// With a readyState set to 1, we should still not be able to play:
|
|
130
|
+
// Return that we're stalled
|
|
131
|
+
var reason = void 0;
|
|
132
|
+
if (observation.seeking) {
|
|
133
|
+
reason = observation.internalSeeking ? "internal-seek" :
|
|
134
|
+
"seeking";
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
reason = "not-ready";
|
|
138
|
+
}
|
|
130
139
|
return { type: "stalled",
|
|
131
|
-
value:
|
|
140
|
+
value: reason };
|
|
132
141
|
}
|
|
133
142
|
return { type: "unstalled",
|
|
134
143
|
value: null };
|
|
135
144
|
}
|
|
136
|
-
|
|
137
|
-
|
|
145
|
+
// We want to separate a stall situation when a seek is due to a seek done
|
|
146
|
+
// internally by the player to when its due to a regular user seek.
|
|
147
|
+
var stalledReason = rebuffering.reason === "seeking" &&
|
|
148
|
+
observation.internalSeeking ? "internal-seek" :
|
|
149
|
+
rebuffering.reason;
|
|
150
|
+
if (observation.seeking) {
|
|
151
|
+
lastSeekingPosition = observation.position;
|
|
138
152
|
}
|
|
139
153
|
else if (lastSeekingPosition !== null) {
|
|
140
154
|
var now = performance.now();
|
|
@@ -142,17 +156,17 @@ export default function StallAvoider(clock$, mediaElement, manifest, discontinui
|
|
|
142
156
|
ignoredStallTimeStamp = now;
|
|
143
157
|
}
|
|
144
158
|
if (isSeekingApproximate &&
|
|
145
|
-
|
|
159
|
+
observation.position < lastSeekingPosition &&
|
|
146
160
|
now - ignoredStallTimeStamp < FORCE_DISCONTINUITY_SEEK_DELAY) {
|
|
147
161
|
return { type: "stalled",
|
|
148
|
-
value:
|
|
162
|
+
value: stalledReason };
|
|
149
163
|
}
|
|
150
164
|
lastSeekingPosition = null;
|
|
151
165
|
}
|
|
152
166
|
ignoredStallTimeStamp = null;
|
|
153
167
|
if (manifest === null) {
|
|
154
168
|
return { type: "stalled",
|
|
155
|
-
value:
|
|
169
|
+
value: stalledReason };
|
|
156
170
|
}
|
|
157
171
|
/** Position at which data is awaited. */
|
|
158
172
|
var stalledPosition = rebuffering.position;
|
|
@@ -160,12 +174,12 @@ export default function StallAvoider(clock$, mediaElement, manifest, discontinui
|
|
|
160
174
|
var skippableDiscontinuity = findSeekableDiscontinuity(discontinuitiesStore, manifest, stalledPosition);
|
|
161
175
|
if (skippableDiscontinuity !== null) {
|
|
162
176
|
var realSeekTime = skippableDiscontinuity + 0.001;
|
|
163
|
-
if (realSeekTime <=
|
|
164
|
-
log.info("Init: position to seek already reached, no seeking",
|
|
177
|
+
if (realSeekTime <= playbackObserver.getCurrentTime()) {
|
|
178
|
+
log.info("Init: position to seek already reached, no seeking", playbackObserver.getCurrentTime(), realSeekTime);
|
|
165
179
|
}
|
|
166
180
|
else {
|
|
167
181
|
log.warn("SA: skippable discontinuity found in the stream", position, realSeekTime);
|
|
168
|
-
setCurrentTime(realSeekTime);
|
|
182
|
+
playbackObserver.setCurrentTime(realSeekTime);
|
|
169
183
|
return EVENTS.warning(generateDiscontinuityError(stalledPosition, realSeekTime));
|
|
170
184
|
}
|
|
171
185
|
}
|
|
@@ -181,9 +195,9 @@ export default function StallAvoider(clock$, mediaElement, manifest, discontinui
|
|
|
181
195
|
var nextBufferRangeGap = getNextRangeGap(buffered, freezePosition);
|
|
182
196
|
if (nextBufferRangeGap < BUFFER_DISCONTINUITY_THRESHOLD) {
|
|
183
197
|
var seekTo = (freezePosition + nextBufferRangeGap + EPSILON);
|
|
184
|
-
if (
|
|
198
|
+
if (playbackObserver.getCurrentTime() < seekTo) {
|
|
185
199
|
log.warn("Init: discontinuity encountered inferior to the threshold", freezePosition, seekTo, BUFFER_DISCONTINUITY_THRESHOLD);
|
|
186
|
-
setCurrentTime(seekTo);
|
|
200
|
+
playbackObserver.setCurrentTime(seekTo);
|
|
187
201
|
return EVENTS.warning(generateDiscontinuityError(freezePosition, seekTo));
|
|
188
202
|
}
|
|
189
203
|
}
|
|
@@ -193,16 +207,16 @@ export default function StallAvoider(clock$, mediaElement, manifest, discontinui
|
|
|
193
207
|
var period = manifest.periods[i];
|
|
194
208
|
if (period.end !== undefined && period.end <= freezePosition) {
|
|
195
209
|
if (manifest.periods[i + 1].start > freezePosition &&
|
|
196
|
-
manifest.periods[i + 1].start >
|
|
210
|
+
manifest.periods[i + 1].start > playbackObserver.getCurrentTime()) {
|
|
197
211
|
var nextPeriod = manifest.periods[i + 1];
|
|
198
|
-
setCurrentTime(nextPeriod.start);
|
|
212
|
+
playbackObserver.setCurrentTime(nextPeriod.start);
|
|
199
213
|
return EVENTS.warning(generateDiscontinuityError(freezePosition, nextPeriod.start));
|
|
200
214
|
}
|
|
201
215
|
break;
|
|
202
216
|
}
|
|
203
217
|
}
|
|
204
218
|
return { type: "stalled",
|
|
205
|
-
value:
|
|
219
|
+
value: stalledReason };
|
|
206
220
|
}));
|
|
207
221
|
return observableMerge(unlock$, stall$);
|
|
208
222
|
}
|
|
@@ -272,14 +286,14 @@ function eventContainsDiscontinuity(evt) {
|
|
|
272
286
|
* store it in Period's chronological order in the Array.
|
|
273
287
|
* @param {Array.<Object>} discontinuitiesStore
|
|
274
288
|
* @param {Object} evt
|
|
275
|
-
* @param {Object}
|
|
289
|
+
* @param {Object} observation
|
|
276
290
|
* @returns {Array.<Object>}
|
|
277
291
|
*/
|
|
278
|
-
function updateDiscontinuitiesStore(discontinuitiesStore, evt,
|
|
292
|
+
function updateDiscontinuitiesStore(discontinuitiesStore, evt, observation) {
|
|
279
293
|
// First, perform clean-up of old discontinuities
|
|
280
294
|
while (discontinuitiesStore.length > 0 &&
|
|
281
295
|
discontinuitiesStore[0].period.end !== undefined &&
|
|
282
|
-
discontinuitiesStore[0].period.end + 10 <
|
|
296
|
+
discontinuitiesStore[0].period.end + 10 < observation.position) {
|
|
283
297
|
discontinuitiesStore.shift();
|
|
284
298
|
}
|
|
285
299
|
var period = evt.period, bufferType = evt.bufferType;
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { Observable } from "rxjs";
|
|
17
17
|
import Manifest from "../../../manifest";
|
|
18
|
-
import {
|
|
18
|
+
import { IPlaybackObservation } from "../../api";
|
|
19
19
|
import { IStreamEvent } from "./types";
|
|
20
20
|
/**
|
|
21
21
|
* Get events from manifest and emit each time an event has to be emitted
|
|
@@ -23,5 +23,5 @@ import { IStreamEvent } from "./types";
|
|
|
23
23
|
* @param {HTMLMediaElement} mediaElement
|
|
24
24
|
* @returns {Observable}
|
|
25
25
|
*/
|
|
26
|
-
declare function streamEventsEmitter(manifest: Manifest, mediaElement: HTMLMediaElement,
|
|
26
|
+
declare function streamEventsEmitter(manifest: Manifest, mediaElement: HTMLMediaElement, observation$: Observable<IPlaybackObservation>): Observable<IStreamEvent>;
|
|
27
27
|
export default streamEventsEmitter;
|
|
@@ -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 { combineLatest as observableCombineLatest, concat as observableConcat, EMPTY, interval, of as observableOf, } from "rxjs";
|
|
17
|
-
import { distinctUntilChanged, ignoreElements, map, mergeMap, pairwise, scan, startWith, switchMap, tap, } from "rxjs/operators";
|
|
16
|
+
import { combineLatest as observableCombineLatest, concat as observableConcat, distinctUntilChanged, EMPTY, ignoreElements, interval, map, mergeMap, pairwise, scan, startWith, switchMap, tap, of as observableOf, } from "rxjs";
|
|
18
17
|
import config from "../../../config";
|
|
19
18
|
import { fromEvent } from "../../../utils/event_emitter";
|
|
20
19
|
import refreshScheduledEventsList from "./refresh_scheduled_events_list";
|
|
@@ -33,23 +32,23 @@ function isFiniteStreamEvent(evt) {
|
|
|
33
32
|
* @param {HTMLMediaElement} mediaElement
|
|
34
33
|
* @returns {Observable}
|
|
35
34
|
*/
|
|
36
|
-
function streamEventsEmitter(manifest, mediaElement,
|
|
35
|
+
function streamEventsEmitter(manifest, mediaElement, observation$) {
|
|
37
36
|
var eventsBeingPlayed = new WeakMap();
|
|
38
37
|
var lastScheduledEvents = [];
|
|
39
38
|
var scheduledEvents$ = fromEvent(manifest, "manifestUpdate").pipe(startWith(null), scan(function (oldScheduledEvents) {
|
|
40
39
|
return refreshScheduledEventsList(oldScheduledEvents, manifest);
|
|
41
40
|
}, []));
|
|
42
41
|
/**
|
|
43
|
-
* Examine playback situation from
|
|
42
|
+
* Examine playback situation from playback observations to emit stream events and
|
|
44
43
|
* prepare set onExit callbacks if needed.
|
|
45
44
|
* @param {Array.<Object>} scheduledEvents
|
|
46
|
-
* @param {Object}
|
|
47
|
-
* @param {Object}
|
|
45
|
+
* @param {Object} oldObservation
|
|
46
|
+
* @param {Object} newObservation
|
|
48
47
|
* @returns {Observable}
|
|
49
48
|
*/
|
|
50
|
-
function emitStreamEvents$(scheduledEvents,
|
|
51
|
-
var previousTime =
|
|
52
|
-
var isSeeking =
|
|
49
|
+
function emitStreamEvents$(scheduledEvents, oldObservation, newObservation) {
|
|
50
|
+
var previousTime = oldObservation.currentTime;
|
|
51
|
+
var isSeeking = newObservation.isSeeking, currentTime = newObservation.currentTime;
|
|
53
52
|
var eventsToSend = [];
|
|
54
53
|
var eventsToExit = [];
|
|
55
54
|
for (var i = 0; i < scheduledEvents.length; i++) {
|
|
@@ -94,7 +93,13 @@ function streamEventsEmitter(manifest, mediaElement, clock$) {
|
|
|
94
93
|
if (typeof evt.onExit === "function") {
|
|
95
94
|
evt.onExit();
|
|
96
95
|
}
|
|
97
|
-
}),
|
|
96
|
+
}),
|
|
97
|
+
// NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
|
|
98
|
+
// first type parameter as `any` instead of the perfectly fine `unknown`,
|
|
99
|
+
// leading to linter issues, as it forbids the usage of `any`.
|
|
100
|
+
// This is why we're disabling the eslint rule.
|
|
101
|
+
/* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
|
|
102
|
+
ignoreElements()) : EMPTY);
|
|
98
103
|
}
|
|
99
104
|
/**
|
|
100
105
|
* This pipe allows to control wether the polling should occur, if there
|
|
@@ -106,15 +111,15 @@ function streamEventsEmitter(manifest, mediaElement, clock$) {
|
|
|
106
111
|
}
|
|
107
112
|
return observableCombineLatest([
|
|
108
113
|
interval(STREAM_EVENT_EMITTER_POLL_INTERVAL).pipe(startWith(null)),
|
|
109
|
-
|
|
114
|
+
observation$,
|
|
110
115
|
]).pipe(map(function (_a) {
|
|
111
|
-
var _ = _a[0],
|
|
112
|
-
var seeking =
|
|
116
|
+
var _ = _a[0], observation = _a[1];
|
|
117
|
+
var seeking = observation.seeking;
|
|
113
118
|
return { isSeeking: seeking,
|
|
114
119
|
currentTime: mediaElement.currentTime };
|
|
115
120
|
}), pairwise(), mergeMap(function (_a) {
|
|
116
|
-
var
|
|
117
|
-
return emitStreamEvents$(lastScheduledEvents,
|
|
121
|
+
var oldObservation = _a[0], newObservation = _a[1];
|
|
122
|
+
return emitStreamEvents$(lastScheduledEvents, oldObservation, newObservation);
|
|
118
123
|
}));
|
|
119
124
|
}));
|
|
120
125
|
}
|
|
@@ -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 { fromEvent as observableFromEvent, } from "rxjs";
|
|
17
|
-
import { mergeMap } from "rxjs/operators";
|
|
16
|
+
import { fromEvent as observableFromEvent, mergeMap, } from "rxjs";
|
|
18
17
|
import { MediaError } from "../../errors";
|
|
19
18
|
/**
|
|
20
19
|
* Returns an observable which throws the right MediaError as soon an "error"
|
|
@@ -15,31 +15,11 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { ICustomError } from "../../errors";
|
|
17
17
|
import Manifest, { Adaptation, Period, Representation } from "../../manifest";
|
|
18
|
-
import { IClockMediaEventType, IFreezingStatus, IRebufferingStatus } from "../api";
|
|
19
18
|
import { IAttachedMediaKeysEvent, IBlacklistProtectionDataEvent, ICreatedMediaKeysEvent, IEncryptedEvent, IInitDataIgnoredEvent, IKeysUpdateEvent, INoUpdateEvent, ISessionMessageEvent, ISessionUpdatedEvent } from "../eme";
|
|
20
19
|
import SegmentBuffersStore from "../segment_buffers";
|
|
21
20
|
import { IActivePeriodChangedEvent, IAdaptationChangeEvent, IBitrateEstimationChangeEvent, ICompletedStreamEvent, IEncryptionDataEncounteredEvent, IInbandEventsEvent, INeedsBufferFlushEvent, INeedsDecipherabilityFlush, INeedsMediaSourceReload, IPeriodStreamClearedEvent, IPeriodStreamReadyEvent, IRepresentationChangeEvent, IStreamEventAddedSegment, IStreamManifestMightBeOutOfSync, IStreamNeedsManifestRefresh } from "../stream";
|
|
22
21
|
import { IEMEDisabledEvent } from "./create_eme_manager";
|
|
23
22
|
import { IStreamEventEvent, IStreamEventSkipEvent } from "./stream_events_emitter";
|
|
24
|
-
/** Object awaited by the `Init` on each clock tick. */
|
|
25
|
-
export interface IInitClockTick {
|
|
26
|
-
position: number;
|
|
27
|
-
getCurrentTime: () => number;
|
|
28
|
-
buffered: TimeRanges;
|
|
29
|
-
duration: number;
|
|
30
|
-
bufferGap: number;
|
|
31
|
-
event: IClockMediaEventType;
|
|
32
|
-
playbackRate: number;
|
|
33
|
-
currentRange: {
|
|
34
|
-
start: number;
|
|
35
|
-
end: number;
|
|
36
|
-
} | null;
|
|
37
|
-
readyState: number;
|
|
38
|
-
paused: boolean;
|
|
39
|
-
rebuffering: IRebufferingStatus | null;
|
|
40
|
-
freezing: IFreezingStatus | null;
|
|
41
|
-
seeking: boolean;
|
|
42
|
-
}
|
|
43
23
|
/** Event sent after the Manifest has been loaded and parsed for the first time. */
|
|
44
24
|
export interface IManifestReadyEvent {
|
|
45
25
|
type: "manifestReady";
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import { Observable } from "rxjs";
|
|
17
|
-
import {
|
|
17
|
+
import { IReadOnlySharedReference } from "../../utils/reference";
|
|
18
|
+
import { IPlaybackObservation } from "../api";
|
|
18
19
|
export interface IPlaybackRateOptions {
|
|
19
20
|
pauseWhenRebuffering?: boolean;
|
|
20
21
|
}
|
|
@@ -24,8 +25,8 @@ export interface IPlaybackRateOptions {
|
|
|
24
25
|
* rebuffering and restore the speed once it appears to exit rebuffering status.
|
|
25
26
|
*
|
|
26
27
|
* @param {HTMLMediaElement} mediaElement
|
|
27
|
-
* @param {Observable} speed
|
|
28
|
-
* @param {Observable}
|
|
28
|
+
* @param {Observable} speed - last speed set by the user
|
|
29
|
+
* @param {Observable} observation$ - Current playback conditions
|
|
29
30
|
* @returns {Observable}
|
|
30
31
|
*/
|
|
31
|
-
export default function updatePlaybackRate(mediaElement: HTMLMediaElement, speed
|
|
32
|
+
export default function updatePlaybackRate(mediaElement: HTMLMediaElement, speed: IReadOnlySharedReference<number>, observation$: Observable<IPlaybackObservation>): Observable<number>;
|
|
@@ -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, of as observableOf, } from "rxjs";
|
|
17
|
-
import { distinctUntilChanged, map, startWith, switchMap, tap, } from "rxjs/operators";
|
|
16
|
+
import { defer as observableDefer, distinctUntilChanged, map, of as observableOf, startWith, switchMap, tap, } from "rxjs";
|
|
18
17
|
import log from "../../log";
|
|
19
18
|
/**
|
|
20
19
|
* Manage playback speed.
|
|
@@ -22,13 +21,13 @@ import log from "../../log";
|
|
|
22
21
|
* rebuffering and restore the speed once it appears to exit rebuffering status.
|
|
23
22
|
*
|
|
24
23
|
* @param {HTMLMediaElement} mediaElement
|
|
25
|
-
* @param {Observable} speed
|
|
26
|
-
* @param {Observable}
|
|
24
|
+
* @param {Observable} speed - last speed set by the user
|
|
25
|
+
* @param {Observable} observation$ - Current playback conditions
|
|
27
26
|
* @returns {Observable}
|
|
28
27
|
*/
|
|
29
|
-
export default function updatePlaybackRate(mediaElement, speed
|
|
30
|
-
var forcePause$ =
|
|
31
|
-
.pipe(map(function (
|
|
28
|
+
export default function updatePlaybackRate(mediaElement, speed, observation$) {
|
|
29
|
+
var forcePause$ = observation$
|
|
30
|
+
.pipe(map(function (observation) { return observation.rebuffering !== null; }), startWith(false), distinctUntilChanged());
|
|
32
31
|
return forcePause$
|
|
33
32
|
.pipe(switchMap(function (shouldForcePause) {
|
|
34
33
|
if (shouldForcePause) {
|
|
@@ -38,10 +37,10 @@ export default function updatePlaybackRate(mediaElement, speed$, clock$) {
|
|
|
38
37
|
return observableOf(0);
|
|
39
38
|
});
|
|
40
39
|
}
|
|
41
|
-
return speed
|
|
42
|
-
.pipe(tap(function (
|
|
43
|
-
log.info("Init: Resume playback speed",
|
|
44
|
-
mediaElement.playbackRate =
|
|
40
|
+
return speed.asObservable()
|
|
41
|
+
.pipe(tap(function (lastSpeed) {
|
|
42
|
+
log.info("Init: Resume playback speed", lastSpeed);
|
|
43
|
+
mediaElement.playbackRate = lastSpeed;
|
|
45
44
|
}));
|
|
46
45
|
}));
|
|
47
46
|
}
|
|
@@ -19,7 +19,7 @@ export interface IGarbageCollectorArgument {
|
|
|
19
19
|
/** SegmentBuffer implementation */
|
|
20
20
|
segmentBuffer: SegmentBuffer;
|
|
21
21
|
/** Emit current position in seconds regularly */
|
|
22
|
-
|
|
22
|
+
currentTime$: Observable<number>;
|
|
23
23
|
/** Maximum time to keep behind current time position, in seconds */
|
|
24
24
|
maxBufferBehind$: Observable<number>;
|
|
25
25
|
/** Minimum time to keep behind current time position, in seconds */
|
|
@@ -27,10 +27,10 @@ export interface IGarbageCollectorArgument {
|
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* Perform cleaning of the buffer according to the values set by the user
|
|
30
|
-
*
|
|
31
|
-
* change.
|
|
30
|
+
* each time `currentTime$` emits and each times the
|
|
31
|
+
* maxBufferBehind/maxBufferAhead values change.
|
|
32
32
|
*
|
|
33
33
|
* @param {Object} opt
|
|
34
34
|
* @returns {Observable}
|
|
35
35
|
*/
|
|
36
|
-
export default function BufferGarbageCollector({ segmentBuffer,
|
|
36
|
+
export default function BufferGarbageCollector({ segmentBuffer, currentTime$, maxBufferBehind$, maxBufferAhead$, }: IGarbageCollectorArgument): Observable<never>;
|