rx-player 3.26.3-dev.2022021400 → 3.27.0-dev.2022032100
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/.eslintrc.js +0 -4
- package/CHANGELOG.md +17 -2
- 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 +143 -36
- package/dist/_esm5.processed/compat/eme/custom_key_system_access.d.ts +15 -0
- package/dist/_esm5.processed/compat/eme/custom_key_system_access.js +1 -17
- package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +6 -7
- 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 +20 -22
- package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +58 -40
- package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +49 -48
- 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 +67 -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/network_analyzer.js +2 -1
- 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.js +2 -1
- package/dist/_esm5.processed/core/api/option_utils.d.ts +6 -3
- package/dist/_esm5.processed/core/api/option_utils.js +21 -7
- 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 +73 -35
- package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -49
- package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +25 -65
- package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
- package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +103 -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 +40 -0
- package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
- package/dist/_esm5.processed/core/decrypt/content_decryptor.js +865 -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 +173 -0
- package/dist/_esm5.processed/core/{eme/dispose_media_keys.d.ts → decrypt/dispose_decryption_resources.d.ts} +4 -4
- 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 +299 -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 +119 -241
- 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 +84 -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 +302 -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.js +3 -5
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +1 -1
- 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 +2 -3
- package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
- package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +1 -1
- package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
- package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +6 -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.js +2 -1
- package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
- package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
- 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.js +3 -1
- 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/index.d.ts +1 -0
- 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.d.ts +15 -11
- package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +6 -3
- package/dist/_esm5.processed/core/stream/period/index.d.ts +1 -0
- package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +5 -12
- package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
- package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +2 -2
- 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/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.js +6 -7
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/index.js +2 -3
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +15 -0
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +3 -5
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +3 -5
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +1 -2
- 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/manifest.d.ts +1 -14
- package/dist/_esm5.processed/manifest/manifest.js +10 -74
- package/dist/_esm5.processed/manifest/representation.d.ts +35 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +87 -75
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +4 -5
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
- package/dist/_esm5.processed/public_types.d.ts +3 -2
- package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +1 -2
- package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +4 -3
- package/dist/_esm5.processed/transports/dash/image_pipelines.js +60 -11
- package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -2
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +2 -3
- package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +1 -1
- package/dist/_esm5.processed/transports/dash/segment_loader.js +3 -4
- package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
- package/dist/_esm5.processed/transports/dash/text_loader.js +1 -2
- package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
- package/dist/_esm5.processed/transports/local/segment_loader.js +2 -3
- 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/pipelines.js +2 -3
- package/dist/_esm5.processed/transports/smooth/pipelines.js +71 -14
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +3 -4
- package/dist/_esm5.processed/transports/types.d.ts +22 -0
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -2
- package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -2
- package/dist/_esm5.processed/utils/cast_to_observable.js +1 -3
- 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.js +1 -2
- package/dist/_esm5.processed/utils/request/xhr.js +2 -3
- 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 +4936 -3340
- package/dist/rx-player.min.js +1 -1
- package/dummy +1 -0
- package/{dist/_esm5.processed/utils/promise.d.ts → experimental/index.d.ts} +1 -2
- package/{dist/_esm5.processed/utils/promise.js → experimental/index.js} +1 -3
- package/package.json +32 -35
- package/{src/typings/pinkie.d.ts → scripts/build/templates/experimental/index.d.ts} +1 -4
- package/scripts/build/templates/experimental/index.js +16 -0
- package/scripts/update-version +2 -2
- package/sonar-project.properties +1 -1
- package/src/README.md +6 -6
- package/src/compat/__tests__/play.test.ts +2 -4
- 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 +89 -56
- package/src/compat/eme/custom_key_system_access.ts +1 -2
- package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +6 -7
- package/src/compat/eme/custom_media_keys/index.ts +20 -38
- package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +68 -52
- package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +57 -56
- package/src/compat/eme/generate_key_request.ts +25 -33
- package/src/compat/eme/load_session.ts +28 -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/bandwidth_estimator.ts +4 -4
- package/src/core/abr/network_analyzer.ts +5 -6
- package/src/core/api/__tests__/get_player_state.test.ts +3 -3
- package/src/core/api/__tests__/option_utils.test.ts +29 -17
- package/src/core/api/get_player_state.ts +1 -1
- package/src/core/api/index.ts +3 -0
- package/src/core/api/option_utils.ts +42 -23
- package/src/core/api/playback_observer.ts +12 -8
- package/src/core/api/public_api.ts +152 -113
- 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 +31 -93
- package/src/core/{eme → decrypt}/attach_media_keys.ts +48 -56
- package/src/core/decrypt/clear_on_stop.ts +47 -0
- package/src/core/decrypt/content_decryptor.ts +1157 -0
- package/src/core/decrypt/create_or_load_session.ts +130 -0
- package/src/core/decrypt/create_session.ts +174 -0
- package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
- package/src/core/{eme → decrypt}/find_key_system.ts +111 -122
- 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 +128 -258
- 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} +19 -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 +317 -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 +5 -7
- package/src/core/fetchers/segment/segment_fetcher.ts +4 -4
- package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
- package/src/core/fetchers/utils/try_urls_with_backoff.ts +2 -3
- 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 +17 -20
- package/src/core/init/initialize_media_source.ts +44 -106
- package/src/core/init/link_drm_and_content.ts +176 -0
- package/src/core/init/manifest_update_scheduler.ts +5 -3
- package/src/core/init/stall_avoider.ts +6 -5
- package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
- 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 +3 -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/index.ts +1 -0
- 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 +25 -15
- package/src/core/stream/period/index.ts +1 -0
- package/src/core/stream/period/period_stream.ts +10 -16
- package/src/core/stream/representation/force_garbage_collection.ts +2 -2
- 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/experimental/index.ts +5 -0
- package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
- package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +7 -7
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +9 -10
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/decodingInfos.test.ts +2 -4
- package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +2 -3
- package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +1 -2
- package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +3 -5
- package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +3 -5
- package/src/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.ts +1 -2
- package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.ts +1 -2
- package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.ts +1 -2
- package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.ts +1 -2
- 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/manifest.ts +6 -76
- package/src/manifest/representation.ts +36 -3
- package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
- package/src/parsers/manifest/dash/common/indexes/template.ts +1 -2
- package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +1 -1
- package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +109 -64
- package/src/parsers/manifest/dash/common/parse_mpd.ts +1 -2
- package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +4 -5
- package/src/parsers/manifest/smooth/create_parser.ts +1 -0
- package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
- package/src/public_types.ts +6 -1
- package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +1 -2
- package/src/transports/dash/image_pipelines.ts +15 -14
- package/src/transports/dash/init_segment_loader.ts +1 -2
- package/src/transports/dash/manifest_parser.ts +2 -3
- package/src/transports/dash/segment_loader.ts +4 -5
- package/src/transports/dash/segment_parser.ts +5 -0
- package/src/transports/dash/text_loader.ts +2 -3
- package/src/transports/dash/text_parser.ts +8 -0
- package/src/transports/local/segment_loader.ts +2 -3
- package/src/transports/local/segment_parser.ts +4 -0
- package/src/transports/local/text_parser.ts +8 -0
- package/src/transports/metaplaylist/pipelines.ts +2 -3
- package/src/transports/smooth/pipelines.ts +26 -14
- package/src/transports/smooth/segment_loader.ts +5 -6
- package/src/transports/types.ts +22 -0
- package/src/transports/utils/call_custom_manifest_loader.ts +1 -2
- package/src/utils/__tests__/deep_merge.test.ts +48 -0
- package/src/utils/cancellable_sleep.ts +1 -2
- package/src/utils/cast_to_observable.ts +0 -2
- package/src/utils/deep_merge.ts +46 -0
- package/src/utils/reference.ts +116 -23
- package/src/utils/request/fetch.ts +1 -2
- package/src/utils/request/xhr.ts +3 -3
- package/src/utils/rx-from_cancellable_promise.ts +7 -2
- package/src/utils/task_canceller.ts +6 -4
- package/tsconfig.json +0 -1
- package/tsconfig.modules.json +0 -1
- 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.d.ts +0 -19
- 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 -253
- 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/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/utils/__tests__/promise.test.ts +0 -23
- package/src/utils/promise.ts +0 -20
|
@@ -28,12 +28,10 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
28
28
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
29
29
|
};
|
|
30
30
|
})();
|
|
31
|
-
import { merge as observableMerge, Subject, takeUntil, } from "rxjs";
|
|
32
31
|
import { base64ToBytes } from "../../../utils/base64";
|
|
33
32
|
import EventEmitter from "../../../utils/event_emitter";
|
|
34
|
-
import
|
|
33
|
+
import noop from "../../../utils/noop";
|
|
35
34
|
import { utf8ToStr } from "../../../utils/string_parsing";
|
|
36
|
-
import * as events from "../../event_listeners";
|
|
37
35
|
/**
|
|
38
36
|
* Returns true if the given media element has old webkit methods
|
|
39
37
|
* corresponding to the IOldWebkitHTMLMediaElement interface.
|
|
@@ -44,70 +42,90 @@ export function isOldWebkitMediaElement(element) {
|
|
|
44
42
|
return typeof element
|
|
45
43
|
.webkitGenerateKeyRequest === "function";
|
|
46
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* MediaKeySession implementation for older versions of WebKit relying on APIs
|
|
47
|
+
* such as `webkitGenerateKeyRequest` `webkitAddKey` to be called on the
|
|
48
|
+
* HTMLMediaElement.
|
|
49
|
+
* @class OldWebkitMediaKeySession
|
|
50
|
+
*/
|
|
47
51
|
var OldWebkitMediaKeySession = /** @class */ (function (_super) {
|
|
48
52
|
__extends(OldWebkitMediaKeySession, _super);
|
|
49
53
|
function OldWebkitMediaKeySession(mediaElement, keySystem) {
|
|
50
54
|
var _this = _super.call(this) || this;
|
|
51
|
-
_this._closeSession$ = new Subject();
|
|
52
55
|
_this._vid = mediaElement;
|
|
53
56
|
_this._key = keySystem;
|
|
54
57
|
_this.sessionId = "";
|
|
55
|
-
_this.
|
|
56
|
-
|
|
58
|
+
_this._closeSession = noop; // Just here to make TypeScript happy
|
|
59
|
+
_this.closed = new Promise(function (resolve) {
|
|
60
|
+
_this._closeSession = resolve;
|
|
57
61
|
});
|
|
58
62
|
_this.keyStatuses = new Map();
|
|
59
63
|
_this.expiration = NaN;
|
|
60
|
-
|
|
61
|
-
.
|
|
62
|
-
.subscribe(function (evt) { return _this.trigger(evt.type, evt); });
|
|
63
|
-
_this.update = function (license) {
|
|
64
|
-
return new PPromise(function (resolve, reject) {
|
|
65
|
-
try {
|
|
66
|
-
if (_this._key.indexOf("clearkey") >= 0) {
|
|
67
|
-
var licenseTypedArray = license instanceof ArrayBuffer ? new Uint8Array(license) :
|
|
68
|
-
license;
|
|
69
|
-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
70
|
-
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
71
|
-
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
72
|
-
var json = JSON.parse(utf8ToStr(licenseTypedArray));
|
|
73
|
-
var key = base64ToBytes(json.keys[0].k);
|
|
74
|
-
var kid = base64ToBytes(json.keys[0].kid);
|
|
75
|
-
/* eslint-enable @typescript-eslint/no-unsafe-member-access */
|
|
76
|
-
/* eslint-enable @typescript-eslint/no-unsafe-argument */
|
|
77
|
-
/* eslint-enable @typescript-eslint/no-unsafe-assignment */
|
|
78
|
-
resolve(_this._vid.webkitAddKey(_this._key, key, kid, /* sessionId */ ""));
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
resolve(_this._vid.webkitAddKey(_this._key, license, null, /* sessionId */ ""));
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
catch (err) {
|
|
85
|
-
reject(err);
|
|
86
|
-
}
|
|
87
|
-
});
|
|
64
|
+
_this._onSessionRelatedEvent = function (evt) {
|
|
65
|
+
_this.trigger(evt.type, evt);
|
|
88
66
|
};
|
|
67
|
+
["keymessage", "message", "keyadded", "ready", "keyerror", "error"]
|
|
68
|
+
.forEach(function (evt) { return mediaElement.addEventListener(evt, _this._onSessionRelatedEvent); });
|
|
89
69
|
return _this;
|
|
90
70
|
}
|
|
71
|
+
OldWebkitMediaKeySession.prototype.update = function (license) {
|
|
72
|
+
var _this = this;
|
|
73
|
+
return new Promise(function (resolve, reject) {
|
|
74
|
+
try {
|
|
75
|
+
if (_this._key.indexOf("clearkey") >= 0) {
|
|
76
|
+
var licenseTypedArray = license instanceof ArrayBuffer ? new Uint8Array(license) :
|
|
77
|
+
license;
|
|
78
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
79
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
80
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
81
|
+
var json = JSON.parse(utf8ToStr(licenseTypedArray));
|
|
82
|
+
var key = base64ToBytes(json.keys[0].k);
|
|
83
|
+
var kid = base64ToBytes(json.keys[0].kid);
|
|
84
|
+
/* eslint-enable @typescript-eslint/no-unsafe-member-access */
|
|
85
|
+
/* eslint-enable @typescript-eslint/no-unsafe-argument */
|
|
86
|
+
/* eslint-enable @typescript-eslint/no-unsafe-assignment */
|
|
87
|
+
resolve(_this._vid.webkitAddKey(_this._key, key, kid, /* sessionId */ ""));
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
resolve(_this._vid.webkitAddKey(_this._key, license, null, /* sessionId */ ""));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
reject(err);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
};
|
|
91
98
|
OldWebkitMediaKeySession.prototype.generateRequest = function (_initDataType, initData) {
|
|
92
99
|
var _this = this;
|
|
93
|
-
return new
|
|
100
|
+
return new Promise(function (resolve) {
|
|
94
101
|
_this._vid.webkitGenerateKeyRequest(_this._key, initData);
|
|
95
102
|
resolve();
|
|
96
103
|
});
|
|
97
104
|
};
|
|
98
105
|
OldWebkitMediaKeySession.prototype.close = function () {
|
|
99
106
|
var _this = this;
|
|
100
|
-
return new
|
|
101
|
-
_this.
|
|
102
|
-
_this._closeSession
|
|
107
|
+
return new Promise(function (resolve) {
|
|
108
|
+
_this._unbindSession();
|
|
109
|
+
_this._closeSession();
|
|
103
110
|
resolve();
|
|
104
111
|
});
|
|
105
112
|
};
|
|
113
|
+
/**
|
|
114
|
+
* Load a Persistent MediaKeySession.
|
|
115
|
+
* Do nothing here because this implementation doesn't handle them.
|
|
116
|
+
* @returns {Promise.<boolean>}
|
|
117
|
+
*/
|
|
106
118
|
OldWebkitMediaKeySession.prototype.load = function () {
|
|
107
|
-
return
|
|
119
|
+
// Not implemented. Always return false as in "no session with that id".
|
|
120
|
+
return Promise.resolve(false);
|
|
108
121
|
};
|
|
109
122
|
OldWebkitMediaKeySession.prototype.remove = function () {
|
|
110
|
-
return
|
|
123
|
+
return Promise.resolve();
|
|
124
|
+
};
|
|
125
|
+
OldWebkitMediaKeySession.prototype._unbindSession = function () {
|
|
126
|
+
var _this = this;
|
|
127
|
+
["keymessage", "message", "keyadded", "ready", "keyerror", "error"]
|
|
128
|
+
.forEach(function (evt) { return _this._vid.removeEventListener(evt, _this._onSessionRelatedEvent); });
|
|
111
129
|
};
|
|
112
130
|
return OldWebkitMediaKeySession;
|
|
113
131
|
}(EventEmitter));
|
|
@@ -28,10 +28,8 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
28
28
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
29
29
|
};
|
|
30
30
|
})();
|
|
31
|
-
import { merge as observableMerge, Subject, takeUntil, } from "rxjs";
|
|
32
31
|
import EventEmitter from "../../../utils/event_emitter";
|
|
33
|
-
import
|
|
34
|
-
import * as events from "../../event_listeners";
|
|
32
|
+
import noop from "../../../utils/noop";
|
|
35
33
|
import getWebKitFairplayInitData from "../get_webkit_fairplay_initdata";
|
|
36
34
|
import { WebKitMediaKeysConstructor, } from "./webkit_media_keys_constructor";
|
|
37
35
|
/**
|
|
@@ -74,57 +72,44 @@ var WebkitMediaKeySession = /** @class */ (function (_super) {
|
|
|
74
72
|
function WebkitMediaKeySession(mediaElement, keyType, serverCertificate) {
|
|
75
73
|
var _this = _super.call(this) || this;
|
|
76
74
|
_this._serverCertificate = serverCertificate;
|
|
77
|
-
_this._closeSession$ = new Subject();
|
|
78
75
|
_this._videoElement = mediaElement;
|
|
79
76
|
_this._keyType = keyType;
|
|
80
|
-
_this.
|
|
81
|
-
|
|
77
|
+
_this._unbindSession = noop;
|
|
78
|
+
_this._closeSession = noop; // Just here to make TypeScript happy
|
|
79
|
+
_this.closed = new Promise(function (resolve) {
|
|
80
|
+
_this._closeSession = resolve;
|
|
82
81
|
});
|
|
83
82
|
_this.keyStatuses = new Map();
|
|
84
83
|
_this.expiration = NaN;
|
|
85
|
-
_this.
|
|
86
|
-
|
|
87
|
-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
88
|
-
if (_this._nativeSession === undefined ||
|
|
89
|
-
_this._nativeSession.update === undefined ||
|
|
90
|
-
typeof _this._nativeSession.update !== "function") {
|
|
91
|
-
return reject("Unavailable WebKit key session.");
|
|
92
|
-
}
|
|
93
|
-
try {
|
|
94
|
-
var uInt8Arraylicense = void 0;
|
|
95
|
-
if (license instanceof ArrayBuffer) {
|
|
96
|
-
uInt8Arraylicense = new Uint8Array(license);
|
|
97
|
-
}
|
|
98
|
-
else if (license instanceof Uint8Array) {
|
|
99
|
-
uInt8Arraylicense = license;
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
uInt8Arraylicense = new Uint8Array(license.buffer);
|
|
103
|
-
}
|
|
104
|
-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
105
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
106
|
-
resolve(_this._nativeSession.update(uInt8Arraylicense));
|
|
107
|
-
/* eslint-enable @typescript-eslint/no-unsafe-member-access */
|
|
108
|
-
}
|
|
109
|
-
catch (err) {
|
|
110
|
-
reject(err);
|
|
111
|
-
}
|
|
112
|
-
/* eslint-enable @typescript-eslint/no-unsafe-member-access */
|
|
113
|
-
});
|
|
84
|
+
_this._onEvent = function (evt) {
|
|
85
|
+
_this.trigger(evt.type, evt);
|
|
114
86
|
};
|
|
115
87
|
return _this;
|
|
116
88
|
}
|
|
117
|
-
WebkitMediaKeySession.prototype.
|
|
89
|
+
WebkitMediaKeySession.prototype.update = function (license) {
|
|
118
90
|
var _this = this;
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
91
|
+
return new Promise(function (resolve, reject) {
|
|
92
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
93
|
+
if (_this._nativeSession === undefined ||
|
|
94
|
+
_this._nativeSession.update === undefined ||
|
|
95
|
+
typeof _this._nativeSession.update !== "function") {
|
|
96
|
+
return reject("Unavailable WebKit key session.");
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
100
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
101
|
+
resolve(_this._nativeSession.update(license));
|
|
102
|
+
/* eslint-enable @typescript-eslint/no-unsafe-member-access */
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
reject(err);
|
|
106
|
+
}
|
|
107
|
+
/* eslint-enable @typescript-eslint/no-unsafe-member-access */
|
|
123
108
|
});
|
|
124
109
|
};
|
|
125
110
|
WebkitMediaKeySession.prototype.generateRequest = function (_initDataType, initData) {
|
|
126
111
|
var _this = this;
|
|
127
|
-
return new
|
|
112
|
+
return new Promise(function (resolve) {
|
|
128
113
|
var _a;
|
|
129
114
|
var elt = _this._videoElement;
|
|
130
115
|
if (((_a = elt.webkitKeys) === null || _a === void 0 ? void 0 : _a.createSession) === undefined) {
|
|
@@ -144,7 +129,7 @@ var WebkitMediaKeySession = /** @class */ (function (_super) {
|
|
|
144
129
|
if (keySession === undefined || keySession === null) {
|
|
145
130
|
throw new Error("Impossible to get the key sessions");
|
|
146
131
|
}
|
|
147
|
-
_this.
|
|
132
|
+
_this._listenEvent(keySession);
|
|
148
133
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
149
134
|
_this._nativeSession = keySession;
|
|
150
135
|
resolve();
|
|
@@ -152,9 +137,9 @@ var WebkitMediaKeySession = /** @class */ (function (_super) {
|
|
|
152
137
|
};
|
|
153
138
|
WebkitMediaKeySession.prototype.close = function () {
|
|
154
139
|
var _this = this;
|
|
155
|
-
return new
|
|
156
|
-
_this.
|
|
157
|
-
_this._closeSession
|
|
140
|
+
return new Promise(function (resolve, reject) {
|
|
141
|
+
_this._unbindSession();
|
|
142
|
+
_this._closeSession();
|
|
158
143
|
if (_this._nativeSession === undefined) {
|
|
159
144
|
reject("No session to close.");
|
|
160
145
|
return;
|
|
@@ -166,10 +151,10 @@ var WebkitMediaKeySession = /** @class */ (function (_super) {
|
|
|
166
151
|
});
|
|
167
152
|
};
|
|
168
153
|
WebkitMediaKeySession.prototype.load = function () {
|
|
169
|
-
return
|
|
154
|
+
return Promise.resolve(false);
|
|
170
155
|
};
|
|
171
156
|
WebkitMediaKeySession.prototype.remove = function () {
|
|
172
|
-
return
|
|
157
|
+
return Promise.resolve();
|
|
173
158
|
};
|
|
174
159
|
Object.defineProperty(WebkitMediaKeySession.prototype, "sessionId", {
|
|
175
160
|
get: function () {
|
|
@@ -183,6 +168,22 @@ var WebkitMediaKeySession = /** @class */ (function (_super) {
|
|
|
183
168
|
enumerable: false,
|
|
184
169
|
configurable: true
|
|
185
170
|
});
|
|
171
|
+
WebkitMediaKeySession.prototype._listenEvent = function (session) {
|
|
172
|
+
var _this = this;
|
|
173
|
+
this._unbindSession(); // If previous session was linked
|
|
174
|
+
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
175
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
176
|
+
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
177
|
+
["keymessage", "message", "keyadded", "ready", "keyerror", "error"]
|
|
178
|
+
.forEach(function (evt) { return session.addEventListener(evt, _this._onEvent); });
|
|
179
|
+
this._unbindSession = function () {
|
|
180
|
+
["keymessage", "message", "keyadded", "ready", "keyerror", "error"]
|
|
181
|
+
.forEach(function (evt) { return session.removeEventListener(evt, _this._onEvent); });
|
|
182
|
+
};
|
|
183
|
+
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
184
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
185
|
+
/* eslint-enable @typescript-eslint/no-unsafe-call */
|
|
186
|
+
};
|
|
186
187
|
return WebkitMediaKeySession;
|
|
187
188
|
}(EventEmitter));
|
|
188
189
|
var WebKitCustomMediaKeys = /** @class */ (function () {
|
|
@@ -209,7 +210,7 @@ var WebKitCustomMediaKeys = /** @class */ (function () {
|
|
|
209
210
|
};
|
|
210
211
|
WebKitCustomMediaKeys.prototype.setServerCertificate = function (serverCertificate) {
|
|
211
212
|
this._serverCertificate = serverCertificate;
|
|
212
|
-
return
|
|
213
|
+
return Promise.resolve();
|
|
213
214
|
};
|
|
214
215
|
return WebKitCustomMediaKeys;
|
|
215
216
|
}());
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { Observable } from "rxjs";
|
|
17
16
|
import { ICustomMediaKeySession } from "./custom_media_keys";
|
|
18
17
|
/**
|
|
19
18
|
* Modify "initialization data" sent to a `generateKeyRequest` EME call to
|
|
@@ -52,6 +51,6 @@ export declare function patchInitData(initData: Uint8Array): Uint8Array;
|
|
|
52
51
|
* "encrypted" event for the corresponding request.
|
|
53
52
|
* @param {string} sessionType - Type of session you want to generate. Consult
|
|
54
53
|
* EME Specification for more information on session types.
|
|
55
|
-
* @returns {
|
|
54
|
+
* @returns {Promise} - Emit when done. Errors if fails.
|
|
56
55
|
*/
|
|
57
|
-
export default function generateKeyRequest(session: MediaKeySession | ICustomMediaKeySession, initializationDataType: string | undefined, initializationData: Uint8Array):
|
|
56
|
+
export default function generateKeyRequest(session: MediaKeySession | ICustomMediaKeySession, initializationDataType: string | undefined, initializationData: Uint8Array): Promise<unknown>;
|
|
@@ -13,11 +13,9 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { catchError, defer as observableDefer, } from "rxjs";
|
|
17
16
|
import log from "../../log";
|
|
18
17
|
import { getNextBoxOffsets } from "../../parsers/containers/isobmff";
|
|
19
18
|
import { be4toi, concat, } from "../../utils/byte_parsing";
|
|
20
|
-
import castToObservable from "../../utils/cast_to_observable";
|
|
21
19
|
import { PSSH_TO_INTEGER } from "./constants";
|
|
22
20
|
/**
|
|
23
21
|
* Modify "initialization data" sent to a `generateKeyRequest` EME call to
|
|
@@ -122,32 +120,30 @@ export function patchInitData(initData) {
|
|
|
122
120
|
* "encrypted" event for the corresponding request.
|
|
123
121
|
* @param {string} sessionType - Type of session you want to generate. Consult
|
|
124
122
|
* EME Specification for more information on session types.
|
|
125
|
-
* @returns {
|
|
123
|
+
* @returns {Promise} - Emit when done. Errors if fails.
|
|
126
124
|
*/
|
|
127
125
|
export default function generateKeyRequest(session, initializationDataType, initializationData) {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
126
|
+
log.debug("Compat: Calling generateRequest on the MediaKeySession");
|
|
127
|
+
var patchedInit;
|
|
128
|
+
try {
|
|
129
|
+
patchedInit = patchInitData(initializationData);
|
|
130
|
+
}
|
|
131
|
+
catch (_e) {
|
|
132
|
+
patchedInit = initializationData;
|
|
133
|
+
}
|
|
134
|
+
var initDataType = initializationDataType !== null && initializationDataType !== void 0 ? initializationDataType : "";
|
|
135
|
+
return session.generateRequest(initDataType, patchedInit)
|
|
136
|
+
.catch(function (error) {
|
|
137
|
+
if (initDataType !== "" || !(error instanceof TypeError)) {
|
|
138
|
+
throw error;
|
|
136
139
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
// a rejected promise with a TypeError in that case).
|
|
146
|
-
// Retry with a default "cenc" value for initialization data type if
|
|
147
|
-
// we're in that condition.
|
|
148
|
-
log.warn("Compat: error while calling `generateRequest` with an empty " +
|
|
149
|
-
"initialization data type. Retrying with a default \"cenc\" value.", error);
|
|
150
|
-
return castToObservable(session.generateRequest("cenc", patchedInit));
|
|
151
|
-
}));
|
|
140
|
+
// On newer EME versions of the specification, the initialization data
|
|
141
|
+
// type given to generateRequest cannot be an empty string (it returns
|
|
142
|
+
// a rejected promise with a TypeError in that case).
|
|
143
|
+
// Retry with a default "cenc" value for initialization data type if
|
|
144
|
+
// we're in that condition.
|
|
145
|
+
log.warn("Compat: error while calling `generateRequest` with an empty " +
|
|
146
|
+
"initialization data type. Retrying with a default \"cenc\" value.", error);
|
|
147
|
+
return session.generateRequest("cenc", patchedInit);
|
|
152
148
|
});
|
|
153
149
|
}
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { Observable } from "rxjs";
|
|
17
16
|
import { ICustomMediaKeySession } from "./custom_media_keys";
|
|
18
17
|
/**
|
|
19
18
|
* Load a persistent session, based on its `sessionId`, on the given
|
|
@@ -29,4 +28,4 @@ import { ICustomMediaKeySession } from "./custom_media_keys";
|
|
|
29
28
|
* @param {string} sessionId
|
|
30
29
|
* @returns {Observable}
|
|
31
30
|
*/
|
|
32
|
-
export default function loadSession(session: MediaKeySession | ICustomMediaKeySession, sessionId: string):
|
|
31
|
+
export default function loadSession(session: MediaKeySession | ICustomMediaKeySession, sessionId: string): Promise<boolean>;
|
|
@@ -13,11 +13,43 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
|
|
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
|
+
};
|
|
17
52
|
import log from "../../log";
|
|
18
|
-
import castToObservable from "../../utils/cast_to_observable";
|
|
19
|
-
import tryCatch from "../../utils/rx-try_catch";
|
|
20
|
-
import { onKeyStatusesChange$ } from "../event_listeners";
|
|
21
53
|
var EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES = 100;
|
|
22
54
|
/**
|
|
23
55
|
* Load a persistent session, based on its `sessionId`, on the given
|
|
@@ -34,17 +66,35 @@ var EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES = 100;
|
|
|
34
66
|
* @returns {Observable}
|
|
35
67
|
*/
|
|
36
68
|
export default function loadSession(session, sessionId) {
|
|
37
|
-
return
|
|
38
|
-
|
|
39
|
-
return
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
69
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
70
|
+
var isLoaded;
|
|
71
|
+
return __generator(this, function (_a) {
|
|
72
|
+
switch (_a.label) {
|
|
73
|
+
case 0:
|
|
74
|
+
log.info("Compat/DRM: Load persisted session", sessionId);
|
|
75
|
+
return [4 /*yield*/, session.load(sessionId)];
|
|
76
|
+
case 1:
|
|
77
|
+
isLoaded = _a.sent();
|
|
78
|
+
if (!isLoaded || session.keyStatuses.size > 0) {
|
|
79
|
+
return [2 /*return*/, isLoaded];
|
|
80
|
+
}
|
|
81
|
+
// A browser race condition can exist, seen for example in some
|
|
82
|
+
// Chromium/Chrome versions where the `keyStatuses` property from a loaded
|
|
83
|
+
// MediaKeySession would not be populated directly as the load answer but
|
|
84
|
+
// asynchronously after.
|
|
85
|
+
return [2 /*return*/, new Promise(function (resolve) {
|
|
86
|
+
session.addEventListener("keystatuseschange", resolveWithLoadedStatus);
|
|
87
|
+
var timeout = setTimeout(resolveWithLoadedStatus, EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES);
|
|
88
|
+
function resolveWithLoadedStatus() {
|
|
89
|
+
cleanUp();
|
|
90
|
+
resolve(isLoaded);
|
|
91
|
+
}
|
|
92
|
+
function cleanUp() {
|
|
93
|
+
clearTimeout(timeout);
|
|
94
|
+
session.removeEventListener("keystatuseschange", resolveWithLoadedStatus);
|
|
95
|
+
}
|
|
96
|
+
})];
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
});
|
|
50
100
|
}
|
|
@@ -24,7 +24,6 @@ import isNonEmptyString from "../utils/is_non_empty_string";
|
|
|
24
24
|
import isNode from "./is_node";
|
|
25
25
|
import shouldFavourCustomSafariEME from "./should_favour_custom_safari_EME";
|
|
26
26
|
var BROWSER_PREFIXES = ["", "webkit", "moz", "ms"];
|
|
27
|
-
var INACTIVITY_DELAY = config.INACTIVITY_DELAY;
|
|
28
27
|
var pixelRatio = isNode ||
|
|
29
28
|
window.devicePixelRatio == null ||
|
|
30
29
|
window.devicePixelRatio === 0 ? 1 :
|
|
@@ -140,6 +139,7 @@ function visibilityChange() {
|
|
|
140
139
|
* @returns {Observable}
|
|
141
140
|
*/
|
|
142
141
|
function isPageActive() {
|
|
142
|
+
var INACTIVITY_DELAY = config.getCurrent().INACTIVITY_DELAY;
|
|
143
143
|
return visibilityChange().pipe(switchMap(function (x) {
|
|
144
144
|
if (!x) {
|
|
145
145
|
return observableOf(x).pipe(delay(INACTIVITY_DELAY));
|
|
@@ -195,6 +195,7 @@ function onPictureInPictureEvent$(elt) {
|
|
|
195
195
|
* @returns {Observable}
|
|
196
196
|
*/
|
|
197
197
|
function isVideoVisible(pip$) {
|
|
198
|
+
var INACTIVITY_DELAY = config.getCurrent().INACTIVITY_DELAY;
|
|
198
199
|
return observableCombineLatest([visibilityChange(), pip$]).pipe(switchMap(function (_a) {
|
|
199
200
|
var isVisible = _a[0], pip = _a[1];
|
|
200
201
|
if (pip.isEnabled || isVisible) {
|
|
@@ -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 { isSafariDesktop, isSafariMobile, } from "./browser_detection";
|
|
17
17
|
import { WebKitMediaKeysConstructor, } from "./eme/custom_media_keys/webkit_media_keys_constructor";
|
|
18
18
|
/**
|
|
19
19
|
* On Safari 12.1, it seems that since fairplay CDM implementation
|
|
@@ -23,5 +23,5 @@ import { WebKitMediaKeysConstructor, } from "./eme/custom_media_keys/webkit_medi
|
|
|
23
23
|
* @returns {boolean}
|
|
24
24
|
*/
|
|
25
25
|
export default function shouldFavourCustomSafariEME() {
|
|
26
|
-
return
|
|
26
|
+
return (isSafariDesktop || isSafariMobile) && WebKitMediaKeysConstructor !== undefined;
|
|
27
27
|
}
|