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
|
@@ -1,182 +0,0 @@
|
|
|
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
|
-
|
|
17
|
-
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
18
|
-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
19
|
-
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
20
|
-
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
21
|
-
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
22
|
-
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
23
|
-
|
|
24
|
-
import {
|
|
25
|
-
of as observableOf,
|
|
26
|
-
skip,
|
|
27
|
-
take,
|
|
28
|
-
tap,
|
|
29
|
-
throwError,
|
|
30
|
-
} from "rxjs";
|
|
31
|
-
|
|
32
|
-
describe("core - eme - initMediaKeys", () => {
|
|
33
|
-
beforeEach(() => {
|
|
34
|
-
jest.resetModules();
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
it("should emit `created-media-keys` event once MediaKeys has been created", done => {
|
|
38
|
-
const fakeResult = { mediaKeySystemAccess: { a: 5, keySystem: "toto" },
|
|
39
|
-
mediaKeys: { b: 4 },
|
|
40
|
-
stores: { loadedSessionsStore: { c: 3 },
|
|
41
|
-
persistentSessionsStore: { d: 2 } },
|
|
42
|
-
options: { e: 1 } };
|
|
43
|
-
const spyGetMediaKeysInfos = jest.fn(() => {
|
|
44
|
-
return observableOf(fakeResult);
|
|
45
|
-
});
|
|
46
|
-
jest.mock("../get_media_keys", () => ({
|
|
47
|
-
__esModule: true as const,
|
|
48
|
-
default: spyGetMediaKeysInfos,
|
|
49
|
-
}));
|
|
50
|
-
const spyAttachMediaKeys = jest.fn(() => {
|
|
51
|
-
return observableOf(undefined);
|
|
52
|
-
});
|
|
53
|
-
const spyDisableOldMediaKeys = jest.fn(() => {
|
|
54
|
-
return observableOf(undefined);
|
|
55
|
-
});
|
|
56
|
-
jest.mock("../attach_media_keys", () => ({
|
|
57
|
-
__esModule: true as const,
|
|
58
|
-
default: spyAttachMediaKeys,
|
|
59
|
-
disableOldMediaKeys: spyDisableOldMediaKeys,
|
|
60
|
-
}));
|
|
61
|
-
const initMediaKeys = require("../init_media_keys").default;
|
|
62
|
-
|
|
63
|
-
const mediaElement = document.createElement("video");
|
|
64
|
-
const keySystemsConfigs = [{ l: 4 }, { d: 12 }];
|
|
65
|
-
initMediaKeys(mediaElement, keySystemsConfigs)
|
|
66
|
-
.pipe(take(1))
|
|
67
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
68
|
-
.subscribe((result : { type : string; value : any }) => {
|
|
69
|
-
expect(result.type).toEqual("created-media-keys");
|
|
70
|
-
expect(result.value.mediaKeys).toEqual(fakeResult.mediaKeys);
|
|
71
|
-
expect(result.value.mediaKeySystemAccess)
|
|
72
|
-
.toEqual(fakeResult.mediaKeySystemAccess);
|
|
73
|
-
expect(result.value.stores).toEqual(fakeResult.stores);
|
|
74
|
-
expect(result.value.options).toEqual(fakeResult.options);
|
|
75
|
-
expect(typeof result.value.canAttachMediaKeys.setValue === "function")
|
|
76
|
-
.toBeTruthy();
|
|
77
|
-
|
|
78
|
-
expect(spyGetMediaKeysInfos).toHaveBeenCalledTimes(1);
|
|
79
|
-
expect(spyGetMediaKeysInfos)
|
|
80
|
-
.toHaveBeenCalledWith(mediaElement, keySystemsConfigs);
|
|
81
|
-
|
|
82
|
-
expect(spyAttachMediaKeys).toHaveBeenCalledTimes(0);
|
|
83
|
-
done();
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it("should return MediaKeys information after media keys has been attached", (done) => {
|
|
88
|
-
const fakeResult = { mediaKeySystemAccess: { a: 5, keySystem: "toto" },
|
|
89
|
-
mediaKeys: { b: 4 },
|
|
90
|
-
stores: { loadedSessionsStore: { c: 3 },
|
|
91
|
-
persistentSessionsStore: { d: 2 } },
|
|
92
|
-
options: { e: 1 } };
|
|
93
|
-
const spyGetMediaKeysInfos = jest.fn(() => {
|
|
94
|
-
return observableOf(fakeResult);
|
|
95
|
-
});
|
|
96
|
-
jest.mock("../get_media_keys", () => ({
|
|
97
|
-
__esModule: true as const,
|
|
98
|
-
default: spyGetMediaKeysInfos,
|
|
99
|
-
}));
|
|
100
|
-
const spyAttachMediaKeys = jest.fn(() => {
|
|
101
|
-
return observableOf(undefined);
|
|
102
|
-
});
|
|
103
|
-
const spyDisableOldMediaKeys = jest.fn(() => {
|
|
104
|
-
return observableOf(undefined);
|
|
105
|
-
});
|
|
106
|
-
jest.mock("../attach_media_keys", () => ({
|
|
107
|
-
__esModule: true as const,
|
|
108
|
-
default: spyAttachMediaKeys,
|
|
109
|
-
disableOldMediaKeys: spyDisableOldMediaKeys,
|
|
110
|
-
}));
|
|
111
|
-
const initMediaKeys = require("../init_media_keys").default;
|
|
112
|
-
|
|
113
|
-
const mediaElement = document.createElement("video");
|
|
114
|
-
const keySystemsConfigs = [{ l: 4 }, { d: 12 }];
|
|
115
|
-
initMediaKeys(mediaElement, keySystemsConfigs)
|
|
116
|
-
.pipe(
|
|
117
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
118
|
-
tap((evt: { type : string; value : any }) => {
|
|
119
|
-
if (evt.type === "created-media-keys") {
|
|
120
|
-
evt.value.canAttachMediaKeys.setValue(true);
|
|
121
|
-
}
|
|
122
|
-
}),
|
|
123
|
-
skip(1)
|
|
124
|
-
)
|
|
125
|
-
.subscribe((result : unknown) => {
|
|
126
|
-
expect(result).toEqual({
|
|
127
|
-
type: "attached-media-keys",
|
|
128
|
-
value: fakeResult,
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
expect(spyGetMediaKeysInfos).toHaveBeenCalledTimes(1);
|
|
132
|
-
expect(spyGetMediaKeysInfos)
|
|
133
|
-
.toHaveBeenCalledWith(mediaElement, keySystemsConfigs);
|
|
134
|
-
|
|
135
|
-
expect(spyAttachMediaKeys).toHaveBeenCalledTimes(1);
|
|
136
|
-
expect(spyAttachMediaKeys)
|
|
137
|
-
.toHaveBeenCalledWith(
|
|
138
|
-
mediaElement,
|
|
139
|
-
{ mediaKeySystemAccess: fakeResult.mediaKeySystemAccess,
|
|
140
|
-
mediaKeys: fakeResult.mediaKeys,
|
|
141
|
-
loadedSessionsStore: fakeResult.stores.loadedSessionsStore,
|
|
142
|
-
keySystemOptions: fakeResult.options });
|
|
143
|
-
done();
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
it("Should throw if getMediaKeys throws", (done) => {
|
|
148
|
-
const err = new Error("a");
|
|
149
|
-
const spyGetMediaKeysInfos = jest.fn(() => throwError(() => err));
|
|
150
|
-
jest.mock("../get_media_keys", () => ({
|
|
151
|
-
__esModule: true as const,
|
|
152
|
-
default: spyGetMediaKeysInfos,
|
|
153
|
-
}));
|
|
154
|
-
const spyAttachMediaKeys = jest.fn(() => {
|
|
155
|
-
return observableOf(undefined);
|
|
156
|
-
});
|
|
157
|
-
const spyDisableOldMediaKeys = jest.fn(() => {
|
|
158
|
-
return observableOf(undefined);
|
|
159
|
-
});
|
|
160
|
-
jest.mock("../attach_media_keys", () => ({
|
|
161
|
-
__esModule: true as const,
|
|
162
|
-
default: spyAttachMediaKeys,
|
|
163
|
-
disableOldMediaKeys: spyDisableOldMediaKeys,
|
|
164
|
-
}));
|
|
165
|
-
const initMediaKeys = require("../init_media_keys").default;
|
|
166
|
-
|
|
167
|
-
const mediaElement = document.createElement("video");
|
|
168
|
-
const keySystemsConfigs = [{ l: 4 }, { d: 12 }];
|
|
169
|
-
initMediaKeys(mediaElement, keySystemsConfigs)
|
|
170
|
-
.subscribe(null, (e : Error) => {
|
|
171
|
-
expect(e).toBe(err);
|
|
172
|
-
|
|
173
|
-
expect(spyGetMediaKeysInfos).toHaveBeenCalledTimes(1);
|
|
174
|
-
expect(spyGetMediaKeysInfos)
|
|
175
|
-
.toHaveBeenCalledWith(mediaElement, keySystemsConfigs);
|
|
176
|
-
|
|
177
|
-
expect(spyAttachMediaKeys).not.toHaveBeenCalled();
|
|
178
|
-
done();
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
});
|
|
@@ -1,96 +0,0 @@
|
|
|
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
|
-
|
|
17
|
-
import {
|
|
18
|
-
EMPTY,
|
|
19
|
-
mapTo,
|
|
20
|
-
merge as observableMerge,
|
|
21
|
-
Observable,
|
|
22
|
-
startWith,
|
|
23
|
-
} from "rxjs";
|
|
24
|
-
import { ICustomMediaKeySession } from "../../compat";
|
|
25
|
-
import { IInitializationDataInfo } from "./types";
|
|
26
|
-
import LoadedSessionsStore from "./utils/loaded_sessions_store";
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Event emitted when an old MediaKeySession has been closed to respect the
|
|
30
|
-
* maximum limit of concurrent MediaKeySession active.
|
|
31
|
-
*/
|
|
32
|
-
export interface ICleanedOldSessionEvent {
|
|
33
|
-
type : "cleaned-old-session";
|
|
34
|
-
value : {
|
|
35
|
-
/** The MediaKeySession cleaned. */
|
|
36
|
-
mediaKeySession : MediaKeySession |
|
|
37
|
-
ICustomMediaKeySession;
|
|
38
|
-
/** The type of MediaKeySession (e.g. "temporary"). */
|
|
39
|
-
sessionType : MediaKeySessionType;
|
|
40
|
-
/** Initialization data assiociated to this MediaKeySession. */
|
|
41
|
-
initializationData : IInitializationDataInfo;
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Event emitted when we are beginning to close an old MediaKeySession to
|
|
47
|
-
* respect the maximum limit of concurrent MediaKeySession active.
|
|
48
|
-
*/
|
|
49
|
-
export interface ICleaningOldSessionEvent {
|
|
50
|
-
type : "cleaning-old-session";
|
|
51
|
-
value : {
|
|
52
|
-
/** The MediaKeySession that we are currently cleaning. */
|
|
53
|
-
mediaKeySession : MediaKeySession |
|
|
54
|
-
ICustomMediaKeySession;
|
|
55
|
-
/** The type of MediaKeySession (e.g. "temporary"). */
|
|
56
|
-
sessionType : MediaKeySessionType;
|
|
57
|
-
/** Initialization data assiociated to this MediaKeySession. */
|
|
58
|
-
initializationData : IInitializationDataInfo;
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Close sessions from the loadedSessionsStore to allow at maximum `limit`
|
|
64
|
-
* stored MediaKeySessions in it.
|
|
65
|
-
*
|
|
66
|
-
* Emit event when a MediaKeySession begin to be closed and another when the
|
|
67
|
-
* MediaKeySession is closed.
|
|
68
|
-
* @param {Object} loadedSessionsStore
|
|
69
|
-
* @returns {Observable}
|
|
70
|
-
*/
|
|
71
|
-
export default function cleanOldLoadedSessions(
|
|
72
|
-
loadedSessionsStore : LoadedSessionsStore,
|
|
73
|
-
limit : number
|
|
74
|
-
) : Observable<ICleaningOldSessionEvent | ICleanedOldSessionEvent> {
|
|
75
|
-
if (limit < 0 || limit >= loadedSessionsStore.getLength()) {
|
|
76
|
-
return EMPTY;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const cleaningOldSessions$ : Array<Observable<ICleanedOldSessionEvent |
|
|
80
|
-
ICleaningOldSessionEvent>> = [];
|
|
81
|
-
const entries = loadedSessionsStore
|
|
82
|
-
.getAll()
|
|
83
|
-
.slice(); // clone
|
|
84
|
-
const toDelete = entries.length - limit;
|
|
85
|
-
for (let i = 0; i < toDelete; i++) {
|
|
86
|
-
const entry = entries[i];
|
|
87
|
-
const cleaning$ = loadedSessionsStore
|
|
88
|
-
.closeSession(entry.initializationData)
|
|
89
|
-
.pipe(mapTo({ type: "cleaned-old-session" as const,
|
|
90
|
-
value: entry }),
|
|
91
|
-
startWith({ type: "cleaning-old-session" as const,
|
|
92
|
-
value: entry }));
|
|
93
|
-
cleaningOldSessions$.push(cleaning$);
|
|
94
|
-
}
|
|
95
|
-
return observableMerge(...cleaningOldSessions$);
|
|
96
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
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
|
-
|
|
17
|
-
import {
|
|
18
|
-
defer as observableDefer,
|
|
19
|
-
EMPTY,
|
|
20
|
-
ignoreElements ,
|
|
21
|
-
Observable,
|
|
22
|
-
} from "rxjs";
|
|
23
|
-
import { shouldUnsetMediaKeys } from "../../compat/";
|
|
24
|
-
import log from "../../log";
|
|
25
|
-
import disposeMediaKeys from "./dispose_media_keys";
|
|
26
|
-
import MediaKeysInfosStore from "./media_keys_infos_store";
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Clear EME ressources that should be cleared when the current content stops
|
|
30
|
-
* its playback.
|
|
31
|
-
* @param {HTMLMediaElement} mediaElement
|
|
32
|
-
* @returns {Observable}
|
|
33
|
-
*/
|
|
34
|
-
export default function clearEMESession(
|
|
35
|
-
mediaElement : HTMLMediaElement
|
|
36
|
-
) : Observable<never> {
|
|
37
|
-
return observableDefer(() => {
|
|
38
|
-
log.info("EME: Clearing-up EME session.");
|
|
39
|
-
if (shouldUnsetMediaKeys()) {
|
|
40
|
-
log.info("EME: disposing current MediaKeys.");
|
|
41
|
-
return disposeMediaKeys(mediaElement)
|
|
42
|
-
.pipe(ignoreElements());
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const currentState = MediaKeysInfosStore.getState(mediaElement);
|
|
46
|
-
if (currentState !== null &&
|
|
47
|
-
currentState.keySystemOptions.closeSessionsOnStop === true)
|
|
48
|
-
{
|
|
49
|
-
log.info("EME: closing all current sessions.");
|
|
50
|
-
return currentState.loadedSessionsStore.closeAllSessions()
|
|
51
|
-
// NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
|
|
52
|
-
// first type parameter as `any` instead of the perfectly fine `unknown`,
|
|
53
|
-
// leading to linter issues, as it forbids the usage of `any`.
|
|
54
|
-
// This is why we're disabling the eslint rule.
|
|
55
|
-
/* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
|
|
56
|
-
.pipe(ignoreElements());
|
|
57
|
-
}
|
|
58
|
-
log.info("EME: Nothing to clear. Returning right away. No state =",
|
|
59
|
-
currentState === null);
|
|
60
|
-
return EMPTY;
|
|
61
|
-
});
|
|
62
|
-
}
|
|
@@ -1,187 +0,0 @@
|
|
|
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
|
-
|
|
17
|
-
import {
|
|
18
|
-
catchError,
|
|
19
|
-
defer as observableDefer,
|
|
20
|
-
map,
|
|
21
|
-
mergeMap,
|
|
22
|
-
Observable,
|
|
23
|
-
of as observableOf,
|
|
24
|
-
} from "rxjs";
|
|
25
|
-
import {
|
|
26
|
-
ICustomMediaKeySession,
|
|
27
|
-
loadSession,
|
|
28
|
-
} from "../../compat";
|
|
29
|
-
import log from "../../log";
|
|
30
|
-
import {
|
|
31
|
-
IInitializationDataInfo,
|
|
32
|
-
IMediaKeySessionStores,
|
|
33
|
-
} from "./types";
|
|
34
|
-
import isSessionUsable from "./utils/is_session_usable";
|
|
35
|
-
import LoadedSessionsStore from "./utils/loaded_sessions_store";
|
|
36
|
-
import PersistentSessionsStore from "./utils/persistent_sessions_store";
|
|
37
|
-
|
|
38
|
-
export interface INewSessionCreatedEvent {
|
|
39
|
-
type : "created-session";
|
|
40
|
-
value : { mediaKeySession : MediaKeySession |
|
|
41
|
-
ICustomMediaKeySession;
|
|
42
|
-
sessionType : MediaKeySessionType; };
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export interface IPersistentSessionRecoveryEvent {
|
|
46
|
-
type : "loaded-persistent-session";
|
|
47
|
-
value : { mediaKeySession : MediaKeySession |
|
|
48
|
-
ICustomMediaKeySession;
|
|
49
|
-
sessionType : MediaKeySessionType; };
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export type ICreateSessionEvent = INewSessionCreatedEvent |
|
|
53
|
-
IPersistentSessionRecoveryEvent;
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Create a new Session on the given MediaKeys, corresponding to the given
|
|
57
|
-
* initializationData.
|
|
58
|
-
* If session creating fails, remove the oldest MediaKeySession loaded and
|
|
59
|
-
* retry.
|
|
60
|
-
*
|
|
61
|
-
* /!\ This only creates new sessions.
|
|
62
|
-
* It will fail if loadedSessionsStore already has a MediaKeySession with
|
|
63
|
-
* the given initializationData.
|
|
64
|
-
* @param {Uint8Array} initData
|
|
65
|
-
* @param {string|undefined} initDataType
|
|
66
|
-
* @param {Object} mediaKeysInfos
|
|
67
|
-
* @returns {Observable}
|
|
68
|
-
*/
|
|
69
|
-
export default function createSession(
|
|
70
|
-
stores : IMediaKeySessionStores,
|
|
71
|
-
initializationData : IInitializationDataInfo,
|
|
72
|
-
wantedSessionType : MediaKeySessionType
|
|
73
|
-
) : Observable<ICreateSessionEvent> {
|
|
74
|
-
return observableDefer(() => {
|
|
75
|
-
const { loadedSessionsStore,
|
|
76
|
-
persistentSessionsStore } = stores;
|
|
77
|
-
|
|
78
|
-
if (wantedSessionType === "temporary") {
|
|
79
|
-
return createTemporarySession(loadedSessionsStore, initializationData);
|
|
80
|
-
} else if (persistentSessionsStore === null) {
|
|
81
|
-
log.warn("EME: Cannot create persistent MediaKeySession, " +
|
|
82
|
-
"PersistentSessionsStore not created.");
|
|
83
|
-
return createTemporarySession(loadedSessionsStore, initializationData);
|
|
84
|
-
}
|
|
85
|
-
return createAndTryToRetrievePersistentSession(loadedSessionsStore,
|
|
86
|
-
persistentSessionsStore,
|
|
87
|
-
initializationData);
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Create a new temporary MediaKeySession linked to the given initData and
|
|
93
|
-
* initDataType.
|
|
94
|
-
* @param {Object} loadedSessionsStore
|
|
95
|
-
* @param {Object} initData
|
|
96
|
-
* @returns {Observable}
|
|
97
|
-
*/
|
|
98
|
-
function createTemporarySession(
|
|
99
|
-
loadedSessionsStore : LoadedSessionsStore,
|
|
100
|
-
initData : IInitializationDataInfo
|
|
101
|
-
) : Observable<INewSessionCreatedEvent> {
|
|
102
|
-
return observableDefer(() => {
|
|
103
|
-
log.info("EME: Creating a new temporary session");
|
|
104
|
-
const session = loadedSessionsStore.createSession(initData, "temporary");
|
|
105
|
-
return observableOf({ type: "created-session" as const,
|
|
106
|
-
value: { mediaKeySession: session,
|
|
107
|
-
sessionType: "temporary" as const } });
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Create a persistent MediaKeySession and try to load on it a previous
|
|
113
|
-
* MediaKeySession linked to the same initData and initDataType.
|
|
114
|
-
* @param {Object} loadedSessionsStore
|
|
115
|
-
* @param {Object} persistentSessionsStore
|
|
116
|
-
* @param {Object} initData
|
|
117
|
-
* @returns {Observable}
|
|
118
|
-
*/
|
|
119
|
-
function createAndTryToRetrievePersistentSession(
|
|
120
|
-
loadedSessionsStore : LoadedSessionsStore,
|
|
121
|
-
persistentSessionsStore : PersistentSessionsStore,
|
|
122
|
-
initData : IInitializationDataInfo
|
|
123
|
-
) : Observable<INewSessionCreatedEvent | IPersistentSessionRecoveryEvent> {
|
|
124
|
-
return observableDefer(() => {
|
|
125
|
-
log.info("EME: Creating persistent MediaKeySession");
|
|
126
|
-
|
|
127
|
-
const session = loadedSessionsStore
|
|
128
|
-
.createSession(initData, "persistent-license");
|
|
129
|
-
const storedEntry = persistentSessionsStore.getAndReuse(initData);
|
|
130
|
-
|
|
131
|
-
if (storedEntry === null) {
|
|
132
|
-
return observableOf({ type: "created-session" as const,
|
|
133
|
-
value: { mediaKeySession: session,
|
|
134
|
-
sessionType: "persistent-license" as const } });
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Helper function to close and restart the current persistent session
|
|
139
|
-
* considered, and re-create it from scratch.
|
|
140
|
-
* @returns {Observable}
|
|
141
|
-
*/
|
|
142
|
-
const recreatePersistentSession = () : Observable<INewSessionCreatedEvent> => {
|
|
143
|
-
log.info("EME: Removing previous persistent session.");
|
|
144
|
-
if (persistentSessionsStore.get(initData) !== null) {
|
|
145
|
-
persistentSessionsStore.delete(initData);
|
|
146
|
-
}
|
|
147
|
-
return loadedSessionsStore.closeSession(initData)
|
|
148
|
-
.pipe(map(() => {
|
|
149
|
-
const newSession = loadedSessionsStore.createSession(initData,
|
|
150
|
-
"persistent-license");
|
|
151
|
-
return { type: "created-session" as const,
|
|
152
|
-
value: { mediaKeySession: newSession,
|
|
153
|
-
sessionType: "persistent-license" } };
|
|
154
|
-
}));
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
return loadSession(session, storedEntry.sessionId).pipe(
|
|
158
|
-
mergeMap((hasLoadedSession) : Observable<ICreateSessionEvent> => {
|
|
159
|
-
if (!hasLoadedSession) {
|
|
160
|
-
log.warn("EME: No data stored for the loaded session");
|
|
161
|
-
persistentSessionsStore.delete(initData);
|
|
162
|
-
return observableOf({ type: "created-session" as const,
|
|
163
|
-
value: { mediaKeySession: session,
|
|
164
|
-
sessionType: "persistent-license" } });
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
if (hasLoadedSession && isSessionUsable(session)) {
|
|
168
|
-
persistentSessionsStore.add(initData, session);
|
|
169
|
-
log.info("EME: Succeeded to load persistent session.");
|
|
170
|
-
return observableOf({ type: "loaded-persistent-session" as const,
|
|
171
|
-
value: { mediaKeySession: session,
|
|
172
|
-
sessionType: "persistent-license" } });
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// Unusable persistent session: recreate a new session from scratch.
|
|
176
|
-
log.warn("EME: Previous persistent session not usable anymore.");
|
|
177
|
-
return recreatePersistentSession();
|
|
178
|
-
}),
|
|
179
|
-
catchError((err : unknown) : Observable<INewSessionCreatedEvent> => {
|
|
180
|
-
log.warn("EME: Unable to load persistent session: " +
|
|
181
|
-
(err instanceof Error ? err.toString() :
|
|
182
|
-
"Unknown Error"));
|
|
183
|
-
return recreatePersistentSession();
|
|
184
|
-
})
|
|
185
|
-
);
|
|
186
|
-
});
|
|
187
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
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
|
-
|
|
17
|
-
import noop from "../../utils/noop";
|
|
18
|
-
import disposeMediaKeys from "./dispose_media_keys";
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Free up all ressources taken by the EME management.
|
|
22
|
-
*/
|
|
23
|
-
export default function disposeEME(mediaElement : HTMLMediaElement) : void {
|
|
24
|
-
disposeMediaKeys(mediaElement).subscribe(noop);
|
|
25
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
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
|
-
|
|
17
|
-
import {
|
|
18
|
-
defer as observableDefer,
|
|
19
|
-
mergeMap,
|
|
20
|
-
Observable,
|
|
21
|
-
of as observableOf,
|
|
22
|
-
} from "rxjs";
|
|
23
|
-
import { setMediaKeys } from "../../compat";
|
|
24
|
-
import log from "../../log";
|
|
25
|
-
import MediaKeysInfosStore from "./media_keys_infos_store";
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* @param {Object} mediaKeysInfos
|
|
29
|
-
* @returns {Observable}
|
|
30
|
-
*/
|
|
31
|
-
export default function disposeMediaKeys(
|
|
32
|
-
mediaElement : HTMLMediaElement
|
|
33
|
-
) : Observable<unknown> {
|
|
34
|
-
return observableDefer(() => {
|
|
35
|
-
const currentState = MediaKeysInfosStore.getState(mediaElement);
|
|
36
|
-
if (currentState === null) {
|
|
37
|
-
return observableOf(null);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
log.info("EME: Disposing of the current MediaKeys");
|
|
41
|
-
const { loadedSessionsStore } = currentState;
|
|
42
|
-
MediaKeysInfosStore.clearState(mediaElement);
|
|
43
|
-
return loadedSessionsStore.closeAllSessions()
|
|
44
|
-
.pipe(mergeMap(() => setMediaKeys(mediaElement, null)));
|
|
45
|
-
});
|
|
46
|
-
}
|