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
|
@@ -1,363 +0,0 @@
|
|
|
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
|
-
/**
|
|
26
|
-
* This file defines a global clock for the RxPlayer.
|
|
27
|
-
*
|
|
28
|
-
* Each clock tick also pass information about the current state of the
|
|
29
|
-
* media element to sub-parts of the player.
|
|
30
|
-
*/
|
|
31
|
-
import { defer as observableDefer, fromEvent as observableFromEvent, interval as observableInterval, merge as observableMerge, } from "rxjs";
|
|
32
|
-
import { map, mapTo, shareReplay, startWith, } from "rxjs/operators";
|
|
33
|
-
import config from "../../config";
|
|
34
|
-
import log from "../../log";
|
|
35
|
-
import objectAssign from "../../utils/object_assign";
|
|
36
|
-
import { getRange } from "../../utils/ranges";
|
|
37
|
-
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;
|
|
38
|
-
/**
|
|
39
|
-
* HTMLMediaElement Events for which timings are calculated and emitted.
|
|
40
|
-
* @type {Array.<string>}
|
|
41
|
-
*/
|
|
42
|
-
var SCANNED_MEDIA_ELEMENTS_EVENTS = ["canplay",
|
|
43
|
-
"play",
|
|
44
|
-
"seeking",
|
|
45
|
-
"seeked",
|
|
46
|
-
"loadedmetadata",
|
|
47
|
-
"ratechange"];
|
|
48
|
-
/**
|
|
49
|
-
* Returns the amount of time in seconds the buffer should have ahead of the
|
|
50
|
-
* current position before resuming playback. Based on the infos of the
|
|
51
|
-
* rebuffering status.
|
|
52
|
-
*
|
|
53
|
-
* Waiting time differs between a rebuffering happening after a "seek" or one
|
|
54
|
-
* happening after a buffer starvation occured.
|
|
55
|
-
* @param {Object|null} rebufferingStatus
|
|
56
|
-
* @param {Boolean} lowLatencyMode
|
|
57
|
-
* @returns {Number}
|
|
58
|
-
*/
|
|
59
|
-
function getRebufferingEndGap(rebufferingStatus, lowLatencyMode) {
|
|
60
|
-
if (rebufferingStatus === null) {
|
|
61
|
-
return 0;
|
|
62
|
-
}
|
|
63
|
-
var suffix = lowLatencyMode ? "LOW_LATENCY" :
|
|
64
|
-
"DEFAULT";
|
|
65
|
-
switch (rebufferingStatus.reason) {
|
|
66
|
-
case "seeking":
|
|
67
|
-
case "internal-seek":
|
|
68
|
-
return RESUME_GAP_AFTER_SEEKING[suffix];
|
|
69
|
-
case "not-ready":
|
|
70
|
-
return RESUME_GAP_AFTER_NOT_ENOUGH_DATA[suffix];
|
|
71
|
-
case "buffering":
|
|
72
|
-
return RESUME_GAP_AFTER_BUFFERING[suffix];
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* @param {Object} currentRange
|
|
77
|
-
* @param {Number} duration
|
|
78
|
-
* @param {Boolean} lowLatencyMode
|
|
79
|
-
* @returns {Boolean}
|
|
80
|
-
*/
|
|
81
|
-
function hasLoadedUntilTheEnd(currentRange, duration, lowLatencyMode) {
|
|
82
|
-
var suffix = lowLatencyMode ? "LOW_LATENCY" :
|
|
83
|
-
"DEFAULT";
|
|
84
|
-
return currentRange !== null &&
|
|
85
|
-
(duration - currentRange.end) <= REBUFFERING_GAP[suffix];
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Generate a basic timings object from the media element and the eventName
|
|
89
|
-
* which triggered the request.
|
|
90
|
-
* @param {HTMLMediaElement} mediaElement
|
|
91
|
-
* @param {string} event
|
|
92
|
-
* @returns {Object}
|
|
93
|
-
*/
|
|
94
|
-
function getMediaInfos(mediaElement, event) {
|
|
95
|
-
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;
|
|
96
|
-
var currentRange = getRange(buffered, currentTime);
|
|
97
|
-
return { bufferGap: currentRange !== null ? currentRange.end - currentTime :
|
|
98
|
-
// TODO null/0 would probably be
|
|
99
|
-
// more appropriate
|
|
100
|
-
Infinity, buffered: buffered, currentRange: currentRange, position: currentTime, duration: duration, ended: ended, paused: paused, playbackRate: playbackRate, readyState: readyState, seeking: seeking, event: event };
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Infer rebuffering status of the media based on:
|
|
104
|
-
* - the return of the function getMediaInfos
|
|
105
|
-
* - the previous timings object.
|
|
106
|
-
*
|
|
107
|
-
* @param {Object} prevTimings - Previous timings object. See function to know
|
|
108
|
-
* the different properties needed.
|
|
109
|
-
* @param {Object} currentTimings - Current timings object. This does not need
|
|
110
|
-
* to have every single infos, see function to know which properties are needed.
|
|
111
|
-
* @param {Object} options
|
|
112
|
-
* @returns {Object|null}
|
|
113
|
-
*/
|
|
114
|
-
function getRebufferingStatus(prevTimings, currentTimings, _a) {
|
|
115
|
-
var withMediaSource = _a.withMediaSource, lowLatencyMode = _a.lowLatencyMode;
|
|
116
|
-
var currentEvt = currentTimings.event, currentTime = currentTimings.position, bufferGap = currentTimings.bufferGap, currentRange = currentTimings.currentRange, duration = currentTimings.duration, paused = currentTimings.paused, readyState = currentTimings.readyState, ended = currentTimings.ended;
|
|
117
|
-
var prevRebuffering = prevTimings.rebuffering, prevEvt = prevTimings.event, prevTime = prevTimings.position;
|
|
118
|
-
var fullyLoaded = hasLoadedUntilTheEnd(currentRange, duration, lowLatencyMode);
|
|
119
|
-
var canSwitchToRebuffering = (readyState >= 1 &&
|
|
120
|
-
currentEvt !== "loadedmetadata" &&
|
|
121
|
-
prevRebuffering === null &&
|
|
122
|
-
!(fullyLoaded || ended));
|
|
123
|
-
var rebufferEndPosition = null;
|
|
124
|
-
var shouldRebuffer;
|
|
125
|
-
var shouldStopRebuffer;
|
|
126
|
-
var rebufferGap = lowLatencyMode ? REBUFFERING_GAP.LOW_LATENCY :
|
|
127
|
-
REBUFFERING_GAP.DEFAULT;
|
|
128
|
-
if (withMediaSource) {
|
|
129
|
-
if (canSwitchToRebuffering) {
|
|
130
|
-
if (bufferGap <= rebufferGap) {
|
|
131
|
-
shouldRebuffer = true;
|
|
132
|
-
rebufferEndPosition = currentTime + bufferGap;
|
|
133
|
-
}
|
|
134
|
-
else if (bufferGap === Infinity) {
|
|
135
|
-
shouldRebuffer = true;
|
|
136
|
-
rebufferEndPosition = currentTime;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
else if (prevRebuffering !== null) {
|
|
140
|
-
var resumeGap = getRebufferingEndGap(prevRebuffering, lowLatencyMode);
|
|
141
|
-
if (shouldRebuffer !== true && prevRebuffering !== null && readyState > 1 &&
|
|
142
|
-
(fullyLoaded || ended || (bufferGap < Infinity && bufferGap > resumeGap))) {
|
|
143
|
-
shouldStopRebuffer = true;
|
|
144
|
-
}
|
|
145
|
-
else if (bufferGap === Infinity || bufferGap <= resumeGap) {
|
|
146
|
-
rebufferEndPosition = bufferGap === Infinity ? currentTime :
|
|
147
|
-
currentTime + bufferGap;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
// when using a direct file, the media will stall and unstall on its
|
|
152
|
-
// own, so we only try to detect when the media timestamp has not changed
|
|
153
|
-
// between two consecutive timeupdates
|
|
154
|
-
else {
|
|
155
|
-
if (canSwitchToRebuffering &&
|
|
156
|
-
(!paused && currentEvt === "timeupdate" &&
|
|
157
|
-
prevEvt === "timeupdate" && currentTime === prevTime ||
|
|
158
|
-
currentEvt === "seeking" && bufferGap === Infinity)) {
|
|
159
|
-
shouldRebuffer = true;
|
|
160
|
-
}
|
|
161
|
-
else if (prevRebuffering !== null &&
|
|
162
|
-
(currentEvt !== "seeking" && currentTime !== prevTime ||
|
|
163
|
-
currentEvt === "canplay" ||
|
|
164
|
-
bufferGap < Infinity &&
|
|
165
|
-
(bufferGap > getRebufferingEndGap(prevRebuffering, lowLatencyMode) ||
|
|
166
|
-
fullyLoaded || ended))) {
|
|
167
|
-
shouldStopRebuffer = true;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
if (shouldStopRebuffer === true) {
|
|
171
|
-
return null;
|
|
172
|
-
}
|
|
173
|
-
else if (shouldRebuffer === true || prevRebuffering !== null) {
|
|
174
|
-
var reason = void 0;
|
|
175
|
-
if (currentEvt === "seeking" ||
|
|
176
|
-
prevRebuffering !== null && prevRebuffering.reason === "seeking") {
|
|
177
|
-
reason = "seeking";
|
|
178
|
-
}
|
|
179
|
-
else if (currentTimings.seeking &&
|
|
180
|
-
((currentEvt === "internal-seeking") ||
|
|
181
|
-
(prevRebuffering !== null && prevRebuffering.reason === "internal-seek"))) {
|
|
182
|
-
reason = "internal-seek";
|
|
183
|
-
}
|
|
184
|
-
else if (currentTimings.seeking) {
|
|
185
|
-
reason = "seeking";
|
|
186
|
-
}
|
|
187
|
-
else if (readyState === 1) {
|
|
188
|
-
reason = "not-ready";
|
|
189
|
-
}
|
|
190
|
-
else {
|
|
191
|
-
reason = "buffering";
|
|
192
|
-
}
|
|
193
|
-
if (prevRebuffering !== null && prevRebuffering.reason === reason) {
|
|
194
|
-
return { reason: prevRebuffering.reason,
|
|
195
|
-
timestamp: prevRebuffering.timestamp,
|
|
196
|
-
position: rebufferEndPosition };
|
|
197
|
-
}
|
|
198
|
-
return { reason: reason, timestamp: performance.now(),
|
|
199
|
-
position: rebufferEndPosition };
|
|
200
|
-
}
|
|
201
|
-
return null;
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Detect if the current media can be considered as "freezing" (i.e. not
|
|
205
|
-
* advancing for unknown reasons).
|
|
206
|
-
*
|
|
207
|
-
* Returns a corresponding `IFreezingStatus` object if that's the case and
|
|
208
|
-
* `null` if not.
|
|
209
|
-
* @param {Object} prevTimings
|
|
210
|
-
* @param {Object} currentTimings
|
|
211
|
-
* @returns {Object|null}
|
|
212
|
-
*/
|
|
213
|
-
function getFreezingStatus(prevTimings, currentTimings) {
|
|
214
|
-
if (prevTimings.freezing) {
|
|
215
|
-
if (currentTimings.ended ||
|
|
216
|
-
currentTimings.paused ||
|
|
217
|
-
currentTimings.readyState === 0 ||
|
|
218
|
-
currentTimings.playbackRate === 0 ||
|
|
219
|
-
prevTimings.position !== currentTimings.position) {
|
|
220
|
-
return null; // Quit freezing status
|
|
221
|
-
}
|
|
222
|
-
return prevTimings.freezing; // Stay in it
|
|
223
|
-
}
|
|
224
|
-
return currentTimings.event === "timeupdate" &&
|
|
225
|
-
currentTimings.bufferGap > MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING &&
|
|
226
|
-
!currentTimings.ended &&
|
|
227
|
-
!currentTimings.paused &&
|
|
228
|
-
currentTimings.readyState >= 1 &&
|
|
229
|
-
currentTimings.playbackRate !== 0 &&
|
|
230
|
-
currentTimings.position === prevTimings.position ?
|
|
231
|
-
{ timestamp: performance.now() } :
|
|
232
|
-
null;
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* Timings observable.
|
|
236
|
-
*
|
|
237
|
-
* This Observable samples snapshots of player's current state:
|
|
238
|
-
* * time position
|
|
239
|
-
* * playback rate
|
|
240
|
-
* * current buffered range
|
|
241
|
-
* * gap with current buffered range ending
|
|
242
|
-
* * media duration
|
|
243
|
-
*
|
|
244
|
-
* In addition to sampling, this Observable also reacts to "seeking" and "play"
|
|
245
|
-
* events.
|
|
246
|
-
*
|
|
247
|
-
* Observable is shared for performance reason: reduces the number of event
|
|
248
|
-
* listeners and intervals/timeouts but also limit access to the media element
|
|
249
|
-
* properties and gap calculations.
|
|
250
|
-
*
|
|
251
|
-
* The sampling is manual instead of based on "timeupdate" to reduce the
|
|
252
|
-
* number of events.
|
|
253
|
-
* @param {HTMLMediaElement} mediaElement
|
|
254
|
-
* @param {Object} options
|
|
255
|
-
* @returns {Observable}
|
|
256
|
-
*/
|
|
257
|
-
function createClock(mediaElement, options) {
|
|
258
|
-
// Allow us to identify seek performed internally by the player.
|
|
259
|
-
var internalSeekingComingCounter = 0;
|
|
260
|
-
function setCurrentTime(time) {
|
|
261
|
-
mediaElement.currentTime = time;
|
|
262
|
-
internalSeekingComingCounter += 1;
|
|
263
|
-
}
|
|
264
|
-
var clock$ = observableDefer(function () {
|
|
265
|
-
var lastTimings = objectAssign(getMediaInfos(mediaElement, "init"), { rebuffering: null,
|
|
266
|
-
freezing: null,
|
|
267
|
-
getCurrentTime: function () { return mediaElement.currentTime; } });
|
|
268
|
-
function getCurrentClockTick(event) {
|
|
269
|
-
var tmpEvt = event;
|
|
270
|
-
if (tmpEvt === "seeking" && internalSeekingComingCounter > 0) {
|
|
271
|
-
tmpEvt = "internal-seeking";
|
|
272
|
-
internalSeekingComingCounter -= 1;
|
|
273
|
-
}
|
|
274
|
-
var mediaTimings = getMediaInfos(mediaElement, tmpEvt);
|
|
275
|
-
var rebufferingStatus = getRebufferingStatus(lastTimings, mediaTimings, options);
|
|
276
|
-
var freezingStatus = getFreezingStatus(lastTimings, mediaTimings);
|
|
277
|
-
var timings = objectAssign({}, { rebuffering: rebufferingStatus,
|
|
278
|
-
freezing: freezingStatus,
|
|
279
|
-
getCurrentTime: function () { return mediaElement.currentTime; } }, mediaTimings);
|
|
280
|
-
log.debug("API: current media element state", timings);
|
|
281
|
-
return timings;
|
|
282
|
-
}
|
|
283
|
-
var eventObs = SCANNED_MEDIA_ELEMENTS_EVENTS.map(function (eventName) {
|
|
284
|
-
return observableFromEvent(mediaElement, eventName)
|
|
285
|
-
.pipe(mapTo(eventName));
|
|
286
|
-
});
|
|
287
|
-
var interval = options.lowLatencyMode ? SAMPLING_INTERVAL_LOW_LATENCY :
|
|
288
|
-
options.withMediaSource ? SAMPLING_INTERVAL_MEDIASOURCE :
|
|
289
|
-
SAMPLING_INTERVAL_NO_MEDIASOURCE;
|
|
290
|
-
var interval$ = observableInterval(interval)
|
|
291
|
-
.pipe(mapTo("timeupdate"));
|
|
292
|
-
return observableMerge.apply(void 0, __spreadArray([interval$], eventObs, false)).pipe(map(function (event) {
|
|
293
|
-
lastTimings = getCurrentClockTick(event);
|
|
294
|
-
if (log.getLevel() === "DEBUG") {
|
|
295
|
-
log.debug("API: current playback timeline:\n" +
|
|
296
|
-
prettyPrintBuffered(lastTimings.buffered, lastTimings.position), "\n" + event);
|
|
297
|
-
}
|
|
298
|
-
return lastTimings;
|
|
299
|
-
}), startWith(lastTimings));
|
|
300
|
-
}).pipe(
|
|
301
|
-
// Always emit the last tick when already subscribed
|
|
302
|
-
shareReplay({ bufferSize: 1, refCount: true }));
|
|
303
|
-
return { clock$: clock$, setCurrentTime: setCurrentTime };
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* Pretty print a TimeRanges Object, to see the current content of it in a
|
|
307
|
-
* one-liner string.
|
|
308
|
-
*
|
|
309
|
-
* @example
|
|
310
|
-
* This function is called by giving it directly the TimeRanges, such as:
|
|
311
|
-
* ```js
|
|
312
|
-
* prettyPrintBuffered(document.getElementsByTagName("video")[0].buffered);
|
|
313
|
-
* ```
|
|
314
|
-
*
|
|
315
|
-
* Let's consider this possible return:
|
|
316
|
-
*
|
|
317
|
-
* ```
|
|
318
|
-
* 0.00|==29.95==|29.95 ~30.05~ 60.00|==29.86==|89.86
|
|
319
|
-
* ^14
|
|
320
|
-
* ```
|
|
321
|
-
* This means that our video element has 29.95 seconds of buffer between 0 and
|
|
322
|
-
* 29.95 seconds.
|
|
323
|
-
* Then 30.05 seconds where no buffer is found.
|
|
324
|
-
* Then 29.86 seconds of buffer between 60.00 and 89.86 seconds.
|
|
325
|
-
*
|
|
326
|
-
* A caret on the second line indicates the current time we're at.
|
|
327
|
-
* The number coming after it is the current time.
|
|
328
|
-
* @param {TimeRanges} buffered
|
|
329
|
-
* @param {number} currentTime
|
|
330
|
-
* @returns {string}
|
|
331
|
-
*/
|
|
332
|
-
function prettyPrintBuffered(buffered, currentTime) {
|
|
333
|
-
var str = "";
|
|
334
|
-
var currentTimeStr = "";
|
|
335
|
-
for (var i = 0; i < buffered.length; i++) {
|
|
336
|
-
var start = buffered.start(i);
|
|
337
|
-
var end = buffered.end(i);
|
|
338
|
-
var fixedStart = start.toFixed(2);
|
|
339
|
-
var fixedEnd = end.toFixed(2);
|
|
340
|
-
var fixedDuration = (end - start).toFixed(2);
|
|
341
|
-
var newIntervalStr = fixedStart + "|==" + fixedDuration + "==|" + fixedEnd;
|
|
342
|
-
str += newIntervalStr;
|
|
343
|
-
if (currentTimeStr.length === 0 && end > currentTime) {
|
|
344
|
-
var padBefore = str.length - Math.floor(newIntervalStr.length / 2);
|
|
345
|
-
currentTimeStr = " ".repeat(padBefore) + ("^" + currentTime);
|
|
346
|
-
}
|
|
347
|
-
if (i < buffered.length - 1) {
|
|
348
|
-
var nextStart = buffered.start(i + 1);
|
|
349
|
-
var fixedDiff = (nextStart - end).toFixed(2);
|
|
350
|
-
var holeStr = " ~" + fixedDiff + "~ ";
|
|
351
|
-
str += holeStr;
|
|
352
|
-
if (currentTimeStr.length === 0 && currentTime < nextStart) {
|
|
353
|
-
var padBefore = str.length - Math.floor(holeStr.length / 2);
|
|
354
|
-
currentTimeStr = " ".repeat(padBefore) + ("^" + currentTime);
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
if (currentTimeStr.length === 0) {
|
|
359
|
-
currentTimeStr = " ".repeat(str.length) + ("^" + currentTime);
|
|
360
|
-
}
|
|
361
|
-
return str + "\n" + currentTimeStr;
|
|
362
|
-
}
|
|
363
|
-
export default createClock;
|
|
@@ -1,34 +0,0 @@
|
|
|
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
|
-
import { Observable } from "rxjs";
|
|
17
|
-
import Manifest from "../../manifest";
|
|
18
|
-
import { IStreamOrchestratorClockTick } from "../stream";
|
|
19
|
-
import { IInitClockTick } from "./types";
|
|
20
|
-
export interface IStreamClockArguments {
|
|
21
|
-
autoPlay: boolean;
|
|
22
|
-
initialPlay$: Observable<unknown>;
|
|
23
|
-
initialSeek$: Observable<unknown>;
|
|
24
|
-
manifest: Manifest;
|
|
25
|
-
speed$: Observable<number>;
|
|
26
|
-
startTime: number;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Create clock Observable for the `Stream` part of the code.
|
|
30
|
-
* @param {Observable} initClock$
|
|
31
|
-
* @param {Object} streamClockArgument
|
|
32
|
-
* @returns {Observable}
|
|
33
|
-
*/
|
|
34
|
-
export default function createStreamClock(initClock$: Observable<IInitClockTick>, { autoPlay, initialPlay$, initialSeek$, manifest, speed$, startTime }: IStreamClockArguments): Observable<IStreamOrchestratorClockTick>;
|
|
@@ -1,55 +0,0 @@
|
|
|
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
|
-
import { combineLatest as observableCombineLatest, merge as observableMerge, } from "rxjs";
|
|
17
|
-
import { ignoreElements, map, tap, } from "rxjs/operators";
|
|
18
|
-
/**
|
|
19
|
-
* Create clock Observable for the `Stream` part of the code.
|
|
20
|
-
* @param {Observable} initClock$
|
|
21
|
-
* @param {Object} streamClockArgument
|
|
22
|
-
* @returns {Observable}
|
|
23
|
-
*/
|
|
24
|
-
export default function createStreamClock(initClock$, _a) {
|
|
25
|
-
var autoPlay = _a.autoPlay, initialPlay$ = _a.initialPlay$, initialSeek$ = _a.initialSeek$, manifest = _a.manifest, speed$ = _a.speed$, startTime = _a.startTime;
|
|
26
|
-
var initialPlayPerformed = false;
|
|
27
|
-
var initialSeekPerformed = false;
|
|
28
|
-
var updateIsPaused$ = initialPlay$.pipe(tap(function () { initialPlayPerformed = true; }), ignoreElements());
|
|
29
|
-
var updateTimeOffset$ = initialSeek$.pipe(tap(function () { initialSeekPerformed = true; }), ignoreElements());
|
|
30
|
-
var clock$ = observableCombineLatest([initClock$, speed$])
|
|
31
|
-
.pipe(map(function (_a) {
|
|
32
|
-
var tick = _a[0], speed = _a[1];
|
|
33
|
-
var isLive = manifest.isLive;
|
|
34
|
-
return {
|
|
35
|
-
position: tick.position,
|
|
36
|
-
getCurrentTime: tick.getCurrentTime,
|
|
37
|
-
duration: tick.duration,
|
|
38
|
-
isPaused: initialPlayPerformed ? tick.paused :
|
|
39
|
-
!autoPlay,
|
|
40
|
-
liveGap: isLive ? manifest.getMaximumPosition() - tick.position :
|
|
41
|
-
Infinity,
|
|
42
|
-
readyState: tick.readyState,
|
|
43
|
-
speed: speed,
|
|
44
|
-
// wantedTimeOffset is an offset to add to the timing's current time to have
|
|
45
|
-
// the "real" wanted position.
|
|
46
|
-
// For now, this is seen when the media element has not yet seeked to its
|
|
47
|
-
// initial position, the currentTime will most probably be 0 where the
|
|
48
|
-
// effective starting position will be _startTime_.
|
|
49
|
-
// Thus we initially set a wantedTimeOffset equal to startTime.
|
|
50
|
-
wantedTimeOffset: initialSeekPerformed ? 0 :
|
|
51
|
-
startTime - tick.position,
|
|
52
|
-
};
|
|
53
|
-
}));
|
|
54
|
-
return observableMerge(updateIsPaused$, updateTimeOffset$, clock$);
|
|
55
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
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
|
-
import { IBaseUrlIntermediateRepresentation } from "../node_parser_types";
|
|
17
|
-
/**
|
|
18
|
-
* From 0 to N baseURL elements takes the minimum availabilityTimeOffset
|
|
19
|
-
* possible.
|
|
20
|
-
*
|
|
21
|
-
* `0` if no baseURL was given (which means `no delay added`: coherent with how
|
|
22
|
-
* this value is used).
|
|
23
|
-
*
|
|
24
|
-
* Taking the minimum time allow to simplify its processing:
|
|
25
|
-
* Instead of having multiple URL each with a different pool of available
|
|
26
|
-
* segment at a given instant, let's always consider every URLs by aligning with
|
|
27
|
-
* the one with the most segment.
|
|
28
|
-
*
|
|
29
|
-
* @param {Array.<Object>} baseURLs
|
|
30
|
-
*/
|
|
31
|
-
export default function extractMinimumAvailabilityTimeOffset(baseURLs: IBaseUrlIntermediateRepresentation[]): number;
|
|
@@ -1,37 +0,0 @@
|
|
|
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
|
-
/**
|
|
17
|
-
* From 0 to N baseURL elements takes the minimum availabilityTimeOffset
|
|
18
|
-
* possible.
|
|
19
|
-
*
|
|
20
|
-
* `0` if no baseURL was given (which means `no delay added`: coherent with how
|
|
21
|
-
* this value is used).
|
|
22
|
-
*
|
|
23
|
-
* Taking the minimum time allow to simplify its processing:
|
|
24
|
-
* Instead of having multiple URL each with a different pool of available
|
|
25
|
-
* segment at a given instant, let's always consider every URLs by aligning with
|
|
26
|
-
* the one with the most segment.
|
|
27
|
-
*
|
|
28
|
-
* @param {Array.<Object>} baseURLs
|
|
29
|
-
*/
|
|
30
|
-
export default function extractMinimumAvailabilityTimeOffset(baseURLs) {
|
|
31
|
-
return baseURLs.length === 0 ?
|
|
32
|
-
0 :
|
|
33
|
-
baseURLs.reduce(function (acc, baseURL) {
|
|
34
|
-
var _a;
|
|
35
|
-
return Math.min((_a = baseURL.attributes.availabilityTimeOffset) !== null && _a !== void 0 ? _a : 0, acc);
|
|
36
|
-
}, Infinity);
|
|
37
|
-
}
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
const convertMDToHTML = require("./convert_MD_to_HMTL.js");
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Construct Header part of the HTML page, containing various links.
|
|
5
|
-
* @param {Object} options
|
|
6
|
-
* @param {string|undefined} options.homeLink - If set, link to the homepage.
|
|
7
|
-
* @param {string|undefined} options.listLink - If set, link to the page list.
|
|
8
|
-
* @returns {string} - header div tag
|
|
9
|
-
*/
|
|
10
|
-
function constructHTMLHeader({ homeLink, listLink }) {
|
|
11
|
-
let header = "<div class=\"header\"><div class=\"header-content\">";
|
|
12
|
-
|
|
13
|
-
if (homeLink != null) {
|
|
14
|
-
header += `<a href="${homeLink}">` +
|
|
15
|
-
"<span class=\"nav-icon\">🏠</span>" +
|
|
16
|
-
"<span class=\"nav-text\">Home</span>" +
|
|
17
|
-
"</a>";
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
if (listLink != null) {
|
|
21
|
-
header += `<a href="${listLink}">` +
|
|
22
|
-
"<span class=\"nav-icon\">🗎</span>" +
|
|
23
|
-
"<span class=\"nav-text\">Page List</span>" +
|
|
24
|
-
"</a>";
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
header += "<a href=\"#\">" +
|
|
28
|
-
"<span class=\"nav-icon\">↑</span>" +
|
|
29
|
-
"<span class=\"nav-text\">Top</span>" +
|
|
30
|
-
"</a>";
|
|
31
|
-
|
|
32
|
-
header += "</div></div>";
|
|
33
|
-
return header;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Construct Sidebar part of the HTML page, containing various links.
|
|
38
|
-
* @param {string|null|undefined} toc - Markdown for the table of contents
|
|
39
|
-
* (under a list form).
|
|
40
|
-
* `null` or `undefined` if your page has no table of contents.
|
|
41
|
-
* @param {Object} options
|
|
42
|
-
* @param {string|undefined} options.homeLink - If set, link to the homepage.
|
|
43
|
-
* @param {string|undefined} options.listLink - If set, link to the page list.
|
|
44
|
-
* @returns {string} - sidebar div tag
|
|
45
|
-
*/
|
|
46
|
-
function constructHTMLSidebar(toc, {
|
|
47
|
-
homeLink,
|
|
48
|
-
listLink,
|
|
49
|
-
}) {
|
|
50
|
-
const domSidebar = (toc && convertMDToHTML(toc)) || "";
|
|
51
|
-
|
|
52
|
-
let sidebar = "<div class=\"sidebar\">" +
|
|
53
|
-
"<div class=\"sidebar-nav\">";
|
|
54
|
-
if (homeLink != null) {
|
|
55
|
-
sidebar += `<a href="${homeLink}">` +
|
|
56
|
-
"<span class=\"nav-icon\">🏠</span>" +
|
|
57
|
-
"<span class=\"nav-text\">Home</span>" +
|
|
58
|
-
"</a>";
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
if (listLink != null) {
|
|
62
|
-
sidebar += `<a href="${listLink}">` +
|
|
63
|
-
"<span class=\"nav-icon\">🗎</span>" +
|
|
64
|
-
"<span class=\"nav-text\">Page List</span>" +
|
|
65
|
-
"</a>";
|
|
66
|
-
}
|
|
67
|
-
sidebar += "<a href=\"#\">" +
|
|
68
|
-
"<span class=\"nav-icon\">↑</span>" +
|
|
69
|
-
"<span class=\"nav-text\">Top</span>" +
|
|
70
|
-
"</a>";
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
sidebar += "</div>" +
|
|
74
|
-
"<div class=\"toc\">" +
|
|
75
|
-
domSidebar +
|
|
76
|
-
"</div>" +
|
|
77
|
-
"</div>";
|
|
78
|
-
|
|
79
|
-
return sidebar;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Add links to CSS files
|
|
84
|
-
* @param {Array.<string>} css - paths to CSS files
|
|
85
|
-
* @returns {string}
|
|
86
|
-
*/
|
|
87
|
-
function constructStylesHTML(css) {
|
|
88
|
-
return css.map(cssFile => `<link rel="stylesheet" href="${cssFile}"/>`)
|
|
89
|
-
.join("") || "";
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Generate HTML page for the given documentation.
|
|
94
|
-
* /!\ do not sanitize anything. Please do it in advance.
|
|
95
|
-
* @param {string} title - title of the page
|
|
96
|
-
* @param {string} domContent - HTML content for the whole page.
|
|
97
|
-
* @param {Object} options
|
|
98
|
-
* @param {string|null|undefined} options.toc - Markdown for the table of
|
|
99
|
-
* contents (under a list form).
|
|
100
|
-
* `null` or `undefined` if your page has no table of contents.
|
|
101
|
-
* @param {string|undefined} options.homeLink - If set, link to the homepage.
|
|
102
|
-
* @param {string|undefined} options.listLink - If set, link to the page list.
|
|
103
|
-
* @param {Array.<string>} css - paths to CSS files
|
|
104
|
-
* @returns {string} - Whole HTML string for the documentation page.
|
|
105
|
-
*/
|
|
106
|
-
module.exports = function constructHTMLPage(
|
|
107
|
-
title,
|
|
108
|
-
domContent,
|
|
109
|
-
{ homeLink,
|
|
110
|
-
listLink,
|
|
111
|
-
toc,
|
|
112
|
-
css },
|
|
113
|
-
) {
|
|
114
|
-
const header = constructHTMLHeader({ homeLink, listLink });
|
|
115
|
-
const sidebar = constructHTMLSidebar(toc, { homeLink, listLink });
|
|
116
|
-
const styles = constructStylesHTML(css);
|
|
117
|
-
|
|
118
|
-
return "<head>" +
|
|
119
|
-
"<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">" +
|
|
120
|
-
"<meta charset=\"utf-8\">" +
|
|
121
|
-
styles +
|
|
122
|
-
"<title>" + title + "</title>" +
|
|
123
|
-
"</head>" +
|
|
124
|
-
"<body>" +
|
|
125
|
-
"<div class=\"page-wrapper\">" +
|
|
126
|
-
sidebar +
|
|
127
|
-
"<div class=\"content-wrapper\">" +
|
|
128
|
-
header +
|
|
129
|
-
"<div class=\"content\">" +
|
|
130
|
-
domContent +
|
|
131
|
-
"</div>" +
|
|
132
|
-
"</div>" +
|
|
133
|
-
"</div>" +
|
|
134
|
-
"</body>";
|
|
135
|
-
};
|