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
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2015 CANAL+ Group
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
17
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
18
|
+
if (ar || !(i in from)) {
|
|
19
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
20
|
+
ar[i] = from[i];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
24
|
+
};
|
|
25
|
+
import { defer as observableDefer, fromEvent as observableFromEvent, interval as observableInterval, map, merge as observableMerge, share, shareReplay, skip, startWith, } from "rxjs";
|
|
26
|
+
import config from "../../config";
|
|
27
|
+
import log from "../../log";
|
|
28
|
+
import objectAssign from "../../utils/object_assign";
|
|
29
|
+
import { getRange } from "../../utils/ranges";
|
|
30
|
+
var SAMPLING_INTERVAL_MEDIASOURCE = config.SAMPLING_INTERVAL_MEDIASOURCE, SAMPLING_INTERVAL_LOW_LATENCY = config.SAMPLING_INTERVAL_LOW_LATENCY, SAMPLING_INTERVAL_NO_MEDIASOURCE = config.SAMPLING_INTERVAL_NO_MEDIASOURCE, RESUME_GAP_AFTER_SEEKING = config.RESUME_GAP_AFTER_SEEKING, RESUME_GAP_AFTER_NOT_ENOUGH_DATA = config.RESUME_GAP_AFTER_NOT_ENOUGH_DATA, RESUME_GAP_AFTER_BUFFERING = config.RESUME_GAP_AFTER_BUFFERING, REBUFFERING_GAP = config.REBUFFERING_GAP, MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING = config.MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING;
|
|
31
|
+
/**
|
|
32
|
+
* HTMLMediaElement Events for which playback observations are calculated and
|
|
33
|
+
* emitted.
|
|
34
|
+
* @type {Array.<string>}
|
|
35
|
+
*/
|
|
36
|
+
var SCANNED_MEDIA_ELEMENTS_EVENTS = ["canplay",
|
|
37
|
+
"play",
|
|
38
|
+
"seeking",
|
|
39
|
+
"seeked",
|
|
40
|
+
"loadedmetadata",
|
|
41
|
+
"ratechange"];
|
|
42
|
+
/**
|
|
43
|
+
* Class allowing to "observe" current playback conditions so the RxPlayer is
|
|
44
|
+
* then able to react upon them.
|
|
45
|
+
*
|
|
46
|
+
* This is a central class of the RxPlayer as many modules rely on the
|
|
47
|
+
* `PlaybackObserver` to know the current state of the media being played.
|
|
48
|
+
*
|
|
49
|
+
* You can use the PlaybackObserver to either get the last observation
|
|
50
|
+
* performed, get the current media state or subscribe to an Observable emitting
|
|
51
|
+
* regularly media conditions.
|
|
52
|
+
*
|
|
53
|
+
* @class {PlaybackObserver}
|
|
54
|
+
*/
|
|
55
|
+
var PlaybackObserver = /** @class */ (function () {
|
|
56
|
+
/**
|
|
57
|
+
* @param {HTMLMediaElement} mediaElement
|
|
58
|
+
* @param {Object} options
|
|
59
|
+
*/
|
|
60
|
+
function PlaybackObserver(mediaElement, options) {
|
|
61
|
+
this._internalSeekingEventsIncomingCounter = 0;
|
|
62
|
+
this._mediaElement = mediaElement;
|
|
63
|
+
this._withMediaSource = options.withMediaSource;
|
|
64
|
+
this._lowLatencyMode = options.lowLatencyMode;
|
|
65
|
+
this._lastObservation = null;
|
|
66
|
+
this._observation$ = null;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Returns the current position advertised by the `HTMLMediaElement`, in
|
|
70
|
+
* seconds.
|
|
71
|
+
* @returns {number}
|
|
72
|
+
*/
|
|
73
|
+
PlaybackObserver.prototype.getCurrentTime = function () {
|
|
74
|
+
return this._mediaElement.currentTime;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Update the current position (seek) on the `HTMLMediaElement`, by giving a
|
|
78
|
+
* new position in seconds.
|
|
79
|
+
*
|
|
80
|
+
* Note that seeks performed through this method are caracherized as
|
|
81
|
+
* "internal" seeks. They don't result into the exact same playback
|
|
82
|
+
* observation than regular seeks (which most likely comes from the outside,
|
|
83
|
+
* e.g. the user).
|
|
84
|
+
* @param {number}
|
|
85
|
+
*/
|
|
86
|
+
PlaybackObserver.prototype.setCurrentTime = function (time) {
|
|
87
|
+
this._internalSeekingEventsIncomingCounter += 1;
|
|
88
|
+
this._mediaElement.currentTime = time;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Returns the current `readyState` advertised by the `HTMLMediaElement`.
|
|
92
|
+
* @returns {number}
|
|
93
|
+
*/
|
|
94
|
+
PlaybackObserver.prototype.getReadyState = function () {
|
|
95
|
+
return this._mediaElement.readyState;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Returns an Observable regularly emitting playback observation, optionally
|
|
99
|
+
* starting with the last one.
|
|
100
|
+
*
|
|
101
|
+
* Note that this Observable is shared and unique, so that multiple `observe`
|
|
102
|
+
* call will return the exact same Observable and multiple concurrent
|
|
103
|
+
* `subscribe` will receive the same events at the same time.
|
|
104
|
+
* This was done for performance and simplicity reasons.
|
|
105
|
+
*
|
|
106
|
+
* @param {boolean} includeLastObservation
|
|
107
|
+
* @returns {Observable}
|
|
108
|
+
*/
|
|
109
|
+
PlaybackObserver.prototype.observe = function (includeLastObservation) {
|
|
110
|
+
var _this = this;
|
|
111
|
+
return observableDefer(function () {
|
|
112
|
+
if (_this._observation$ === null || _this._lastObservation === null) {
|
|
113
|
+
_this._lastObservation = _this._generateInitialObservation();
|
|
114
|
+
_this._observation$ = _this._createInnerObservable().pipe(share());
|
|
115
|
+
return _this.observe(includeLastObservation);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
return includeLastObservation ?
|
|
119
|
+
_this._observation$.pipe(startWith(_this._lastObservation)) :
|
|
120
|
+
_this._observation$;
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Generate a new playback observer which can listen to other
|
|
126
|
+
* properties and which can only be accessed to read observations (e.g.
|
|
127
|
+
* it cannot ask to perform a seek).
|
|
128
|
+
*
|
|
129
|
+
* The object returned will respect the `IReadOnlyPlaybackObserver` interface
|
|
130
|
+
* and will inherit this `PlaybackObserver`'s lifecycle: it will emit when
|
|
131
|
+
* the latter emits.
|
|
132
|
+
*
|
|
133
|
+
* As argument, this method takes a function which will allow to produce
|
|
134
|
+
* the new set of properties to be present on each observation.
|
|
135
|
+
* @param {Function} mapObservable
|
|
136
|
+
* @returns {Object}
|
|
137
|
+
*/
|
|
138
|
+
PlaybackObserver.prototype.deriveReadOnlyObserver = function (mapObservable) {
|
|
139
|
+
return generateReadOnlyObserver(this, mapObservable);
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* Creates the observable that will generate playback observations.
|
|
143
|
+
* @returns {Observable}
|
|
144
|
+
*/
|
|
145
|
+
PlaybackObserver.prototype._createInnerObservable = function () {
|
|
146
|
+
var _this = this;
|
|
147
|
+
return observableDefer(function () {
|
|
148
|
+
var getCurrentObservation = function (event) {
|
|
149
|
+
var _a;
|
|
150
|
+
var tmpEvt = event;
|
|
151
|
+
if (tmpEvt === "seeking" && _this._internalSeekingEventsIncomingCounter > 0) {
|
|
152
|
+
tmpEvt = "internal-seeking";
|
|
153
|
+
_this._internalSeekingEventsIncomingCounter -= 1;
|
|
154
|
+
}
|
|
155
|
+
var lastObservation = (_a = _this._lastObservation) !== null && _a !== void 0 ? _a : _this._generateInitialObservation();
|
|
156
|
+
var mediaTimings = getMediaInfos(_this._mediaElement, tmpEvt);
|
|
157
|
+
var internalSeeking = mediaTimings.seeking &&
|
|
158
|
+
// We've just received the event for internally seeking
|
|
159
|
+
(tmpEvt === "internal-seeking" ||
|
|
160
|
+
// or We're still waiting on the previous internal-seek
|
|
161
|
+
(lastObservation.internalSeeking && tmpEvt !== "seeking"));
|
|
162
|
+
var rebufferingStatus = getRebufferingStatus(lastObservation, mediaTimings, { lowLatencyMode: _this._lowLatencyMode,
|
|
163
|
+
withMediaSource: _this._withMediaSource });
|
|
164
|
+
var freezingStatus = getFreezingStatus(lastObservation, mediaTimings);
|
|
165
|
+
var timings = objectAssign({}, { rebuffering: rebufferingStatus,
|
|
166
|
+
freezing: freezingStatus, internalSeeking: internalSeeking }, mediaTimings);
|
|
167
|
+
log.debug("API: current media element state", timings);
|
|
168
|
+
return timings;
|
|
169
|
+
};
|
|
170
|
+
var eventObs = SCANNED_MEDIA_ELEMENTS_EVENTS.map(function (eventName) {
|
|
171
|
+
return observableFromEvent(_this._mediaElement, eventName)
|
|
172
|
+
.pipe(map(function () { return eventName; }));
|
|
173
|
+
});
|
|
174
|
+
var interval = _this._lowLatencyMode ? SAMPLING_INTERVAL_LOW_LATENCY :
|
|
175
|
+
_this._withMediaSource ? SAMPLING_INTERVAL_MEDIASOURCE :
|
|
176
|
+
SAMPLING_INTERVAL_NO_MEDIASOURCE;
|
|
177
|
+
var interval$ = observableInterval(interval)
|
|
178
|
+
.pipe(map(function () { return "timeupdate"; }));
|
|
179
|
+
return observableMerge.apply(void 0, __spreadArray([interval$], eventObs, false)).pipe(map(function (event) {
|
|
180
|
+
var newObservation = getCurrentObservation(event);
|
|
181
|
+
if (log.getLevel() === "DEBUG") {
|
|
182
|
+
log.debug("API: current playback timeline:\n" +
|
|
183
|
+
prettyPrintBuffered(newObservation.buffered, newObservation.position), "\n".concat(event));
|
|
184
|
+
}
|
|
185
|
+
_this._lastObservation = newObservation;
|
|
186
|
+
return newObservation;
|
|
187
|
+
}));
|
|
188
|
+
});
|
|
189
|
+
};
|
|
190
|
+
PlaybackObserver.prototype._generateInitialObservation = function () {
|
|
191
|
+
return objectAssign(getMediaInfos(this._mediaElement, "init"), { rebuffering: null,
|
|
192
|
+
freezing: null,
|
|
193
|
+
internalSeeking: false });
|
|
194
|
+
};
|
|
195
|
+
return PlaybackObserver;
|
|
196
|
+
}());
|
|
197
|
+
export default PlaybackObserver;
|
|
198
|
+
/**
|
|
199
|
+
* Returns the amount of time in seconds the buffer should have ahead of the
|
|
200
|
+
* current position before resuming playback. Based on the infos of the
|
|
201
|
+
* rebuffering status.
|
|
202
|
+
*
|
|
203
|
+
* Waiting time differs between a rebuffering happening after a "seek" or one
|
|
204
|
+
* happening after a buffer starvation occured.
|
|
205
|
+
* @param {Object|null} rebufferingStatus
|
|
206
|
+
* @param {Boolean} lowLatencyMode
|
|
207
|
+
* @returns {Number}
|
|
208
|
+
*/
|
|
209
|
+
function getRebufferingEndGap(rebufferingStatus, lowLatencyMode) {
|
|
210
|
+
if (rebufferingStatus === null) {
|
|
211
|
+
return 0;
|
|
212
|
+
}
|
|
213
|
+
var suffix = lowLatencyMode ? "LOW_LATENCY" :
|
|
214
|
+
"DEFAULT";
|
|
215
|
+
switch (rebufferingStatus.reason) {
|
|
216
|
+
case "seeking":
|
|
217
|
+
return RESUME_GAP_AFTER_SEEKING[suffix];
|
|
218
|
+
case "not-ready":
|
|
219
|
+
return RESUME_GAP_AFTER_NOT_ENOUGH_DATA[suffix];
|
|
220
|
+
case "buffering":
|
|
221
|
+
return RESUME_GAP_AFTER_BUFFERING[suffix];
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* @param {Object} currentRange
|
|
226
|
+
* @param {Number} duration
|
|
227
|
+
* @param {Boolean} lowLatencyMode
|
|
228
|
+
* @returns {Boolean}
|
|
229
|
+
*/
|
|
230
|
+
function hasLoadedUntilTheEnd(currentRange, duration, lowLatencyMode) {
|
|
231
|
+
var suffix = lowLatencyMode ? "LOW_LATENCY" :
|
|
232
|
+
"DEFAULT";
|
|
233
|
+
return currentRange !== null &&
|
|
234
|
+
(duration - currentRange.end) <= REBUFFERING_GAP[suffix];
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Get basic playback information.
|
|
238
|
+
* @param {HTMLMediaElement} mediaElement
|
|
239
|
+
* @param {string} event
|
|
240
|
+
* @returns {Object}
|
|
241
|
+
*/
|
|
242
|
+
function getMediaInfos(mediaElement, event) {
|
|
243
|
+
var buffered = mediaElement.buffered, currentTime = mediaElement.currentTime, duration = mediaElement.duration, ended = mediaElement.ended, paused = mediaElement.paused, playbackRate = mediaElement.playbackRate, readyState = mediaElement.readyState, seeking = mediaElement.seeking;
|
|
244
|
+
var currentRange = getRange(buffered, currentTime);
|
|
245
|
+
return { bufferGap: currentRange !== null ? currentRange.end - currentTime :
|
|
246
|
+
// TODO null/0 would probably be
|
|
247
|
+
// more appropriate
|
|
248
|
+
Infinity, buffered: buffered, currentRange: currentRange, position: currentTime, duration: duration, ended: ended, paused: paused, playbackRate: playbackRate, readyState: readyState, seeking: seeking, event: event };
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Infer rebuffering status of the media based on:
|
|
252
|
+
* - the return of the function getMediaInfos
|
|
253
|
+
* - the previous observation object.
|
|
254
|
+
*
|
|
255
|
+
* @param {Object} prevObservation - Previous playback observation object.
|
|
256
|
+
* @param {Object} currentInfo - Current set of basic information on the
|
|
257
|
+
* `HTMLMediaElement`. This does not need every single property from a regular
|
|
258
|
+
* playback observation.
|
|
259
|
+
* @param {Object} options
|
|
260
|
+
* @returns {Object|null}
|
|
261
|
+
*/
|
|
262
|
+
function getRebufferingStatus(prevObservation, currentInfo, _a) {
|
|
263
|
+
var withMediaSource = _a.withMediaSource, lowLatencyMode = _a.lowLatencyMode;
|
|
264
|
+
var currentEvt = currentInfo.event, currentTime = currentInfo.position, bufferGap = currentInfo.bufferGap, currentRange = currentInfo.currentRange, duration = currentInfo.duration, paused = currentInfo.paused, readyState = currentInfo.readyState, ended = currentInfo.ended;
|
|
265
|
+
var prevRebuffering = prevObservation.rebuffering, prevEvt = prevObservation.event, prevTime = prevObservation.position;
|
|
266
|
+
var fullyLoaded = hasLoadedUntilTheEnd(currentRange, duration, lowLatencyMode);
|
|
267
|
+
var canSwitchToRebuffering = (readyState >= 1 &&
|
|
268
|
+
currentEvt !== "loadedmetadata" &&
|
|
269
|
+
prevRebuffering === null &&
|
|
270
|
+
!(fullyLoaded || ended));
|
|
271
|
+
var rebufferEndPosition = null;
|
|
272
|
+
var shouldRebuffer;
|
|
273
|
+
var shouldStopRebuffer;
|
|
274
|
+
var rebufferGap = lowLatencyMode ? REBUFFERING_GAP.LOW_LATENCY :
|
|
275
|
+
REBUFFERING_GAP.DEFAULT;
|
|
276
|
+
if (withMediaSource) {
|
|
277
|
+
if (canSwitchToRebuffering) {
|
|
278
|
+
if (bufferGap <= rebufferGap) {
|
|
279
|
+
shouldRebuffer = true;
|
|
280
|
+
rebufferEndPosition = currentTime + bufferGap;
|
|
281
|
+
}
|
|
282
|
+
else if (bufferGap === Infinity) {
|
|
283
|
+
shouldRebuffer = true;
|
|
284
|
+
rebufferEndPosition = currentTime;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
else if (prevRebuffering !== null) {
|
|
288
|
+
var resumeGap = getRebufferingEndGap(prevRebuffering, lowLatencyMode);
|
|
289
|
+
if (shouldRebuffer !== true && prevRebuffering !== null && readyState > 1 &&
|
|
290
|
+
(fullyLoaded || ended || (bufferGap < Infinity && bufferGap > resumeGap))) {
|
|
291
|
+
shouldStopRebuffer = true;
|
|
292
|
+
}
|
|
293
|
+
else if (bufferGap === Infinity || bufferGap <= resumeGap) {
|
|
294
|
+
rebufferEndPosition = bufferGap === Infinity ? currentTime :
|
|
295
|
+
currentTime + bufferGap;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// when using a direct file, the media will stall and unstall on its
|
|
300
|
+
// own, so we only try to detect when the media timestamp has not changed
|
|
301
|
+
// between two consecutive timeupdates
|
|
302
|
+
else {
|
|
303
|
+
if (canSwitchToRebuffering &&
|
|
304
|
+
(!paused && currentEvt === "timeupdate" &&
|
|
305
|
+
prevEvt === "timeupdate" && currentTime === prevTime ||
|
|
306
|
+
currentEvt === "seeking" && bufferGap === Infinity)) {
|
|
307
|
+
shouldRebuffer = true;
|
|
308
|
+
}
|
|
309
|
+
else if (prevRebuffering !== null &&
|
|
310
|
+
(currentEvt !== "seeking" && currentTime !== prevTime ||
|
|
311
|
+
currentEvt === "canplay" ||
|
|
312
|
+
bufferGap < Infinity &&
|
|
313
|
+
(bufferGap > getRebufferingEndGap(prevRebuffering, lowLatencyMode) ||
|
|
314
|
+
fullyLoaded || ended))) {
|
|
315
|
+
shouldStopRebuffer = true;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
if (shouldStopRebuffer === true) {
|
|
319
|
+
return null;
|
|
320
|
+
}
|
|
321
|
+
else if (shouldRebuffer === true || prevRebuffering !== null) {
|
|
322
|
+
var reason = void 0;
|
|
323
|
+
if (currentEvt === "seeking" ||
|
|
324
|
+
prevRebuffering !== null && prevRebuffering.reason === "seeking") {
|
|
325
|
+
reason = "seeking";
|
|
326
|
+
}
|
|
327
|
+
else if (currentInfo.seeking) {
|
|
328
|
+
reason = "seeking";
|
|
329
|
+
}
|
|
330
|
+
else if (readyState === 1) {
|
|
331
|
+
reason = "not-ready";
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
reason = "buffering";
|
|
335
|
+
}
|
|
336
|
+
if (prevRebuffering !== null && prevRebuffering.reason === reason) {
|
|
337
|
+
return { reason: prevRebuffering.reason,
|
|
338
|
+
timestamp: prevRebuffering.timestamp,
|
|
339
|
+
position: rebufferEndPosition };
|
|
340
|
+
}
|
|
341
|
+
return { reason: reason, timestamp: performance.now(),
|
|
342
|
+
position: rebufferEndPosition };
|
|
343
|
+
}
|
|
344
|
+
return null;
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Detect if the current media can be considered as "freezing" (i.e. not
|
|
348
|
+
* advancing for unknown reasons).
|
|
349
|
+
*
|
|
350
|
+
* Returns a corresponding `IFreezingStatus` object if that's the case and
|
|
351
|
+
* `null` if not.
|
|
352
|
+
* @param {Object} prevObservation
|
|
353
|
+
* @param {Object} currentInfo
|
|
354
|
+
* @returns {Object|null}
|
|
355
|
+
*/
|
|
356
|
+
function getFreezingStatus(prevObservation, currentInfo) {
|
|
357
|
+
if (prevObservation.freezing) {
|
|
358
|
+
if (currentInfo.ended ||
|
|
359
|
+
currentInfo.paused ||
|
|
360
|
+
currentInfo.readyState === 0 ||
|
|
361
|
+
currentInfo.playbackRate === 0 ||
|
|
362
|
+
prevObservation.position !== currentInfo.position) {
|
|
363
|
+
return null; // Quit freezing status
|
|
364
|
+
}
|
|
365
|
+
return prevObservation.freezing; // Stay in it
|
|
366
|
+
}
|
|
367
|
+
return currentInfo.event === "timeupdate" &&
|
|
368
|
+
currentInfo.bufferGap > MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING &&
|
|
369
|
+
!currentInfo.ended &&
|
|
370
|
+
!currentInfo.paused &&
|
|
371
|
+
currentInfo.readyState >= 1 &&
|
|
372
|
+
currentInfo.playbackRate !== 0 &&
|
|
373
|
+
currentInfo.position === prevObservation.position ?
|
|
374
|
+
{ timestamp: performance.now() } :
|
|
375
|
+
null;
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Pretty print a TimeRanges Object, to see the current content of it in a
|
|
379
|
+
* one-liner string.
|
|
380
|
+
*
|
|
381
|
+
* @example
|
|
382
|
+
* This function is called by giving it directly the TimeRanges, such as:
|
|
383
|
+
* ```js
|
|
384
|
+
* prettyPrintBuffered(document.getElementsByTagName("video")[0].buffered);
|
|
385
|
+
* ```
|
|
386
|
+
*
|
|
387
|
+
* Let's consider this possible return:
|
|
388
|
+
*
|
|
389
|
+
* ```
|
|
390
|
+
* 0.00|==29.95==|29.95 ~30.05~ 60.00|==29.86==|89.86
|
|
391
|
+
* ^14
|
|
392
|
+
* ```
|
|
393
|
+
* This means that our video element has 29.95 seconds of buffer between 0 and
|
|
394
|
+
* 29.95 seconds.
|
|
395
|
+
* Then 30.05 seconds where no buffer is found.
|
|
396
|
+
* Then 29.86 seconds of buffer between 60.00 and 89.86 seconds.
|
|
397
|
+
*
|
|
398
|
+
* A caret on the second line indicates the current time we're at.
|
|
399
|
+
* The number coming after it is the current time.
|
|
400
|
+
* @param {TimeRanges} buffered
|
|
401
|
+
* @param {number} currentTime
|
|
402
|
+
* @returns {string}
|
|
403
|
+
*/
|
|
404
|
+
function prettyPrintBuffered(buffered, currentTime) {
|
|
405
|
+
var str = "";
|
|
406
|
+
var currentTimeStr = "";
|
|
407
|
+
for (var i = 0; i < buffered.length; i++) {
|
|
408
|
+
var start = buffered.start(i);
|
|
409
|
+
var end = buffered.end(i);
|
|
410
|
+
var fixedStart = start.toFixed(2);
|
|
411
|
+
var fixedEnd = end.toFixed(2);
|
|
412
|
+
var fixedDuration = (end - start).toFixed(2);
|
|
413
|
+
var newIntervalStr = "".concat(fixedStart, "|==").concat(fixedDuration, "==|").concat(fixedEnd);
|
|
414
|
+
str += newIntervalStr;
|
|
415
|
+
if (currentTimeStr.length === 0 && end > currentTime) {
|
|
416
|
+
var padBefore = str.length - Math.floor(newIntervalStr.length / 2);
|
|
417
|
+
currentTimeStr = " ".repeat(padBefore) + "^".concat(currentTime);
|
|
418
|
+
}
|
|
419
|
+
if (i < buffered.length - 1) {
|
|
420
|
+
var nextStart = buffered.start(i + 1);
|
|
421
|
+
var fixedDiff = (nextStart - end).toFixed(2);
|
|
422
|
+
var holeStr = " ~".concat(fixedDiff, "~ ");
|
|
423
|
+
str += holeStr;
|
|
424
|
+
if (currentTimeStr.length === 0 && currentTime < nextStart) {
|
|
425
|
+
var padBefore = str.length - Math.floor(holeStr.length / 2);
|
|
426
|
+
currentTimeStr = " ".repeat(padBefore) + "^".concat(currentTime);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
if (currentTimeStr.length === 0) {
|
|
431
|
+
currentTimeStr = " ".repeat(str.length) + "^".concat(currentTime);
|
|
432
|
+
}
|
|
433
|
+
return str + "\n" + currentTimeStr;
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Create `IReadOnlyPlaybackObserver` from a source `IReadOnlyPlaybackObserver`
|
|
437
|
+
* and a mapping function.
|
|
438
|
+
* @param {Object} src
|
|
439
|
+
* @param {Function} mapObservable
|
|
440
|
+
* @returns {Object}
|
|
441
|
+
*/
|
|
442
|
+
function generateReadOnlyObserver(src, mapObservable) {
|
|
443
|
+
var newObs = observableDefer(function () {
|
|
444
|
+
return mapObservable(src.observe(true));
|
|
445
|
+
}).pipe(shareReplay({ bufferSize: 1, refCount: true }));
|
|
446
|
+
return {
|
|
447
|
+
getCurrentTime: function () {
|
|
448
|
+
return src.getCurrentTime();
|
|
449
|
+
},
|
|
450
|
+
getReadyState: function () {
|
|
451
|
+
return src.getReadyState();
|
|
452
|
+
},
|
|
453
|
+
observe: function (includeLastObservation) {
|
|
454
|
+
return includeLastObservation ? newObs :
|
|
455
|
+
newObs.pipe(skip(1));
|
|
456
|
+
},
|
|
457
|
+
deriveReadOnlyObserver: function (newUdateObserver) {
|
|
458
|
+
return generateReadOnlyObserver(this, newUdateObserver);
|
|
459
|
+
},
|
|
460
|
+
};
|
|
461
|
+
}
|
|
@@ -120,22 +120,23 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
120
120
|
*/
|
|
121
121
|
private readonly _priv_destroy$;
|
|
122
122
|
/**
|
|
123
|
-
*
|
|
124
|
-
*
|
|
123
|
+
* Contains `true` when the previous content is cleaning-up, `false` when it's
|
|
124
|
+
* done.
|
|
125
|
+
* A new content cannot be launched until it stores `false`.
|
|
125
126
|
*/
|
|
126
|
-
private readonly _priv_contentLock
|
|
127
|
+
private readonly _priv_contentLock;
|
|
127
128
|
/**
|
|
128
129
|
* Changes on "play" and "pause" events from the media elements.
|
|
129
130
|
* Switches to ``true`` whent the "play" event was the last received.
|
|
130
131
|
* Switches to ``false`` whent the "pause" event was the last received.
|
|
131
132
|
* ``false`` if no such event was received for the current loaded content.
|
|
132
133
|
*/
|
|
133
|
-
private readonly
|
|
134
|
+
private readonly _priv_isPlaying;
|
|
134
135
|
/**
|
|
135
136
|
* The speed that should be applied to playback.
|
|
136
137
|
* Used instead of videoElement.playbackRate to allow more flexibility.
|
|
137
138
|
*/
|
|
138
|
-
private readonly _priv_speed
|
|
139
|
+
private readonly _priv_speed;
|
|
139
140
|
/** Store buffer-related options used needed when initializing a content. */
|
|
140
141
|
private readonly _priv_bufferOptions;
|
|
141
142
|
/** Information on the current bitrate settings. */
|
|
@@ -841,11 +842,11 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
841
842
|
*/
|
|
842
843
|
private _priv_setPlayerState;
|
|
843
844
|
/**
|
|
844
|
-
* Triggered each time a
|
|
845
|
+
* Triggered each time a playback observation.
|
|
845
846
|
*
|
|
846
847
|
* Trigger the right Player Event
|
|
847
848
|
*
|
|
848
|
-
* @param {Object}
|
|
849
|
+
* @param {Object} observation
|
|
849
850
|
*/
|
|
850
851
|
private _priv_triggerPositionUpdate;
|
|
851
852
|
/**
|