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
|
@@ -37,7 +37,6 @@ import resolveBaseURLs, {
|
|
|
37
37
|
IResolvedBaseUrl,
|
|
38
38
|
} from "./resolve_base_urls";
|
|
39
39
|
|
|
40
|
-
const { DASH_FALLBACK_LIFETIME_WHEN_MINIMUM_UPDATE_PERIOD_EQUAL_0 } = config;
|
|
41
40
|
|
|
42
41
|
/** Possible options for `parseMPD`. */
|
|
43
42
|
export interface IMPDParserArguments {
|
|
@@ -47,11 +46,11 @@ export interface IMPDParserArguments {
|
|
|
47
46
|
* If set, offset to add to `performance.now()` to obtain the current server's
|
|
48
47
|
* time.
|
|
49
48
|
*/
|
|
50
|
-
externalClockOffset? : number;
|
|
49
|
+
externalClockOffset? : number | undefined;
|
|
51
50
|
/** Time, in terms of `performance.now` at which this MPD was received. */
|
|
52
|
-
manifestReceivedTime? : number;
|
|
51
|
+
manifestReceivedTime? : number | undefined;
|
|
53
52
|
/** Default base time, in seconds. */
|
|
54
|
-
referenceDateTime? : number;
|
|
53
|
+
referenceDateTime? : number | undefined;
|
|
55
54
|
/**
|
|
56
55
|
* The parser should take this Manifest - which is a previously parsed
|
|
57
56
|
* Manifest for the same dynamic content - as a base to speed-up the parsing
|
|
@@ -62,13 +61,13 @@ export interface IMPDParserArguments {
|
|
|
62
61
|
*/
|
|
63
62
|
unsafelyBaseOnPreviousManifest : Manifest | null;
|
|
64
63
|
/** URL of the manifest (post-redirection if one). */
|
|
65
|
-
url? : string;
|
|
64
|
+
url? : string | undefined;
|
|
66
65
|
}
|
|
67
66
|
|
|
68
67
|
export interface ILoadedXlinkData {
|
|
69
|
-
url? : string;
|
|
70
|
-
sendingTime? : number;
|
|
71
|
-
receivedTime? : number;
|
|
68
|
+
url? : string | undefined;
|
|
69
|
+
sendingTime? : number | undefined;
|
|
70
|
+
receivedTime? : number | undefined;
|
|
72
71
|
parsed : IPeriodIntermediateRepresentation[];
|
|
73
72
|
warnings : Error[];
|
|
74
73
|
}
|
|
@@ -127,7 +126,7 @@ export default function parseMpdIr(
|
|
|
127
126
|
mpdIR : IMPDIntermediateRepresentation,
|
|
128
127
|
args : IMPDParserArguments,
|
|
129
128
|
warnings : Error[],
|
|
130
|
-
hasLoadedClock? : boolean,
|
|
129
|
+
hasLoadedClock? : boolean | undefined,
|
|
131
130
|
xlinkInfos : IXLinkInfos = new WeakMap()
|
|
132
131
|
) : IIrParserResponse {
|
|
133
132
|
const { children: rootChildren,
|
|
@@ -277,7 +276,7 @@ function parseCompleteIntermediateRepresentation(
|
|
|
277
276
|
rootAttributes.minimumUpdatePeriod >= 0)
|
|
278
277
|
{
|
|
279
278
|
lifetime = rootAttributes.minimumUpdatePeriod === 0 ?
|
|
280
|
-
DASH_FALLBACK_LIFETIME_WHEN_MINIMUM_UPDATE_PERIOD_EQUAL_0 :
|
|
279
|
+
config.getCurrent().DASH_FALLBACK_LIFETIME_WHEN_MINIMUM_UPDATE_PERIOD_EQUAL_0 :
|
|
281
280
|
rootAttributes.minimumUpdatePeriod;
|
|
282
281
|
}
|
|
283
282
|
|
|
@@ -34,91 +34,55 @@ import {
|
|
|
34
34
|
import flattenOverlappingPeriods from "./flatten_overlapping_periods";
|
|
35
35
|
import getPeriodsTimeInformation from "./get_periods_time_infos";
|
|
36
36
|
import ManifestBoundsCalculator from "./manifest_bounds_calculator";
|
|
37
|
-
import parseAdaptationSets
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
import parseAdaptationSets, {
|
|
38
|
+
IAdaptationSetContext,
|
|
39
|
+
} from "./parse_adaptation_sets";
|
|
40
|
+
import resolveBaseURLs from "./resolve_base_urls";
|
|
41
41
|
|
|
42
42
|
const generatePeriodID = idGenerator();
|
|
43
43
|
|
|
44
44
|
/** Information about each linked Xlink. */
|
|
45
45
|
export type IXLinkInfos = WeakMap<IPeriodIntermediateRepresentation, {
|
|
46
46
|
/** Real URL (post-redirection) used to download this xlink. */
|
|
47
|
-
url? : string;
|
|
47
|
+
url? : string | undefined;
|
|
48
48
|
/** Time at which the request was sent (since the time origin), in ms. */
|
|
49
|
-
sendingTime? : number;
|
|
49
|
+
sendingTime? : number | undefined;
|
|
50
50
|
/** Time at which the request was received (since the time origin), in ms. */
|
|
51
|
-
receivedTime? : number;
|
|
51
|
+
receivedTime? : number | undefined;
|
|
52
52
|
}>;
|
|
53
53
|
|
|
54
|
-
/** Context needed when calling `parsePeriods`. */
|
|
55
|
-
export interface IPeriodsContextInfos {
|
|
56
|
-
/** Whether we should request new segments even if they are not yet finished. */
|
|
57
|
-
aggressiveMode : boolean;
|
|
58
|
-
availabilityStartTime : number;
|
|
59
|
-
baseURLs : IResolvedBaseUrl[];
|
|
60
|
-
clockOffset? : number;
|
|
61
|
-
duration? : number;
|
|
62
|
-
isDynamic : boolean;
|
|
63
|
-
manifestProfiles?: string;
|
|
64
|
-
/**
|
|
65
|
-
* Time (in terms of `performance.now`) at which the XML file containing this
|
|
66
|
-
* Period was received.
|
|
67
|
-
*/
|
|
68
|
-
receivedTime? : number;
|
|
69
|
-
/** Depth of the buffer for the whole content, in seconds. */
|
|
70
|
-
timeShiftBufferDepth? : number;
|
|
71
|
-
/**
|
|
72
|
-
* The parser should take this Manifest - which is a previously parsed
|
|
73
|
-
* Manifest for the same dynamic content - as a base to speed-up the parsing
|
|
74
|
-
* process.
|
|
75
|
-
* /!\ If unexpected differences exist between the two, there is a risk of
|
|
76
|
-
* de-synchronization with what is actually on the server,
|
|
77
|
-
* Use with moderation.
|
|
78
|
-
*/
|
|
79
|
-
unsafelyBaseOnPreviousManifest : Manifest | null;
|
|
80
|
-
xlinkInfos : IXLinkInfos;
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* XML namespaces linked to the `<MPD>` element.
|
|
84
|
-
* May be needed to convert EventStream's Event elements back into the
|
|
85
|
-
* Document form.
|
|
86
|
-
*/
|
|
87
|
-
xmlNamespaces? : Array<{ key : string;
|
|
88
|
-
value : string; }>;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
54
|
/**
|
|
92
55
|
* Process intermediate periods to create final parsed periods.
|
|
93
56
|
* @param {Array.<Object>} periodsIR
|
|
94
|
-
* @param {Object}
|
|
57
|
+
* @param {Object} context
|
|
95
58
|
* @returns {Array.<Object>}
|
|
96
59
|
*/
|
|
97
60
|
export default function parsePeriods(
|
|
98
61
|
periodsIR : IPeriodIntermediateRepresentation[],
|
|
99
|
-
|
|
62
|
+
context : IPeriodContext
|
|
100
63
|
): IParsedPeriod[] {
|
|
101
64
|
const parsedPeriods : IParsedPeriod[] = [];
|
|
102
|
-
const periodsTimeInformation = getPeriodsTimeInformation(periodsIR,
|
|
65
|
+
const periodsTimeInformation = getPeriodsTimeInformation(periodsIR, context);
|
|
103
66
|
if (periodsTimeInformation.length !== periodsIR.length) {
|
|
104
67
|
throw new Error("MPD parsing error: the time information are incoherent.");
|
|
105
68
|
}
|
|
106
69
|
|
|
107
70
|
const { isDynamic,
|
|
108
|
-
timeShiftBufferDepth } =
|
|
71
|
+
timeShiftBufferDepth } = context;
|
|
109
72
|
const manifestBoundsCalculator = new ManifestBoundsCalculator({ isDynamic,
|
|
110
73
|
timeShiftBufferDepth });
|
|
111
74
|
|
|
112
|
-
if (!isDynamic &&
|
|
113
|
-
manifestBoundsCalculator.setLastPosition(
|
|
75
|
+
if (!isDynamic && context.duration != null) {
|
|
76
|
+
manifestBoundsCalculator.setLastPosition(context.duration);
|
|
114
77
|
}
|
|
115
78
|
|
|
116
79
|
// We parse it in reverse because we might need to deduce the buffer depth from
|
|
117
80
|
// the last Periods' indexes
|
|
118
81
|
for (let i = periodsIR.length - 1; i >= 0; i--) {
|
|
82
|
+
const isLastPeriod = i === periodsIR.length - 1;
|
|
119
83
|
const periodIR = periodsIR[i];
|
|
120
|
-
const xlinkInfos =
|
|
121
|
-
const periodBaseURLs = resolveBaseURLs(
|
|
84
|
+
const xlinkInfos = context.xlinkInfos.get(periodIR);
|
|
85
|
+
const periodBaseURLs = resolveBaseURLs(context.baseURLs,
|
|
122
86
|
periodIR.children.baseURLs);
|
|
123
87
|
|
|
124
88
|
const { periodStart,
|
|
@@ -139,30 +103,32 @@ export default function parsePeriods(
|
|
|
139
103
|
}
|
|
140
104
|
|
|
141
105
|
const receivedTime = xlinkInfos !== undefined ? xlinkInfos.receivedTime :
|
|
142
|
-
|
|
106
|
+
context.receivedTime;
|
|
143
107
|
|
|
144
|
-
const unsafelyBaseOnPreviousPeriod =
|
|
108
|
+
const unsafelyBaseOnPreviousPeriod = context
|
|
145
109
|
.unsafelyBaseOnPreviousManifest?.getPeriod(periodID) ?? null;
|
|
146
110
|
|
|
147
111
|
const availabilityTimeComplete = periodIR.attributes.availabilityTimeComplete ?? true;
|
|
148
112
|
const availabilityTimeOffset = periodIR.attributes.availabilityTimeOffset ?? 0;
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
113
|
+
const { aggressiveMode, manifestProfiles } = context;
|
|
114
|
+
const { segmentTemplate } = periodIR.children;
|
|
115
|
+
const adapCtxt : IAdaptationSetContext = { aggressiveMode,
|
|
116
|
+
availabilityTimeComplete,
|
|
117
|
+
availabilityTimeOffset,
|
|
118
|
+
baseURLs: periodBaseURLs,
|
|
119
|
+
manifestBoundsCalculator,
|
|
120
|
+
end: periodEnd,
|
|
121
|
+
isDynamic,
|
|
122
|
+
isLastPeriod,
|
|
123
|
+
manifestProfiles,
|
|
124
|
+
receivedTime,
|
|
125
|
+
segmentTemplate,
|
|
126
|
+
start: periodStart,
|
|
127
|
+
timeShiftBufferDepth,
|
|
128
|
+
unsafelyBaseOnPreviousPeriod };
|
|
129
|
+
const adaptations = parseAdaptationSets(periodIR.children.adaptations, adapCtxt);
|
|
164
130
|
|
|
165
|
-
const namespaces = (
|
|
131
|
+
const namespaces = (context.xmlNamespaces ?? [])
|
|
166
132
|
.concat(periodIR.attributes.namespaces ?? []);
|
|
167
133
|
const streamEvents = generateStreamEvents(periodIR.children.eventStreams,
|
|
168
134
|
periodStart,
|
|
@@ -187,7 +153,7 @@ export default function parsePeriods(
|
|
|
187
153
|
manifestBoundsCalculator.setLastPosition(lastPosition, positionTime);
|
|
188
154
|
} else {
|
|
189
155
|
const guessedLastPositionFromClock =
|
|
190
|
-
guessLastPositionFromClock(
|
|
156
|
+
guessLastPositionFromClock(context, periodStart);
|
|
191
157
|
if (guessedLastPositionFromClock !== undefined) {
|
|
192
158
|
const [guessedLastPosition, guessedPositionTime] =
|
|
193
159
|
guessedLastPositionFromClock;
|
|
@@ -199,9 +165,9 @@ export default function parsePeriods(
|
|
|
199
165
|
}
|
|
200
166
|
}
|
|
201
167
|
|
|
202
|
-
if (
|
|
168
|
+
if (context.isDynamic && !manifestBoundsCalculator.lastPositionIsKnown()) {
|
|
203
169
|
// Guess a last time the last position
|
|
204
|
-
const guessedLastPositionFromClock = guessLastPositionFromClock(
|
|
170
|
+
const guessedLastPositionFromClock = guessLastPositionFromClock(context, 0);
|
|
205
171
|
if (guessedLastPositionFromClock !== undefined) {
|
|
206
172
|
const [lastPosition, positionTime] = guessedLastPositionFromClock;
|
|
207
173
|
manifestBoundsCalculator.setLastPosition(lastPosition, positionTime);
|
|
@@ -233,17 +199,17 @@ export default function parsePeriods(
|
|
|
233
199
|
* the live time more directly from that previous one, we might be better off
|
|
234
200
|
* than just using the clock.
|
|
235
201
|
*
|
|
236
|
-
* @param {Object}
|
|
202
|
+
* @param {Object} context
|
|
237
203
|
* @param {number} minimumTime
|
|
238
204
|
* @returns {Array.<number|undefined>}
|
|
239
205
|
*/
|
|
240
206
|
function guessLastPositionFromClock(
|
|
241
|
-
|
|
207
|
+
context : IPeriodContext,
|
|
242
208
|
minimumTime : number
|
|
243
209
|
) : [number, number] | undefined {
|
|
244
|
-
if (
|
|
245
|
-
const lastPosition =
|
|
246
|
-
|
|
210
|
+
if (context.clockOffset != null) {
|
|
211
|
+
const lastPosition = context.clockOffset / 1000 -
|
|
212
|
+
context.availabilityStartTime;
|
|
247
213
|
const positionTime = performance.now() / 1000;
|
|
248
214
|
const timeInSec = positionTime + lastPosition;
|
|
249
215
|
if (timeInSec >= minimumTime) {
|
|
@@ -254,7 +220,7 @@ function guessLastPositionFromClock(
|
|
|
254
220
|
if (now >= minimumTime) {
|
|
255
221
|
log.warn("DASH Parser: no clock synchronization mechanism found." +
|
|
256
222
|
" Using the system clock instead.");
|
|
257
|
-
const lastPosition = now -
|
|
223
|
+
const lastPosition = now - context.availabilityStartTime;
|
|
258
224
|
const positionTime = performance.now() / 1000;
|
|
259
225
|
return [lastPosition, positionTime];
|
|
260
226
|
}
|
|
@@ -366,3 +332,38 @@ function generateStreamEvents(
|
|
|
366
332
|
}
|
|
367
333
|
return res;
|
|
368
334
|
}
|
|
335
|
+
|
|
336
|
+
/** Context needed when calling `parsePeriods`. */
|
|
337
|
+
export interface IPeriodContext extends IInheritedAdaptationContext {
|
|
338
|
+
availabilityStartTime : number;
|
|
339
|
+
clockOffset? : number | undefined;
|
|
340
|
+
/** Duration (mediaPresentationDuration) of the whole MPD, in seconds. */
|
|
341
|
+
duration? : number | undefined;
|
|
342
|
+
/**
|
|
343
|
+
* The parser should take this Manifest - which is a previously parsed
|
|
344
|
+
* Manifest for the same dynamic content - as a base to speed-up the parsing
|
|
345
|
+
* process.
|
|
346
|
+
* /!\ If unexpected differences exist between the two, there is a risk of
|
|
347
|
+
* de-synchronization with what is actually on the server,
|
|
348
|
+
* Use with moderation.
|
|
349
|
+
*/
|
|
350
|
+
unsafelyBaseOnPreviousManifest : Manifest | null;
|
|
351
|
+
xlinkInfos : IXLinkInfos;
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* XML namespaces linked to the `<MPD>` element.
|
|
355
|
+
* May be needed to convert EventStream's Event elements back into the
|
|
356
|
+
* Document form.
|
|
357
|
+
*/
|
|
358
|
+
xmlNamespaces? : Array<{ key : string;
|
|
359
|
+
value : string; }> | undefined;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
type IInheritedAdaptationContext = Omit<IAdaptationSetContext,
|
|
363
|
+
"availabilityTimeComplete" |
|
|
364
|
+
"availabilityTimeOffset" |
|
|
365
|
+
"duration" |
|
|
366
|
+
"isLastPeriod" |
|
|
367
|
+
"manifestBoundsCalculator" |
|
|
368
|
+
"start" |
|
|
369
|
+
"unsafelyBaseOnPreviousPeriod">;
|
|
@@ -37,61 +37,18 @@ import resolveBaseURLs, {
|
|
|
37
37
|
IResolvedBaseUrl,
|
|
38
38
|
} from "./resolve_base_urls";
|
|
39
39
|
|
|
40
|
-
/** Supplementary context needed to parse a RepresentationIndex. */
|
|
41
|
-
export interface IRepresentationInfos {
|
|
42
|
-
/** Parsed AdaptationSet which contains the Representation. */
|
|
43
|
-
adaptation : IAdaptationSetIntermediateRepresentation;
|
|
44
|
-
/** Whether we should request new segments even if they are not yet finished. */
|
|
45
|
-
aggressiveMode : boolean;
|
|
46
|
-
availabilityTimeComplete : boolean;
|
|
47
|
-
/** availability time offset of the concerned Adaptation. */
|
|
48
|
-
availabilityTimeOffset : number;
|
|
49
|
-
/** Eventual URLs from which every relative URL will be based on. */
|
|
50
|
-
baseURLs : IResolvedBaseUrl[];
|
|
51
|
-
/** Allows to obtain the first/last available position of a dynamic content. */
|
|
52
|
-
manifestBoundsCalculator : ManifestBoundsCalculator;
|
|
53
|
-
/** End time of the current period, in seconds. */
|
|
54
|
-
end? : number;
|
|
55
|
-
/** Whether the Manifest can evolve with time. */
|
|
56
|
-
isDynamic : boolean;
|
|
57
|
-
/**
|
|
58
|
-
* Parent parsed SegmentTemplate elements.
|
|
59
|
-
* Sorted by provenance from higher level (e.g. Period) to lower-lever (e.g.
|
|
60
|
-
* AdaptationSet).
|
|
61
|
-
*/
|
|
62
|
-
parentSegmentTemplates : ISegmentTemplateIntermediateRepresentation[];
|
|
63
|
-
/**
|
|
64
|
-
* Time (in terms of `performance.now`) at which the XML file containing this
|
|
65
|
-
* Representation was received.
|
|
66
|
-
*/
|
|
67
|
-
receivedTime? : number;
|
|
68
|
-
/** Start time of the current period, in seconds. */
|
|
69
|
-
start : number;
|
|
70
|
-
/** Depth of the buffer for the whole content, in seconds. */
|
|
71
|
-
timeShiftBufferDepth? : number;
|
|
72
|
-
/**
|
|
73
|
-
* The parser should take this Representation - which is the same as this one
|
|
74
|
-
* parsed at an earlier time - as a base to speed-up the parsing process.
|
|
75
|
-
* /!\ If unexpected differences exist between both, there is a risk of
|
|
76
|
-
* de-synchronization with what is actually on the server.
|
|
77
|
-
*/
|
|
78
|
-
unsafelyBaseOnPreviousRepresentation : Representation | null;
|
|
79
|
-
/** List of inband event streams that are present on the representation */
|
|
80
|
-
inbandEventStreams: IScheme[] | undefined;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
40
|
/**
|
|
84
41
|
* Parse the specific segment indexing information found in a representation
|
|
85
42
|
* into a IRepresentationIndex implementation.
|
|
86
43
|
* @param {Array.<Object>} representation
|
|
87
|
-
* @param {Object}
|
|
44
|
+
* @param {Object} context
|
|
88
45
|
* @returns {Array.<Object>}
|
|
89
46
|
*/
|
|
90
47
|
export default function parseRepresentationIndex(
|
|
91
48
|
representation : IRepresentationIntermediateRepresentation,
|
|
92
|
-
|
|
49
|
+
context : IRepresentationIndexContext
|
|
93
50
|
) : IRepresentationIndex {
|
|
94
|
-
const representationBaseURLs = resolveBaseURLs(
|
|
51
|
+
const representationBaseURLs = resolveBaseURLs(context.baseURLs,
|
|
95
52
|
representation.children.baseURLs);
|
|
96
53
|
const { aggressiveMode,
|
|
97
54
|
availabilityTimeOffset,
|
|
@@ -102,7 +59,8 @@ export default function parseRepresentationIndex(
|
|
|
102
59
|
receivedTime,
|
|
103
60
|
timeShiftBufferDepth,
|
|
104
61
|
unsafelyBaseOnPreviousRepresentation,
|
|
105
|
-
inbandEventStreams
|
|
62
|
+
inbandEventStreams,
|
|
63
|
+
isLastPeriod } = context;
|
|
106
64
|
|
|
107
65
|
const isEMSGWhitelisted = (inbandEvent: IEMSG): boolean => {
|
|
108
66
|
if (inbandEventStreams === undefined) {
|
|
@@ -111,31 +69,32 @@ export default function parseRepresentationIndex(
|
|
|
111
69
|
return inbandEventStreams
|
|
112
70
|
.some(({ schemeIdUri }) => schemeIdUri === inbandEvent.schemeIdUri);
|
|
113
71
|
};
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
72
|
+
const reprIndexCtxt = { aggressiveMode,
|
|
73
|
+
availabilityTimeComplete: true,
|
|
74
|
+
availabilityTimeOffset,
|
|
75
|
+
unsafelyBaseOnPreviousRepresentation,
|
|
76
|
+
isEMSGWhitelisted,
|
|
77
|
+
isLastPeriod,
|
|
78
|
+
manifestBoundsCalculator,
|
|
79
|
+
isDynamic,
|
|
80
|
+
periodEnd,
|
|
81
|
+
periodStart,
|
|
82
|
+
receivedTime,
|
|
83
|
+
representationBaseURLs,
|
|
84
|
+
representationBitrate: representation.attributes.bitrate,
|
|
85
|
+
representationId: representation.attributes.id,
|
|
86
|
+
timeShiftBufferDepth };
|
|
128
87
|
let representationIndex : IRepresentationIndex;
|
|
129
88
|
if (representation.children.segmentBase !== undefined) {
|
|
130
89
|
const { segmentBase } = representation.children;
|
|
131
|
-
representationIndex = new BaseRepresentationIndex(segmentBase,
|
|
90
|
+
representationIndex = new BaseRepresentationIndex(segmentBase, reprIndexCtxt);
|
|
132
91
|
} else if (representation.children.segmentList !== undefined) {
|
|
133
92
|
const { segmentList } = representation.children;
|
|
134
|
-
representationIndex = new ListRepresentationIndex(segmentList,
|
|
93
|
+
representationIndex = new ListRepresentationIndex(segmentList, reprIndexCtxt);
|
|
135
94
|
} else if (representation.children.segmentTemplate !== undefined ||
|
|
136
|
-
|
|
95
|
+
context.parentSegmentTemplates.length > 0)
|
|
137
96
|
{
|
|
138
|
-
const segmentTemplates =
|
|
97
|
+
const segmentTemplates = context.parentSegmentTemplates.slice();
|
|
139
98
|
const childSegmentTemplate = representation.children.segmentTemplate;
|
|
140
99
|
if (childSegmentTemplate !== undefined) {
|
|
141
100
|
segmentTemplates.push(childSegmentTemplate);
|
|
@@ -145,32 +104,81 @@ export default function parseRepresentationIndex(
|
|
|
145
104
|
...segmentTemplates as [
|
|
146
105
|
ISegmentTemplateIntermediateRepresentation
|
|
147
106
|
] /* Ugly TS Hack */);
|
|
148
|
-
|
|
107
|
+
reprIndexCtxt.availabilityTimeComplete =
|
|
149
108
|
segmentTemplate.availabilityTimeComplete ??
|
|
150
|
-
|
|
151
|
-
|
|
109
|
+
context.availabilityTimeComplete;
|
|
110
|
+
reprIndexCtxt.availabilityTimeOffset =
|
|
152
111
|
(segmentTemplate.availabilityTimeOffset ?? 0) +
|
|
153
|
-
|
|
112
|
+
context.availabilityTimeOffset;
|
|
154
113
|
representationIndex = TimelineRepresentationIndex
|
|
155
114
|
.isTimelineIndexArgument(segmentTemplate) ?
|
|
156
|
-
new TimelineRepresentationIndex(segmentTemplate,
|
|
157
|
-
new TemplateRepresentationIndex(segmentTemplate,
|
|
115
|
+
new TimelineRepresentationIndex(segmentTemplate, reprIndexCtxt) :
|
|
116
|
+
new TemplateRepresentationIndex(segmentTemplate, reprIndexCtxt);
|
|
158
117
|
} else {
|
|
159
|
-
const adaptationChildren =
|
|
118
|
+
const adaptationChildren = context.adaptation.children;
|
|
160
119
|
if (adaptationChildren.segmentBase !== undefined) {
|
|
161
120
|
const { segmentBase } = adaptationChildren;
|
|
162
|
-
representationIndex = new BaseRepresentationIndex(segmentBase,
|
|
121
|
+
representationIndex = new BaseRepresentationIndex(segmentBase, reprIndexCtxt);
|
|
163
122
|
} else if (adaptationChildren.segmentList !== undefined) {
|
|
164
123
|
const { segmentList } = adaptationChildren;
|
|
165
|
-
representationIndex = new ListRepresentationIndex(segmentList,
|
|
124
|
+
representationIndex = new ListRepresentationIndex(segmentList, reprIndexCtxt);
|
|
166
125
|
} else {
|
|
167
126
|
representationIndex = new TemplateRepresentationIndex({
|
|
168
127
|
duration: Number.MAX_VALUE,
|
|
169
128
|
timescale: 1,
|
|
170
129
|
startNumber: 0,
|
|
171
130
|
media: "",
|
|
172
|
-
},
|
|
131
|
+
}, reprIndexCtxt);
|
|
173
132
|
}
|
|
174
133
|
}
|
|
175
134
|
return representationIndex;
|
|
176
135
|
}
|
|
136
|
+
|
|
137
|
+
/** Supplementary context needed to parse a RepresentationIndex. */
|
|
138
|
+
export interface IRepresentationIndexContext {
|
|
139
|
+
/** Parsed AdaptationSet which contains the Representation. */
|
|
140
|
+
adaptation : IAdaptationSetIntermediateRepresentation;
|
|
141
|
+
/** Whether we should request new segments even if they are not yet finished. */
|
|
142
|
+
aggressiveMode : boolean;
|
|
143
|
+
/** If false, declared segments in the MPD might still be not completely generated. */
|
|
144
|
+
availabilityTimeComplete : boolean;
|
|
145
|
+
/** availability time offset of the concerned Adaptation. */
|
|
146
|
+
availabilityTimeOffset : number;
|
|
147
|
+
/** Eventual URLs from which every relative URL will be based on. */
|
|
148
|
+
baseURLs : IResolvedBaseUrl[];
|
|
149
|
+
/** End time of the current Period, in seconds. */
|
|
150
|
+
end? : number | undefined;
|
|
151
|
+
/** List of inband event streams that are present on the representation */
|
|
152
|
+
inbandEventStreams: IScheme[] | undefined;
|
|
153
|
+
/**
|
|
154
|
+
* Set to `true` if the linked Period is the chronologically last one in the
|
|
155
|
+
* Manifest.
|
|
156
|
+
*/
|
|
157
|
+
isLastPeriod : boolean;
|
|
158
|
+
/** Allows to obtain the first/last available position of a dynamic content. */
|
|
159
|
+
manifestBoundsCalculator : ManifestBoundsCalculator;
|
|
160
|
+
/** Whether the Manifest can evolve with time. */
|
|
161
|
+
isDynamic : boolean;
|
|
162
|
+
/**
|
|
163
|
+
* Parent parsed SegmentTemplate elements.
|
|
164
|
+
* Sorted by provenance from higher level (e.g. Period) to lower-lever (e.g.
|
|
165
|
+
* AdaptationSet).
|
|
166
|
+
*/
|
|
167
|
+
parentSegmentTemplates : ISegmentTemplateIntermediateRepresentation[];
|
|
168
|
+
/**
|
|
169
|
+
* Time (in terms of `performance.now`) at which the XML file containing this
|
|
170
|
+
* Representation was received.
|
|
171
|
+
*/
|
|
172
|
+
receivedTime? : number | undefined;
|
|
173
|
+
/** Start time of the current period, in seconds. */
|
|
174
|
+
start : number;
|
|
175
|
+
/** Depth of the buffer for the whole content, in seconds. */
|
|
176
|
+
timeShiftBufferDepth? : number | undefined;
|
|
177
|
+
/**
|
|
178
|
+
* The parser should take this Representation - which is the same as this one
|
|
179
|
+
* parsed at an earlier time - as a base to speed-up the parsing process.
|
|
180
|
+
* /!\ If unexpected differences exist between both, there is a risk of
|
|
181
|
+
* de-synchronization with what is actually on the server.
|
|
182
|
+
*/
|
|
183
|
+
unsafelyBaseOnPreviousRepresentation : Representation | null;
|
|
184
|
+
}
|