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
package/README.md
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="./doc/
|
|
2
|
+
<img src="./doc/static/img/logo.png" />
|
|
3
3
|
<br /><br />
|
|
4
|
-
<a href="https://
|
|
4
|
+
<a href="https://developers.canal-plus.com/rx-player/doc/api/Overview.html">📖 <b>API documentation</b></a>
|
|
5
5
|
-
|
|
6
6
|
<a href="https://developers.canal-plus.com/rx-player/">⏯ <b>Demo</b></a>
|
|
7
7
|
-
|
|
8
|
-
<a href="https://
|
|
8
|
+
<a href="https://developers.canal-plus.com/rx-player/doc/Getting_Started/Welcome.html">🎓 <b>Getting Started</b></a>
|
|
9
9
|
-
|
|
10
10
|
<a href="./CONTRIBUTING.md">🔧 <b>Contributing</b></a>
|
|
11
11
|
<br /><br />
|
|
12
12
|
<a href="https://github.com/canalplus/rx-player/releases">
|
|
13
13
|
<img src="https://img.shields.io/badge/dynamic/json.svg?label=Latest%20release&url=https://api.github.com/repos/canalplus/rx-player/releases/latest&query=$.tag_name&colorB=blue" />
|
|
14
14
|
</a>
|
|
15
|
-
<a href="https://
|
|
16
|
-
<img src="https://
|
|
15
|
+
<a href="https://github.com/canalplus/rx-player/actions/workflows/checks.yml">
|
|
16
|
+
<img src="https://github.com/canalplus/rx-player/actions/workflows/checks.yml/badge.svg" />
|
|
17
|
+
</a>
|
|
18
|
+
<a href="https://sonarcloud.io/summary/new_code?id=rx-player">
|
|
19
|
+
<img src="https://sonarcloud.io/api/project_badges/measure?project=rx-player&metric=alert_status" />
|
|
17
20
|
</a>
|
|
18
21
|
<a href="https://gitter.im/canalplus/rx-player">
|
|
19
22
|
<img src="https://img.shields.io/gitter/room/canalplus/rx-player.svg" />
|
|
@@ -119,13 +122,11 @@ player.loadVideo({
|
|
|
119
122
|
});
|
|
120
123
|
```
|
|
121
124
|
|
|
122
|
-
We've also written
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
- [
|
|
126
|
-
- [
|
|
127
|
-
- [Selecting a track](https://developers.canal-plus.com/rx-player/doc/pages/tutorials/track_selection.html)
|
|
128
|
-
- [Listening to events contained in the content](https://canalplus.github.io/rx-player/doc/pages/tutorials/stream_events.html)
|
|
125
|
+
We've also written short tutorials to help you familiarize with the RxPlayer API:
|
|
126
|
+
- [Quick start into the API](https://developers.canal-plus.com/rx-player/doc/Getting_Started/Tutorials/Quick_Start.html).
|
|
127
|
+
- [Playing contents with DRMs](https://developers.canal-plus.com/rx-player/doc/Getting_Started/Tutorials/Content_with_DRM.html).
|
|
128
|
+
- [Selecting a track](https://developers.canal-plus.com/rx-player/doc/Getting_Started/Tutorials/Selecting_a_Track.html)
|
|
129
|
+
- [Listening to events contained in the content](https://developers.canal-plus.com/rx-player/doc/Getting_Started/Tutorials/EventStream_Handling.html)
|
|
129
130
|
|
|
130
131
|
To be able to play with the player without needing to perform any setup we also
|
|
131
132
|
created multiple live-editable demos:
|
|
@@ -138,7 +139,7 @@ created multiple live-editable demos:
|
|
|
138
139
|
To reduce the size of the final code, you might also want to import a minimal
|
|
139
140
|
version of the player and only import the features you need. This is documented
|
|
140
141
|
[here
|
|
141
|
-
](https://
|
|
142
|
+
](https://developers.canal-plus.com/rx-player/doc/Getting_Started/Minimal_Player.html):
|
|
142
143
|
|
|
143
144
|
For example, to play encrypted DASH contents, you could just write:
|
|
144
145
|
```js
|
|
@@ -153,13 +154,13 @@ RxPlayer.addFeatures([DASH, EME]);
|
|
|
153
154
|
## API #########################################################################
|
|
154
155
|
|
|
155
156
|
We documented the API in every little details in [the API
|
|
156
|
-
documentation](https://
|
|
157
|
+
documentation](https://developers.canal-plus.com/rx-player/doc/api/Overview.html).
|
|
157
158
|
|
|
158
159
|
You can also refer to the documentation of our previous versions
|
|
159
160
|
[here](https://developers.canal-plus.com/rx-player/documentation_pages_by_version.html)
|
|
160
161
|
|
|
161
162
|
These documentation pages are automatically generated from the content of the
|
|
162
|
-
[doc/api](./doc/api/
|
|
163
|
+
[doc/api](./doc/api/Overview.md) directory in this repository.
|
|
163
164
|
|
|
164
165
|
|
|
165
166
|
|
|
@@ -251,9 +252,9 @@ Now, more than 6 years later, the RxPlayer continues to evolve at the same fast
|
|
|
251
252
|
pace to include a lot of features and improvements you may not find in other
|
|
252
253
|
media players.
|
|
253
254
|
You can look at our
|
|
254
|
-
[API documentation](https://
|
|
255
|
-
[tutorials](https://
|
|
256
|
-
and our [demo page](https://
|
|
255
|
+
[API documentation](https://developers.canal-plus.com/rx-player/doc/api/Overview.html),
|
|
256
|
+
[tutorials](https://developers.canal-plus.com/rx-player/doc/Getting_Started/Tutorials/Quick_Start.html)
|
|
257
|
+
and our [demo page](https://developers.canal-plus.com/rx-player/)
|
|
257
258
|
(an RxPlayer instance is available in the console through the global `player`
|
|
258
259
|
variable there) to see if it matches your need.
|
|
259
260
|
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.26.
|
|
1
|
+
3.26.2
|
|
@@ -14,18 +14,20 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import log from "../log";
|
|
17
|
-
import
|
|
17
|
+
import isNullOrUndefined from "../utils/is_null_or_undefined";
|
|
18
18
|
/**
|
|
19
19
|
* Clear element's src attribute.
|
|
20
20
|
* @param {HTMLMediaElement} element
|
|
21
21
|
*/
|
|
22
22
|
export default function clearElementSrc(element) {
|
|
23
|
-
// On
|
|
24
|
-
// disabled and removed from the DOM.
|
|
23
|
+
// On some browsers, we first have to make sure the textTracks elements are
|
|
24
|
+
// both disabled and removed from the DOM.
|
|
25
25
|
// If we do not do that, we may be left with displayed text tracks on the
|
|
26
|
-
// screen
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
// screen, even if the track elements are properly removed, due to browser
|
|
27
|
+
// issues.
|
|
28
|
+
// Bug seen on Firefox (I forgot which version) and Chrome 96.
|
|
29
|
+
var textTracks = element.textTracks;
|
|
30
|
+
if (!isNullOrUndefined(textTracks)) {
|
|
29
31
|
for (var i = 0; i < textTracks.length; i++) {
|
|
30
32
|
textTracks[i].mode = "disabled";
|
|
31
33
|
}
|
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { of as observableOf, race as observableRace, timer as observableTimer, } from "rxjs";
|
|
17
|
-
import { catchError, map, mergeMap, } from "rxjs/operators";
|
|
16
|
+
import { catchError, map, mergeMap, of as observableOf, race as observableRace, timer as observableTimer, } from "rxjs";
|
|
18
17
|
import castToObservable from "../../utils/cast_to_observable";
|
|
19
18
|
/**
|
|
20
19
|
* Close session and returns and observable that emits when
|
|
@@ -28,8 +28,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
28
28
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
29
29
|
};
|
|
30
30
|
})();
|
|
31
|
-
import { merge as observableMerge, Subject, } from "rxjs";
|
|
32
|
-
import { takeUntil } from "rxjs/operators";
|
|
31
|
+
import { merge as observableMerge, Subject, takeUntil, } from "rxjs";
|
|
33
32
|
import EventEmitter from "../../../utils/event_emitter";
|
|
34
33
|
import PPromise from "../../../utils/promise";
|
|
35
34
|
import * as events from "../../event_listeners";
|
|
@@ -16,7 +16,9 @@
|
|
|
16
16
|
import { Observable } from "rxjs";
|
|
17
17
|
import CustomMediaKeySystemAccess from "./../custom_key_system_access";
|
|
18
18
|
import { ICustomMediaKeys, ICustomMediaKeySession } from "./types";
|
|
19
|
-
|
|
19
|
+
/** Generic implementation of the navigator.requestMediaKeySystemAccess API. */
|
|
20
|
+
declare type ICompatRequestMediaKeySystemAccessFn = (keyType: string, config: MediaKeySystemConfiguration[]) => Observable<MediaKeySystemAccess | CustomMediaKeySystemAccess>;
|
|
21
|
+
declare let requestMediaKeySystemAccess: null | ICompatRequestMediaKeySystemAccessFn;
|
|
20
22
|
/**
|
|
21
23
|
* Set the given MediaKeys on the given HTMLMediaElement.
|
|
22
24
|
* Emits null when done then complete.
|
|
@@ -28,8 +28,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
28
28
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
29
29
|
};
|
|
30
30
|
})();
|
|
31
|
-
import { merge as observableMerge, Subject, } from "rxjs";
|
|
32
|
-
import { takeUntil } from "rxjs/operators";
|
|
31
|
+
import { merge as observableMerge, Subject, takeUntil, } from "rxjs";
|
|
33
32
|
import { base64ToBytes } from "../../../utils/base64";
|
|
34
33
|
import EventEmitter from "../../../utils/event_emitter";
|
|
35
34
|
import PPromise from "../../../utils/promise";
|
|
@@ -67,12 +66,15 @@ var OldWebkitMediaKeySession = /** @class */ (function (_super) {
|
|
|
67
66
|
if (_this._key.indexOf("clearkey") >= 0) {
|
|
68
67
|
var licenseTypedArray = license instanceof ArrayBuffer ? new Uint8Array(license) :
|
|
69
68
|
license;
|
|
70
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
71
|
-
var json = JSON.parse(utf8ToStr(licenseTypedArray));
|
|
72
69
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
70
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
71
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
72
|
+
var json = JSON.parse(utf8ToStr(licenseTypedArray));
|
|
73
73
|
var key = base64ToBytes(json.keys[0].k);
|
|
74
74
|
var kid = base64ToBytes(json.keys[0].kid);
|
|
75
75
|
/* eslint-enable @typescript-eslint/no-unsafe-member-access */
|
|
76
|
+
/* eslint-enable @typescript-eslint/no-unsafe-argument */
|
|
77
|
+
/* eslint-enable @typescript-eslint/no-unsafe-assignment */
|
|
76
78
|
resolve(_this._vid.webkitAddKey(_this._key, key, kid, /* sessionId */ ""));
|
|
77
79
|
}
|
|
78
80
|
else {
|
|
@@ -28,8 +28,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
28
28
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
29
29
|
};
|
|
30
30
|
})();
|
|
31
|
-
import { merge as observableMerge, Subject, } from "rxjs";
|
|
32
|
-
import { takeUntil } from "rxjs/operators";
|
|
31
|
+
import { merge as observableMerge, Subject, takeUntil, } from "rxjs";
|
|
33
32
|
import EventEmitter from "../../../utils/event_emitter";
|
|
34
33
|
import PPromise from "../../../utils/promise";
|
|
35
34
|
import * as events from "../../event_listeners";
|
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { defer as observableDefer, } from "rxjs";
|
|
17
|
-
import { catchError } from "rxjs/operators";
|
|
16
|
+
import { catchError, defer as observableDefer, } from "rxjs";
|
|
18
17
|
import log from "../../log";
|
|
19
18
|
import { getNextBoxOffsets } from "../../parsers/containers/isobmff";
|
|
20
19
|
import { be4toi, concat, } from "../../utils/byte_parsing";
|
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { defer as observableDefer, of as observableOf, race as observableRace, timer as observableTimer, } from "rxjs";
|
|
17
|
-
import { mapTo, mergeMap, take, } from "rxjs/operators";
|
|
16
|
+
import { defer as observableDefer, map, mergeMap, of as observableOf, race as observableRace, take, timer as observableTimer, } from "rxjs";
|
|
18
17
|
import log from "../../log";
|
|
19
18
|
import castToObservable from "../../utils/cast_to_observable";
|
|
20
19
|
import tryCatch from "../../utils/rx-try_catch";
|
|
@@ -46,6 +45,6 @@ export default function loadSession(session, sessionId) {
|
|
|
46
45
|
// Chromium/Chrome versions where the `keyStatuses` property from a loaded
|
|
47
46
|
// MediaKeySession would not be populated directly as the load answer but
|
|
48
47
|
// asynchronously after.
|
|
49
|
-
return observableRace(observableTimer(EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES), onKeyStatusesChange$(session)).pipe(take(1),
|
|
48
|
+
return observableRace(observableTimer(EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES), onKeyStatusesChange$(session)).pipe(take(1), map(function () { return isLoaded; }));
|
|
50
49
|
}));
|
|
51
50
|
}
|
|
@@ -31,7 +31,7 @@ export declare type IEventTargetLike = HTMLElement | IEventEmitterLike | IEventE
|
|
|
31
31
|
* Emit the original value on subscription.
|
|
32
32
|
* @returns {Observable}
|
|
33
33
|
*/
|
|
34
|
-
declare function
|
|
34
|
+
declare function isPageActive(): Observable<boolean>;
|
|
35
35
|
export interface IPictureInPictureEvent {
|
|
36
36
|
isEnabled: boolean;
|
|
37
37
|
pipWindow: ICompatPictureInPictureWindow | null;
|
|
@@ -53,6 +53,7 @@ declare function isVideoVisible(pip$: Observable<IPictureInPictureEvent>): Obser
|
|
|
53
53
|
* Get video width from HTML video element, or video estimated dimensions
|
|
54
54
|
* when Picture-in-Picture is activated.
|
|
55
55
|
* @param {HTMLMediaElement} mediaElement
|
|
56
|
+
* @param {Observable} pip$
|
|
56
57
|
* @returns {Observable}
|
|
57
58
|
*/
|
|
58
59
|
declare function videoWidth$(mediaElement: HTMLMediaElement, pip$: Observable<IPictureInPictureEvent>): Observable<number>;
|
|
@@ -146,4 +147,4 @@ declare const onKeyError$: (element: IEventTargetLike) => Observable<Event>;
|
|
|
146
147
|
* @returns {Observable}
|
|
147
148
|
*/
|
|
148
149
|
declare const onKeyStatusesChange$: (element: IEventTargetLike) => Observable<Event>;
|
|
149
|
-
export {
|
|
150
|
+
export { isPageActive, isVideoVisible, videoWidth$, onPlayPause$, onTextTrackChanges$, onLoadedMetadata$, onSeeking$, onSeeked$, onEnded$, onTimeUpdate$, onFullscreenChange$, onSourceOpen$, onSourceClose$, onSourceEnded$, onUpdate$, onRemoveSourceBuffers$, onEncrypted$, onKeyMessage$, onKeyAdded$, onKeyError$, onKeyStatusesChange$, onPictureInPictureEvent$, };
|
|
@@ -17,8 +17,7 @@
|
|
|
17
17
|
* This file provides browser-agnostic event listeners under the form of
|
|
18
18
|
* RxJS Observables
|
|
19
19
|
*/
|
|
20
|
-
import { combineLatest as observableCombineLatest, defer as observableDefer, fromEvent as observableFromEvent, interval as observableInterval, merge as observableMerge,
|
|
21
|
-
import { delay, distinctUntilChanged, map, mapTo, startWith, switchMap, throttleTime, } from "rxjs/operators";
|
|
20
|
+
import { NEVER, combineLatest as observableCombineLatest, defer as observableDefer, delay, distinctUntilChanged, fromEvent as observableFromEvent, interval as observableInterval, map, merge as observableMerge, of as observableOf, startWith, switchMap, throttleTime, } from "rxjs";
|
|
22
21
|
import config from "../config";
|
|
23
22
|
import log from "../log";
|
|
24
23
|
import isNonEmptyString from "../utils/is_non_empty_string";
|
|
@@ -88,8 +87,8 @@ function compatibleListener(eventNames, prefixes) {
|
|
|
88
87
|
return observableFromEvent(element, mem);
|
|
89
88
|
}
|
|
90
89
|
else {
|
|
91
|
-
if (
|
|
92
|
-
log.warn("compat: element "
|
|
90
|
+
if (0 /* CURRENT_ENV */ === 1 /* DEV */) {
|
|
91
|
+
log.warn("compat: element ".concat(element.tagName) +
|
|
93
92
|
" does not support any of these events: " +
|
|
94
93
|
prefixedEvents.join(", "));
|
|
95
94
|
}
|
|
@@ -134,19 +133,13 @@ function visibilityChange() {
|
|
|
134
133
|
.pipe(map(function () { return !(document[hidden]); }), startWith(!isHidden), distinctUntilChanged());
|
|
135
134
|
});
|
|
136
135
|
}
|
|
137
|
-
/**
|
|
138
|
-
* @returns {Observable}
|
|
139
|
-
*/
|
|
140
|
-
function videoSizeChange() {
|
|
141
|
-
return observableFromEvent(window, "resize");
|
|
142
|
-
}
|
|
143
136
|
/**
|
|
144
137
|
* Emit `true` if the page is considered active.
|
|
145
138
|
* `false` when considered inactive.
|
|
146
139
|
* Emit the original value on subscription.
|
|
147
140
|
* @returns {Observable}
|
|
148
141
|
*/
|
|
149
|
-
function
|
|
142
|
+
function isPageActive() {
|
|
150
143
|
return visibilityChange().pipe(switchMap(function (x) {
|
|
151
144
|
if (!x) {
|
|
152
145
|
return observableOf(x).pipe(delay(INACTIVITY_DELAY));
|
|
@@ -192,7 +185,7 @@ function onPictureInPictureEvent$(elt) {
|
|
|
192
185
|
pipWindow: (_a = evt.pictureInPictureWindow) !== null && _a !== void 0 ? _a : null,
|
|
193
186
|
});
|
|
194
187
|
})), observableFromEvent(mediaElement, "leavepictureinpicture")
|
|
195
|
-
.pipe(
|
|
188
|
+
.pipe(map(function () { return ({ isEnabled: false, pipWindow: null }); }))).pipe(startWith(initialState));
|
|
196
189
|
});
|
|
197
190
|
}
|
|
198
191
|
/**
|
|
@@ -215,13 +208,14 @@ function isVideoVisible(pip$) {
|
|
|
215
208
|
* Get video width from HTML video element, or video estimated dimensions
|
|
216
209
|
* when Picture-in-Picture is activated.
|
|
217
210
|
* @param {HTMLMediaElement} mediaElement
|
|
211
|
+
* @param {Observable} pip$
|
|
218
212
|
* @returns {Observable}
|
|
219
213
|
*/
|
|
220
214
|
function videoWidth$(mediaElement, pip$) {
|
|
221
215
|
return observableCombineLatest([
|
|
222
216
|
pip$,
|
|
223
217
|
observableInterval(20000).pipe(startWith(null)),
|
|
224
|
-
|
|
218
|
+
observableFromEvent(window, "resize").pipe(throttleTime(500), startWith(null)),
|
|
225
219
|
]).pipe(switchMap(function (_a) {
|
|
226
220
|
var pip = _a[0];
|
|
227
221
|
if (!pip.isEnabled) {
|
|
@@ -334,4 +328,4 @@ var onKeyError$ = compatibleListener(["keyerror", "error"]);
|
|
|
334
328
|
* @returns {Observable}
|
|
335
329
|
*/
|
|
336
330
|
var onKeyStatusesChange$ = compatibleListener(["keystatuseschange"]);
|
|
337
|
-
export {
|
|
331
|
+
export { isPageActive, isVideoVisible, videoWidth$, onPlayPause$, onTextTrackChanges$, onLoadedMetadata$, onSeeking$, onSeeked$, onEnded$, onTimeUpdate$, onFullscreenChange$, onSourceOpen$, onSourceClose$, onSourceEnded$, onUpdate$, onRemoveSourceBuffers$, onEncrypted$, onKeyMessage$, onKeyAdded$, onKeyError$, onKeyStatusesChange$, onPictureInPictureEvent$, };
|
|
@@ -28,7 +28,7 @@ export default function makeCue(startTime, endTime, payload) {
|
|
|
28
28
|
if (startTime >= endTime) {
|
|
29
29
|
// IE/Edge will throw in this case.
|
|
30
30
|
// See issue #501
|
|
31
|
-
log.warn("Compat: Invalid cue times: "
|
|
31
|
+
log.warn("Compat: Invalid cue times: ".concat(startTime, " - ").concat(endTime));
|
|
32
32
|
return null;
|
|
33
33
|
}
|
|
34
34
|
if (isNullOrUndefined(window.VTTCue)) {
|
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { defer as observableDefer, interval as observableInterval, Observable, } from "rxjs";
|
|
17
|
-
import { distinctUntilChanged, map, startWith, } from "rxjs/operators";
|
|
16
|
+
import { defer as observableDefer, distinctUntilChanged, interval as observableInterval, map, Observable, startWith, } from "rxjs";
|
|
18
17
|
import log from "../log";
|
|
19
18
|
import isNode from "./is_node";
|
|
20
19
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
@@ -27,7 +27,7 @@ import clearElementSrc from "./clear_element_src";
|
|
|
27
27
|
*/
|
|
28
28
|
export default function setElementSrc$(mediaElement, url) {
|
|
29
29
|
return new Observable(function (observer) {
|
|
30
|
-
log.info("Setting URL to
|
|
30
|
+
log.info("Setting URL to HTMLMediaElement", url);
|
|
31
31
|
mediaElement.src = url;
|
|
32
32
|
observer.next(undefined);
|
|
33
33
|
return function () {
|
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { of as observableOf, } from "rxjs";
|
|
17
|
-
import { take } from "rxjs/operators";
|
|
16
|
+
import { of as observableOf, take, } from "rxjs";
|
|
18
17
|
import { READY_STATES } from "./browser_compatibility_types";
|
|
19
18
|
import { onLoadedMetadata$ } from "./event_listeners";
|
|
20
19
|
/**
|
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { of as observableOf, } from "rxjs";
|
|
17
|
-
import { take } from "rxjs/operators";
|
|
16
|
+
import { of as observableOf, take, } from "rxjs";
|
|
18
17
|
import { onSourceOpen$ } from "./event_listeners";
|
|
19
18
|
/**
|
|
20
19
|
* Wait for the MediaSource's sourceopen event and emit. Emit immediatelly if
|
|
@@ -385,17 +385,12 @@ declare const _default: {
|
|
|
385
385
|
LOW_LATENCY: number;
|
|
386
386
|
};
|
|
387
387
|
/**
|
|
388
|
-
* Minimum interval at which
|
|
388
|
+
* Minimum interval at which playback information samples will be taken. This
|
|
389
389
|
* variable is for the "regular" mediasource strategy (that is, not for the
|
|
390
390
|
* directfile API.
|
|
391
391
|
*
|
|
392
|
-
*
|
|
393
|
-
*
|
|
394
|
-
* - set the clock for the ABR strategy.
|
|
395
|
-
* - used to trigger positionUpdate events.
|
|
396
|
-
*
|
|
397
|
-
* This common logic is for performance reasons, as we call multiple browser's
|
|
398
|
-
* APIs which are useful for most of these.
|
|
392
|
+
* At each of these interval, various different modules in the RxPlayer will
|
|
393
|
+
* run based on the information communicated.
|
|
399
394
|
*
|
|
400
395
|
* Keep in mind this is the minimum interval. This logic will also be
|
|
401
396
|
* triggered when various events of the media element are received.
|
|
@@ -295,7 +295,7 @@ export default {
|
|
|
295
295
|
*/
|
|
296
296
|
DEFAULT_LIVE_GAP: {
|
|
297
297
|
DEFAULT: 10,
|
|
298
|
-
LOW_LATENCY: 3,
|
|
298
|
+
LOW_LATENCY: 3.5,
|
|
299
299
|
},
|
|
300
300
|
/**
|
|
301
301
|
* Maximum time, in seconds, the player should automatically skip when stalled
|
|
@@ -418,17 +418,12 @@ export default {
|
|
|
418
418
|
LOW_LATENCY: 1000,
|
|
419
419
|
},
|
|
420
420
|
/**
|
|
421
|
-
* Minimum interval at which
|
|
421
|
+
* Minimum interval at which playback information samples will be taken. This
|
|
422
422
|
* variable is for the "regular" mediasource strategy (that is, not for the
|
|
423
423
|
* directfile API.
|
|
424
424
|
*
|
|
425
|
-
*
|
|
426
|
-
*
|
|
427
|
-
* - set the clock for the ABR strategy.
|
|
428
|
-
* - used to trigger positionUpdate events.
|
|
429
|
-
*
|
|
430
|
-
* This common logic is for performance reasons, as we call multiple browser's
|
|
431
|
-
* APIs which are useful for most of these.
|
|
425
|
+
* At each of these interval, various different modules in the RxPlayer will
|
|
426
|
+
* run based on the information communicated.
|
|
432
427
|
*
|
|
433
428
|
* Keep in mind this is the minimum interval. This logic will also be
|
|
434
429
|
* triggered when various events of the media element are received.
|
|
@@ -15,9 +15,10 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { Observable } from "rxjs";
|
|
17
17
|
import { Representation } from "../../manifest";
|
|
18
|
+
import { ISharedReference } from "../../utils/reference";
|
|
18
19
|
import { IBufferType } from "../segment_buffers";
|
|
19
|
-
import { IABREstimate, IABRStreamEvents,
|
|
20
|
-
export declare type
|
|
20
|
+
import { IABREstimate, IABRStreamEvents, IRepresentationEstimatorPlaybackObservation } from "./representation_estimator";
|
|
21
|
+
export declare type IABRManagerPlaybackObservation = IRepresentationEstimatorPlaybackObservation;
|
|
21
22
|
interface IRepresentationEstimatorsThrottlers {
|
|
22
23
|
limitWidth: Partial<Record<IBufferType, Observable<number>>>;
|
|
23
24
|
throttle: Partial<Record<IBufferType, Observable<number>>>;
|
|
@@ -27,12 +28,12 @@ export interface IABRManagerArguments {
|
|
|
27
28
|
initialBitrates: Partial<Record<IBufferType, // Initial bitrate chosen, per
|
|
28
29
|
number>>;
|
|
29
30
|
lowLatencyMode: boolean;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
/** Minimum bitrate chosen when in auto mode, per type (0 by default) */
|
|
32
|
+
minAutoBitrates: Partial<Record<IBufferType, ISharedReference<number>>>;
|
|
33
|
+
/** Maximum bitrate chosen when in auto mode, per type (0 by default) */
|
|
34
|
+
maxAutoBitrates: Partial<Record<IBufferType, ISharedReference<number>>>;
|
|
35
|
+
/** Manually forced bitrate set for a given type (`-1` for auto mode */
|
|
36
|
+
manualBitrates: Partial<Record<IBufferType, ISharedReference<number>>>;
|
|
36
37
|
throttlers: IRepresentationEstimatorsThrottlers;
|
|
37
38
|
}
|
|
38
39
|
/**
|
|
@@ -60,11 +61,11 @@ export default class ABRManager {
|
|
|
60
61
|
* state).
|
|
61
62
|
* @param {string} type
|
|
62
63
|
* @param {Array.<Representation>} representations
|
|
63
|
-
* @param {Observable<Object>}
|
|
64
|
+
* @param {Observable<Object>} observation$
|
|
64
65
|
* @param {Observable<Object>} streamEvents$
|
|
65
66
|
* @returns {Observable}
|
|
66
67
|
*/
|
|
67
|
-
get$(type: IBufferType, representations: Representation[],
|
|
68
|
+
get$(type: IBufferType, representations: Representation[], observation$: Observable<IABRManagerPlaybackObservation>, streamEvents$: Observable<IABRStreamEvents>): Observable<IABREstimate>;
|
|
68
69
|
/**
|
|
69
70
|
* @param {string} bufferType
|
|
70
71
|
* @returns {Object}
|
|
@@ -13,11 +13,20 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
|
|
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 { combineLatest as observableCombineLatest, map, of as observableOf, } from "rxjs";
|
|
17
26
|
import log from "../../log";
|
|
27
|
+
import objectAssign from "../../utils/object_assign";
|
|
18
28
|
import takeFirstSet from "../../utils/take_first_set";
|
|
19
29
|
import BandwidthEstimator from "./bandwidth_estimator";
|
|
20
|
-
import createFilters from "./create_filters";
|
|
21
30
|
import RepresentationEstimator from "./representation_estimator";
|
|
22
31
|
/**
|
|
23
32
|
* Adaptive BitRate Manager.
|
|
@@ -45,18 +54,19 @@ var ABRManager = /** @class */ (function () {
|
|
|
45
54
|
* state).
|
|
46
55
|
* @param {string} type
|
|
47
56
|
* @param {Array.<Representation>} representations
|
|
48
|
-
* @param {Observable<Object>}
|
|
57
|
+
* @param {Observable<Object>} observation$
|
|
49
58
|
* @param {Observable<Object>} streamEvents$
|
|
50
59
|
* @returns {Observable}
|
|
51
60
|
*/
|
|
52
|
-
ABRManager.prototype.get$ = function (type, representations,
|
|
61
|
+
ABRManager.prototype.get$ = function (type, representations, observation$, streamEvents$) {
|
|
62
|
+
var _a, _b, _c;
|
|
53
63
|
var bandwidthEstimator = this._getBandwidthEstimator(type);
|
|
54
|
-
var manualBitrate$ = takeFirstSet(this._manualBitrates[type], observableOf(-1));
|
|
55
|
-
var minAutoBitrate$ = takeFirstSet(this._minAutoBitrates[type], observableOf(0));
|
|
56
|
-
var maxAutoBitrate$ = takeFirstSet(this._maxAutoBitrates[type], observableOf(Infinity));
|
|
64
|
+
var manualBitrate$ = takeFirstSet((_a = this._manualBitrates[type]) === null || _a === void 0 ? void 0 : _a.asObservable(), observableOf(-1));
|
|
65
|
+
var minAutoBitrate$ = takeFirstSet((_b = this._minAutoBitrates[type]) === null || _b === void 0 ? void 0 : _b.asObservable(), observableOf(0));
|
|
66
|
+
var maxAutoBitrate$ = takeFirstSet((_c = this._maxAutoBitrates[type]) === null || _c === void 0 ? void 0 : _c.asObservable(), observableOf(Infinity));
|
|
57
67
|
var initialBitrate = takeFirstSet(this._initialBitrates[type], 0);
|
|
58
68
|
var filters$ = createFilters(this._throttlers.limitWidth[type], this._throttlers.throttleBitrate[type], this._throttlers.throttle[type]);
|
|
59
|
-
return RepresentationEstimator({ bandwidthEstimator: bandwidthEstimator, streamEvents$: streamEvents$,
|
|
69
|
+
return RepresentationEstimator({ bandwidthEstimator: bandwidthEstimator, streamEvents$: streamEvents$, observation$: observation$, filters$: filters$, initialBitrate: initialBitrate, manualBitrate$: manualBitrate$, minAutoBitrate$: minAutoBitrate$, maxAutoBitrate$: maxAutoBitrate$, representations: representations, lowLatencyMode: this._lowLatencyMode });
|
|
60
70
|
};
|
|
61
71
|
/**
|
|
62
72
|
* @param {string} bufferType
|
|
@@ -75,3 +85,32 @@ var ABRManager = /** @class */ (function () {
|
|
|
75
85
|
return ABRManager;
|
|
76
86
|
}());
|
|
77
87
|
export default ABRManager;
|
|
88
|
+
/**
|
|
89
|
+
* Create Observable that merge several throttling Observables into one.
|
|
90
|
+
* @param {Observable} limitWidth$ - Emit the width at which the chosen
|
|
91
|
+
* Representation should be limited.
|
|
92
|
+
* @param {Observable} throttleBitrate$ - Emit the maximum bitrate authorized.
|
|
93
|
+
* @param {Observable} throttle$ - Also emit the maximum bitrate authorized.
|
|
94
|
+
* Here for legacy reasons.
|
|
95
|
+
* @returns {Observable}
|
|
96
|
+
*/
|
|
97
|
+
function createFilters(limitWidth$, throttleBitrate$, throttle$) {
|
|
98
|
+
var deviceEventsArray = [];
|
|
99
|
+
if (limitWidth$ != null) {
|
|
100
|
+
deviceEventsArray.push(limitWidth$.pipe(map(function (width) { return ({ width: width }); })));
|
|
101
|
+
}
|
|
102
|
+
if (throttle$ != null) {
|
|
103
|
+
deviceEventsArray.push(throttle$.pipe(map(function (bitrate) { return ({ bitrate: bitrate }); })));
|
|
104
|
+
}
|
|
105
|
+
if (throttleBitrate$ != null) {
|
|
106
|
+
deviceEventsArray.push(throttleBitrate$.pipe(map(function (bitrate) { return ({ bitrate: bitrate }); })));
|
|
107
|
+
}
|
|
108
|
+
// Emit restrictions on the pools of available representations to choose
|
|
109
|
+
// from.
|
|
110
|
+
return deviceEventsArray.length > 0 ?
|
|
111
|
+
observableCombineLatest(deviceEventsArray)
|
|
112
|
+
.pipe(map(function (args) {
|
|
113
|
+
return objectAssign.apply(void 0, __spreadArray([{}], args, false));
|
|
114
|
+
})) :
|
|
115
|
+
observableOf({});
|
|
116
|
+
}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import config from "../../config";
|
|
17
|
-
import EWMA from "./ewma";
|
|
17
|
+
import EWMA from "./utils/ewma";
|
|
18
18
|
var ABR_MINIMUM_TOTAL_BYTES = config.ABR_MINIMUM_TOTAL_BYTES, ABR_MINIMUM_CHUNK_SIZE = config.ABR_MINIMUM_CHUNK_SIZE, ABR_FAST_EMA = config.ABR_FAST_EMA, ABR_SLOW_EMA = config.ABR_SLOW_EMA;
|
|
19
19
|
/**
|
|
20
20
|
* Calculate a mean bandwidth based on the bytes downloaded and the amount
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import { Observable } from "rxjs";
|
|
17
|
-
import {
|
|
17
|
+
import { IBufferBasedChooserPlaybackObservation } from "./get_estimate_from_buffer_levels";
|
|
18
18
|
/**
|
|
19
19
|
* Choose a bitrate based on the currently available buffer.
|
|
20
20
|
*
|
|
@@ -30,4 +30,4 @@ import { IBufferBasedChooserClockTick } from "./get_estimate_from_buffer_levels"
|
|
|
30
30
|
* @param {Array.<number>} bitrates
|
|
31
31
|
* @returns {Observable}
|
|
32
32
|
*/
|
|
33
|
-
export default function BufferBasedChooser(update$: Observable<
|
|
33
|
+
export default function BufferBasedChooser(update$: Observable<IBufferBasedChooserPlaybackObservation>, bitrates: number[]): Observable<number | undefined>;
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { map } from "rxjs
|
|
16
|
+
import { map, } from "rxjs";
|
|
17
17
|
import log from "../../log";
|
|
18
18
|
import getBufferLevels from "./get_buffer_levels";
|
|
19
19
|
import getEstimateFromBufferLevels from "./get_estimate_from_buffer_levels";
|
|
@@ -35,7 +35,7 @@ import getEstimateFromBufferLevels from "./get_estimate_from_buffer_levels";
|
|
|
35
35
|
export default function BufferBasedChooser(update$, bitrates) {
|
|
36
36
|
var levelsMap = getBufferLevels(bitrates);
|
|
37
37
|
log.debug("ABR: Steps for buffer based chooser.", levelsMap.map(function (l, i) { return ({ bufferLevel: l, bitrate: bitrates[i] }); }));
|
|
38
|
-
return update$.pipe(map(function (
|
|
39
|
-
return getEstimateFromBufferLevels(
|
|
38
|
+
return update$.pipe(map(function (playbackObservation) {
|
|
39
|
+
return getEstimateFromBufferLevels(playbackObservation, bitrates, levelsMap);
|
|
40
40
|
}));
|
|
41
41
|
}
|
|
@@ -37,6 +37,9 @@ export default function getBufferLevels(bitrates) {
|
|
|
37
37
|
return 0;
|
|
38
38
|
}
|
|
39
39
|
var boundedIndex = Math.min(Math.max(1, index), bitrates.length - 1);
|
|
40
|
+
if (bitrates[boundedIndex] === bitrates[boundedIndex - 1]) {
|
|
41
|
+
return minBufferLevelForBitrate(index - 1);
|
|
42
|
+
}
|
|
40
43
|
return Vp * (gp + (bitrates[boundedIndex] * utilities[boundedIndex - 1] -
|
|
41
44
|
bitrates[boundedIndex - 1] * utilities[boundedIndex]) / (bitrates[boundedIndex] -
|
|
42
45
|
bitrates[boundedIndex - 1])) + 4;
|