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
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2015 CANAL+ Group
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { ICustomMediaKeys, ICustomMediaKeySession } from "../../../compat";
|
|
17
|
+
import { IProcessedProtectionData } from "../types";
|
|
18
|
+
import KeySessionRecord from "./key_session_record";
|
|
19
|
+
/**
|
|
20
|
+
* Create and store MediaKeySessions linked to a single MediaKeys
|
|
21
|
+
* instance.
|
|
22
|
+
*
|
|
23
|
+
* Keep track of sessionTypes and of the initialization data each
|
|
24
|
+
* MediaKeySession is created for.
|
|
25
|
+
* @class LoadedSessionsStore
|
|
26
|
+
*/
|
|
27
|
+
export default class LoadedSessionsStore {
|
|
28
|
+
/** MediaKeys instance on which the MediaKeySessions are created. */
|
|
29
|
+
private readonly _mediaKeys;
|
|
30
|
+
/** Store unique MediaKeySession information per initialization data. */
|
|
31
|
+
private _storage;
|
|
32
|
+
/**
|
|
33
|
+
* Create a new LoadedSessionsStore, which will store information about
|
|
34
|
+
* loaded MediaKeySessions on the given MediaKeys instance.
|
|
35
|
+
* @param {MediaKeys} mediaKeys
|
|
36
|
+
*/
|
|
37
|
+
constructor(mediaKeys: MediaKeys | ICustomMediaKeys);
|
|
38
|
+
/**
|
|
39
|
+
* Create a new MediaKeySession and store it in this store.
|
|
40
|
+
* @param {Object} initializationData
|
|
41
|
+
* @param {string} sessionType
|
|
42
|
+
* @returns {Object}
|
|
43
|
+
*/
|
|
44
|
+
createSession(initData: IProcessedProtectionData, sessionType: MediaKeySessionType): IStoredSessionEntry;
|
|
45
|
+
/**
|
|
46
|
+
* Find a stored entry compatible with the initialization data given and moves
|
|
47
|
+
* this entry at the end of the `LoadedSessionsStore`''s storage, returned by
|
|
48
|
+
* its `getAll` method.
|
|
49
|
+
*
|
|
50
|
+
* This can be used for example to tell when a previously-stored
|
|
51
|
+
* entry is re-used to then be able to implement a caching replacement
|
|
52
|
+
* algorithm based on the least-recently-used values by just evicting the first
|
|
53
|
+
* values returned by `getAll`.
|
|
54
|
+
* @param {Object} initializationData
|
|
55
|
+
* @returns {Object|null}
|
|
56
|
+
*/
|
|
57
|
+
reuse(initializationData: IProcessedProtectionData): IStoredSessionEntry | null;
|
|
58
|
+
/**
|
|
59
|
+
* Close a MediaKeySession and remove its related stored information from the
|
|
60
|
+
* `LoadedSessionsStore`.
|
|
61
|
+
* Emit when done.
|
|
62
|
+
* @param {Object} mediaKeySession
|
|
63
|
+
* @returns {Promise}
|
|
64
|
+
*/
|
|
65
|
+
closeSession(mediaKeySession: MediaKeySession | ICustomMediaKeySession): Promise<boolean>;
|
|
66
|
+
/**
|
|
67
|
+
* Returns the number of stored MediaKeySessions in this LoadedSessionsStore.
|
|
68
|
+
* @returns {number}
|
|
69
|
+
*/
|
|
70
|
+
getLength(): number;
|
|
71
|
+
/**
|
|
72
|
+
* Returns information about all stored MediaKeySession, in the order in which
|
|
73
|
+
* the MediaKeySession have been created.
|
|
74
|
+
* @returns {Array.<Object>}
|
|
75
|
+
*/
|
|
76
|
+
getAll(): IStoredSessionEntry[];
|
|
77
|
+
/**
|
|
78
|
+
* Close all sessions in this store.
|
|
79
|
+
* Emit `null` when done.
|
|
80
|
+
* @returns {Promise}
|
|
81
|
+
*/
|
|
82
|
+
closeAllSessions(): Promise<void>;
|
|
83
|
+
private getIndex;
|
|
84
|
+
}
|
|
85
|
+
/** Information linked to a `MediaKeySession` created by the `LoadedSessionsStore`. */
|
|
86
|
+
export interface IStoredSessionEntry {
|
|
87
|
+
/**
|
|
88
|
+
* The `KeySessionRecord` linked to the MediaKeySession.
|
|
89
|
+
* It keeps track of all key ids that are currently known to be associated to
|
|
90
|
+
* the MediaKeySession.
|
|
91
|
+
*
|
|
92
|
+
* Initially only assiociated with the initialization data given, you may want
|
|
93
|
+
* to add to it other key ids if you find out that there are also linked to
|
|
94
|
+
* that session.
|
|
95
|
+
*
|
|
96
|
+
* Regrouping all those key ids into the `KeySessionRecord` in that way allows
|
|
97
|
+
* the `LoadedSessionsStore` to perform compatibility checks when future
|
|
98
|
+
* initialization data is encountered.
|
|
99
|
+
*/
|
|
100
|
+
keySessionRecord: KeySessionRecord;
|
|
101
|
+
/** The MediaKeySession created. */
|
|
102
|
+
mediaKeySession: MediaKeySession | ICustomMediaKeySession;
|
|
103
|
+
/**
|
|
104
|
+
* The MediaKeySessionType (e.g. "temporary" or "persistent-license") with
|
|
105
|
+
* which the MediaKeySession was created.
|
|
106
|
+
*/
|
|
107
|
+
sessionType: MediaKeySessionType;
|
|
108
|
+
}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2015 CANAL+ Group
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
17
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
18
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
19
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
20
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
21
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
22
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
26
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
27
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
28
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
29
|
+
function step(op) {
|
|
30
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
31
|
+
while (_) try {
|
|
32
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
33
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
34
|
+
switch (op[0]) {
|
|
35
|
+
case 0: case 1: t = op; break;
|
|
36
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
37
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
38
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
39
|
+
default:
|
|
40
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
41
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
42
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
43
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
44
|
+
if (t[2]) _.ops.pop();
|
|
45
|
+
_.trys.pop(); continue;
|
|
46
|
+
}
|
|
47
|
+
op = body.call(thisArg, _);
|
|
48
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
49
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
import PPromise from "pinkie";
|
|
53
|
+
import { closeSession, } from "../../../compat";
|
|
54
|
+
import { onKeyMessage$, onKeyStatusesChange$, } from "../../../compat/event_listeners";
|
|
55
|
+
import config from "../../../config";
|
|
56
|
+
import log from "../../../log";
|
|
57
|
+
import isNullOrUndefined from "../../../utils/is_null_or_undefined";
|
|
58
|
+
import KeySessionRecord from "./key_session_record";
|
|
59
|
+
/**
|
|
60
|
+
* Create and store MediaKeySessions linked to a single MediaKeys
|
|
61
|
+
* instance.
|
|
62
|
+
*
|
|
63
|
+
* Keep track of sessionTypes and of the initialization data each
|
|
64
|
+
* MediaKeySession is created for.
|
|
65
|
+
* @class LoadedSessionsStore
|
|
66
|
+
*/
|
|
67
|
+
var LoadedSessionsStore = /** @class */ (function () {
|
|
68
|
+
/**
|
|
69
|
+
* Create a new LoadedSessionsStore, which will store information about
|
|
70
|
+
* loaded MediaKeySessions on the given MediaKeys instance.
|
|
71
|
+
* @param {MediaKeys} mediaKeys
|
|
72
|
+
*/
|
|
73
|
+
function LoadedSessionsStore(mediaKeys) {
|
|
74
|
+
this._mediaKeys = mediaKeys;
|
|
75
|
+
this._storage = [];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Create a new MediaKeySession and store it in this store.
|
|
79
|
+
* @param {Object} initializationData
|
|
80
|
+
* @param {string} sessionType
|
|
81
|
+
* @returns {Object}
|
|
82
|
+
*/
|
|
83
|
+
LoadedSessionsStore.prototype.createSession = function (initData, sessionType) {
|
|
84
|
+
var _this = this;
|
|
85
|
+
var keySessionRecord = new KeySessionRecord(initData);
|
|
86
|
+
var mediaKeySession = this._mediaKeys.createSession(sessionType);
|
|
87
|
+
var entry = { mediaKeySession: mediaKeySession, sessionType: sessionType, keySessionRecord: keySessionRecord };
|
|
88
|
+
if (!isNullOrUndefined(mediaKeySession.closed)) {
|
|
89
|
+
mediaKeySession.closed
|
|
90
|
+
.then(function () {
|
|
91
|
+
var index = _this.getIndex(keySessionRecord);
|
|
92
|
+
if (index >= 0 &&
|
|
93
|
+
_this._storage[index].mediaKeySession === mediaKeySession) {
|
|
94
|
+
_this._storage.splice(index, 1);
|
|
95
|
+
}
|
|
96
|
+
})
|
|
97
|
+
.catch(function (e) {
|
|
98
|
+
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
99
|
+
log.warn("DRM-LSS: MediaKeySession.closed rejected: ".concat(e));
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
log.debug("DRM-LSS: Add MediaKeySession", entry.sessionType);
|
|
103
|
+
this._storage.push({ keySessionRecord: keySessionRecord, mediaKeySession: mediaKeySession, sessionType: sessionType });
|
|
104
|
+
return entry;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Find a stored entry compatible with the initialization data given and moves
|
|
108
|
+
* this entry at the end of the `LoadedSessionsStore`''s storage, returned by
|
|
109
|
+
* its `getAll` method.
|
|
110
|
+
*
|
|
111
|
+
* This can be used for example to tell when a previously-stored
|
|
112
|
+
* entry is re-used to then be able to implement a caching replacement
|
|
113
|
+
* algorithm based on the least-recently-used values by just evicting the first
|
|
114
|
+
* values returned by `getAll`.
|
|
115
|
+
* @param {Object} initializationData
|
|
116
|
+
* @returns {Object|null}
|
|
117
|
+
*/
|
|
118
|
+
LoadedSessionsStore.prototype.reuse = function (initializationData) {
|
|
119
|
+
for (var i = this._storage.length - 1; i >= 0; i--) {
|
|
120
|
+
var stored = this._storage[i];
|
|
121
|
+
if (stored.keySessionRecord.isCompatibleWith(initializationData)) {
|
|
122
|
+
this._storage.splice(i, 1);
|
|
123
|
+
this._storage.push(stored);
|
|
124
|
+
return { keySessionRecord: stored.keySessionRecord,
|
|
125
|
+
mediaKeySession: stored.mediaKeySession,
|
|
126
|
+
sessionType: stored.sessionType };
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Close a MediaKeySession and remove its related stored information from the
|
|
133
|
+
* `LoadedSessionsStore`.
|
|
134
|
+
* Emit when done.
|
|
135
|
+
* @param {Object} mediaKeySession
|
|
136
|
+
* @returns {Promise}
|
|
137
|
+
*/
|
|
138
|
+
LoadedSessionsStore.prototype.closeSession = function (mediaKeySession) {
|
|
139
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
140
|
+
var entry, _i, _a, stored;
|
|
141
|
+
return __generator(this, function (_b) {
|
|
142
|
+
switch (_b.label) {
|
|
143
|
+
case 0:
|
|
144
|
+
for (_i = 0, _a = this._storage; _i < _a.length; _i++) {
|
|
145
|
+
stored = _a[_i];
|
|
146
|
+
if (stored.mediaKeySession === mediaKeySession) {
|
|
147
|
+
entry = stored;
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (entry === undefined) {
|
|
152
|
+
log.warn("DRM-LSS: No MediaKeySession found with " +
|
|
153
|
+
"the given initData and initDataType");
|
|
154
|
+
return [2 /*return*/, PPromise.resolve(false)];
|
|
155
|
+
}
|
|
156
|
+
return [4 /*yield*/, safelyCloseMediaKeySession(entry.mediaKeySession)];
|
|
157
|
+
case 1:
|
|
158
|
+
_b.sent();
|
|
159
|
+
return [2 /*return*/, PPromise.resolve(true)];
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* Returns the number of stored MediaKeySessions in this LoadedSessionsStore.
|
|
166
|
+
* @returns {number}
|
|
167
|
+
*/
|
|
168
|
+
LoadedSessionsStore.prototype.getLength = function () {
|
|
169
|
+
return this._storage.length;
|
|
170
|
+
};
|
|
171
|
+
/**
|
|
172
|
+
* Returns information about all stored MediaKeySession, in the order in which
|
|
173
|
+
* the MediaKeySession have been created.
|
|
174
|
+
* @returns {Array.<Object>}
|
|
175
|
+
*/
|
|
176
|
+
LoadedSessionsStore.prototype.getAll = function () {
|
|
177
|
+
return this._storage;
|
|
178
|
+
};
|
|
179
|
+
/**
|
|
180
|
+
* Close all sessions in this store.
|
|
181
|
+
* Emit `null` when done.
|
|
182
|
+
* @returns {Promise}
|
|
183
|
+
*/
|
|
184
|
+
LoadedSessionsStore.prototype.closeAllSessions = function () {
|
|
185
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
186
|
+
var allEntries, closingProms;
|
|
187
|
+
return __generator(this, function (_a) {
|
|
188
|
+
switch (_a.label) {
|
|
189
|
+
case 0:
|
|
190
|
+
allEntries = this._storage;
|
|
191
|
+
log.debug("DRM-LSS: Closing all current MediaKeySessions", allEntries.length);
|
|
192
|
+
// re-initialize the storage, so that new interactions with the
|
|
193
|
+
// `LoadedSessionsStore` do not rely on MediaKeySessions we're in the
|
|
194
|
+
// process of removing
|
|
195
|
+
this._storage = [];
|
|
196
|
+
closingProms = allEntries
|
|
197
|
+
.map(function (entry) { return safelyCloseMediaKeySession(entry.mediaKeySession); });
|
|
198
|
+
return [4 /*yield*/, PPromise.all(closingProms)];
|
|
199
|
+
case 1:
|
|
200
|
+
_a.sent();
|
|
201
|
+
return [2 /*return*/];
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
};
|
|
206
|
+
LoadedSessionsStore.prototype.getIndex = function (record) {
|
|
207
|
+
for (var i = 0; i < this._storage.length; i++) {
|
|
208
|
+
var stored = this._storage[i];
|
|
209
|
+
if (stored.keySessionRecord === record) {
|
|
210
|
+
return i;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return -1;
|
|
214
|
+
};
|
|
215
|
+
return LoadedSessionsStore;
|
|
216
|
+
}());
|
|
217
|
+
export default LoadedSessionsStore;
|
|
218
|
+
/**
|
|
219
|
+
* Close a MediaKeySession with multiple attempts if needed and do not throw if
|
|
220
|
+
* this action throws an error.
|
|
221
|
+
* Emits then complete when done.
|
|
222
|
+
* @param {MediaKeySession} mediaKeySession
|
|
223
|
+
* @returns {Observable}
|
|
224
|
+
*/
|
|
225
|
+
function safelyCloseMediaKeySession(mediaKeySession) {
|
|
226
|
+
return recursivelyTryToCloseMediaKeySession(0);
|
|
227
|
+
/**
|
|
228
|
+
* Perform a new attempt at closing the MediaKeySession.
|
|
229
|
+
* If this operation fails due to a not-"callable" (an EME term)
|
|
230
|
+
* MediaKeySession, retry based on either a timer or on MediaKeySession
|
|
231
|
+
* events, whichever comes first.
|
|
232
|
+
* Emits then complete when done.
|
|
233
|
+
* @param {number} retryNb - The attempt number starting at 0.
|
|
234
|
+
* @returns {Observable}
|
|
235
|
+
*/
|
|
236
|
+
function recursivelyTryToCloseMediaKeySession(retryNb) {
|
|
237
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
238
|
+
var err_1, _a, EME_SESSION_CLOSING_MAX_RETRY, EME_SESSION_CLOSING_INITIAL_DELAY, EME_SESSION_CLOSING_MAX_DELAY, nextRetryNb, delay_1, ksChangeSub_1, ksChangeProm, ksMsgSub_1, ksMsgProm, sleepTimer_1, sleepProm;
|
|
239
|
+
return __generator(this, function (_b) {
|
|
240
|
+
switch (_b.label) {
|
|
241
|
+
case 0:
|
|
242
|
+
log.debug("DRM: Trying to close a MediaKeySession", mediaKeySession.sessionId, retryNb);
|
|
243
|
+
_b.label = 1;
|
|
244
|
+
case 1:
|
|
245
|
+
_b.trys.push([1, 3, , 5]);
|
|
246
|
+
return [4 /*yield*/, closeSession(mediaKeySession)];
|
|
247
|
+
case 2:
|
|
248
|
+
_b.sent();
|
|
249
|
+
log.debug("DRM: Succeeded to close MediaKeySession");
|
|
250
|
+
return [2 /*return*/, undefined];
|
|
251
|
+
case 3:
|
|
252
|
+
err_1 = _b.sent();
|
|
253
|
+
// Unitialized MediaKeySession may not close properly until their
|
|
254
|
+
// corresponding `generateRequest` or `load` call are handled by the
|
|
255
|
+
// browser.
|
|
256
|
+
// In that case the EME specification tells us that the browser is
|
|
257
|
+
// supposed to reject the `close` call with an InvalidStateError.
|
|
258
|
+
if (!(err_1 instanceof Error) || err_1.name !== "InvalidStateError" ||
|
|
259
|
+
mediaKeySession.sessionId !== "") {
|
|
260
|
+
return [2 /*return*/, failToCloseSession(err_1)];
|
|
261
|
+
}
|
|
262
|
+
_a = config.getCurrent(), EME_SESSION_CLOSING_MAX_RETRY = _a.EME_SESSION_CLOSING_MAX_RETRY, EME_SESSION_CLOSING_INITIAL_DELAY = _a.EME_SESSION_CLOSING_INITIAL_DELAY, EME_SESSION_CLOSING_MAX_DELAY = _a.EME_SESSION_CLOSING_MAX_DELAY;
|
|
263
|
+
nextRetryNb = retryNb + 1;
|
|
264
|
+
if (nextRetryNb > EME_SESSION_CLOSING_MAX_RETRY) {
|
|
265
|
+
return [2 /*return*/, failToCloseSession(err_1)];
|
|
266
|
+
}
|
|
267
|
+
delay_1 = Math.min(Math.pow(2, retryNb) * EME_SESSION_CLOSING_INITIAL_DELAY, EME_SESSION_CLOSING_MAX_DELAY);
|
|
268
|
+
log.warn("DRM: attempt to close a mediaKeySession failed, " +
|
|
269
|
+
"scheduling retry...", delay_1);
|
|
270
|
+
ksChangeProm = new Promise(function (res) {
|
|
271
|
+
ksChangeSub_1 = onKeyStatusesChange$(mediaKeySession).subscribe(res);
|
|
272
|
+
});
|
|
273
|
+
ksMsgProm = new Promise(function (res) {
|
|
274
|
+
ksMsgSub_1 = onKeyMessage$(mediaKeySession).subscribe(res);
|
|
275
|
+
});
|
|
276
|
+
sleepProm = new Promise(function (res) {
|
|
277
|
+
sleepTimer_1 = window.setTimeout(res, delay_1);
|
|
278
|
+
});
|
|
279
|
+
return [4 /*yield*/, PPromise.race([ksChangeProm, ksMsgProm, sleepProm])];
|
|
280
|
+
case 4:
|
|
281
|
+
_b.sent();
|
|
282
|
+
ksChangeSub_1 === null || ksChangeSub_1 === void 0 ? void 0 : ksChangeSub_1.unsubscribe();
|
|
283
|
+
ksMsgSub_1 === null || ksMsgSub_1 === void 0 ? void 0 : ksMsgSub_1.unsubscribe();
|
|
284
|
+
clearTimeout(sleepTimer_1);
|
|
285
|
+
return [2 /*return*/, recursivelyTryToCloseMediaKeySession(nextRetryNb)];
|
|
286
|
+
case 5: return [2 /*return*/];
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Log error anouncing that we could not close the MediaKeySession and emits
|
|
293
|
+
* then complete through Observable.
|
|
294
|
+
* TODO Emit warning?
|
|
295
|
+
* @returns {Observable}
|
|
296
|
+
*/
|
|
297
|
+
function failToCloseSession(err) {
|
|
298
|
+
log.error("DRM: Could not close MediaKeySession: " +
|
|
299
|
+
(err instanceof Error ? err.toString() :
|
|
300
|
+
"Unknown error"));
|
|
301
|
+
return PPromise.resolve(null);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { ICustomMediaKeys, ICustomMediaKeySystemAccess } from "
|
|
17
|
-
import { IKeySystemOption } from "
|
|
18
|
-
import LoadedSessionsStore from "./
|
|
19
|
-
/**
|
|
16
|
+
import { ICustomMediaKeys, ICustomMediaKeySystemAccess } from "../../../compat";
|
|
17
|
+
import { IKeySystemOption } from "../types";
|
|
18
|
+
import LoadedSessionsStore from "./loaded_sessions_store";
|
|
19
|
+
/** DRM-related state that can be associated to a single HTMLMediaElement. */
|
|
20
20
|
export interface IMediaElementMediaKeysInfos {
|
|
21
21
|
/** Last keySystemOptions used with that HTMLMediaElement. */
|
|
22
22
|
keySystemOptions: IKeySystemOption;
|
|
File without changes
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import { ICustomMediaKeySession } from "../../../compat";
|
|
17
|
-
import {
|
|
17
|
+
import { IProcessedProtectionData, IPersistentSessionInfo, IPersistentSessionStorage } from "../types";
|
|
18
18
|
/**
|
|
19
19
|
* Set representing persisted licenses. Depends on a simple local-
|
|
20
20
|
* storage implementation with a `save`/`load` synchronous interface
|
|
@@ -45,11 +45,11 @@ export default class PersistentSessionsStore {
|
|
|
45
45
|
getAll(): IPersistentSessionInfo[];
|
|
46
46
|
/**
|
|
47
47
|
* Retrieve an entry based on its initialization data.
|
|
48
|
-
* @param {
|
|
48
|
+
* @param {Object} initData
|
|
49
49
|
* @param {string|undefined} initDataType
|
|
50
50
|
* @returns {Object|null}
|
|
51
51
|
*/
|
|
52
|
-
get(initData:
|
|
52
|
+
get(initData: IProcessedProtectionData): IPersistentSessionInfo | null;
|
|
53
53
|
/**
|
|
54
54
|
* Like `get`, but also move the corresponding value at the end of the store
|
|
55
55
|
* (as returned by `getAll`) if found.
|
|
@@ -61,21 +61,20 @@ export default class PersistentSessionsStore {
|
|
|
61
61
|
* @param {string|undefined} initDataType
|
|
62
62
|
* @returns {*}
|
|
63
63
|
*/
|
|
64
|
-
getAndReuse(initData:
|
|
64
|
+
getAndReuse(initData: IProcessedProtectionData): IPersistentSessionInfo | null;
|
|
65
65
|
/**
|
|
66
66
|
* Add a new entry in the PersistentSessionsStore.
|
|
67
67
|
* @param {Uint8Array} initData
|
|
68
68
|
* @param {string|undefined} initDataType
|
|
69
69
|
* @param {MediaKeySession} session
|
|
70
70
|
*/
|
|
71
|
-
add(initData:
|
|
71
|
+
add(initData: IProcessedProtectionData, keyIds: Uint8Array[] | undefined, session: MediaKeySession | ICustomMediaKeySession): void;
|
|
72
72
|
/**
|
|
73
|
-
* Delete stored MediaKeySession information based on its
|
|
74
|
-
* data.
|
|
73
|
+
* Delete stored MediaKeySession information based on its session id.
|
|
75
74
|
* @param {Uint8Array} initData
|
|
76
75
|
* @param {string|undefined} initDataType
|
|
77
76
|
*/
|
|
78
|
-
delete(
|
|
77
|
+
delete(sessionId: string): void;
|
|
79
78
|
deleteOldSessions(sessionsToDelete: number): void;
|
|
80
79
|
/**
|
|
81
80
|
* Delete all saved entries.
|
|
@@ -84,8 +83,7 @@ export default class PersistentSessionsStore {
|
|
|
84
83
|
/**
|
|
85
84
|
* Retrieve index of an entry.
|
|
86
85
|
* Returns `-1` if not found.
|
|
87
|
-
* @param {
|
|
88
|
-
* @param {string|undefined} initDataType
|
|
86
|
+
* @param {Object} initData
|
|
89
87
|
* @returns {number}
|
|
90
88
|
*/
|
|
91
89
|
private _getIndex;
|
|
@@ -93,12 +91,4 @@ export default class PersistentSessionsStore {
|
|
|
93
91
|
* Use the given storage to store the current entries.
|
|
94
92
|
*/
|
|
95
93
|
private _save;
|
|
96
|
-
/**
|
|
97
|
-
* Format given initializationData's values so they are ready to be stored:
|
|
98
|
-
* - sort them by systemId, so they are faster to compare
|
|
99
|
-
* - add hash for each initialization data encountered.
|
|
100
|
-
* @param {Array.<Object>} initialValues
|
|
101
|
-
* @returns {Array.<Object>}
|
|
102
|
-
*/
|
|
103
|
-
private _formatValuesForStore;
|
|
104
94
|
}
|