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
|
@@ -52,7 +52,8 @@ function getWantedRepeatIndex(
|
|
|
52
52
|
* @returns {Array.<Object>}
|
|
53
53
|
*/
|
|
54
54
|
export default function getSegmentsFromTimeline(
|
|
55
|
-
index : {
|
|
55
|
+
index : { availabilityTimeComplete? : boolean;
|
|
56
|
+
mediaURLs : string[] | null;
|
|
56
57
|
startNumber? : number;
|
|
57
58
|
timeline : IIndexSegment[];
|
|
58
59
|
timescale : number;
|
|
@@ -66,9 +67,7 @@ export default function getSegmentsFromTimeline(
|
|
|
66
67
|
const scaledTo = toIndexTime(from + durationWanted, index);
|
|
67
68
|
const { timeline, timescale, mediaURLs, startNumber } = index;
|
|
68
69
|
|
|
69
|
-
let currentNumber = startNumber
|
|
70
|
-
undefined;
|
|
71
|
-
|
|
70
|
+
let currentNumber = startNumber ?? 1;
|
|
72
71
|
const segments : ISegment[] = [];
|
|
73
72
|
|
|
74
73
|
const timelineLength = timeline.length;
|
|
@@ -85,11 +84,13 @@ export default function getSegmentsFromTimeline(
|
|
|
85
84
|
maxEncounteredDuration = Math.max(maxEncounteredDuration, duration);
|
|
86
85
|
|
|
87
86
|
const repeat = calculateRepeat(timelineItem, timeline[i + 1], maximumTime);
|
|
87
|
+
const complete = index.availabilityTimeComplete !== false ||
|
|
88
|
+
i !== timelineLength - 1 &&
|
|
89
|
+
repeat !== 0;
|
|
88
90
|
let segmentNumberInCurrentRange = getWantedRepeatIndex(start, duration, scaledUp);
|
|
89
91
|
let segmentTime = start + segmentNumberInCurrentRange * duration;
|
|
90
92
|
while (segmentTime < scaledTo && segmentNumberInCurrentRange <= repeat) {
|
|
91
|
-
const segmentNumber = currentNumber
|
|
92
|
-
currentNumber + segmentNumberInCurrentRange : undefined;
|
|
93
|
+
const segmentNumber = currentNumber + segmentNumberInCurrentRange;
|
|
93
94
|
|
|
94
95
|
const detokenizedURLs = mediaURLs === null ?
|
|
95
96
|
null :
|
|
@@ -106,6 +107,7 @@ export default function getSegmentsFromTimeline(
|
|
|
106
107
|
mediaURLs: detokenizedURLs,
|
|
107
108
|
number: segmentNumber,
|
|
108
109
|
timestampOffset: -(index.indexTimeOffset / timescale),
|
|
110
|
+
complete,
|
|
109
111
|
privateInfos: { isEMSGWhitelisted } };
|
|
110
112
|
segments.push(segment);
|
|
111
113
|
|
|
@@ -119,9 +121,7 @@ export default function getSegmentsFromTimeline(
|
|
|
119
121
|
return segments;
|
|
120
122
|
}
|
|
121
123
|
|
|
122
|
-
|
|
123
|
-
currentNumber += repeat + 1;
|
|
124
|
-
}
|
|
124
|
+
currentNumber += repeat + 1;
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
return segments;
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
} from "../../../../../manifest";
|
|
22
22
|
import { IEMSG } from "../../../../containers/isobmff";
|
|
23
23
|
import { getTimescaledRange } from "../../../utils/index_helpers";
|
|
24
|
+
import { IResolvedBaseUrl } from "../resolve_base_urls";
|
|
24
25
|
import getInitSegment from "./get_init_segment";
|
|
25
26
|
import { createIndexURLs } from "./tokens";
|
|
26
27
|
|
|
@@ -106,7 +107,7 @@ export interface IListIndexContextArgument {
|
|
|
106
107
|
/** Start of the period concerned by this RepresentationIndex, in seconds. */
|
|
107
108
|
periodStart : number;
|
|
108
109
|
/** Base URL for the Representation concerned. */
|
|
109
|
-
representationBaseURLs :
|
|
110
|
+
representationBaseURLs : IResolvedBaseUrl[];
|
|
110
111
|
/** ID of the Representation concerned. */
|
|
111
112
|
representationId? : string;
|
|
112
113
|
/** Bitrate of the Representation concerned. */
|
|
@@ -145,8 +146,9 @@ export default class ListRepresentationIndex implements IRepresentationIndex {
|
|
|
145
146
|
const timescale = index.timescale ?? 1;
|
|
146
147
|
const indexTimeOffset = presentationTimeOffset - periodStart * timescale;
|
|
147
148
|
|
|
149
|
+
const urlSources : string[] = representationBaseURLs.map(b => b.url);
|
|
148
150
|
const list = index.list.map((lItem) => ({
|
|
149
|
-
mediaURLs: createIndexURLs(
|
|
151
|
+
mediaURLs: createIndexURLs(urlSources,
|
|
150
152
|
lItem.media,
|
|
151
153
|
representationId,
|
|
152
154
|
representationBitrate),
|
|
@@ -158,7 +160,7 @@ export default class ListRepresentationIndex implements IRepresentationIndex {
|
|
|
158
160
|
indexRange: index.indexRange,
|
|
159
161
|
initialization: index.initialization == null ?
|
|
160
162
|
undefined :
|
|
161
|
-
{ mediaURLs: createIndexURLs(
|
|
163
|
+
{ mediaURLs: createIndexURLs(urlSources,
|
|
162
164
|
index.initialization.media,
|
|
163
165
|
representationId,
|
|
164
166
|
representationBitrate),
|
|
@@ -207,6 +209,7 @@ export default class ListRepresentationIndex implements IRepresentationIndex {
|
|
|
207
209
|
end: time + durationInSeconds,
|
|
208
210
|
mediaURLs,
|
|
209
211
|
timestampOffset: -(index.indexTimeOffset / timescale),
|
|
212
|
+
complete: true,
|
|
210
213
|
privateInfos: { isEMSGWhitelisted:
|
|
211
214
|
this._isEMSGWhitelisted } };
|
|
212
215
|
segments.push(segment);
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
} from "../../../../../manifest";
|
|
22
22
|
import { IEMSG } from "../../../../containers/isobmff";
|
|
23
23
|
import ManifestBoundsCalculator from "../manifest_bounds_calculator";
|
|
24
|
+
import { IResolvedBaseUrl } from "../resolve_base_urls";
|
|
24
25
|
import getInitSegment from "./get_init_segment";
|
|
25
26
|
import isPeriodFulfilled from "./is_period_fulfilled";
|
|
26
27
|
import {
|
|
@@ -122,7 +123,7 @@ export interface ITemplateIndexContextArgument {
|
|
|
122
123
|
/** Whether the corresponding Manifest can be updated and changed. */
|
|
123
124
|
isDynamic : boolean;
|
|
124
125
|
/** Base URL for the Representation concerned. */
|
|
125
|
-
representationBaseURLs :
|
|
126
|
+
representationBaseURLs : IResolvedBaseUrl[];
|
|
126
127
|
/** ID of the Representation concerned. */
|
|
127
128
|
representationId? : string;
|
|
128
129
|
/** Bitrate of the Representation concerned. */
|
|
@@ -177,7 +178,12 @@ export default class TemplateRepresentationIndex implements IRepresentationIndex
|
|
|
177
178
|
isEMSGWhitelisted } = context;
|
|
178
179
|
const timescale = index.timescale ?? 1;
|
|
179
180
|
|
|
180
|
-
|
|
181
|
+
const minBaseUrlAto = representationBaseURLs.length === 0 ?
|
|
182
|
+
0 :
|
|
183
|
+
representationBaseURLs.reduce((acc, rbu) => {
|
|
184
|
+
return Math.min(acc, rbu.availabilityTimeOffset);
|
|
185
|
+
}, Infinity);
|
|
186
|
+
this._availabilityTimeOffset = availabilityTimeOffset + minBaseUrlAto;
|
|
181
187
|
|
|
182
188
|
this._manifestBoundsCalculator = manifestBoundsCalculator;
|
|
183
189
|
this._aggressiveMode = aggressiveMode;
|
|
@@ -192,18 +198,19 @@ export default class TemplateRepresentationIndex implements IRepresentationIndex
|
|
|
192
198
|
throw new Error("Invalid SegmentTemplate: no duration");
|
|
193
199
|
}
|
|
194
200
|
|
|
201
|
+
const urlSources : string[] = representationBaseURLs.map(b => b.url);
|
|
195
202
|
this._index = { duration: index.duration,
|
|
196
203
|
timescale,
|
|
197
204
|
indexRange: index.indexRange,
|
|
198
205
|
indexTimeOffset,
|
|
199
206
|
initialization: index.initialization == null ?
|
|
200
207
|
undefined :
|
|
201
|
-
{ mediaURLs: createIndexURLs(
|
|
208
|
+
{ mediaURLs: createIndexURLs(urlSources,
|
|
202
209
|
index.initialization.media,
|
|
203
210
|
representationId,
|
|
204
211
|
representationBitrate),
|
|
205
212
|
range: index.initialization.range },
|
|
206
|
-
mediaURLs: createIndexURLs(
|
|
213
|
+
mediaURLs: createIndexURLs(urlSources,
|
|
207
214
|
index.media,
|
|
208
215
|
representationId,
|
|
209
216
|
representationBitrate),
|
|
@@ -257,8 +264,7 @@ export default class TemplateRepresentationIndex implements IRepresentationIndex
|
|
|
257
264
|
const segments : ISegment[] = [];
|
|
258
265
|
|
|
259
266
|
// number corresponding to the Period's start
|
|
260
|
-
const numberOffset = startNumber
|
|
261
|
-
startNumber;
|
|
267
|
+
const numberOffset = startNumber ?? 1;
|
|
262
268
|
|
|
263
269
|
// calcul initial time from Period start, where the first segment would have
|
|
264
270
|
// the `0` number
|
|
@@ -293,6 +299,7 @@ export default class TemplateRepresentationIndex implements IRepresentationIndex
|
|
|
293
299
|
scaledDuration: realDuration / timescale,
|
|
294
300
|
mediaURLs: detokenizedURLs,
|
|
295
301
|
timestampOffset: -(index.indexTimeOffset / timescale),
|
|
302
|
+
complete: true,
|
|
296
303
|
privateInfos: {
|
|
297
304
|
isEMSGWhitelisted: this._isEMSGWhitelisted,
|
|
298
305
|
} };
|
package/src/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.ts
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import log from "../../../../../../log";
|
|
18
|
+
import isNullOrUndefined from "../../../../../../utils/is_null_or_undefined";
|
|
18
19
|
import { IIndexSegment } from "../../../../utils/index_helpers";
|
|
19
20
|
|
|
20
21
|
/**
|
|
@@ -40,23 +41,23 @@ export default function convertElementsToIndexSegment(
|
|
|
40
41
|
let start = item.start;
|
|
41
42
|
let duration = item.duration;
|
|
42
43
|
const repeatCount = item.repeatCount;
|
|
43
|
-
if (start
|
|
44
|
-
if (previousItem
|
|
44
|
+
if (start === undefined) {
|
|
45
|
+
if (previousItem === null) {
|
|
45
46
|
start = timelineStart;
|
|
46
|
-
} else if (previousItem.duration
|
|
47
|
+
} else if (!isNullOrUndefined(previousItem.duration)) {
|
|
47
48
|
start = previousItem.start +
|
|
48
49
|
(previousItem.duration * (previousItem.repeatCount + 1));
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
|
-
if ((duration
|
|
52
|
-
nextItem
|
|
53
|
-
start
|
|
52
|
+
if ((duration === undefined || isNaN(duration)) &&
|
|
53
|
+
nextItem !== null && nextItem.start !== undefined && !isNaN(nextItem.start) &&
|
|
54
|
+
start !== undefined && !isNaN(start)
|
|
54
55
|
) {
|
|
55
56
|
duration = nextItem.start - start;
|
|
56
57
|
}
|
|
57
|
-
if ((start
|
|
58
|
-
(duration
|
|
59
|
-
(repeatCount
|
|
58
|
+
if ((start !== undefined && !isNaN(start)) &&
|
|
59
|
+
(duration !== undefined && !isNaN(duration)) &&
|
|
60
|
+
(repeatCount === undefined || !isNaN(repeatCount))
|
|
60
61
|
) {
|
|
61
62
|
return { start,
|
|
62
63
|
duration,
|
|
@@ -38,6 +38,7 @@ import isSegmentStillAvailable from "../../../../utils/is_segment_still_availabl
|
|
|
38
38
|
import updateSegmentTimeline from "../../../../utils/update_segment_timeline";
|
|
39
39
|
import { ISegmentTimelineElement } from "../../../node_parser_types";
|
|
40
40
|
import ManifestBoundsCalculator from "../../manifest_bounds_calculator";
|
|
41
|
+
import { IResolvedBaseUrl } from "../../resolve_base_urls";
|
|
41
42
|
import getInitSegment from "../get_init_segment";
|
|
42
43
|
import getSegmentsFromTimeline from "../get_segments_from_timeline";
|
|
43
44
|
import isPeriodFulfilled from "../is_period_fulfilled";
|
|
@@ -54,6 +55,8 @@ const { MIN_DASH_S_ELEMENTS_TO_PARSE_UNSAFELY } = config;
|
|
|
54
55
|
* given media time.
|
|
55
56
|
*/
|
|
56
57
|
export interface ITimelineIndex {
|
|
58
|
+
/** If `false`, the last segment anounced might be still incomplete. */
|
|
59
|
+
availabilityTimeComplete : boolean;
|
|
57
60
|
/** Byte range for a possible index of segments in the server. */
|
|
58
61
|
indexRange?: [number, number];
|
|
59
62
|
/**
|
|
@@ -141,6 +144,8 @@ export interface ITimelineIndexIndexArgument {
|
|
|
141
144
|
|
|
142
145
|
/** Aditional context needed by a SegmentTimeline RepresentationIndex. */
|
|
143
146
|
export interface ITimelineIndexContextArgument {
|
|
147
|
+
/** If `false`, the last segment anounced might be still incomplete. */
|
|
148
|
+
availabilityTimeComplete : boolean;
|
|
144
149
|
/** Allows to obtain the minimum and maximum positions of a content. */
|
|
145
150
|
manifestBoundsCalculator : ManifestBoundsCalculator;
|
|
146
151
|
/** Start of the period concerned by this RepresentationIndex, in seconds. */
|
|
@@ -155,7 +160,7 @@ export interface ITimelineIndexContextArgument {
|
|
|
155
160
|
*/
|
|
156
161
|
receivedTime? : number;
|
|
157
162
|
/** Base URL for the Representation concerned. */
|
|
158
|
-
representationBaseURLs :
|
|
163
|
+
representationBaseURLs : IResolvedBaseUrl[];
|
|
159
164
|
/** ID of the Representation concerned. */
|
|
160
165
|
representationId? : string;
|
|
161
166
|
/** Bitrate of the Representation concerned. */
|
|
@@ -231,7 +236,8 @@ export default class TimelineRepresentationIndex implements IRepresentationIndex
|
|
|
231
236
|
throw new Error("The given index is not compatible with a " +
|
|
232
237
|
"TimelineRepresentationIndex.");
|
|
233
238
|
}
|
|
234
|
-
const {
|
|
239
|
+
const { availabilityTimeComplete,
|
|
240
|
+
manifestBoundsCalculator,
|
|
235
241
|
isDynamic,
|
|
236
242
|
representationBaseURLs,
|
|
237
243
|
representationId,
|
|
@@ -269,18 +275,20 @@ export default class TimelineRepresentationIndex implements IRepresentationIndex
|
|
|
269
275
|
|
|
270
276
|
this._isDynamic = isDynamic;
|
|
271
277
|
this._parseTimeline = index.timelineParser ?? null;
|
|
272
|
-
|
|
278
|
+
const urlSources : string[] = representationBaseURLs.map(b => b.url);
|
|
279
|
+
this._index = { availabilityTimeComplete,
|
|
280
|
+
indexRange: index.indexRange,
|
|
273
281
|
indexTimeOffset,
|
|
274
282
|
initialization: index.initialization == null ?
|
|
275
283
|
undefined :
|
|
276
284
|
{
|
|
277
|
-
mediaURLs: createIndexURLs(
|
|
285
|
+
mediaURLs: createIndexURLs(urlSources,
|
|
278
286
|
index.initialization.media,
|
|
279
287
|
representationId,
|
|
280
288
|
representationBitrate),
|
|
281
289
|
range: index.initialization.range,
|
|
282
290
|
},
|
|
283
|
-
mediaURLs: createIndexURLs(
|
|
291
|
+
mediaURLs: createIndexURLs(urlSources,
|
|
284
292
|
index.media,
|
|
285
293
|
representationId,
|
|
286
294
|
representationBitrate),
|
|
@@ -47,7 +47,7 @@ function processFormatedToken(
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
/**
|
|
50
|
-
* @param {string}
|
|
50
|
+
* @param {string} baseURLs
|
|
51
51
|
* @param {string|undefined} media
|
|
52
52
|
* @param {string|undefined} id
|
|
53
53
|
* @param {number|undefined} bitrate
|
|
@@ -89,7 +89,7 @@ export function replaceRepresentationDASHTokens(
|
|
|
89
89
|
return path
|
|
90
90
|
.replace(/\$\$/g, "$")
|
|
91
91
|
.replace(/\$RepresentationID\$/g, String(id))
|
|
92
|
-
.replace(/\$Bandwidth(
|
|
92
|
+
.replace(/\$Bandwidth(\%0(\d+)d)?\$/g,
|
|
93
93
|
processFormatedToken(bitrate === undefined ? 0 :
|
|
94
94
|
bitrate));
|
|
95
95
|
}
|
|
@@ -121,13 +121,13 @@ export function createDashUrlDetokenizer(
|
|
|
121
121
|
} else {
|
|
122
122
|
return url
|
|
123
123
|
.replace(/\$\$/g, "$")
|
|
124
|
-
.replace(/\$Number(
|
|
124
|
+
.replace(/\$Number(\%0(\d+)d)?\$/g, (_x, _y, widthStr : string) => {
|
|
125
125
|
if (nb === undefined) {
|
|
126
126
|
throw new Error("Segment number not defined in a $Number$ scheme");
|
|
127
127
|
}
|
|
128
128
|
return processFormatedToken(nb)(_x, _y, widthStr);
|
|
129
129
|
})
|
|
130
|
-
.replace(/\$Time(
|
|
130
|
+
.replace(/\$Time(\%0(\d+)d)?\$/g, (_x, _y, widthStr : string) => {
|
|
131
131
|
if (time === undefined) {
|
|
132
132
|
throw new Error("Segment time not defined in a $Time$ scheme");
|
|
133
133
|
}
|
|
@@ -30,22 +30,24 @@ import {
|
|
|
30
30
|
} from "../node_parser_types";
|
|
31
31
|
import attachTrickModeTrack from "./attach_trickmode_track";
|
|
32
32
|
// eslint-disable-next-line max-len
|
|
33
|
-
import extractMinimumAvailabilityTimeOffset from "./extract_minimum_availability_time_offset";
|
|
34
33
|
import inferAdaptationType from "./infer_adaptation_type";
|
|
35
34
|
import ManifestBoundsCalculator from "./manifest_bounds_calculator";
|
|
36
35
|
import parseRepresentations, {
|
|
37
36
|
IAdaptationInfos,
|
|
38
37
|
} from "./parse_representations";
|
|
39
|
-
import resolveBaseURLs
|
|
38
|
+
import resolveBaseURLs, {
|
|
39
|
+
IResolvedBaseUrl,
|
|
40
|
+
} from "./resolve_base_urls";
|
|
40
41
|
|
|
41
42
|
/** Context needed when calling `parseAdaptationSets`. */
|
|
42
43
|
export interface IAdaptationSetsContextInfos {
|
|
43
44
|
/** Whether we should request new segments even if they are not yet finished. */
|
|
44
45
|
aggressiveMode : boolean;
|
|
46
|
+
availabilityTimeComplete: boolean;
|
|
45
47
|
/** availabilityTimeOffset of the concerned period. */
|
|
46
48
|
availabilityTimeOffset: number;
|
|
47
49
|
/** Eventual URLs from which every relative URL will be based on. */
|
|
48
|
-
baseURLs :
|
|
50
|
+
baseURLs : IResolvedBaseUrl[];
|
|
49
51
|
/** Allows to obtain the first available position of a content. */
|
|
50
52
|
manifestBoundsCalculator : ManifestBoundsCalculator;
|
|
51
53
|
/* End time of the current period, in seconds. */
|
|
@@ -302,8 +304,11 @@ export default function parseAdaptationSets(
|
|
|
302
304
|
roles.some((role) => role.schemeIdUri === "urn:mpeg:dash:role:2011");
|
|
303
305
|
|
|
304
306
|
const representationsIR = adaptation.children.representations;
|
|
307
|
+
const availabilityTimeComplete =
|
|
308
|
+
adaptation.attributes.availabilityTimeComplete ??
|
|
309
|
+
periodInfos.availabilityTimeComplete;
|
|
305
310
|
const availabilityTimeOffset =
|
|
306
|
-
|
|
311
|
+
(adaptation.attributes.availabilityTimeOffset ?? 0) +
|
|
307
312
|
periodInfos.availabilityTimeOffset;
|
|
308
313
|
|
|
309
314
|
const adaptationMimeType = adaptation.attributes.mimeType;
|
|
@@ -335,6 +340,7 @@ export default function parseAdaptationSets(
|
|
|
335
340
|
|
|
336
341
|
const adaptationInfos : IAdaptationInfos = {
|
|
337
342
|
aggressiveMode: periodInfos.aggressiveMode,
|
|
343
|
+
availabilityTimeComplete,
|
|
338
344
|
availabilityTimeOffset,
|
|
339
345
|
baseURLs: resolveBaseURLs(periodInfos.baseURLs, adaptationChildren.baseURLs),
|
|
340
346
|
manifestBoundsCalculator: periodInfos.manifestBoundsCalculator,
|
|
@@ -24,8 +24,8 @@ import {
|
|
|
24
24
|
IMPDIntermediateRepresentation,
|
|
25
25
|
IPeriodIntermediateRepresentation,
|
|
26
26
|
} from "../node_parser_types";
|
|
27
|
+
import { IResponseData } from "../parsers_types";
|
|
27
28
|
// eslint-disable-next-line max-len
|
|
28
|
-
import extractMinimumAvailabilityTimeOffset from "./extract_minimum_availability_time_offset";
|
|
29
29
|
import getClockOffset from "./get_clock_offset";
|
|
30
30
|
import getHTTPUTCTimingURL from "./get_http_utc-timing_url";
|
|
31
31
|
import getMinimumAndMaximumPosition from "./get_minimum_and_maximum_positions";
|
|
@@ -33,7 +33,9 @@ import parseAvailabilityStartTime from "./parse_availability_start_time";
|
|
|
33
33
|
import parsePeriods, {
|
|
34
34
|
IXLinkInfos,
|
|
35
35
|
} from "./parse_periods";
|
|
36
|
-
import resolveBaseURLs
|
|
36
|
+
import resolveBaseURLs, {
|
|
37
|
+
IResolvedBaseUrl,
|
|
38
|
+
} from "./resolve_base_urls";
|
|
37
39
|
|
|
38
40
|
const { DASH_FALLBACK_LIFETIME_WHEN_MINIMUM_UPDATE_PERIOD_EQUAL_0 } = config;
|
|
39
41
|
|
|
@@ -85,7 +87,7 @@ export interface IIrParserResponseNeedsClock {
|
|
|
85
87
|
* Callback to call with the fetched clock data in argument to continue
|
|
86
88
|
* parsing the MPD.
|
|
87
89
|
*/
|
|
88
|
-
continue : (clockValue : string) => IIrParserResponse;
|
|
90
|
+
continue : (clockValue : IResponseData<string>) => IIrParserResponse;
|
|
89
91
|
};
|
|
90
92
|
}
|
|
91
93
|
|
|
@@ -157,8 +159,15 @@ export default function parseMpdIr(
|
|
|
157
159
|
type: "needs-clock",
|
|
158
160
|
value: {
|
|
159
161
|
url: UTCTimingHTTPURL,
|
|
160
|
-
continue: function continueParsingMPD(
|
|
161
|
-
|
|
162
|
+
continue: function continueParsingMPD(
|
|
163
|
+
responseDataClock : IResponseData<string>) {
|
|
164
|
+
if (!responseDataClock.success) {
|
|
165
|
+
warnings.push(responseDataClock.error);
|
|
166
|
+
log.warn("DASH Parser: Error on fetching the clock ressource",
|
|
167
|
+
responseDataClock.error);
|
|
168
|
+
return parseMpdIr(mpdIR, args, warnings, true);
|
|
169
|
+
}
|
|
170
|
+
args.externalClockOffset = getClockOffset(responseDataClock.data);
|
|
162
171
|
return parseMpdIr(mpdIR, args, warnings, true);
|
|
163
172
|
},
|
|
164
173
|
},
|
|
@@ -232,22 +241,21 @@ function parseCompleteIntermediateRepresentation(
|
|
|
232
241
|
const { children: rootChildren,
|
|
233
242
|
attributes: rootAttributes } = mpdIR;
|
|
234
243
|
const isDynamic : boolean = rootAttributes.type === "dynamic";
|
|
235
|
-
const
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
244
|
+
const initialBaseUrl : IResolvedBaseUrl[] = args.url !== undefined ?
|
|
245
|
+
[{ url: normalizeBaseURL(args.url),
|
|
246
|
+
availabilityTimeOffset: 0,
|
|
247
|
+
availabilityTimeComplete: true }] :
|
|
248
|
+
[];
|
|
249
|
+
const mpdBaseUrls = resolveBaseURLs(initialBaseUrl, rootChildren.baseURLs);
|
|
239
250
|
const availabilityStartTime = parseAvailabilityStartTime(rootAttributes,
|
|
240
251
|
args.referenceDateTime);
|
|
241
252
|
const timeShiftBufferDepth = rootAttributes.timeShiftBufferDepth;
|
|
242
253
|
const { externalClockOffset: clockOffset,
|
|
243
254
|
unsafelyBaseOnPreviousManifest } = args;
|
|
244
|
-
const availabilityTimeOffset =
|
|
245
|
-
extractMinimumAvailabilityTimeOffset(rootChildren.baseURLs);
|
|
246
255
|
|
|
247
256
|
const manifestInfos = { aggressiveMode: args.aggressiveMode,
|
|
248
257
|
availabilityStartTime,
|
|
249
|
-
|
|
250
|
-
baseURLs,
|
|
258
|
+
baseURLs: mpdBaseUrls,
|
|
251
259
|
clockOffset,
|
|
252
260
|
duration: rootAttributes.duration,
|
|
253
261
|
isDynamic,
|
|
@@ -31,12 +31,13 @@ import {
|
|
|
31
31
|
IPeriodIntermediateRepresentation,
|
|
32
32
|
} from "../node_parser_types";
|
|
33
33
|
// eslint-disable-next-line max-len
|
|
34
|
-
import extractMinimumAvailabilityTimeOffset from "./extract_minimum_availability_time_offset";
|
|
35
34
|
import flattenOverlappingPeriods from "./flatten_overlapping_periods";
|
|
36
35
|
import getPeriodsTimeInformation from "./get_periods_time_infos";
|
|
37
36
|
import ManifestBoundsCalculator from "./manifest_bounds_calculator";
|
|
38
37
|
import parseAdaptationSets from "./parse_adaptation_sets";
|
|
39
|
-
import resolveBaseURLs
|
|
38
|
+
import resolveBaseURLs, {
|
|
39
|
+
IResolvedBaseUrl,
|
|
40
|
+
} from "./resolve_base_urls";
|
|
40
41
|
|
|
41
42
|
const generatePeriodID = idGenerator();
|
|
42
43
|
|
|
@@ -54,9 +55,8 @@ export type IXLinkInfos = WeakMap<IPeriodIntermediateRepresentation, {
|
|
|
54
55
|
export interface IPeriodsContextInfos {
|
|
55
56
|
/** Whether we should request new segments even if they are not yet finished. */
|
|
56
57
|
aggressiveMode : boolean;
|
|
57
|
-
availabilityTimeOffset: number;
|
|
58
58
|
availabilityStartTime : number;
|
|
59
|
-
baseURLs :
|
|
59
|
+
baseURLs : IResolvedBaseUrl[];
|
|
60
60
|
clockOffset? : number;
|
|
61
61
|
duration? : number;
|
|
62
62
|
isDynamic : boolean;
|
|
@@ -141,14 +141,13 @@ export default function parsePeriods(
|
|
|
141
141
|
const receivedTime = xlinkInfos !== undefined ? xlinkInfos.receivedTime :
|
|
142
142
|
contextInfos.receivedTime;
|
|
143
143
|
|
|
144
|
-
const availabilityTimeOffset =
|
|
145
|
-
extractMinimumAvailabilityTimeOffset(periodIR.children.baseURLs) +
|
|
146
|
-
contextInfos.availabilityTimeOffset;
|
|
147
|
-
|
|
148
144
|
const unsafelyBaseOnPreviousPeriod = contextInfos
|
|
149
145
|
.unsafelyBaseOnPreviousManifest?.getPeriod(periodID) ?? null;
|
|
150
146
|
|
|
147
|
+
const availabilityTimeComplete = periodIR.attributes.availabilityTimeComplete ?? true;
|
|
148
|
+
const availabilityTimeOffset = periodIR.attributes.availabilityTimeOffset ?? 0;
|
|
151
149
|
const periodInfos = { aggressiveMode: contextInfos.aggressiveMode,
|
|
150
|
+
availabilityTimeComplete,
|
|
152
151
|
availabilityTimeOffset,
|
|
153
152
|
baseURLs: periodBaseURLs,
|
|
154
153
|
manifestBoundsCalculator,
|
|
@@ -26,8 +26,6 @@ import {
|
|
|
26
26
|
ISegmentTemplateIntermediateRepresentation,
|
|
27
27
|
IScheme,
|
|
28
28
|
} from "../node_parser_types";
|
|
29
|
-
// eslint-disable-next-line max-len
|
|
30
|
-
import extractMinimumAvailabilityTimeOffset from "./extract_minimum_availability_time_offset";
|
|
31
29
|
import {
|
|
32
30
|
BaseRepresentationIndex,
|
|
33
31
|
ListRepresentationIndex,
|
|
@@ -35,7 +33,9 @@ import {
|
|
|
35
33
|
TimelineRepresentationIndex,
|
|
36
34
|
} from "./indexes";
|
|
37
35
|
import ManifestBoundsCalculator from "./manifest_bounds_calculator";
|
|
38
|
-
import resolveBaseURLs
|
|
36
|
+
import resolveBaseURLs, {
|
|
37
|
+
IResolvedBaseUrl,
|
|
38
|
+
} from "./resolve_base_urls";
|
|
39
39
|
|
|
40
40
|
/** Supplementary context needed to parse a RepresentationIndex. */
|
|
41
41
|
export interface IRepresentationInfos {
|
|
@@ -43,10 +43,11 @@ export interface IRepresentationInfos {
|
|
|
43
43
|
adaptation : IAdaptationSetIntermediateRepresentation;
|
|
44
44
|
/** Whether we should request new segments even if they are not yet finished. */
|
|
45
45
|
aggressiveMode : boolean;
|
|
46
|
+
availabilityTimeComplete : boolean;
|
|
46
47
|
/** availability time offset of the concerned Adaptation. */
|
|
47
|
-
availabilityTimeOffset: number;
|
|
48
|
+
availabilityTimeOffset : number;
|
|
48
49
|
/** Eventual URLs from which every relative URL will be based on. */
|
|
49
|
-
baseURLs :
|
|
50
|
+
baseURLs : IResolvedBaseUrl[];
|
|
50
51
|
/** Allows to obtain the first/last available position of a dynamic content. */
|
|
51
52
|
manifestBoundsCalculator : ManifestBoundsCalculator;
|
|
52
53
|
/** End time of the current period, in seconds. */
|
|
@@ -111,6 +112,7 @@ export default function parseRepresentationIndex(
|
|
|
111
112
|
.some(({ schemeIdUri }) => schemeIdUri === inbandEvent.schemeIdUri);
|
|
112
113
|
};
|
|
113
114
|
const context = { aggressiveMode,
|
|
115
|
+
availabilityTimeComplete: true,
|
|
114
116
|
availabilityTimeOffset,
|
|
115
117
|
unsafelyBaseOnPreviousRepresentation,
|
|
116
118
|
isEMSGWhitelisted,
|
|
@@ -126,10 +128,6 @@ export default function parseRepresentationIndex(
|
|
|
126
128
|
let representationIndex : IRepresentationIndex;
|
|
127
129
|
if (representation.children.segmentBase !== undefined) {
|
|
128
130
|
const { segmentBase } = representation.children;
|
|
129
|
-
context.availabilityTimeOffset =
|
|
130
|
-
representationInfos.availabilityTimeOffset +
|
|
131
|
-
extractMinimumAvailabilityTimeOffset(representation.children.baseURLs) +
|
|
132
|
-
(segmentBase.availabilityTimeOffset ?? 0);
|
|
133
131
|
representationIndex = new BaseRepresentationIndex(segmentBase, context);
|
|
134
132
|
} else if (representation.children.segmentList !== undefined) {
|
|
135
133
|
const { segmentList } = representation.children;
|
|
@@ -147,10 +145,12 @@ export default function parseRepresentationIndex(
|
|
|
147
145
|
...segmentTemplates as [
|
|
148
146
|
ISegmentTemplateIntermediateRepresentation
|
|
149
147
|
] /* Ugly TS Hack */);
|
|
148
|
+
context.availabilityTimeComplete =
|
|
149
|
+
segmentTemplate.availabilityTimeComplete ??
|
|
150
|
+
representationInfos.availabilityTimeComplete;
|
|
150
151
|
context.availabilityTimeOffset =
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
(segmentTemplate.availabilityTimeOffset ?? 0);
|
|
152
|
+
(segmentTemplate.availabilityTimeOffset ?? 0) +
|
|
153
|
+
representationInfos.availabilityTimeOffset;
|
|
154
154
|
representationIndex = TimelineRepresentationIndex
|
|
155
155
|
.isTimelineIndexArgument(segmentTemplate) ?
|
|
156
156
|
new TimelineRepresentationIndex(segmentTemplate, context) :
|
|
@@ -28,10 +28,12 @@ import {
|
|
|
28
28
|
IRepresentationIntermediateRepresentation,
|
|
29
29
|
ISegmentTemplateIntermediateRepresentation,
|
|
30
30
|
IScheme,
|
|
31
|
+
IContentProtectionIntermediateRepresentation,
|
|
31
32
|
} from "../node_parser_types";
|
|
32
33
|
import { getWEBMHDRInformation } from "./get_hdr_information";
|
|
33
34
|
import ManifestBoundsCalculator from "./manifest_bounds_calculator";
|
|
34
35
|
import parseRepresentationIndex from "./parse_representation_index";
|
|
36
|
+
import { IResolvedBaseUrl } from "./resolve_base_urls";
|
|
35
37
|
|
|
36
38
|
/**
|
|
37
39
|
* Combine inband event streams from representation and
|
|
@@ -61,10 +63,11 @@ function combineInbandEventStreams(
|
|
|
61
63
|
export interface IAdaptationInfos {
|
|
62
64
|
/** Whether we should request new segments even if they are not yet finished. */
|
|
63
65
|
aggressiveMode : boolean;
|
|
66
|
+
availabilityTimeComplete: boolean;
|
|
64
67
|
/** availability time offset of the concerned Adaptation. */
|
|
65
68
|
availabilityTimeOffset: number;
|
|
66
69
|
/** Eventual URLs from which every relative URL will be based on. */
|
|
67
|
-
baseURLs :
|
|
70
|
+
baseURLs : IResolvedBaseUrl[];
|
|
68
71
|
/** Allows to obtain the first/last available position of a dynamic content. */
|
|
69
72
|
manifestBoundsCalculator : ManifestBoundsCalculator;
|
|
70
73
|
/** End time of the current period, in seconds. */
|
|
@@ -175,8 +178,16 @@ export default function parseRepresentations(
|
|
|
175
178
|
const inbandEventStreams =
|
|
176
179
|
combineInbandEventStreams(representation, adaptation);
|
|
177
180
|
|
|
181
|
+
const availabilityTimeComplete =
|
|
182
|
+
representation.attributes.availabilityTimeComplete ??
|
|
183
|
+
adaptationInfos.availabilityTimeComplete;
|
|
184
|
+
const availabilityTimeOffset =
|
|
185
|
+
(representation.attributes.availabilityTimeOffset ?? 0) +
|
|
186
|
+
adaptationInfos.availabilityTimeOffset;
|
|
178
187
|
const representationInfos = objectAssign({}, adaptationInfos,
|
|
179
|
-
{
|
|
188
|
+
{ availabilityTimeOffset,
|
|
189
|
+
availabilityTimeComplete,
|
|
190
|
+
unsafelyBaseOnPreviousRepresentation,
|
|
180
191
|
adaptation,
|
|
181
192
|
inbandEventStreams });
|
|
182
193
|
const representationIndex = parseRepresentationIndex(representation,
|
|
@@ -237,8 +248,16 @@ export default function parseRepresentations(
|
|
|
237
248
|
adaptation.attributes.width;
|
|
238
249
|
}
|
|
239
250
|
|
|
240
|
-
|
|
241
|
-
|
|
251
|
+
const contentProtectionsIr : IContentProtectionIntermediateRepresentation[] =
|
|
252
|
+
adaptation.children.contentProtections !== undefined ?
|
|
253
|
+
adaptation.children.contentProtections :
|
|
254
|
+
[];
|
|
255
|
+
if (representation.children.contentProtections !== undefined) {
|
|
256
|
+
contentProtectionsIr.push(...representation.children.contentProtections);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
if (contentProtectionsIr.length > 0) {
|
|
260
|
+
const contentProtections = contentProtectionsIr
|
|
242
261
|
.reduce<IContentProtections>((acc, cp) => {
|
|
243
262
|
let systemId : string|undefined;
|
|
244
263
|
if (cp.attributes.schemeIdUri !== undefined &&
|