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
package/src/README.md
CHANGED
|
@@ -33,12 +33,12 @@ To better understand the player's architecture, you can find below a
|
|
|
33
33
|
Facilitate track V ~ | ~ Abstract the streaming ^ ~
|
|
34
34
|
switching for +---------------+ | ~ protocol | ~
|
|
35
35
|
the API | | | V | ~
|
|
36
|
-
|
|
37
|
-
|
|
|
38
|
-
|
|
|
39
|
-
|
|
|
40
|
-
|
|
|
41
|
-
|
|
36
|
+
+----------------+ | | +--------------------------+ | ~
|
|
37
|
+
| Content | | Init | ------> | | | ~
|
|
38
|
+
| Decryptor | <---- | (./core/init) | <~~~~~~ | Manifest Fetcher | | ~
|
|
39
|
+
|(./core/decrypt)| ~~~~> | | |(./core/fetchers/manifest)| | ~
|
|
40
|
+
| | | | | | | ~
|
|
41
|
+
+----------------+ +---------------+ +--------------------------+ | ~
|
|
42
42
|
Negotiate content | ^ Initialize Load and refresh the Manifest | ~
|
|
43
43
|
decryption | ~ playback and | ~
|
|
44
44
|
| ~ create/connect | ~
|
|
@@ -23,15 +23,15 @@
|
|
|
23
23
|
|
|
24
24
|
interface IFakeDocument {
|
|
25
25
|
createElement(eltType: string) : HTMLElement;
|
|
26
|
-
fullscreenElement? : Element | null;
|
|
27
|
-
mozCancelFullScreen? : () => void;
|
|
28
|
-
mozFullScreenElement? : HTMLElement;
|
|
29
|
-
msExitFullscreen? : () => void;
|
|
30
|
-
exitFullscreen? : () => void;
|
|
31
|
-
msFullscreenElement? : Element | null;
|
|
26
|
+
fullscreenElement? : Element | null | undefined;
|
|
27
|
+
mozCancelFullScreen? : (() => void) | undefined;
|
|
28
|
+
mozFullScreenElement? : HTMLElement | undefined;
|
|
29
|
+
msExitFullscreen? : (() => void) | undefined;
|
|
30
|
+
exitFullscreen? : (() => void) | undefined;
|
|
31
|
+
msFullscreenElement? : Element | null | undefined;
|
|
32
32
|
webkitExitFullscreen : () => void;
|
|
33
33
|
webkitFullscreenElement : Element | null | undefined;
|
|
34
|
-
webkitHidden? : boolean;
|
|
34
|
+
webkitHidden? : boolean | undefined;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
const doc = document as unknown as IFakeDocument;
|
|
@@ -63,7 +63,7 @@ describe("Compat - isVTTCue", () => {
|
|
|
63
63
|
const originalVTTCue = window.VTTCue;
|
|
64
64
|
win.VTTCue = MockVTTCue;
|
|
65
65
|
const cue = new VTTCue(0, 10, "");
|
|
66
|
-
win.VTTCue
|
|
66
|
+
delete win.VTTCue;
|
|
67
67
|
const isVTTCue = require("../is_vtt_cue").default;
|
|
68
68
|
expect(isVTTCue(cue)).toEqual(false);
|
|
69
69
|
window.VTTCue = originalVTTCue;
|
|
@@ -40,27 +40,66 @@ describe("compat - shouldFavourSafariMediaKeys", () => {
|
|
|
40
40
|
it("should return false if we are not on Safari", () => {
|
|
41
41
|
jest.mock("../browser_detection", () => {
|
|
42
42
|
return { __esModule: true as const,
|
|
43
|
-
|
|
43
|
+
isSafariDesktop: false,
|
|
44
|
+
isSafariMobile: false };
|
|
44
45
|
});
|
|
45
46
|
const shouldFavourCustomSafariEME = require("../should_favour_custom_safari_EME");
|
|
46
47
|
expect(shouldFavourCustomSafariEME.default()).toBe(false);
|
|
47
48
|
});
|
|
48
49
|
|
|
49
50
|
/* eslint-disable max-len */
|
|
50
|
-
it("should return false if we are on Safari but WekitMediaKeys is not available", () => {
|
|
51
|
+
it("should return false if we are on Safari Desktop but WekitMediaKeys is not available", () => {
|
|
51
52
|
/* eslint-enable max-len */
|
|
52
53
|
|
|
53
54
|
win.WebKitMediaKeys = undefined;
|
|
54
55
|
jest.mock("../browser_detection", () => {
|
|
55
56
|
return { __esModule: true as const,
|
|
56
|
-
|
|
57
|
+
isSafariDesktop: true,
|
|
58
|
+
isSafariMobile: false };
|
|
57
59
|
});
|
|
58
60
|
const shouldFavourCustomSafariEME = require("../should_favour_custom_safari_EME");
|
|
59
61
|
expect(shouldFavourCustomSafariEME.default()).toBe(false);
|
|
60
62
|
});
|
|
61
63
|
|
|
62
64
|
/* eslint-disable max-len */
|
|
63
|
-
it("should return
|
|
65
|
+
it("should return false if we are on Safari Mobile but WekitMediaKeys is not available", () => {
|
|
66
|
+
/* eslint-enable max-len */
|
|
67
|
+
|
|
68
|
+
win.WebKitMediaKeys = undefined;
|
|
69
|
+
jest.mock("../browser_detection", () => {
|
|
70
|
+
return { __esModule: true as const,
|
|
71
|
+
isSafariDesktop: false,
|
|
72
|
+
isSafariMobile: true };
|
|
73
|
+
});
|
|
74
|
+
const shouldFavourCustomSafariEME = require("../should_favour_custom_safari_EME");
|
|
75
|
+
expect(shouldFavourCustomSafariEME.default()).toBe(false);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
/* eslint-disable max-len */
|
|
79
|
+
it("should return true if we are on Safari Desktop and a WebKitMediaKeys implementation is available", () => {
|
|
80
|
+
/* eslint-enable max-len */
|
|
81
|
+
|
|
82
|
+
win.WebKitMediaKeys = {
|
|
83
|
+
isTypeSupported: () => ({}),
|
|
84
|
+
prototype: {
|
|
85
|
+
createSession: () => ({}),
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
const proto = win.HTMLMediaElement.prototype as unknown as {
|
|
89
|
+
webkitSetMediaKeys : () => Record<string, never>;
|
|
90
|
+
};
|
|
91
|
+
proto.webkitSetMediaKeys = () => ({});
|
|
92
|
+
jest.mock("../browser_detection", () => {
|
|
93
|
+
return { __esModule: true as const,
|
|
94
|
+
isSafariDesktop: true,
|
|
95
|
+
isSafariMobile: false };
|
|
96
|
+
});
|
|
97
|
+
const shouldFavourCustomSafariEME = require("../should_favour_custom_safari_EME");
|
|
98
|
+
expect(shouldFavourCustomSafariEME.default()).toBe(true);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
/* eslint-disable max-len */
|
|
102
|
+
it("should return true if we are on Safari Mobile and a WebKitMediaKeys implementation is available", () => {
|
|
64
103
|
/* eslint-enable max-len */
|
|
65
104
|
|
|
66
105
|
win.WebKitMediaKeys = {
|
|
@@ -75,7 +114,8 @@ describe("compat - shouldFavourSafariMediaKeys", () => {
|
|
|
75
114
|
proto.webkitSetMediaKeys = () => ({});
|
|
76
115
|
jest.mock("../browser_detection", () => {
|
|
77
116
|
return { __esModule: true as const,
|
|
78
|
-
|
|
117
|
+
isSafariDesktop: false,
|
|
118
|
+
isSafariMobile: true };
|
|
79
119
|
});
|
|
80
120
|
const shouldFavourCustomSafariEME = require("../should_favour_custom_safari_EME");
|
|
81
121
|
expect(shouldFavourCustomSafariEME.default()).toBe(true);
|
|
@@ -54,13 +54,15 @@ interface ISafariWindowObject extends Window {
|
|
|
54
54
|
safari? : { pushNotification? : { toString() : string } };
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
/** `true` on Safari on a PC platform (i.e. not iPhone / iPad etc.) */
|
|
58
|
+
const isSafariDesktop : boolean =
|
|
58
59
|
!isNode && (
|
|
59
60
|
Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor") >= 0 ||
|
|
60
61
|
(window as ISafariWindowObject).safari?.pushNotification?.toString() ===
|
|
61
62
|
"[object SafariRemoteNotification]"
|
|
62
63
|
);
|
|
63
64
|
|
|
65
|
+
/** `true` on Safari on an iPhone, iPad & iPod platform */
|
|
64
66
|
const isSafariMobile : boolean = !isNode &&
|
|
65
67
|
typeof navigator.platform === "string" &&
|
|
66
68
|
/iPad|iPhone|iPod/.test(navigator.platform);
|
|
@@ -70,7 +72,7 @@ export {
|
|
|
70
72
|
isIE11,
|
|
71
73
|
isIEOrEdge,
|
|
72
74
|
isFirefox,
|
|
73
|
-
|
|
75
|
+
isSafariDesktop,
|
|
74
76
|
isSafariMobile,
|
|
75
77
|
isSamsungBrowser,
|
|
76
78
|
isTizen,
|
|
@@ -14,65 +14,99 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
race as observableRace,
|
|
24
|
-
timer as observableTimer,
|
|
25
|
-
} from "rxjs";
|
|
26
|
-
import castToObservable from "../../utils/cast_to_observable";
|
|
17
|
+
import log from "../../log";
|
|
18
|
+
import cancellableSleep from "../../utils/cancellable_sleep";
|
|
19
|
+
import PPromise from "../../utils/promise";
|
|
20
|
+
import TaskCanceller, {
|
|
21
|
+
CancellationError,
|
|
22
|
+
} from "../../utils/task_canceller";
|
|
27
23
|
import { ICustomMediaKeySession } from "./custom_media_keys";
|
|
28
24
|
|
|
29
25
|
/**
|
|
30
|
-
* Close
|
|
31
|
-
*
|
|
26
|
+
* Close the given `MediaKeySession` and returns a Promise resolving when the
|
|
27
|
+
* session is closed.
|
|
28
|
+
* This promise does not reject, even if we're unable to close the
|
|
29
|
+
* `MediaKeySession`.
|
|
30
|
+
*
|
|
31
|
+
* Note that there is a lot of browser issues linked to the impossibility to
|
|
32
|
+
* either close a MediaKeySession or to know if a MediaKeySession was closed.
|
|
33
|
+
* Due to this, the returned Promise might take some time before resolving on
|
|
34
|
+
* some devices.
|
|
32
35
|
* @param {MediaKeySession|Object} session
|
|
33
|
-
* @returns {
|
|
36
|
+
* @returns {Promise.<undefined>}
|
|
34
37
|
*/
|
|
35
|
-
export default function closeSession
|
|
36
|
-
session: MediaKeySession|ICustomMediaKeySession
|
|
37
|
-
):
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
38
|
+
export default function closeSession(
|
|
39
|
+
session: MediaKeySession | ICustomMediaKeySession
|
|
40
|
+
): Promise<void> {
|
|
41
|
+
const timeoutCanceller = new TaskCanceller();
|
|
42
|
+
|
|
43
|
+
return PPromise.race([
|
|
44
|
+
session.close()
|
|
45
|
+
.then(() => { timeoutCanceller.cancel(); }),
|
|
46
|
+
// The `closed` promise may resolve, even if `close()` result has not
|
|
47
|
+
// (seen at some point on Firefox).
|
|
48
|
+
session.closed
|
|
49
|
+
.then(() => { timeoutCanceller.cancel(); }),
|
|
50
|
+
waitTimeoutAndCheck(),
|
|
51
|
+
]);
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* If the session is not closed after 1000ms, try to communicate with the
|
|
55
|
+
* MediaKeySession and check if an error is returned.
|
|
56
|
+
* This is needed because on some browsers with poor EME implementation,
|
|
57
|
+
* knowing when a MediaKeySession is closed is actually a hard task.
|
|
58
|
+
*
|
|
59
|
+
* The returned Promise will never reject.
|
|
60
|
+
* @returns {Promise.<undefined>}
|
|
61
|
+
*/
|
|
62
|
+
async function waitTimeoutAndCheck() : Promise<void> {
|
|
63
|
+
try {
|
|
64
|
+
await cancellableSleep(1000, timeoutCanceller.signal);
|
|
65
|
+
await tryUpdatingSession();
|
|
66
|
+
} catch (err) {
|
|
67
|
+
if (err instanceof CancellationError) { // cancelled == session closed
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const message = err instanceof Error ?
|
|
71
|
+
err.message :
|
|
72
|
+
"Unknown error made it impossible to close the session";
|
|
73
|
+
log.error(`DRM: ${message}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Try to update `MediaKeySession` and check its error if it failed.
|
|
79
|
+
* If we still don't know whether it closed yet, wait a second
|
|
80
|
+
* timeout then quit.
|
|
81
|
+
*
|
|
82
|
+
* The returned Promise resolves if the `MediaKeySession` seems closed and
|
|
83
|
+
* rejects if we couldn't know or it doesn't.
|
|
84
|
+
* @returns {Promise.<undefined>}
|
|
85
|
+
*/
|
|
86
|
+
async function tryUpdatingSession() : Promise<void> {
|
|
87
|
+
try {
|
|
88
|
+
await session.update(new Uint8Array(1));
|
|
89
|
+
} catch (err) {
|
|
90
|
+
if (timeoutCanceller.isUsed) { // Reminder: cancelled == session closed
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// The caught error can tell if session is closed
|
|
95
|
+
// (Chrome may throw this error)
|
|
96
|
+
// I know... Checking the error message is not the best practice ever.
|
|
97
|
+
if (err instanceof Error &&
|
|
98
|
+
err.message === "The session is already closed."
|
|
99
|
+
) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
await cancellableSleep(1000, timeoutCanceller.signal);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (timeoutCanceller.isUsed) { // Reminder: cancelled == session closed
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
throw new Error("Compat: Couldn't know if session is closed");
|
|
111
|
+
}
|
|
78
112
|
}
|
|
@@ -45,7 +45,7 @@ class IE11MediaKeySession
|
|
|
45
45
|
public keyStatuses: ICustomMediaKeyStatusMap;
|
|
46
46
|
private readonly _mk: MSMediaKeys;
|
|
47
47
|
private readonly _closeSession$: Subject<void>;
|
|
48
|
-
private _ss
|
|
48
|
+
private _ss: MSMediaKeySession | undefined;
|
|
49
49
|
constructor(mk: MSMediaKeys) {
|
|
50
50
|
super();
|
|
51
51
|
this.expiration = NaN;
|
|
@@ -14,15 +14,9 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import
|
|
18
|
-
defer as observableDefer,
|
|
19
|
-
Observable,
|
|
20
|
-
of as observableOf,
|
|
21
|
-
throwError as observableThrow,
|
|
22
|
-
} from "rxjs";
|
|
17
|
+
import PPromise from "pinkie";
|
|
23
18
|
import { MediaError } from "../../../errors";
|
|
24
19
|
import assert from "../../../utils/assert";
|
|
25
|
-
import castToObservable from "../../../utils/cast_to_observable";
|
|
26
20
|
import { ICompatHTMLMediaElement } from "../../browser_compatibility_types";
|
|
27
21
|
import { isIE11 } from "../../browser_detection";
|
|
28
22
|
import isNode from "../../is_node";
|
|
@@ -47,12 +41,18 @@ import { WebKitMediaKeysConstructor } from "./webkit_media_keys_constructor";
|
|
|
47
41
|
/** Generic implementation of the navigator.requestMediaKeySystemAccess API. */
|
|
48
42
|
type ICompatRequestMediaKeySystemAccessFn =
|
|
49
43
|
(keyType : string, config : MediaKeySystemConfiguration[]) =>
|
|
50
|
-
|
|
44
|
+
Promise<MediaKeySystemAccess | CustomMediaKeySystemAccess>;
|
|
51
45
|
|
|
52
|
-
let requestMediaKeySystemAccess :
|
|
46
|
+
let requestMediaKeySystemAccess : ICompatRequestMediaKeySystemAccessFn | null = null;
|
|
53
47
|
|
|
54
|
-
|
|
55
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Set the given MediaKeys on the given HTMLMediaElement.
|
|
50
|
+
* Emits null when done then complete.
|
|
51
|
+
* @param {HTMLMediaElement} elt
|
|
52
|
+
* @param {Object} mediaKeys
|
|
53
|
+
*/
|
|
54
|
+
let setMediaKeys :
|
|
55
|
+
((elt: HTMLMediaElement, mediaKeys: MediaKeys | ICustomMediaKeys | null) => unknown) =
|
|
56
56
|
function defaultSetMediaKeys(
|
|
57
57
|
mediaElement: HTMLMediaElement,
|
|
58
58
|
mediaKeys: MediaKeys | ICustomMediaKeys | null
|
|
@@ -92,11 +92,8 @@ let _setMediaKeys :
|
|
|
92
92
|
if (isNode ||
|
|
93
93
|
(navigator.requestMediaKeySystemAccess != null && !shouldFavourCustomSafariEME())
|
|
94
94
|
) {
|
|
95
|
-
requestMediaKeySystemAccess = (
|
|
96
|
-
|
|
97
|
-
b : MediaKeySystemConfiguration[]
|
|
98
|
-
) : Observable<MediaKeySystemAccess> =>
|
|
99
|
-
castToObservable(navigator.requestMediaKeySystemAccess(a, b));
|
|
95
|
+
requestMediaKeySystemAccess = (...args) =>
|
|
96
|
+
navigator.requestMediaKeySystemAccess(...args);
|
|
100
97
|
} else {
|
|
101
98
|
let isTypeSupported: (keyType: string) => boolean;
|
|
102
99
|
let createCustomMediaKeys: (keyType: string) => ICustomMediaKeys;
|
|
@@ -106,23 +103,23 @@ if (isNode ||
|
|
|
106
103
|
const callbacks = getOldKitWebKitMediaKeyCallbacks();
|
|
107
104
|
isTypeSupported = callbacks.isTypeSupported;
|
|
108
105
|
createCustomMediaKeys = callbacks.createCustomMediaKeys;
|
|
109
|
-
|
|
106
|
+
setMediaKeys = callbacks.setMediaKeys;
|
|
110
107
|
// This is for WebKit with prefixed EME api
|
|
111
108
|
} else if (WebKitMediaKeysConstructor !== undefined) {
|
|
112
109
|
const callbacks = getWebKitMediaKeysCallbacks();
|
|
113
110
|
isTypeSupported = callbacks.isTypeSupported;
|
|
114
111
|
createCustomMediaKeys = callbacks.createCustomMediaKeys;
|
|
115
|
-
|
|
112
|
+
setMediaKeys = callbacks.setMediaKeys;
|
|
116
113
|
} else if (isIE11 && MSMediaKeysConstructor !== undefined) {
|
|
117
114
|
const callbacks = getIE11MediaKeysCallbacks();
|
|
118
115
|
isTypeSupported = callbacks.isTypeSupported;
|
|
119
116
|
createCustomMediaKeys = callbacks.createCustomMediaKeys;
|
|
120
|
-
|
|
117
|
+
setMediaKeys = callbacks.setMediaKeys;
|
|
121
118
|
} else if (MozMediaKeysConstructor !== undefined) {
|
|
122
119
|
const callbacks = getMozMediaKeysCallbacks();
|
|
123
120
|
isTypeSupported = callbacks.isTypeSupported;
|
|
124
121
|
createCustomMediaKeys = callbacks.createCustomMediaKeys;
|
|
125
|
-
|
|
122
|
+
setMediaKeys = callbacks.setMediaKeys;
|
|
126
123
|
} else {
|
|
127
124
|
const MK = window.MediaKeys as unknown as typeof MediaKeys & {
|
|
128
125
|
isTypeSupported? : (keyType : string) => boolean;
|
|
@@ -155,9 +152,9 @@ if (isNode ||
|
|
|
155
152
|
requestMediaKeySystemAccess = function(
|
|
156
153
|
keyType : string,
|
|
157
154
|
keySystemConfigurations : MediaKeySystemConfiguration[]
|
|
158
|
-
) :
|
|
155
|
+
) : Promise<MediaKeySystemAccess|CustomMediaKeySystemAccess> {
|
|
159
156
|
if (!isTypeSupported(keyType)) {
|
|
160
|
-
return
|
|
157
|
+
return PPromise.reject(new Error("Unsupported key type"));
|
|
161
158
|
}
|
|
162
159
|
|
|
163
160
|
for (let i = 0; i < keySystemConfigurations.length; i++) {
|
|
@@ -173,18 +170,22 @@ if (isNode ||
|
|
|
173
170
|
supported = supported && (distinctiveIdentifier !== "required");
|
|
174
171
|
|
|
175
172
|
if (supported) {
|
|
176
|
-
const keySystemConfigurationResponse = {
|
|
177
|
-
videoCapabilities,
|
|
178
|
-
audioCapabilities,
|
|
173
|
+
const keySystemConfigurationResponse : MediaKeySystemConfiguration = {
|
|
179
174
|
initDataTypes: ["cenc"],
|
|
180
175
|
distinctiveIdentifier: "not-allowed" as const,
|
|
181
176
|
persistentState: "required" as const,
|
|
182
177
|
sessionTypes: ["temporary", "persistent-license"],
|
|
183
178
|
};
|
|
179
|
+
if (videoCapabilities !== undefined) {
|
|
180
|
+
keySystemConfigurationResponse.videoCapabilities = videoCapabilities;
|
|
181
|
+
}
|
|
182
|
+
if (audioCapabilities !== undefined) {
|
|
183
|
+
keySystemConfigurationResponse.audioCapabilities = audioCapabilities;
|
|
184
|
+
}
|
|
184
185
|
|
|
185
186
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
186
187
|
const customMediaKeys = createCustomMediaKeys(keyType);
|
|
187
|
-
return
|
|
188
|
+
return PPromise.resolve(
|
|
188
189
|
new CustomMediaKeySystemAccess(keyType,
|
|
189
190
|
customMediaKeys,
|
|
190
191
|
keySystemConfigurationResponse)
|
|
@@ -192,24 +193,10 @@ if (isNode ||
|
|
|
192
193
|
}
|
|
193
194
|
}
|
|
194
195
|
|
|
195
|
-
return
|
|
196
|
+
return PPromise.reject(new Error("Unsupported configuration"));
|
|
196
197
|
};
|
|
197
198
|
}
|
|
198
199
|
|
|
199
|
-
/**
|
|
200
|
-
* Set the given MediaKeys on the given HTMLMediaElement.
|
|
201
|
-
* Emits null when done then complete.
|
|
202
|
-
* @param {HTMLMediaElement} elt
|
|
203
|
-
* @param {Object} mediaKeys
|
|
204
|
-
* @returns {Observable}
|
|
205
|
-
*/
|
|
206
|
-
function setMediaKeys(
|
|
207
|
-
elt : HTMLMediaElement,
|
|
208
|
-
mediaKeys : MediaKeys|ICustomMediaKeys|null
|
|
209
|
-
) : Observable<unknown> {
|
|
210
|
-
return observableDefer(() => castToObservable(_setMediaKeys(elt, mediaKeys)));
|
|
211
|
-
}
|
|
212
|
-
|
|
213
200
|
export {
|
|
214
201
|
requestMediaKeySystemAccess,
|
|
215
202
|
setMediaKeys,
|
|
@@ -14,16 +14,11 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import {
|
|
18
|
-
merge as observableMerge,
|
|
19
|
-
Subject,
|
|
20
|
-
takeUntil,
|
|
21
|
-
} from "rxjs";
|
|
22
17
|
import { base64ToBytes } from "../../../utils/base64";
|
|
23
18
|
import EventEmitter from "../../../utils/event_emitter";
|
|
19
|
+
import noop from "../../../utils/noop";
|
|
24
20
|
import PPromise from "../../../utils/promise";
|
|
25
21
|
import { utf8ToStr } from "../../../utils/string_parsing";
|
|
26
|
-
import * as events from "../../event_listeners";
|
|
27
22
|
import {
|
|
28
23
|
ICustomMediaKeys,
|
|
29
24
|
ICustomMediaKeySession,
|
|
@@ -54,11 +49,16 @@ export function isOldWebkitMediaElement(
|
|
|
54
49
|
.webkitGenerateKeyRequest === "function";
|
|
55
50
|
}
|
|
56
51
|
|
|
52
|
+
/**
|
|
53
|
+
* MediaKeySession implementation for older versions of WebKit relying on APIs
|
|
54
|
+
* such as `webkitGenerateKeyRequest` `webkitAddKey` to be called on the
|
|
55
|
+
* HTMLMediaElement.
|
|
56
|
+
* @class OldWebkitMediaKeySession
|
|
57
|
+
*/
|
|
57
58
|
class OldWebkitMediaKeySession
|
|
58
59
|
extends EventEmitter<IMediaKeySessionEvents>
|
|
59
60
|
implements ICustomMediaKeySession
|
|
60
61
|
{
|
|
61
|
-
public readonly update: (license: Uint8Array) => Promise<void>;
|
|
62
62
|
public readonly closed: Promise<void>;
|
|
63
63
|
public expiration: number;
|
|
64
64
|
public keyStatuses: ICustomMediaKeyStatusMap;
|
|
@@ -66,76 +66,93 @@ class OldWebkitMediaKeySession
|
|
|
66
66
|
|
|
67
67
|
private readonly _vid: IOldWebkitHTMLMediaElement;
|
|
68
68
|
private readonly _key: string;
|
|
69
|
-
|
|
69
|
+
|
|
70
|
+
private readonly _onSessionRelatedEvent : (evt : Event) => void;
|
|
71
|
+
private _closeSession : () => void;
|
|
70
72
|
|
|
71
73
|
constructor(mediaElement: IOldWebkitHTMLMediaElement, keySystem: string) {
|
|
72
74
|
super();
|
|
73
|
-
this._closeSession$ = new Subject();
|
|
74
75
|
this._vid = mediaElement;
|
|
75
76
|
this._key = keySystem;
|
|
76
77
|
|
|
77
78
|
this.sessionId = "";
|
|
79
|
+
this._closeSession = noop; // Just here to make TypeScript happy
|
|
78
80
|
this.closed = new PPromise((resolve) => {
|
|
79
|
-
this._closeSession
|
|
81
|
+
this._closeSession = resolve;
|
|
80
82
|
});
|
|
81
83
|
this.keyStatuses = new Map();
|
|
82
84
|
this.expiration = NaN;
|
|
83
85
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
events.onKeyError$(mediaElement))
|
|
87
|
-
.pipe(takeUntil(this._closeSession$))
|
|
88
|
-
.subscribe((evt: Event) => this.trigger(evt.type, evt));
|
|
89
|
-
|
|
90
|
-
this.update = (license: Uint8Array) => {
|
|
91
|
-
return new PPromise((resolve, reject) => {
|
|
92
|
-
try {
|
|
93
|
-
if (this._key.indexOf("clearkey") >= 0) {
|
|
94
|
-
const licenseTypedArray =
|
|
95
|
-
license instanceof ArrayBuffer ? new Uint8Array(license) :
|
|
96
|
-
license;
|
|
97
|
-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
98
|
-
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
99
|
-
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
100
|
-
const json = JSON.parse(utf8ToStr(licenseTypedArray));
|
|
101
|
-
const key = base64ToBytes(json.keys[0].k);
|
|
102
|
-
const kid = base64ToBytes(json.keys[0].kid);
|
|
103
|
-
/* eslint-enable @typescript-eslint/no-unsafe-member-access */
|
|
104
|
-
/* eslint-enable @typescript-eslint/no-unsafe-argument */
|
|
105
|
-
/* eslint-enable @typescript-eslint/no-unsafe-assignment */
|
|
106
|
-
resolve(this._vid.webkitAddKey(this._key, key, kid, /* sessionId */ ""));
|
|
107
|
-
} else {
|
|
108
|
-
resolve(this._vid.webkitAddKey(this._key, license, null, /* sessionId */ ""));
|
|
109
|
-
}
|
|
110
|
-
} catch (err) {
|
|
111
|
-
reject(err);
|
|
112
|
-
}
|
|
113
|
-
});
|
|
86
|
+
this._onSessionRelatedEvent = (evt : Event) => {
|
|
87
|
+
this.trigger(evt.type, evt);
|
|
114
88
|
};
|
|
89
|
+
|
|
90
|
+
["keymessage", "message", "keyadded", "ready", "keyerror", "error"]
|
|
91
|
+
.forEach(evt => mediaElement.addEventListener(evt, this._onSessionRelatedEvent));
|
|
115
92
|
}
|
|
116
93
|
|
|
117
|
-
|
|
94
|
+
public update(license: Uint8Array) : Promise<void> {
|
|
95
|
+
return new PPromise((resolve, reject) => {
|
|
96
|
+
try {
|
|
97
|
+
if (this._key.indexOf("clearkey") >= 0) {
|
|
98
|
+
const licenseTypedArray =
|
|
99
|
+
license instanceof ArrayBuffer ? new Uint8Array(license) :
|
|
100
|
+
license;
|
|
101
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
102
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
103
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
104
|
+
const json = JSON.parse(utf8ToStr(licenseTypedArray));
|
|
105
|
+
const key = base64ToBytes(json.keys[0].k);
|
|
106
|
+
const kid = base64ToBytes(json.keys[0].kid);
|
|
107
|
+
/* eslint-enable @typescript-eslint/no-unsafe-member-access */
|
|
108
|
+
/* eslint-enable @typescript-eslint/no-unsafe-argument */
|
|
109
|
+
/* eslint-enable @typescript-eslint/no-unsafe-assignment */
|
|
110
|
+
resolve(this._vid.webkitAddKey(this._key, key, kid, /* sessionId */ ""));
|
|
111
|
+
} else {
|
|
112
|
+
resolve(this._vid.webkitAddKey(this._key, license, null, /* sessionId */ ""));
|
|
113
|
+
}
|
|
114
|
+
} catch (err) {
|
|
115
|
+
reject(err);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
public generateRequest(
|
|
121
|
+
_initDataType: string,
|
|
122
|
+
initData: ArrayBuffer
|
|
123
|
+
): Promise<void> {
|
|
118
124
|
return new PPromise((resolve) => {
|
|
119
125
|
this._vid.webkitGenerateKeyRequest(this._key, initData);
|
|
120
126
|
resolve();
|
|
121
127
|
});
|
|
122
128
|
}
|
|
123
129
|
|
|
124
|
-
close(): Promise<void> {
|
|
130
|
+
public close(): Promise<void> {
|
|
125
131
|
return new PPromise((resolve) => {
|
|
126
|
-
this.
|
|
127
|
-
this._closeSession
|
|
132
|
+
this._unbindSession();
|
|
133
|
+
this._closeSession();
|
|
128
134
|
resolve();
|
|
129
135
|
});
|
|
130
136
|
}
|
|
131
137
|
|
|
132
|
-
|
|
138
|
+
/**
|
|
139
|
+
* Load a Persistent MediaKeySession.
|
|
140
|
+
* Do nothing here because this implementation doesn't handle them.
|
|
141
|
+
* @returns {Promise.<boolean>}
|
|
142
|
+
*/
|
|
143
|
+
public load(): Promise<boolean> {
|
|
144
|
+
// Not implemented. Always return false as in "no session with that id".
|
|
133
145
|
return PPromise.resolve(false);
|
|
134
146
|
}
|
|
135
147
|
|
|
136
|
-
remove(): Promise<void> {
|
|
148
|
+
public remove(): Promise<void> {
|
|
137
149
|
return PPromise.resolve();
|
|
138
150
|
}
|
|
151
|
+
|
|
152
|
+
private _unbindSession() {
|
|
153
|
+
["keymessage", "message", "keyadded", "ready", "keyerror", "error"]
|
|
154
|
+
.forEach(evt => this._vid.removeEventListener(evt, this._onSessionRelatedEvent));
|
|
155
|
+
}
|
|
139
156
|
}
|
|
140
157
|
|
|
141
158
|
class OldWebKitCustomMediaKeys implements ICustomMediaKeys {
|