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
|
@@ -13,13 +13,14 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import {
|
|
16
|
+
import { ICustomMediaKeySession } from "../../compat";
|
|
17
17
|
import { ICustomError } from "../../errors";
|
|
18
|
-
import {
|
|
18
|
+
import Manifest, { Adaptation, Period, Representation } from "../../manifest";
|
|
19
|
+
import InitDataValuesContainer from "./utils/init_data_values_container";
|
|
19
20
|
import LoadedSessionsStore from "./utils/loaded_sessions_store";
|
|
20
21
|
import PersistentSessionsStore from "./utils/persistent_sessions_store";
|
|
21
22
|
/** Information about the encryption initialization data. */
|
|
22
|
-
export interface
|
|
23
|
+
export interface IProtectionData {
|
|
23
24
|
/**
|
|
24
25
|
* The initialization data type - or the format of the `data` attribute (e.g.
|
|
25
26
|
* "cenc").
|
|
@@ -34,229 +35,47 @@ export interface IInitializationDataInfo {
|
|
|
34
35
|
* `undefined` when not known (different from an empty array - which would
|
|
35
36
|
* just mean that there's no key id involved).
|
|
36
37
|
*/
|
|
37
|
-
keyIds?: Uint8Array[];
|
|
38
|
+
keyIds?: Uint8Array[] | undefined;
|
|
39
|
+
/** The content linked to that segment protection data. */
|
|
40
|
+
content?: IContent;
|
|
38
41
|
/** Every initialization data for that type. */
|
|
39
|
-
values:
|
|
40
|
-
/**
|
|
41
|
-
* Hex encoded system id, which identifies the key system.
|
|
42
|
-
* https://dashif.org/identifiers/content_protection/
|
|
43
|
-
*
|
|
44
|
-
* If `undefined`, we don't know the system id for that initialization data.
|
|
45
|
-
* In that case, the initialization data might even be a concatenation of
|
|
46
|
-
* the initialization data from multiple system ids.
|
|
47
|
-
*/
|
|
48
|
-
systemId: string | undefined;
|
|
49
|
-
/**
|
|
50
|
-
* The initialization data itself for that type and systemId.
|
|
51
|
-
* For example, with "cenc" initialization data found in an ISOBMFF file,
|
|
52
|
-
* this will be the whole PSSH box.
|
|
53
|
-
*/
|
|
54
|
-
data: Uint8Array;
|
|
55
|
-
}>;
|
|
56
|
-
}
|
|
57
|
-
/** Event emitted when a minor - recoverable - error happened. */
|
|
58
|
-
export interface IEMEWarningEvent {
|
|
59
|
-
type: "warning";
|
|
60
|
-
value: ICustomError;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Event emitted when we receive an "encrypted" event from the browser.
|
|
64
|
-
* This is usually sent when pushing an initialization segment, if it stores
|
|
65
|
-
* encryption information.
|
|
66
|
-
*/
|
|
67
|
-
export interface IEncryptedEvent {
|
|
68
|
-
type: "encrypted-event-received";
|
|
69
|
-
value: IInitializationDataInfo;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Sent when a MediaKeys has been created (or is already created) for the
|
|
73
|
-
* current content.
|
|
74
|
-
* This is necessary before creating a MediaKeySession which will allow
|
|
75
|
-
* encryption keys to be communicated.
|
|
76
|
-
*
|
|
77
|
-
* It carries a shared reference (`canAttachMediaKeys`) that should be setted to
|
|
78
|
-
* `true` to indicate that RxPlayer's EME logic can start to attach the
|
|
79
|
-
* `MediaKeys` instance to the HTMLMediaElement.
|
|
80
|
-
*/
|
|
81
|
-
export interface ICreatedMediaKeysEvent {
|
|
82
|
-
type: "created-media-keys";
|
|
83
|
-
value: {
|
|
84
|
-
/** The MediaKeySystemAccess which allowed to create the MediaKeys instance. */
|
|
85
|
-
mediaKeySystemAccess: MediaKeySystemAccess | ICustomMediaKeySystemAccess;
|
|
86
|
-
/**
|
|
87
|
-
* Hex-encoded identifier for the key system used.
|
|
88
|
-
* A list of available IDs can be found here:
|
|
89
|
-
* https://dashif.org/identifiers/content_protection/
|
|
90
|
-
*
|
|
91
|
-
* This ID can be used to select the encryption initialization data to send
|
|
92
|
-
* to the EMEManager.
|
|
93
|
-
*
|
|
94
|
-
* Note that this is only for optimization purposes (e.g. to not
|
|
95
|
-
* unnecessarily wait for new encryption initialization data to arrive when
|
|
96
|
-
* those linked to the right key system is already available) as sending all
|
|
97
|
-
* available encryption initialization data should also work in all cases.
|
|
98
|
-
*
|
|
99
|
-
* Can be `undefined` in two cases:
|
|
100
|
-
*
|
|
101
|
-
* - the current system ID is not known
|
|
102
|
-
*
|
|
103
|
-
* - the current system ID is known, but we don't want to communicate it
|
|
104
|
-
* to ensure all encryption initialization data is still sent.
|
|
105
|
-
* This is usually done to work-around retro-compatibility issues with
|
|
106
|
-
* older persisted decryption session.
|
|
107
|
-
*/
|
|
108
|
-
initializationDataSystemId: string | undefined;
|
|
109
|
-
/** The MediaKeys instance. */
|
|
110
|
-
mediaKeys: MediaKeys | ICustomMediaKeys;
|
|
111
|
-
/** Stores allowing to cache MediaKeySession instances. */
|
|
112
|
-
stores: IMediaKeySessionStores;
|
|
113
|
-
/** key system options considered. */
|
|
114
|
-
options: IKeySystemOption;
|
|
115
|
-
/**
|
|
116
|
-
* Shared reference that should be set to `true` once the `MediaKeys`
|
|
117
|
-
* instance can be attached to the HTMLMediaElement.
|
|
118
|
-
*/
|
|
119
|
-
canAttachMediaKeys: ISharedReference<boolean>;
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Sent when the created (or already created) MediaKeys is attached to the
|
|
124
|
-
* current HTMLMediaElement element.
|
|
125
|
-
* On some peculiar devices, we have to wait for that step before the first
|
|
126
|
-
* media segments are to be pushed to avoid issues.
|
|
127
|
-
* Because this event is sent after a MediaKeys is created, you will always have
|
|
128
|
-
* a "created-media-keys" event before an "attached-media-keys" event.
|
|
129
|
-
*/
|
|
130
|
-
export interface IAttachedMediaKeysEvent {
|
|
131
|
-
type: "attached-media-keys";
|
|
132
|
-
value: {
|
|
133
|
-
/** The MediaKeySystemAccess which allowed to create the MediaKeys instance. */
|
|
134
|
-
mediaKeySystemAccess: MediaKeySystemAccess | ICustomMediaKeySystemAccess;
|
|
135
|
-
/** The MediaKeys instance. */
|
|
136
|
-
mediaKeys: MediaKeys | ICustomMediaKeys;
|
|
137
|
-
stores: IMediaKeySessionStores;
|
|
138
|
-
options: IKeySystemOption;
|
|
139
|
-
};
|
|
42
|
+
values: IInitDataValue[];
|
|
140
43
|
}
|
|
141
|
-
/**
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
* through the usual license-fetching logic.
|
|
145
|
-
* This is usually because the MediaKeySession for this encryption key has
|
|
146
|
-
* already been created.
|
|
147
|
-
*/
|
|
148
|
-
export interface IInitDataIgnoredEvent {
|
|
149
|
-
type: "init-data-ignored";
|
|
150
|
-
value: {
|
|
151
|
-
initializationData: IInitializationDataInfo;
|
|
152
|
-
};
|
|
44
|
+
/** Protection initialization data actually processed by the `ContentDecryptor`. */
|
|
45
|
+
export interface IProcessedProtectionData extends Omit<IProtectionData, "values"> {
|
|
46
|
+
values: InitDataValuesContainer;
|
|
153
47
|
}
|
|
154
48
|
/**
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
* a server certificate.
|
|
158
|
-
* As such, we will call the corresponding `getLicense` callback immediately
|
|
159
|
-
* after this event is sent.
|
|
160
|
-
*
|
|
161
|
-
* Depending on the return of the getLicense call, we will then either emit a
|
|
162
|
-
* "warning" event and retry the call (for when it failed but will be retried),
|
|
163
|
-
* throw (when it failed with no retry left and no fallback policy is set), emit
|
|
164
|
-
* a "blacklist-protection-data-event" (for when it failed with no retry left
|
|
165
|
-
* but a fallback policy is set), emit a "session-updated" event (for when the
|
|
166
|
-
* call resolved with some data) or emit a "no-update" event (for when the call
|
|
167
|
-
* resolved with `null`).
|
|
168
|
-
*/
|
|
169
|
-
export interface ISessionMessageEvent {
|
|
170
|
-
type: "session-message";
|
|
171
|
-
value: {
|
|
172
|
-
messageType: string;
|
|
173
|
-
initializationData: IInitializationDataInfo;
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Emitted when a `getLicense` call resolves with null.
|
|
178
|
-
* In that case, we do not call `MediaKeySession.prototype.update` and no
|
|
179
|
-
* `session-updated` event will be sent.
|
|
180
|
-
*/
|
|
181
|
-
export interface INoUpdateEvent {
|
|
182
|
-
type: "no-update";
|
|
183
|
-
value: {
|
|
184
|
-
initializationData: IInitializationDataInfo;
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Some key ids have updated their status.
|
|
189
|
-
*
|
|
190
|
-
* We put them in two different list:
|
|
191
|
-
*
|
|
192
|
-
* - `blacklistedKeyIDs`: Those key ids won't be used for decryption and the
|
|
193
|
-
* corresponding media it decrypts should not be pushed to the buffer
|
|
194
|
-
* Note that a blacklisted key id can become whitelisted in the future.
|
|
195
|
-
*
|
|
196
|
-
* - `whitelistedKeyIds`: Those key ids were found and their corresponding
|
|
197
|
-
* keys are now being considered for decryption.
|
|
198
|
-
* Note that a whitelisted key id can become blacklisted in the future.
|
|
199
|
-
*
|
|
200
|
-
* Note that each `IKeysUpdateEvent` is independent of any other.
|
|
201
|
-
*
|
|
202
|
-
* A new `IKeysUpdateEvent` does not completely replace a previously emitted
|
|
203
|
-
* one, as it can for example be linked to a whole other decryption session.
|
|
204
|
-
*
|
|
205
|
-
* However, if a key id is encountered in both an older and a newer
|
|
206
|
-
* `IKeysUpdateEvent`, only the older status should be considered.
|
|
49
|
+
* Represent the initialization data linked to a key system that can be used to
|
|
50
|
+
* generate the license request.
|
|
207
51
|
*/
|
|
208
|
-
export interface
|
|
209
|
-
type: "keys-update";
|
|
210
|
-
value: IKeyUpdateValue;
|
|
211
|
-
}
|
|
212
|
-
/** Information on key ids linked to a MediaKeySession. */
|
|
213
|
-
export interface IKeyUpdateValue {
|
|
52
|
+
export interface IInitDataValue {
|
|
214
53
|
/**
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
* the fact that they were part of the pushed license.
|
|
54
|
+
* Hex encoded system id, which identifies the key system.
|
|
55
|
+
* https://dashif.org/identifiers/content_protection/
|
|
218
56
|
*
|
|
219
|
-
*
|
|
220
|
-
*
|
|
57
|
+
* If `undefined`, we don't know the system id for that initialization data.
|
|
58
|
+
* In that case, the initialization data might even be a concatenation of
|
|
59
|
+
* the initialization data from multiple system ids.
|
|
221
60
|
*/
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
*/
|
|
230
|
-
export interface ISessionUpdatedEvent {
|
|
231
|
-
type: "session-updated";
|
|
232
|
-
value: {
|
|
233
|
-
session: MediaKeySession | ICustomMediaKeySession;
|
|
234
|
-
license: ILicense | null;
|
|
235
|
-
initializationData: IInitializationDataInfo;
|
|
236
|
-
};
|
|
61
|
+
systemId: string | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* The initialization data itself for that type and systemId.
|
|
64
|
+
* For example, with "cenc" initialization data found in an ISOBMFF file,
|
|
65
|
+
* this will be the whole PSSH box.
|
|
66
|
+
*/
|
|
67
|
+
data: Uint8Array;
|
|
237
68
|
}
|
|
238
|
-
/**
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
* The linked value is the initialization data linked to the content that cannot
|
|
243
|
-
* be deciphered.
|
|
244
|
-
*/
|
|
245
|
-
export interface IBlacklistProtectionDataEvent {
|
|
246
|
-
type: "blacklist-protection-data";
|
|
247
|
-
value: IInitializationDataInfo;
|
|
69
|
+
/** Event emitted when a minor - recoverable - error happened. */
|
|
70
|
+
export interface IEMEWarningEvent {
|
|
71
|
+
type: "warning";
|
|
72
|
+
value: ICustomError;
|
|
248
73
|
}
|
|
249
|
-
export declare type IEMEManagerEvent = IEMEWarningEvent | // minor error
|
|
250
|
-
IEncryptedEvent | // browser's "encrypted" event
|
|
251
|
-
ICreatedMediaKeysEvent | IAttachedMediaKeysEvent | IInitDataIgnoredEvent | // initData already handled
|
|
252
|
-
ISessionMessageEvent | // MediaKeySession event
|
|
253
|
-
INoUpdateEvent | // `getLicense` returned `null`
|
|
254
|
-
IKeysUpdateEvent | // Status of keys changed
|
|
255
|
-
ISessionUpdatedEvent | // `update` call resolved
|
|
256
|
-
IBlacklistProtectionDataEvent;
|
|
257
74
|
export declare type ILicense = BufferSource | ArrayBuffer;
|
|
258
|
-
/** Segment protection sent by the RxPlayer to the
|
|
75
|
+
/** Segment protection sent by the RxPlayer to the `ContentDecryptor`. */
|
|
259
76
|
export interface IContentProtection {
|
|
77
|
+
/** The content linked to that segment protection data. */
|
|
78
|
+
content: IContent;
|
|
260
79
|
/**
|
|
261
80
|
* Initialization data type.
|
|
262
81
|
* String describing the format of the initialization data sent through this
|
|
@@ -272,7 +91,7 @@ export interface IContentProtection {
|
|
|
272
91
|
* `undefined` when not known (different from an empty array - which would
|
|
273
92
|
* just mean that there's no key id involved).
|
|
274
93
|
*/
|
|
275
|
-
keyIds
|
|
94
|
+
keyIds: Uint8Array[] | undefined;
|
|
276
95
|
/** Every initialization data for that type. */
|
|
277
96
|
values: Array<{
|
|
278
97
|
/**
|
|
@@ -288,23 +107,16 @@ export interface IContentProtection {
|
|
|
288
107
|
data: Uint8Array;
|
|
289
108
|
}>;
|
|
290
109
|
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
session: MediaKeySession | ICustomMediaKeySession;
|
|
302
|
-
license: ILicense | null;
|
|
303
|
-
};
|
|
304
|
-
}
|
|
305
|
-
export interface IKeySystemAccessInfos {
|
|
306
|
-
keySystemAccess: MediaKeySystemAccess | ICustomMediaKeySystemAccess;
|
|
307
|
-
keySystemOptions: IKeySystemOption;
|
|
110
|
+
/** Content linked to protection data. */
|
|
111
|
+
export interface IContent {
|
|
112
|
+
/** Manifest object associated to the protection data. */
|
|
113
|
+
manifest: Manifest;
|
|
114
|
+
/** Period object associated to the protection data. */
|
|
115
|
+
period: Period;
|
|
116
|
+
/** Adaptation object associated to the protection data. */
|
|
117
|
+
adaptation: Adaptation;
|
|
118
|
+
/** Representation object associated to the protection data. */
|
|
119
|
+
representation: Representation;
|
|
308
120
|
}
|
|
309
121
|
/** Stores helping to create and retrieve MediaKeySessions. */
|
|
310
122
|
export interface IMediaKeySessionStores {
|
|
@@ -313,15 +125,40 @@ export interface IMediaKeySessionStores {
|
|
|
313
125
|
/** Retrieve persistent MediaKeySessions already created. */
|
|
314
126
|
persistentSessionsStore: PersistentSessionsStore | null;
|
|
315
127
|
}
|
|
128
|
+
/** Enum identifying the way a new MediaKeySession has been loaded. */
|
|
129
|
+
export declare const enum MediaKeySessionLoadingType {
|
|
130
|
+
/**
|
|
131
|
+
* This MediaKeySession has just been created.
|
|
132
|
+
* This means that it will necessitate a new license request to be generated
|
|
133
|
+
* and performed.
|
|
134
|
+
*/
|
|
135
|
+
Created = "created-session",
|
|
136
|
+
/**
|
|
137
|
+
* This MediaKeySession was an already-opened one that is being reused.
|
|
138
|
+
* Such session had already their license loaded and pushed.
|
|
139
|
+
*/
|
|
140
|
+
LoadedOpenSession = "loaded-open-session",
|
|
141
|
+
/**
|
|
142
|
+
* This MediaKeySession was a persistent MediaKeySession that has been
|
|
143
|
+
* re-loaded.
|
|
144
|
+
* Such session are linked to a persistent license which should have already
|
|
145
|
+
* been fetched.
|
|
146
|
+
*/
|
|
147
|
+
LoadedPersistentSession = "loaded-persistent-session"
|
|
148
|
+
}
|
|
316
149
|
/**
|
|
317
150
|
* Data stored in a persistent MediaKeySession storage.
|
|
318
151
|
* Has to be versioned to be able to play MediaKeySessions persisted in an old
|
|
319
152
|
* RxPlayer version when in a new one.
|
|
320
153
|
*/
|
|
321
|
-
export declare type IPersistentSessionInfo = IPersistentSessionInfoV3 | IPersistentSessionInfoV2 | IPersistentSessionInfoV1 | IPersistentSessionInfoV0;
|
|
322
|
-
/** Wrap
|
|
323
|
-
interface
|
|
324
|
-
/**
|
|
154
|
+
export declare type IPersistentSessionInfo = IPersistentSessionInfoV4 | IPersistentSessionInfoV3 | IPersistentSessionInfoV2 | IPersistentSessionInfoV1 | IPersistentSessionInfoV0;
|
|
155
|
+
/** Wrap an Uint8Array and allow serialization of it into base64. */
|
|
156
|
+
interface ByteArrayContainer {
|
|
157
|
+
/**
|
|
158
|
+
* The wrapped data.
|
|
159
|
+
* Here named `initData` even when it's not always initialization data for
|
|
160
|
+
* backward-compatible reasons.
|
|
161
|
+
*/
|
|
325
162
|
initData: Uint8Array;
|
|
326
163
|
/**
|
|
327
164
|
* Convert it to base64.
|
|
@@ -333,7 +170,48 @@ interface IInitDataContainer {
|
|
|
333
170
|
}
|
|
334
171
|
/**
|
|
335
172
|
* Stored information about a single persistent `MediaKeySession`, when created
|
|
336
|
-
* since the v3.
|
|
173
|
+
* since the v3.27.0 RxPlayer version included.
|
|
174
|
+
*/
|
|
175
|
+
export interface IPersistentSessionInfoV4 {
|
|
176
|
+
/** Version for this object. */
|
|
177
|
+
version: 4;
|
|
178
|
+
/** The persisted MediaKeySession's `id`. Used to load it at a later time. */
|
|
179
|
+
sessionId: string;
|
|
180
|
+
/** Type giving information about the format of the initialization data. */
|
|
181
|
+
initDataType: string | undefined;
|
|
182
|
+
/** All key ids linked to that `MediaKeySession`. */
|
|
183
|
+
keyIds: Array<ByteArrayContainer | string>;
|
|
184
|
+
/**
|
|
185
|
+
* Every saved initialization data for that session, used as IDs.
|
|
186
|
+
* Elements are sorted in systemId alphabetical order (putting the `undefined`
|
|
187
|
+
* ones last).
|
|
188
|
+
*/
|
|
189
|
+
values: Array<{
|
|
190
|
+
/**
|
|
191
|
+
* Hex encoded system id, which identifies the key system.
|
|
192
|
+
* https://dashif.org/identifiers/content_protection/
|
|
193
|
+
*
|
|
194
|
+
* If `undefined`, we don't know the system id for that initialization data.
|
|
195
|
+
* In that case, the initialization data might even be a concatenation of
|
|
196
|
+
* the initialization data from multiple system ids.
|
|
197
|
+
*/
|
|
198
|
+
systemId: string | undefined;
|
|
199
|
+
/**
|
|
200
|
+
* A hash of the initialization data (generated by the `hashBuffer` function,
|
|
201
|
+
* at the time of v3.20.1 at least). Allows for a faster comparison than just
|
|
202
|
+
* comparing initialization data multiple times.
|
|
203
|
+
*/
|
|
204
|
+
hash: number;
|
|
205
|
+
/**
|
|
206
|
+
* The initialization data associated to the systemId, wrapped in a
|
|
207
|
+
* container to allow efficient serialization.
|
|
208
|
+
*/
|
|
209
|
+
data: ByteArrayContainer | string;
|
|
210
|
+
}>;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Stored information about a single persistent `MediaKeySession`, when created
|
|
214
|
+
* from the v3.24.0 RxPlayer version included to the v3.26.2 included.
|
|
337
215
|
*/
|
|
338
216
|
export interface IPersistentSessionInfoV3 {
|
|
339
217
|
/** Version for this object. */
|
|
@@ -367,13 +245,13 @@ export interface IPersistentSessionInfoV3 {
|
|
|
367
245
|
* The initialization data associated to the systemId, wrapped in a
|
|
368
246
|
* container to allow efficient serialization.
|
|
369
247
|
*/
|
|
370
|
-
data:
|
|
248
|
+
data: ByteArrayContainer | string;
|
|
371
249
|
}>;
|
|
372
250
|
}
|
|
373
251
|
/**
|
|
374
252
|
* Stored information about a single persistent `MediaKeySession`, when created
|
|
375
253
|
* between the RxPlayer versions v3.21.0 and v3.21.1 included.
|
|
376
|
-
* The previous implementation (version 1) was fine enough but did not
|
|
254
|
+
* The previous implementation (version 1) was fine enough but did not serialize
|
|
377
255
|
* well due to it containing an Uint8Array. This data is now wrapped into a
|
|
378
256
|
* container which will convert it to base64 when linearized through
|
|
379
257
|
* `JSON.stringify`.
|
|
@@ -387,7 +265,7 @@ export interface IPersistentSessionInfoV2 {
|
|
|
387
265
|
* The initialization data associated to the `MediaKeySession`, wrapped in a
|
|
388
266
|
* container to allow efficient linearization.
|
|
389
267
|
*/
|
|
390
|
-
initData:
|
|
268
|
+
initData: ByteArrayContainer;
|
|
391
269
|
/**
|
|
392
270
|
* A hash of the initialization data (generated by the `hashBuffer` function,
|
|
393
271
|
* at the time of v3.20.1 at least). Allows for a faster comparison than just
|
|
@@ -442,7 +320,7 @@ export interface IPersistentSessionInfoV0 {
|
|
|
442
320
|
/** Persistent MediaKeySession storage interface. */
|
|
443
321
|
export interface IPersistentSessionStorage {
|
|
444
322
|
/** Load persistent MediaKeySessions previously saved through the `save` callback. */
|
|
445
|
-
load(): IPersistentSessionInfo[];
|
|
323
|
+
load(): IPersistentSessionInfo[] | undefined | null;
|
|
446
324
|
/**
|
|
447
325
|
* Save new persistent MediaKeySession information.
|
|
448
326
|
* The given argument should be returned by the next `load` call.
|
|
@@ -506,7 +384,7 @@ export interface IKeySystemOption {
|
|
|
506
384
|
* closed when the current playback stops.
|
|
507
385
|
*/
|
|
508
386
|
closeSessionsOnStop?: boolean;
|
|
509
|
-
singleLicensePer?: "content" | "init-data";
|
|
387
|
+
singleLicensePer?: "content" | "periods" | "init-data";
|
|
510
388
|
/**
|
|
511
389
|
* Maximum number of `MediaKeySession` that should be created on the same
|
|
512
390
|
* MediaKeys.
|
|
File without changes
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import
|
|
16
|
+
import SerializableBytes from "./serializable_bytes";
|
|
17
17
|
/**
|
|
18
18
|
* Returns `true` if both values are compatible initialization data, which
|
|
19
19
|
* means that one is completely contained in the other.
|
|
@@ -26,9 +26,9 @@ import InitDataContainer from "./init_data_container";
|
|
|
26
26
|
export default function areInitializationValuesCompatible(stored: Array<{
|
|
27
27
|
systemId: string | undefined;
|
|
28
28
|
hash: number;
|
|
29
|
-
data: Uint8Array |
|
|
29
|
+
data: Uint8Array | SerializableBytes | string;
|
|
30
30
|
}>, newElts: Array<{
|
|
31
31
|
systemId: string | undefined;
|
|
32
32
|
hash: number;
|
|
33
|
-
data: Uint8Array |
|
|
33
|
+
data: Uint8Array | SerializableBytes | string;
|
|
34
34
|
}>): boolean;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import areArraysOfNumbersEqual from "../../../utils/are_arrays_of_numbers_equal";
|
|
17
|
-
import
|
|
17
|
+
import SerializableBytes from "./serializable_bytes";
|
|
18
18
|
/**
|
|
19
19
|
* Returns `true` if both values are compatible initialization data, which
|
|
20
20
|
* means that one is completely contained in the other.
|
|
@@ -67,10 +67,10 @@ function _isAInB(a, b) {
|
|
|
67
67
|
return false;
|
|
68
68
|
}
|
|
69
69
|
var aData = firstAElt.data instanceof Uint8Array ? firstAElt.data :
|
|
70
|
-
typeof firstAElt.data === "string" ?
|
|
70
|
+
typeof firstAElt.data === "string" ? SerializableBytes.decode(firstAElt.data) :
|
|
71
71
|
firstAElt.data.initData;
|
|
72
72
|
var bData = bElt.data instanceof Uint8Array ? bElt.data :
|
|
73
|
-
typeof bElt.data === "string" ?
|
|
73
|
+
typeof bElt.data === "string" ? SerializableBytes.decode(bElt.data) :
|
|
74
74
|
bElt.data.initData;
|
|
75
75
|
if (!areArraysOfNumbersEqual(aData, bData)) {
|
|
76
76
|
return false;
|
|
@@ -91,10 +91,10 @@ function _isAInB(a, b) {
|
|
|
91
91
|
return false;
|
|
92
92
|
}
|
|
93
93
|
var aNewData = aElt.data instanceof Uint8Array ? aElt.data :
|
|
94
|
-
typeof aElt.data === "string" ?
|
|
94
|
+
typeof aElt.data === "string" ? SerializableBytes.decode(aElt.data) :
|
|
95
95
|
aElt.data.initData;
|
|
96
96
|
var bNewData = bNewElt.data instanceof Uint8Array ? bNewElt.data :
|
|
97
|
-
typeof bNewElt.data === "string" ?
|
|
97
|
+
typeof bNewElt.data === "string" ? SerializableBytes.decode(bNewElt.data) :
|
|
98
98
|
bNewElt.data.initData;
|
|
99
99
|
if (!areArraysOfNumbersEqual(aNewData, bNewData)) {
|
|
100
100
|
return false;
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { ICustomMediaKeySession } from "
|
|
17
|
-
import { IEMEWarningEvent } from "
|
|
16
|
+
import { ICustomMediaKeySession } from "../../../compat";
|
|
17
|
+
import { IEMEWarningEvent } from "../types";
|
|
18
18
|
export interface IKeyStatusesCheckingOptions {
|
|
19
19
|
/**
|
|
20
20
|
* If explicitely set to `false`, we won't throw on error when a used license
|
|
@@ -13,9 +13,10 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
|
|
17
|
-
import
|
|
18
|
-
import {
|
|
16
|
+
/* eslint-disable-next-line max-len */
|
|
17
|
+
import getUUIDKidFromKeyStatusKID from "../../../compat/eme/get_uuid_kid_from_keystatus_kid";
|
|
18
|
+
import { EncryptedMediaError } from "../../../errors";
|
|
19
|
+
import { bytesToHex } from "../../../utils/string_parsing";
|
|
19
20
|
var KEY_STATUSES = { EXPIRED: "expired",
|
|
20
21
|
INTERNAL_ERROR: "internal-error",
|
|
21
22
|
OUTPUT_RESTRICTED: "output-restricted" };
|
|
@@ -13,13 +13,14 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import
|
|
17
|
-
import { ICustomMediaKeySession } from "../../../compat";
|
|
16
|
+
import LoadedSessionsStore from "./loaded_sessions_store";
|
|
18
17
|
/**
|
|
19
|
-
* Close
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
18
|
+
* Close sessions from the loadedSessionsStore to allow at maximum `limit`
|
|
19
|
+
* stored MediaKeySessions in it.
|
|
20
|
+
*
|
|
21
|
+
* Emit event when a MediaKeySession begin to be closed and another when the
|
|
22
|
+
* MediaKeySession is closed.
|
|
23
|
+
* @param {Object} loadedSessionsStore
|
|
23
24
|
* @returns {Observable}
|
|
24
25
|
*/
|
|
25
|
-
export default function
|
|
26
|
+
export default function cleanOldLoadedSessions(loadedSessionsStore: LoadedSessionsStore, limit: number): Promise<void>;
|
|
@@ -0,0 +1,85 @@
|
|
|
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 "../../../utils/promise";
|
|
53
|
+
/**
|
|
54
|
+
* Close sessions from the loadedSessionsStore to allow at maximum `limit`
|
|
55
|
+
* stored MediaKeySessions in it.
|
|
56
|
+
*
|
|
57
|
+
* Emit event when a MediaKeySession begin to be closed and another when the
|
|
58
|
+
* MediaKeySession is closed.
|
|
59
|
+
* @param {Object} loadedSessionsStore
|
|
60
|
+
* @returns {Observable}
|
|
61
|
+
*/
|
|
62
|
+
export default function cleanOldLoadedSessions(loadedSessionsStore, limit) {
|
|
63
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
64
|
+
var proms, entries, toDelete, i, entry;
|
|
65
|
+
return __generator(this, function (_a) {
|
|
66
|
+
switch (_a.label) {
|
|
67
|
+
case 0:
|
|
68
|
+
if (limit < 0 || limit >= loadedSessionsStore.getLength()) {
|
|
69
|
+
return [2 /*return*/];
|
|
70
|
+
}
|
|
71
|
+
proms = [];
|
|
72
|
+
entries = loadedSessionsStore.getAll().slice();
|
|
73
|
+
toDelete = entries.length - limit;
|
|
74
|
+
for (i = 0; i < toDelete; i++) {
|
|
75
|
+
entry = entries[i];
|
|
76
|
+
proms.push(loadedSessionsStore.closeSession(entry.mediaKeySession));
|
|
77
|
+
}
|
|
78
|
+
return [4 /*yield*/, PPromise.all(proms)];
|
|
79
|
+
case 1:
|
|
80
|
+
_a.sent();
|
|
81
|
+
return [2 /*return*/];
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
}
|
package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts
RENAMED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import PersistentSessionsStore from "./
|
|
16
|
+
import PersistentSessionsStore from "./persistent_sessions_store";
|
|
17
17
|
/**
|
|
18
18
|
* Remove old information from a PersistentSessionsStore so that it respects the
|
|
19
19
|
* given `limit` as a maximum size. This can be used to prevent its size from
|