rx-player 3.26.2 → 3.27.0-dev.20220317
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/perfs.yml +22 -0
- package/CHANGELOG.md +33 -1
- package/FILES.md +5 -4
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/browser_detection.d.ts +4 -2
- package/dist/_esm5.processed/compat/browser_detection.js +4 -2
- package/dist/_esm5.processed/compat/eme/close_session.d.ts +11 -5
- package/dist/_esm5.processed/compat/eme/close_session.js +144 -36
- package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
- package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +27 -24
- package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +53 -34
- package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +43 -41
- package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
- package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
- package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
- package/dist/_esm5.processed/compat/eme/load_session.js +68 -17
- package/dist/_esm5.processed/compat/event_listeners.js +2 -1
- package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
- package/dist/_esm5.processed/config.d.ts +166 -1080
- package/dist/_esm5.processed/config.js +17 -1119
- package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
- package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +28 -6
- package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +63 -12
- package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +1 -1
- package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
- package/dist/_esm5.processed/core/abr/pending_requests_store.js +3 -5
- package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +1 -1
- package/dist/_esm5.processed/core/abr/representation_estimator.js +2 -2
- package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
- package/dist/_esm5.processed/core/api/index.d.ts +2 -1
- package/dist/_esm5.processed/core/api/media_element_track_choice_manager.d.ts +6 -0
- package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +22 -4
- package/dist/_esm5.processed/core/api/option_utils.d.ts +3 -1
- package/dist/_esm5.processed/core/api/option_utils.js +19 -6
- package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
- package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
- package/dist/_esm5.processed/core/api/public_api.js +72 -33
- package/dist/_esm5.processed/core/api/track_choice_manager.d.ts +6 -6
- package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -51
- package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +30 -75
- package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
- package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +104 -0
- package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
- package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +41 -0
- package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
- package/dist/_esm5.processed/core/decrypt/content_decryptor.js +866 -0
- package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
- package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
- package/dist/_esm5.processed/core/decrypt/create_session.js +174 -0
- package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.d.ts +21 -0
- package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
- package/dist/_esm5.processed/core/decrypt/find_key_system.js +300 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
- package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
- package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
- package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
- package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
- package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
- package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
- package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
- package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +120 -242
- package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
- package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
- package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +85 -0
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
- package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
- package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
- package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
- package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
- package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
- package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
- package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
- package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +303 -0
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
- package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
- package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +4 -4
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +3 -3
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +2 -2
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +6 -2
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
- package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +1 -1
- package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
- package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +3 -3
- package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
- package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +5 -3
- package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
- package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
- package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
- package/dist/_esm5.processed/core/init/manifest_update_scheduler.d.ts +4 -4
- package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
- package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
- package/dist/_esm5.processed/core/init/stream_events_emitter/are_same_stream_events.d.ts +4 -4
- package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
- package/dist/_esm5.processed/core/init/stream_events_emitter/types.d.ts +2 -2
- package/dist/_esm5.processed/core/init/types.d.ts +2 -4
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +3 -3
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +32 -31
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +4 -4
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
- package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
- package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
- package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
- package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +1 -1
- package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +2 -1
- package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
- package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +5 -6
- package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
- package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
- package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
- package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
- package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
- package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
- package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
- package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
- package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
- package/dist/_esm5.processed/default_config.d.ts +1114 -0
- package/dist/_esm5.processed/default_config.js +1145 -0
- package/dist/_esm5.processed/errors/request_error.js +3 -1
- package/dist/_esm5.processed/experimental/index.d.ts +2 -0
- package/dist/_esm5.processed/experimental/index.js +2 -0
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.d.ts +2 -2
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +2 -4
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +1 -1
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -1
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.d.ts +3 -3
- package/dist/_esm5.processed/features/features_object.js +1 -1
- package/dist/_esm5.processed/features/initialize_features.js +1 -1
- package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
- package/dist/_esm5.processed/features/list/eme.js +5 -5
- package/dist/_esm5.processed/features/types.d.ts +3 -3
- package/dist/_esm5.processed/manifest/adaptation.d.ts +2 -2
- package/dist/_esm5.processed/manifest/adaptation.js +3 -1
- package/dist/_esm5.processed/manifest/manifest.d.ts +10 -23
- package/dist/_esm5.processed/manifest/manifest.js +10 -74
- package/dist/_esm5.processed/manifest/period.d.ts +3 -3
- package/dist/_esm5.processed/manifest/representation.d.ts +37 -5
- package/dist/_esm5.processed/manifest/representation_index/types.d.ts +18 -18
- package/dist/_esm5.processed/manifest/types.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.d.ts +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +6 -6
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +14 -14
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +17 -17
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +28 -20
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +20 -5
- package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +17 -35
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +109 -96
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +8 -8
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +18 -27
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +25 -23
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +21 -15
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +19 -19
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +15 -38
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +8 -8
- package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +30 -30
- package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +7 -7
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +8 -8
- package/dist/_esm5.processed/parsers/manifest/types.d.ts +28 -28
- package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.d.ts +3 -2
- package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +15 -5
- package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.d.ts +11 -1
- package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +31 -19
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.d.ts +2 -2
- package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.d.ts +1 -1
- package/dist/_esm5.processed/public_types.d.ts +2 -2
- package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +2 -1
- package/dist/_esm5.processed/transports/dash/image_pipelines.js +4 -1
- package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
- package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
- package/dist/_esm5.processed/transports/dash/segment_loader.js +2 -2
- package/dist/_esm5.processed/transports/dash/segment_parser.d.ts +1 -1
- package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
- package/dist/_esm5.processed/transports/dash/text_loader.d.ts +1 -1
- package/dist/_esm5.processed/transports/dash/text_loader.js +1 -1
- package/dist/_esm5.processed/transports/dash/text_parser.d.ts +1 -1
- package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
- package/dist/_esm5.processed/transports/local/segment_loader.d.ts +1 -2
- package/dist/_esm5.processed/transports/local/segment_loader.js +1 -1
- package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
- package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
- package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.d.ts +1 -1
- package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
- package/dist/_esm5.processed/transports/smooth/pipelines.js +69 -11
- package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +0 -1
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +2 -2
- package/dist/_esm5.processed/transports/types.d.ts +58 -30
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
- package/dist/_esm5.processed/transports/utils/generate_manifest_loader.d.ts +1 -1
- package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -1
- package/dist/_esm5.processed/utils/cast_to_observable.d.ts +1 -2
- package/dist/_esm5.processed/utils/cast_to_observable.js +1 -1
- package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
- package/dist/_esm5.processed/utils/deep_merge.js +53 -0
- package/dist/_esm5.processed/utils/reference.d.ts +29 -0
- package/dist/_esm5.processed/utils/reference.js +72 -24
- package/dist/_esm5.processed/utils/request/fetch.d.ts +4 -5
- package/dist/_esm5.processed/utils/request/fetch.js +8 -6
- package/dist/_esm5.processed/utils/request/xhr.d.ts +6 -6
- package/dist/_esm5.processed/utils/request/xhr.js +3 -2
- package/dist/_esm5.processed/utils/rx-from_cancellable_promise.d.ts +1 -2
- package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
- package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
- package/dist/_esm5.processed/utils/task_canceller.js +3 -3
- package/dist/rx-player.js +5242 -3190
- package/dist/rx-player.min.js +1 -1
- package/dummy +1 -0
- package/{dist/_esm5.processed/core/eme/dispose_eme.d.ts → experimental/index.d.ts} +1 -4
- package/{dist/_esm5.processed/core/eme/dispose_media_keys.d.ts → experimental/index.js} +1 -6
- package/package.json +33 -36
- package/scripts/build/templates/experimental/index.d.ts +16 -0
- package/scripts/build/templates/experimental/index.js +16 -0
- package/scripts/doc-generator/generate_header_html.js +6 -7
- package/scripts/doc-generator/generate_page_html.js +3 -4
- package/scripts/doc-generator/generate_page_list_html.js +4 -5
- package/scripts/doc-generator/generate_sidebar_html.js +4 -7
- package/scripts/doc-generator/utils.js +0 -11
- package/scripts/generate_demo_list.js +3 -3
- package/scripts/generate_documentation_list.js +3 -3
- package/scripts/launch_static_server.js +127 -67
- package/scripts/run_standalone_demo.js +1 -0
- package/scripts/start_demo_web_server.js +1 -0
- package/sonar-project.properties +1 -1
- package/src/README.md +6 -6
- package/src/compat/__tests__/fullscreen.test.ts +7 -7
- package/src/compat/__tests__/is_vtt_cue.test.ts +1 -1
- package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
- package/src/compat/browser_detection.ts +4 -2
- package/src/compat/eme/close_session.ts +90 -56
- package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
- package/src/compat/eme/custom_media_keys/index.ts +28 -41
- package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +63 -46
- package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +51 -49
- package/src/compat/eme/generate_key_request.ts +25 -33
- package/src/compat/eme/load_session.ts +29 -31
- package/src/compat/event_listeners.ts +2 -1
- package/src/compat/should_favour_custom_safari_EME.ts +5 -2
- package/src/config.ts +17 -1210
- package/src/core/README.md +1 -1
- package/src/core/abr/__tests__/{get_estimate_from_buffer_levels.test.ts → buffer_based_chooser.test.ts} +94 -123
- package/src/core/abr/bandwidth_estimator.ts +4 -4
- package/src/core/abr/buffer_based_chooser.ts +85 -20
- package/src/core/abr/network_analyzer.ts +6 -7
- package/src/core/abr/pending_requests_store.ts +3 -5
- package/src/core/abr/representation_estimator.ts +6 -3
- package/src/core/api/__tests__/get_player_state.test.ts +3 -3
- package/src/core/api/__tests__/option_utils.test.ts +17 -17
- package/src/core/api/get_player_state.ts +1 -1
- package/src/core/api/index.ts +3 -0
- package/src/core/api/media_element_track_choice_manager.ts +22 -3
- package/src/core/api/option_utils.ts +37 -20
- package/src/core/api/playback_observer.ts +12 -8
- package/src/core/api/public_api.ts +152 -112
- package/src/core/api/track_choice_manager.ts +10 -9
- package/src/core/decrypt/README.md +22 -0
- package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
- package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
- package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
- package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
- package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
- package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +36 -103
- package/src/core/{eme → decrypt}/attach_media_keys.ts +49 -56
- package/src/core/decrypt/clear_on_stop.ts +48 -0
- package/src/core/decrypt/content_decryptor.ts +1158 -0
- package/src/core/decrypt/create_or_load_session.ts +130 -0
- package/src/core/decrypt/create_session.ts +175 -0
- package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
- package/src/core/{eme → decrypt}/find_key_system.ts +126 -134
- package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
- package/src/core/decrypt/get_media_keys.ts +145 -0
- package/src/core/{eme → decrypt}/index.ts +11 -8
- package/src/core/decrypt/init_media_keys.ts +51 -0
- package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
- package/src/core/decrypt/set_server_certificate.ts +104 -0
- package/src/core/{eme → decrypt}/types.ts +129 -259
- package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
- package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
- package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
- package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
- package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
- package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +20 -20
- package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
- package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
- package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
- package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
- package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
- package/src/core/decrypt/utils/key_session_record.ts +175 -0
- package/src/core/decrypt/utils/loaded_sessions_store.ts +318 -0
- package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
- package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
- package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
- package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
- package/src/core/fetchers/manifest/manifest_fetcher.ts +9 -9
- package/src/core/fetchers/segment/segment_fetcher.ts +10 -7
- package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
- package/src/core/fetchers/utils/try_urls_with_backoff.ts +1 -1
- package/src/core/init/.initialize_media_source.ts.un~ +0 -0
- package/src/core/init/get_initial_time.ts +2 -1
- package/src/core/init/initialize_directfile.ts +19 -22
- package/src/core/init/initialize_media_source.ts +43 -106
- package/src/core/init/link_drm_and_content.ts +176 -0
- package/src/core/init/manifest_update_scheduler.ts +12 -10
- package/src/core/init/stall_avoider.ts +6 -5
- package/src/core/init/stream_events_emitter/are_same_stream_events.ts +4 -4
- package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
- package/src/core/init/stream_events_emitter/types.ts +2 -2
- package/src/core/init/types.ts +1 -39
- package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
- package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +6 -7
- package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +32 -31
- package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
- package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
- package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
- package/src/core/stream/events_generators.ts +9 -4
- package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
- package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
- package/src/core/stream/period/get_adaptation_switch_strategy.ts +1 -1
- package/src/core/stream/period/period_stream.ts +5 -2
- package/src/core/stream/representation/force_garbage_collection.ts +5 -7
- package/src/core/stream/representation/get_buffer_status.ts +28 -16
- package/src/core/stream/representation/get_needed_segments.ts +124 -28
- package/src/core/stream/representation/get_segment_priority.ts +1 -2
- package/src/core/stream/representation/push_media_segment.ts +3 -2
- package/src/core/stream/representation/representation_stream.ts +30 -7
- package/src/core/stream/types.ts +1 -1
- package/src/default_config.ts +1241 -0
- package/src/errors/request_error.ts +4 -1
- package/src/experimental/index.ts +5 -0
- package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
- package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +5 -7
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +4 -4
- package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +1 -1
- package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +3 -3
- package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +1 -2
- package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +1 -2
- package/src/experimental/tools/mediaCapabilitiesProber/types.ts +3 -3
- package/src/features/__tests__/initialize_features.test.ts +2 -2
- package/src/features/features_object.ts +1 -1
- package/src/features/initialize_features.ts +1 -1
- package/src/features/list/__tests__/eme.test.ts +5 -5
- package/src/features/list/eme.ts +5 -5
- package/src/features/types.ts +3 -10
- package/src/manifest/adaptation.ts +6 -4
- package/src/manifest/manifest.ts +16 -86
- package/src/manifest/period.ts +3 -3
- package/src/manifest/representation.ts +38 -5
- package/src/manifest/representation_index/types.ts +18 -18
- package/src/manifest/types.ts +3 -3
- package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +1 -0
- package/src/parsers/manifest/dash/common/get_hdr_information.ts +1 -1
- package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +3 -3
- package/src/parsers/manifest/dash/common/indexes/base.ts +6 -6
- package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +4 -2
- package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +2 -2
- package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
- package/src/parsers/manifest/dash/common/indexes/list.ts +14 -14
- package/src/parsers/manifest/dash/common/indexes/template.ts +18 -18
- package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +1 -1
- package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +51 -23
- package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +2 -2
- package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +1 -1
- package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +167 -134
- package/src/parsers/manifest/dash/common/parse_mpd.ts +9 -10
- package/src/parsers/manifest/dash/common/parse_periods.ts +80 -79
- package/src/parsers/manifest/dash/common/parse_representation_index.ts +83 -75
- package/src/parsers/manifest/dash/common/parse_representations.ts +44 -63
- package/src/parsers/manifest/dash/node_parser_types.ts +30 -30
- package/src/parsers/manifest/dash/parsers_types.ts +3 -3
- package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +1 -1
- package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +4 -4
- package/src/parsers/manifest/smooth/create_parser.ts +24 -21
- package/src/parsers/manifest/smooth/representation_index.ts +14 -14
- package/src/parsers/manifest/types.ts +28 -28
- package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +31 -33
- package/src/parsers/manifest/utils/clear_timeline_from_position.ts +15 -6
- package/src/parsers/manifest/utils/index_helpers.ts +2 -2
- package/src/parsers/manifest/utils/update_segment_timeline.ts +32 -21
- package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
- package/src/parsers/texttracks/webvtt/html/to_html.ts +2 -2
- package/src/parsers/texttracks/webvtt/parse_cue_block.ts +1 -1
- package/src/public_types.ts +5 -1
- package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +2 -2
- package/src/transports/dash/image_pipelines.ts +4 -1
- package/src/transports/dash/init_segment_loader.ts +1 -1
- package/src/transports/dash/manifest_parser.ts +1 -1
- package/src/transports/dash/segment_loader.ts +7 -7
- package/src/transports/dash/segment_parser.ts +8 -1
- package/src/transports/dash/text_loader.ts +2 -2
- package/src/transports/dash/text_parser.ts +11 -1
- package/src/transports/local/segment_loader.ts +4 -4
- package/src/transports/local/segment_parser.ts +4 -0
- package/src/transports/local/text_parser.ts +8 -0
- package/src/transports/metaplaylist/manifest_loader.ts +1 -1
- package/src/transports/metaplaylist/pipelines.ts +1 -1
- package/src/transports/smooth/pipelines.ts +29 -16
- package/src/transports/smooth/segment_loader.ts +8 -8
- package/src/transports/types.ts +59 -30
- package/src/transports/utils/call_custom_manifest_loader.ts +6 -6
- package/src/transports/utils/generate_manifest_loader.ts +1 -1
- package/src/utils/__tests__/deep_merge.test.ts +48 -0
- package/src/utils/__tests__/flat_map.test.ts +12 -7
- package/src/utils/cancellable_sleep.ts +1 -1
- package/src/utils/cast_to_observable.ts +1 -2
- package/src/utils/deep_merge.ts +46 -0
- package/src/utils/reference.ts +116 -23
- package/src/utils/request/fetch.ts +17 -15
- package/src/utils/request/xhr.ts +11 -8
- package/src/utils/rx-from_cancellable_promise.ts +8 -4
- package/src/utils/task_canceller.ts +6 -4
- package/tsconfig.json +1 -2
- package/tsconfig.modules.json +1 -2
- package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +0 -29
- package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +0 -67
- package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
- package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
- package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
- package/dist/_esm5.processed/core/eme/create_session.js +0 -126
- package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
- package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
- package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
- package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
- package/dist/_esm5.processed/core/eme/find_key_system.js +0 -243
- package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
- package/dist/_esm5.processed/core/eme/get_session.js +0 -68
- package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
- package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
- package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
- package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
- package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
- package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
- package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
- package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
- package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
- package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
- package/src/core/abr/get_estimate_from_buffer_levels.ts +0 -85
- package/src/core/eme/README.md +0 -26
- package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
- package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
- package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
- package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
- package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
- package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
- package/src/core/eme/clear_eme_session.ts +0 -62
- package/src/core/eme/create_session.ts +0 -187
- package/src/core/eme/dispose_eme.ts +0 -25
- package/src/core/eme/dispose_media_keys.ts +0 -46
- package/src/core/eme/eme_manager.ts +0 -387
- package/src/core/eme/get_media_keys.ts +0 -141
- package/src/core/eme/get_session.ts +0 -135
- package/src/core/eme/init_media_keys.ts +0 -106
- package/src/core/eme/set_server_certificate.ts +0 -115
- package/src/core/eme/utils/close_session.ts +0 -113
- package/src/core/eme/utils/init_data_store.ts +0 -234
- package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
- package/src/core/init/create_eme_manager.ts +0 -95
|
@@ -14,7 +14,9 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import log from "../../../../log";
|
|
17
|
+
import { SUPPORTED_ADAPTATIONS_TYPE, } from "../../../../manifest";
|
|
17
18
|
import arrayFind from "../../../../utils/array_find";
|
|
19
|
+
import arrayFindIndex from "../../../../utils/array_find_index";
|
|
18
20
|
import arrayIncludes from "../../../../utils/array_includes";
|
|
19
21
|
import isNonEmptyString from "../../../../utils/is_non_empty_string";
|
|
20
22
|
import attachTrickModeTrack from "./attach_trickmode_track";
|
|
@@ -30,7 +32,7 @@ import resolveBaseURLs from "./resolve_base_urls";
|
|
|
30
32
|
* @returns {Boolean}
|
|
31
33
|
*/
|
|
32
34
|
function isVisuallyImpaired(accessibility) {
|
|
33
|
-
if (accessibility
|
|
35
|
+
if (accessibility === undefined) {
|
|
34
36
|
return false;
|
|
35
37
|
}
|
|
36
38
|
var isVisuallyImpairedAudioDvbDash = (accessibility.schemeIdUri === "urn:tva:metadata:cs:AudioPurposeCS:2007" &&
|
|
@@ -47,7 +49,7 @@ function isVisuallyImpaired(accessibility) {
|
|
|
47
49
|
* @returns {Boolean}
|
|
48
50
|
*/
|
|
49
51
|
function isHardOfHearing(accessibility) {
|
|
50
|
-
if (accessibility
|
|
52
|
+
if (accessibility === undefined) {
|
|
51
53
|
return false;
|
|
52
54
|
}
|
|
53
55
|
return (accessibility.schemeIdUri === "urn:tva:metadata:cs:AudioPurposeCS:2007" &&
|
|
@@ -61,7 +63,7 @@ function isHardOfHearing(accessibility) {
|
|
|
61
63
|
* @returns {Boolean}
|
|
62
64
|
*/
|
|
63
65
|
function hasSignLanguageInterpretation(accessibility) {
|
|
64
|
-
if (accessibility
|
|
66
|
+
if (accessibility === undefined) {
|
|
65
67
|
return false;
|
|
66
68
|
}
|
|
67
69
|
return (accessibility.schemeIdUri === "urn:mpeg:dash:role:2011" &&
|
|
@@ -137,43 +139,38 @@ function getAdaptationSetSwitchingIDs(adaptation) {
|
|
|
137
139
|
* Note that the AdaptationSets returned are sorted by priority (from the most
|
|
138
140
|
* priority to the least one).
|
|
139
141
|
* @param {Array.<Object>} adaptationsIR
|
|
140
|
-
* @param {Object}
|
|
142
|
+
* @param {Object} context
|
|
141
143
|
* @returns {Array.<Object>}
|
|
142
144
|
*/
|
|
143
|
-
export default function parseAdaptationSets(adaptationsIR,
|
|
145
|
+
export default function parseAdaptationSets(adaptationsIR, context) {
|
|
144
146
|
var _a;
|
|
145
|
-
var _b, _c, _d, _e, _f, _g, _h;
|
|
146
|
-
var parsedAdaptations = {
|
|
147
|
+
var _b, _c, _d, _e, _f, _g, _h, _j;
|
|
148
|
+
var parsedAdaptations = { video: [],
|
|
149
|
+
audio: [],
|
|
150
|
+
text: [],
|
|
151
|
+
image: [] };
|
|
147
152
|
var trickModeAdaptations = [];
|
|
148
153
|
var adaptationSwitchingInfos = {};
|
|
149
154
|
var parsedAdaptationsIDs = [];
|
|
150
155
|
/**
|
|
151
|
-
* Index of the last parsed AdaptationSet with a Role set as "main" in
|
|
152
|
-
* `parsedAdaptations
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
+
* Index of the last parsed Video AdaptationSet with a Role set as "main" in
|
|
157
|
+
* `parsedAdaptations.video`.
|
|
158
|
+
* `-1` if not yet encountered.
|
|
159
|
+
* Used as we merge all main video AdaptationSet due to a comprehension of the
|
|
160
|
+
* DASH-IF IOP.
|
|
156
161
|
*/
|
|
157
|
-
var
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
var _a, _b;
|
|
161
|
-
/* As of DASH-IF 4.3, `1` is the default value. */
|
|
162
|
-
var priority1 = (_a = a.attributes.selectionPriority) !== null && _a !== void 0 ? _a : 1;
|
|
163
|
-
var priority2 = (_b = b.attributes.selectionPriority) !== null && _b !== void 0 ? _b : 1;
|
|
164
|
-
return priority2 - priority1;
|
|
165
|
-
});
|
|
166
|
-
for (var _i = 0, adaptationsIR_1 = adaptationsIR; _i < adaptationsIR_1.length; _i++) {
|
|
167
|
-
var adaptation = adaptationsIR_1[_i];
|
|
162
|
+
var lastMainVideoAdapIdx = -1;
|
|
163
|
+
for (var adaptationIdx = 0; adaptationIdx < adaptationsIR.length; adaptationIdx++) {
|
|
164
|
+
var adaptation = adaptationsIR[adaptationIdx];
|
|
168
165
|
var adaptationChildren = adaptation.children;
|
|
169
166
|
var essentialProperties = adaptationChildren.essentialProperties, roles = adaptationChildren.roles;
|
|
170
167
|
var isMainAdaptation = Array.isArray(roles) &&
|
|
171
168
|
roles.some(function (role) { return role.value === "main"; }) &&
|
|
172
169
|
roles.some(function (role) { return role.schemeIdUri === "urn:mpeg:dash:role:2011"; });
|
|
173
170
|
var representationsIR = adaptation.children.representations;
|
|
174
|
-
var availabilityTimeComplete = (_b = adaptation.attributes.availabilityTimeComplete) !== null && _b !== void 0 ? _b :
|
|
171
|
+
var availabilityTimeComplete = (_b = adaptation.attributes.availabilityTimeComplete) !== null && _b !== void 0 ? _b : context.availabilityTimeComplete;
|
|
175
172
|
var availabilityTimeOffset = ((_c = adaptation.attributes.availabilityTimeOffset) !== null && _c !== void 0 ? _c : 0) +
|
|
176
|
-
|
|
173
|
+
context.availabilityTimeOffset;
|
|
177
174
|
var adaptationMimeType = adaptation.attributes.mimeType;
|
|
178
175
|
var adaptationCodecs = adaptation.attributes.codecs;
|
|
179
176
|
var type = inferAdaptationType(representationsIR, isNonEmptyString(adaptationMimeType) ?
|
|
@@ -186,49 +183,48 @@ export default function parseAdaptationSets(adaptationsIR, periodInfos) {
|
|
|
186
183
|
if (type === undefined) {
|
|
187
184
|
continue;
|
|
188
185
|
}
|
|
186
|
+
var priority = (_d = adaptation.attributes.selectionPriority) !== null && _d !== void 0 ? _d : 1;
|
|
189
187
|
var originalID = adaptation.attributes.id;
|
|
190
188
|
var newID = void 0;
|
|
191
189
|
var adaptationSetSwitchingIDs = getAdaptationSetSwitchingIDs(adaptation);
|
|
192
190
|
var parentSegmentTemplates = [];
|
|
193
|
-
if (
|
|
194
|
-
parentSegmentTemplates.push(
|
|
191
|
+
if (context.segmentTemplate !== undefined) {
|
|
192
|
+
parentSegmentTemplates.push(context.segmentTemplate);
|
|
195
193
|
}
|
|
196
194
|
if (adaptation.children.segmentTemplate !== undefined) {
|
|
197
195
|
parentSegmentTemplates.push(adaptation.children.segmentTemplate);
|
|
198
196
|
}
|
|
199
|
-
var
|
|
200
|
-
aggressiveMode:
|
|
197
|
+
var reprCtxt = {
|
|
198
|
+
aggressiveMode: context.aggressiveMode,
|
|
201
199
|
availabilityTimeComplete: availabilityTimeComplete,
|
|
202
200
|
availabilityTimeOffset: availabilityTimeOffset,
|
|
203
|
-
baseURLs: resolveBaseURLs(
|
|
204
|
-
manifestBoundsCalculator:
|
|
205
|
-
end:
|
|
206
|
-
isDynamic:
|
|
207
|
-
|
|
201
|
+
baseURLs: resolveBaseURLs(context.baseURLs, adaptationChildren.baseURLs),
|
|
202
|
+
manifestBoundsCalculator: context.manifestBoundsCalculator,
|
|
203
|
+
end: context.end,
|
|
204
|
+
isDynamic: context.isDynamic,
|
|
205
|
+
isLastPeriod: context.isLastPeriod,
|
|
206
|
+
manifestProfiles: context.manifestProfiles,
|
|
208
207
|
parentSegmentTemplates: parentSegmentTemplates,
|
|
209
|
-
receivedTime:
|
|
210
|
-
start:
|
|
211
|
-
timeShiftBufferDepth:
|
|
208
|
+
receivedTime: context.receivedTime,
|
|
209
|
+
start: context.start,
|
|
210
|
+
timeShiftBufferDepth: context.timeShiftBufferDepth,
|
|
212
211
|
unsafelyBaseOnPreviousAdaptation: null,
|
|
213
212
|
};
|
|
214
213
|
var trickModeProperty = Array.isArray(essentialProperties) ?
|
|
215
214
|
arrayFind(essentialProperties, function (scheme) {
|
|
216
215
|
return scheme.schemeIdUri === "http://dashif.org/guidelines/trickmode";
|
|
217
216
|
}) : undefined;
|
|
218
|
-
var trickModeAttachedAdaptationIds = (
|
|
217
|
+
var trickModeAttachedAdaptationIds = (_e = trickModeProperty === null || trickModeProperty === void 0 ? void 0 : trickModeProperty.value) === null || _e === void 0 ? void 0 : _e.split(" ");
|
|
219
218
|
var isTrickModeTrack = trickModeAttachedAdaptationIds !== undefined;
|
|
220
219
|
if (type === "video" &&
|
|
221
220
|
isMainAdaptation &&
|
|
222
|
-
|
|
223
|
-
parsedAdaptations.video.length >
|
|
224
|
-
lastMainAdaptationIndex.video !== undefined &&
|
|
221
|
+
lastMainVideoAdapIdx >= 0 &&
|
|
222
|
+
parsedAdaptations.video.length > lastMainVideoAdapIdx &&
|
|
225
223
|
!isTrickModeTrack) {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
.unsafelyBaseOnPreviousPeriod) === null || _e === void 0 ? void 0 : _e.getAdaptation(videoMainAdaptation.id)) !== null && _f !== void 0 ? _f : null;
|
|
231
|
-
var representations = parseRepresentations(representationsIR, adaptation, adaptationInfos);
|
|
224
|
+
var videoMainAdaptation = parsedAdaptations.video[lastMainVideoAdapIdx][0];
|
|
225
|
+
reprCtxt.unsafelyBaseOnPreviousAdaptation = (_g = (_f = context
|
|
226
|
+
.unsafelyBaseOnPreviousPeriod) === null || _f === void 0 ? void 0 : _f.getAdaptation(videoMainAdaptation.id)) !== null && _g !== void 0 ? _g : null;
|
|
227
|
+
var representations = parseRepresentations(representationsIR, adaptation, reprCtxt);
|
|
232
228
|
(_a = videoMainAdaptation.representations).push.apply(_a, representations);
|
|
233
229
|
newID = videoMainAdaptation.id;
|
|
234
230
|
}
|
|
@@ -267,9 +263,9 @@ export default function parseAdaptationSets(adaptationsIR, periodInfos) {
|
|
|
267
263
|
}
|
|
268
264
|
newID = adaptationID;
|
|
269
265
|
parsedAdaptationsIDs.push(adaptationID);
|
|
270
|
-
|
|
271
|
-
.unsafelyBaseOnPreviousPeriod) === null ||
|
|
272
|
-
var representations = parseRepresentations(representationsIR, adaptation,
|
|
266
|
+
reprCtxt.unsafelyBaseOnPreviousAdaptation = (_j = (_h = context
|
|
267
|
+
.unsafelyBaseOnPreviousPeriod) === null || _h === void 0 ? void 0 : _h.getAdaptation(adaptationID)) !== null && _j !== void 0 ? _j : null;
|
|
268
|
+
var representations = parseRepresentations(representationsIR, adaptation, reprCtxt);
|
|
273
269
|
var parsedAdaptationSet = { id: adaptationID, representations: representations, type: type, isTrickModeTrack: isTrickModeTrack };
|
|
274
270
|
if (adaptation.attributes.language != null) {
|
|
275
271
|
parsedAdaptationSet.language = adaptation.attributes.language;
|
|
@@ -286,75 +282,92 @@ export default function parseAdaptationSets(adaptationsIR, periodInfos) {
|
|
|
286
282
|
if (isSignInterpreted === true) {
|
|
287
283
|
parsedAdaptationSet.isSignInterpreted = true;
|
|
288
284
|
}
|
|
289
|
-
var adaptationsOfTheSameType = parsedAdaptations[type];
|
|
290
285
|
if (trickModeAttachedAdaptationIds !== undefined) {
|
|
291
286
|
trickModeAdaptations.push({ adaptation: parsedAdaptationSet, trickModeAttachedAdaptationIds: trickModeAttachedAdaptationIds });
|
|
292
287
|
}
|
|
293
|
-
else if (adaptationsOfTheSameType === undefined) {
|
|
294
|
-
parsedAdaptations[type] = [parsedAdaptationSet];
|
|
295
|
-
if (isMainAdaptation) {
|
|
296
|
-
lastMainAdaptationIndex[type] = 0;
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
288
|
else {
|
|
300
|
-
|
|
289
|
+
// look if we have to merge this into another Adaptation
|
|
290
|
+
var mergedIntoIdx = -1;
|
|
301
291
|
var _loop_1 = function (id) {
|
|
302
292
|
var _k;
|
|
303
293
|
var switchingInfos = adaptationSwitchingInfos[id];
|
|
304
|
-
if (switchingInfos
|
|
294
|
+
if (switchingInfos !== undefined &&
|
|
305
295
|
switchingInfos.newID !== newID &&
|
|
306
296
|
arrayIncludes(switchingInfos.adaptationSetSwitchingIDs, originalID)) {
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
297
|
+
mergedIntoIdx = arrayFindIndex(parsedAdaptations[type], function (a) { return a[0].id === id; });
|
|
298
|
+
var mergedInto = parsedAdaptations[type][mergedIntoIdx];
|
|
299
|
+
if (mergedInto !== undefined &&
|
|
300
|
+
mergedInto[0].audioDescription ===
|
|
310
301
|
parsedAdaptationSet.audioDescription &&
|
|
311
|
-
|
|
302
|
+
mergedInto[0].closedCaption ===
|
|
312
303
|
parsedAdaptationSet.closedCaption &&
|
|
313
|
-
|
|
304
|
+
mergedInto[0].language === parsedAdaptationSet.language) {
|
|
314
305
|
log.info("DASH Parser: merging \"switchable\" AdaptationSets", originalID, id);
|
|
315
|
-
(_k =
|
|
316
|
-
|
|
317
|
-
|
|
306
|
+
(_k = mergedInto[0].representations).push.apply(_k, parsedAdaptationSet.representations);
|
|
307
|
+
if (type === "video" &&
|
|
308
|
+
isMainAdaptation &&
|
|
309
|
+
!mergedInto[1].isMainAdaptation) {
|
|
310
|
+
lastMainVideoAdapIdx = Math.max(lastMainVideoAdapIdx, mergedIntoIdx);
|
|
311
|
+
}
|
|
312
|
+
mergedInto[1] = {
|
|
313
|
+
priority: Math.max(priority, mergedInto[1].priority),
|
|
314
|
+
isMainAdaptation: isMainAdaptation ||
|
|
315
|
+
mergedInto[1].isMainAdaptation,
|
|
316
|
+
indexInMpd: Math.min(adaptationIdx, mergedInto[1].indexInMpd),
|
|
317
|
+
};
|
|
318
318
|
}
|
|
319
319
|
}
|
|
320
320
|
};
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
var id = adaptationSetSwitchingIDs_1[_j];
|
|
321
|
+
for (var _i = 0, adaptationSetSwitchingIDs_1 = adaptationSetSwitchingIDs; _i < adaptationSetSwitchingIDs_1.length; _i++) {
|
|
322
|
+
var id = adaptationSetSwitchingIDs_1[_i];
|
|
324
323
|
_loop_1(id);
|
|
325
324
|
}
|
|
326
|
-
if (
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
// put "main" Adaptation after all other Main Adaptations
|
|
332
|
-
adaptationsOfTheSameType.splice(newLastMainIdx, 0, parsedAdaptationSet);
|
|
333
|
-
lastMainAdaptationIndex[type] = newLastMainIdx;
|
|
334
|
-
}
|
|
335
|
-
else {
|
|
336
|
-
var indexOf = adaptationsOfTheSameType.indexOf(mergedInto);
|
|
337
|
-
if (indexOf < 0) { // Weird, not found
|
|
338
|
-
adaptationsOfTheSameType.splice(newLastMainIdx, 0, parsedAdaptationSet);
|
|
339
|
-
lastMainAdaptationIndex[type] = newLastMainIdx;
|
|
340
|
-
}
|
|
341
|
-
else if (oldLastMainIdx === undefined || indexOf > oldLastMainIdx) {
|
|
342
|
-
// Found but was not main
|
|
343
|
-
adaptationsOfTheSameType.splice(indexOf, 1);
|
|
344
|
-
adaptationsOfTheSameType.splice(newLastMainIdx, 0, mergedInto);
|
|
345
|
-
lastMainAdaptationIndex[type] = newLastMainIdx;
|
|
346
|
-
}
|
|
325
|
+
if (mergedIntoIdx < 0) {
|
|
326
|
+
parsedAdaptations[type].push([parsedAdaptationSet,
|
|
327
|
+
{ priority: priority, isMainAdaptation: isMainAdaptation, indexInMpd: adaptationIdx }]);
|
|
328
|
+
if (type === "video" && isMainAdaptation) {
|
|
329
|
+
lastMainVideoAdapIdx = parsedAdaptations.video.length - 1;
|
|
347
330
|
}
|
|
348
331
|
}
|
|
349
|
-
else if (mergedInto === null) {
|
|
350
|
-
adaptationsOfTheSameType.push(parsedAdaptationSet);
|
|
351
|
-
}
|
|
352
332
|
}
|
|
353
333
|
}
|
|
354
334
|
if (originalID != null && adaptationSwitchingInfos[originalID] == null) {
|
|
355
335
|
adaptationSwitchingInfos[originalID] = { newID: newID, adaptationSetSwitchingIDs: adaptationSetSwitchingIDs };
|
|
356
336
|
}
|
|
357
337
|
}
|
|
358
|
-
|
|
359
|
-
|
|
338
|
+
var adaptationsPerType = SUPPORTED_ADAPTATIONS_TYPE
|
|
339
|
+
.reduce(function (acc, adaptationType) {
|
|
340
|
+
var adaptationsParsedForType = parsedAdaptations[adaptationType];
|
|
341
|
+
if (adaptationsParsedForType.length > 0) {
|
|
342
|
+
adaptationsParsedForType.sort(compareAdaptations);
|
|
343
|
+
acc[adaptationType] = adaptationsParsedForType
|
|
344
|
+
.map(function (_a) {
|
|
345
|
+
var parsedAdaptation = _a[0];
|
|
346
|
+
return parsedAdaptation;
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
return acc;
|
|
350
|
+
}, {});
|
|
351
|
+
parsedAdaptations.video.sort(compareAdaptations);
|
|
352
|
+
attachTrickModeTrack(adaptationsPerType, trickModeAdaptations);
|
|
353
|
+
return adaptationsPerType;
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Compare groups of parsed AdaptationSet, alongside some ordering metadata,
|
|
357
|
+
* allowing to easily sort them through JavaScript's `Array.prototype.sort`
|
|
358
|
+
* method.
|
|
359
|
+
* @param {Array.<Object>} a
|
|
360
|
+
* @param {Array.<Object>} b
|
|
361
|
+
* @returns {number}
|
|
362
|
+
*/
|
|
363
|
+
function compareAdaptations(a, b) {
|
|
364
|
+
var priorityDiff = b[1].priority - a[1].priority;
|
|
365
|
+
if (priorityDiff !== 0) {
|
|
366
|
+
return priorityDiff;
|
|
367
|
+
}
|
|
368
|
+
if (a[1].isMainAdaptation !== b[1].isMainAdaptation) {
|
|
369
|
+
return a[1].isMainAdaptation ? -1 :
|
|
370
|
+
1;
|
|
371
|
+
}
|
|
372
|
+
return a[1].indexInMpd - b[1].indexInMpd;
|
|
360
373
|
}
|
|
@@ -26,11 +26,11 @@ export interface IMPDParserArguments {
|
|
|
26
26
|
* If set, offset to add to `performance.now()` to obtain the current server's
|
|
27
27
|
* time.
|
|
28
28
|
*/
|
|
29
|
-
externalClockOffset?: number;
|
|
29
|
+
externalClockOffset?: number | undefined;
|
|
30
30
|
/** Time, in terms of `performance.now` at which this MPD was received. */
|
|
31
|
-
manifestReceivedTime?: number;
|
|
31
|
+
manifestReceivedTime?: number | undefined;
|
|
32
32
|
/** Default base time, in seconds. */
|
|
33
|
-
referenceDateTime?: number;
|
|
33
|
+
referenceDateTime?: number | undefined;
|
|
34
34
|
/**
|
|
35
35
|
* The parser should take this Manifest - which is a previously parsed
|
|
36
36
|
* Manifest for the same dynamic content - as a base to speed-up the parsing
|
|
@@ -41,12 +41,12 @@ export interface IMPDParserArguments {
|
|
|
41
41
|
*/
|
|
42
42
|
unsafelyBaseOnPreviousManifest: Manifest | null;
|
|
43
43
|
/** URL of the manifest (post-redirection if one). */
|
|
44
|
-
url?: string;
|
|
44
|
+
url?: string | undefined;
|
|
45
45
|
}
|
|
46
46
|
export interface ILoadedXlinkData {
|
|
47
|
-
url?: string;
|
|
48
|
-
sendingTime?: number;
|
|
49
|
-
receivedTime?: number;
|
|
47
|
+
url?: string | undefined;
|
|
48
|
+
sendingTime?: number | undefined;
|
|
49
|
+
receivedTime?: number | undefined;
|
|
50
50
|
parsed: IPeriodIntermediateRepresentation[];
|
|
51
51
|
warnings: Error[];
|
|
52
52
|
}
|
|
@@ -94,4 +94,4 @@ export declare type IIrParserResponse = IIrParserResponseNeedsClock | IIrParserR
|
|
|
94
94
|
* @param {Array.<Object>} warnings
|
|
95
95
|
* @returns {Object}
|
|
96
96
|
*/
|
|
97
|
-
export default function parseMpdIr(mpdIR: IMPDIntermediateRepresentation, args: IMPDParserArguments, warnings: Error[], hasLoadedClock?: boolean, xlinkInfos?: IXLinkInfos): IIrParserResponse;
|
|
97
|
+
export default function parseMpdIr(mpdIR: IMPDIntermediateRepresentation, args: IMPDParserArguments, warnings: Error[], hasLoadedClock?: boolean | undefined, xlinkInfos?: IXLinkInfos): IIrParserResponse;
|
|
@@ -33,7 +33,6 @@ import getMinimumAndMaximumPosition from "./get_minimum_and_maximum_positions";
|
|
|
33
33
|
import parseAvailabilityStartTime from "./parse_availability_start_time";
|
|
34
34
|
import parsePeriods from "./parse_periods";
|
|
35
35
|
import resolveBaseURLs from "./resolve_base_urls";
|
|
36
|
-
var DASH_FALLBACK_LIFETIME_WHEN_MINIMUM_UPDATE_PERIOD_EQUAL_0 = config.DASH_FALLBACK_LIFETIME_WHEN_MINIMUM_UPDATE_PERIOD_EQUAL_0;
|
|
37
36
|
/**
|
|
38
37
|
* Checks if xlinks needs to be loaded before actually parsing the manifest.
|
|
39
38
|
* @param {Object} mpdIR
|
|
@@ -157,7 +156,7 @@ function parseCompleteIntermediateRepresentation(mpdIR, args, warnings, xlinkInf
|
|
|
157
156
|
if (rootAttributes.minimumUpdatePeriod !== undefined &&
|
|
158
157
|
rootAttributes.minimumUpdatePeriod >= 0) {
|
|
159
158
|
lifetime = rootAttributes.minimumUpdatePeriod === 0 ?
|
|
160
|
-
DASH_FALLBACK_LIFETIME_WHEN_MINIMUM_UPDATE_PERIOD_EQUAL_0 :
|
|
159
|
+
config.getCurrent().DASH_FALLBACK_LIFETIME_WHEN_MINIMUM_UPDATE_PERIOD_EQUAL_0 :
|
|
161
160
|
rootAttributes.minimumUpdatePeriod;
|
|
162
161
|
}
|
|
163
162
|
var _d = getMinimumAndMaximumPosition(parsedPeriods), contentStart = _d[0], contentEnd = _d[1];
|
|
@@ -16,33 +16,29 @@
|
|
|
16
16
|
import Manifest from "../../../../manifest";
|
|
17
17
|
import { IParsedPeriod } from "../../types";
|
|
18
18
|
import { IPeriodIntermediateRepresentation } from "../node_parser_types";
|
|
19
|
-
import {
|
|
19
|
+
import { IAdaptationSetContext } from "./parse_adaptation_sets";
|
|
20
20
|
/** Information about each linked Xlink. */
|
|
21
21
|
export declare type IXLinkInfos = WeakMap<IPeriodIntermediateRepresentation, {
|
|
22
22
|
/** Real URL (post-redirection) used to download this xlink. */
|
|
23
|
-
url?: string;
|
|
23
|
+
url?: string | undefined;
|
|
24
24
|
/** Time at which the request was sent (since the time origin), in ms. */
|
|
25
|
-
sendingTime?: number;
|
|
25
|
+
sendingTime?: number | undefined;
|
|
26
26
|
/** Time at which the request was received (since the time origin), in ms. */
|
|
27
|
-
receivedTime?: number;
|
|
27
|
+
receivedTime?: number | undefined;
|
|
28
28
|
}>;
|
|
29
|
+
/**
|
|
30
|
+
* Process intermediate periods to create final parsed periods.
|
|
31
|
+
* @param {Array.<Object>} periodsIR
|
|
32
|
+
* @param {Object} context
|
|
33
|
+
* @returns {Array.<Object>}
|
|
34
|
+
*/
|
|
35
|
+
export default function parsePeriods(periodsIR: IPeriodIntermediateRepresentation[], context: IPeriodContext): IParsedPeriod[];
|
|
29
36
|
/** Context needed when calling `parsePeriods`. */
|
|
30
|
-
export interface
|
|
31
|
-
/** Whether we should request new segments even if they are not yet finished. */
|
|
32
|
-
aggressiveMode: boolean;
|
|
37
|
+
export interface IPeriodContext extends IInheritedAdaptationContext {
|
|
33
38
|
availabilityStartTime: number;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
duration?: number;
|
|
37
|
-
isDynamic: boolean;
|
|
38
|
-
manifestProfiles?: string;
|
|
39
|
-
/**
|
|
40
|
-
* Time (in terms of `performance.now`) at which the XML file containing this
|
|
41
|
-
* Period was received.
|
|
42
|
-
*/
|
|
43
|
-
receivedTime?: number;
|
|
44
|
-
/** Depth of the buffer for the whole content, in seconds. */
|
|
45
|
-
timeShiftBufferDepth?: number;
|
|
39
|
+
clockOffset?: number | undefined;
|
|
40
|
+
/** Duration (mediaPresentationDuration) of the whole MPD, in seconds. */
|
|
41
|
+
duration?: number | undefined;
|
|
46
42
|
/**
|
|
47
43
|
* The parser should take this Manifest - which is a previously parsed
|
|
48
44
|
* Manifest for the same dynamic content - as a base to speed-up the parsing
|
|
@@ -61,12 +57,7 @@ export interface IPeriodsContextInfos {
|
|
|
61
57
|
xmlNamespaces?: Array<{
|
|
62
58
|
key: string;
|
|
63
59
|
value: string;
|
|
64
|
-
}
|
|
60
|
+
}> | undefined;
|
|
65
61
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
* @param {Array.<Object>} periodsIR
|
|
69
|
-
* @param {Object} contextInfos
|
|
70
|
-
* @returns {Array.<Object>}
|
|
71
|
-
*/
|
|
72
|
-
export default function parsePeriods(periodsIR: IPeriodIntermediateRepresentation[], contextInfos: IPeriodsContextInfos): IParsedPeriod[];
|
|
62
|
+
declare type IInheritedAdaptationContext = Omit<IAdaptationSetContext, "availabilityTimeComplete" | "availabilityTimeOffset" | "duration" | "isLastPeriod" | "manifestBoundsCalculator" | "start" | "unsafelyBaseOnPreviousPeriod">;
|
|
63
|
+
export {};
|
|
@@ -28,25 +28,26 @@ var generatePeriodID = idGenerator();
|
|
|
28
28
|
/**
|
|
29
29
|
* Process intermediate periods to create final parsed periods.
|
|
30
30
|
* @param {Array.<Object>} periodsIR
|
|
31
|
-
* @param {Object}
|
|
31
|
+
* @param {Object} context
|
|
32
32
|
* @returns {Array.<Object>}
|
|
33
33
|
*/
|
|
34
|
-
export default function parsePeriods(periodsIR,
|
|
34
|
+
export default function parsePeriods(periodsIR, context) {
|
|
35
35
|
var _a, _b, _c, _d, _e, _f;
|
|
36
36
|
var parsedPeriods = [];
|
|
37
|
-
var periodsTimeInformation = getPeriodsTimeInformation(periodsIR,
|
|
37
|
+
var periodsTimeInformation = getPeriodsTimeInformation(periodsIR, context);
|
|
38
38
|
if (periodsTimeInformation.length !== periodsIR.length) {
|
|
39
39
|
throw new Error("MPD parsing error: the time information are incoherent.");
|
|
40
40
|
}
|
|
41
|
-
var isDynamic =
|
|
41
|
+
var isDynamic = context.isDynamic, timeShiftBufferDepth = context.timeShiftBufferDepth;
|
|
42
42
|
var manifestBoundsCalculator = new ManifestBoundsCalculator({ isDynamic: isDynamic, timeShiftBufferDepth: timeShiftBufferDepth });
|
|
43
|
-
if (!isDynamic &&
|
|
44
|
-
manifestBoundsCalculator.setLastPosition(
|
|
43
|
+
if (!isDynamic && context.duration != null) {
|
|
44
|
+
manifestBoundsCalculator.setLastPosition(context.duration);
|
|
45
45
|
}
|
|
46
46
|
var _loop_1 = function (i) {
|
|
47
|
+
var isLastPeriod = i === periodsIR.length - 1;
|
|
47
48
|
var periodIR = periodsIR[i];
|
|
48
|
-
var xlinkInfos =
|
|
49
|
-
var periodBaseURLs = resolveBaseURLs(
|
|
49
|
+
var xlinkInfos = context.xlinkInfos.get(periodIR);
|
|
50
|
+
var periodBaseURLs = resolveBaseURLs(context.baseURLs, periodIR.children.baseURLs);
|
|
50
51
|
var _g = periodsTimeInformation[i], periodStart = _g.periodStart, periodDuration = _g.periodDuration, periodEnd = _g.periodEnd;
|
|
51
52
|
var periodID;
|
|
52
53
|
if (periodIR.attributes.id == null) {
|
|
@@ -61,15 +62,16 @@ export default function parsePeriods(periodsIR, contextInfos) {
|
|
|
61
62
|
periodID += "-dup";
|
|
62
63
|
}
|
|
63
64
|
var receivedTime = xlinkInfos !== undefined ? xlinkInfos.receivedTime :
|
|
64
|
-
|
|
65
|
-
var unsafelyBaseOnPreviousPeriod = (_b = (_a =
|
|
65
|
+
context.receivedTime;
|
|
66
|
+
var unsafelyBaseOnPreviousPeriod = (_b = (_a = context
|
|
66
67
|
.unsafelyBaseOnPreviousManifest) === null || _a === void 0 ? void 0 : _a.getPeriod(periodID)) !== null && _b !== void 0 ? _b : null;
|
|
67
68
|
var availabilityTimeComplete = (_c = periodIR.attributes.availabilityTimeComplete) !== null && _c !== void 0 ? _c : true;
|
|
68
69
|
var availabilityTimeOffset = (_d = periodIR.attributes.availabilityTimeOffset) !== null && _d !== void 0 ? _d : 0;
|
|
69
|
-
var
|
|
70
|
-
|
|
71
|
-
var
|
|
72
|
-
var
|
|
70
|
+
var aggressiveMode = context.aggressiveMode, manifestProfiles = context.manifestProfiles;
|
|
71
|
+
var segmentTemplate = periodIR.children.segmentTemplate;
|
|
72
|
+
var adapCtxt = { aggressiveMode: aggressiveMode, availabilityTimeComplete: availabilityTimeComplete, availabilityTimeOffset: availabilityTimeOffset, baseURLs: periodBaseURLs, manifestBoundsCalculator: manifestBoundsCalculator, end: periodEnd, isDynamic: isDynamic, isLastPeriod: isLastPeriod, manifestProfiles: manifestProfiles, receivedTime: receivedTime, segmentTemplate: segmentTemplate, start: periodStart, timeShiftBufferDepth: timeShiftBufferDepth, unsafelyBaseOnPreviousPeriod: unsafelyBaseOnPreviousPeriod };
|
|
73
|
+
var adaptations = parseAdaptationSets(periodIR.children.adaptations, adapCtxt);
|
|
74
|
+
var namespaces = ((_e = context.xmlNamespaces) !== null && _e !== void 0 ? _e : [])
|
|
73
75
|
.concat((_f = periodIR.attributes.namespaces) !== null && _f !== void 0 ? _f : []);
|
|
74
76
|
var streamEvents = generateStreamEvents(periodIR.children.eventStreams, periodStart, namespaces);
|
|
75
77
|
var parsedPeriod = { id: periodID,
|
|
@@ -90,7 +92,7 @@ export default function parsePeriods(periodsIR, contextInfos) {
|
|
|
90
92
|
manifestBoundsCalculator.setLastPosition(lastPosition, positionTime);
|
|
91
93
|
}
|
|
92
94
|
else {
|
|
93
|
-
var guessedLastPositionFromClock = guessLastPositionFromClock(
|
|
95
|
+
var guessedLastPositionFromClock = guessLastPositionFromClock(context, periodStart);
|
|
94
96
|
if (guessedLastPositionFromClock !== undefined) {
|
|
95
97
|
var guessedLastPosition = guessedLastPositionFromClock[0], guessedPositionTime = guessedLastPositionFromClock[1];
|
|
96
98
|
manifestBoundsCalculator.setLastPosition(guessedLastPosition, guessedPositionTime);
|
|
@@ -104,9 +106,9 @@ export default function parsePeriods(periodsIR, contextInfos) {
|
|
|
104
106
|
for (var i = periodsIR.length - 1; i >= 0; i--) {
|
|
105
107
|
_loop_1(i);
|
|
106
108
|
}
|
|
107
|
-
if (
|
|
109
|
+
if (context.isDynamic && !manifestBoundsCalculator.lastPositionIsKnown()) {
|
|
108
110
|
// Guess a last time the last position
|
|
109
|
-
var guessedLastPositionFromClock = guessLastPositionFromClock(
|
|
111
|
+
var guessedLastPositionFromClock = guessLastPositionFromClock(context, 0);
|
|
110
112
|
if (guessedLastPositionFromClock !== undefined) {
|
|
111
113
|
var lastPosition = guessedLastPositionFromClock[0], positionTime = guessedLastPositionFromClock[1];
|
|
112
114
|
manifestBoundsCalculator.setLastPosition(lastPosition, positionTime);
|
|
@@ -137,14 +139,14 @@ export default function parsePeriods(periodsIR, contextInfos) {
|
|
|
137
139
|
* the live time more directly from that previous one, we might be better off
|
|
138
140
|
* than just using the clock.
|
|
139
141
|
*
|
|
140
|
-
* @param {Object}
|
|
142
|
+
* @param {Object} context
|
|
141
143
|
* @param {number} minimumTime
|
|
142
144
|
* @returns {Array.<number|undefined>}
|
|
143
145
|
*/
|
|
144
|
-
function guessLastPositionFromClock(
|
|
145
|
-
if (
|
|
146
|
-
var lastPosition =
|
|
147
|
-
|
|
146
|
+
function guessLastPositionFromClock(context, minimumTime) {
|
|
147
|
+
if (context.clockOffset != null) {
|
|
148
|
+
var lastPosition = context.clockOffset / 1000 -
|
|
149
|
+
context.availabilityStartTime;
|
|
148
150
|
var positionTime = performance.now() / 1000;
|
|
149
151
|
var timeInSec = positionTime + lastPosition;
|
|
150
152
|
if (timeInSec >= minimumTime) {
|
|
@@ -156,7 +158,7 @@ function guessLastPositionFromClock(contextInfos, minimumTime) {
|
|
|
156
158
|
if (now >= minimumTime) {
|
|
157
159
|
log.warn("DASH Parser: no clock synchronization mechanism found." +
|
|
158
160
|
" Using the system clock instead.");
|
|
159
|
-
var lastPosition = now -
|
|
161
|
+
var lastPosition = now - context.availabilityStartTime;
|
|
160
162
|
var positionTime = performance.now() / 1000;
|
|
161
163
|
return [lastPosition, positionTime];
|
|
162
164
|
}
|
|
@@ -17,21 +17,37 @@ import { IRepresentationIndex, Representation } from "../../../../manifest";
|
|
|
17
17
|
import { IAdaptationSetIntermediateRepresentation, IRepresentationIntermediateRepresentation, ISegmentTemplateIntermediateRepresentation, IScheme } from "../node_parser_types";
|
|
18
18
|
import ManifestBoundsCalculator from "./manifest_bounds_calculator";
|
|
19
19
|
import { IResolvedBaseUrl } from "./resolve_base_urls";
|
|
20
|
+
/**
|
|
21
|
+
* Parse the specific segment indexing information found in a representation
|
|
22
|
+
* into a IRepresentationIndex implementation.
|
|
23
|
+
* @param {Array.<Object>} representation
|
|
24
|
+
* @param {Object} context
|
|
25
|
+
* @returns {Array.<Object>}
|
|
26
|
+
*/
|
|
27
|
+
export default function parseRepresentationIndex(representation: IRepresentationIntermediateRepresentation, context: IRepresentationIndexContext): IRepresentationIndex;
|
|
20
28
|
/** Supplementary context needed to parse a RepresentationIndex. */
|
|
21
|
-
export interface
|
|
29
|
+
export interface IRepresentationIndexContext {
|
|
22
30
|
/** Parsed AdaptationSet which contains the Representation. */
|
|
23
31
|
adaptation: IAdaptationSetIntermediateRepresentation;
|
|
24
32
|
/** Whether we should request new segments even if they are not yet finished. */
|
|
25
33
|
aggressiveMode: boolean;
|
|
34
|
+
/** If false, declared segments in the MPD might still be not completely generated. */
|
|
26
35
|
availabilityTimeComplete: boolean;
|
|
27
36
|
/** availability time offset of the concerned Adaptation. */
|
|
28
37
|
availabilityTimeOffset: number;
|
|
29
38
|
/** Eventual URLs from which every relative URL will be based on. */
|
|
30
39
|
baseURLs: IResolvedBaseUrl[];
|
|
40
|
+
/** End time of the current Period, in seconds. */
|
|
41
|
+
end?: number | undefined;
|
|
42
|
+
/** List of inband event streams that are present on the representation */
|
|
43
|
+
inbandEventStreams: IScheme[] | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Set to `true` if the linked Period is the chronologically last one in the
|
|
46
|
+
* Manifest.
|
|
47
|
+
*/
|
|
48
|
+
isLastPeriod: boolean;
|
|
31
49
|
/** Allows to obtain the first/last available position of a dynamic content. */
|
|
32
50
|
manifestBoundsCalculator: ManifestBoundsCalculator;
|
|
33
|
-
/** End time of the current period, in seconds. */
|
|
34
|
-
end?: number;
|
|
35
51
|
/** Whether the Manifest can evolve with time. */
|
|
36
52
|
isDynamic: boolean;
|
|
37
53
|
/**
|
|
@@ -44,11 +60,11 @@ export interface IRepresentationInfos {
|
|
|
44
60
|
* Time (in terms of `performance.now`) at which the XML file containing this
|
|
45
61
|
* Representation was received.
|
|
46
62
|
*/
|
|
47
|
-
receivedTime?: number;
|
|
63
|
+
receivedTime?: number | undefined;
|
|
48
64
|
/** Start time of the current period, in seconds. */
|
|
49
65
|
start: number;
|
|
50
66
|
/** Depth of the buffer for the whole content, in seconds. */
|
|
51
|
-
timeShiftBufferDepth?: number;
|
|
67
|
+
timeShiftBufferDepth?: number | undefined;
|
|
52
68
|
/**
|
|
53
69
|
* The parser should take this Representation - which is the same as this one
|
|
54
70
|
* parsed at an earlier time - as a base to speed-up the parsing process.
|
|
@@ -56,14 +72,4 @@ export interface IRepresentationInfos {
|
|
|
56
72
|
* de-synchronization with what is actually on the server.
|
|
57
73
|
*/
|
|
58
74
|
unsafelyBaseOnPreviousRepresentation: Representation | null;
|
|
59
|
-
/** List of inband event streams that are present on the representation */
|
|
60
|
-
inbandEventStreams: IScheme[] | undefined;
|
|
61
75
|
}
|
|
62
|
-
/**
|
|
63
|
-
* Parse the specific segment indexing information found in a representation
|
|
64
|
-
* into a IRepresentationIndex implementation.
|
|
65
|
-
* @param {Array.<Object>} representation
|
|
66
|
-
* @param {Object} representationInfos
|
|
67
|
-
* @returns {Array.<Object>}
|
|
68
|
-
*/
|
|
69
|
-
export default function parseRepresentationIndex(representation: IRepresentationIntermediateRepresentation, representationInfos: IRepresentationInfos): IRepresentationIndex;
|