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
package/dummy
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
This is an unnecessary file, just added to trigger the integration tests in a PR through GitHub actions.
|
|
@@ -13,6 +13,4 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
|
|
17
|
-
export default typeof Promise === "function" ? Promise :
|
|
18
|
-
pinkie;
|
|
16
|
+
export * from "../dist/_esm5.processed/experimental/index.js";
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rx-player",
|
|
3
3
|
"author": "Canal+",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.27.0-dev.2022032100",
|
|
5
5
|
"description": "Canal+ HTML5 Video Player",
|
|
6
6
|
"main": "./dist/rx-player.js",
|
|
7
7
|
"keywords": [
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"build:wasm:release": "cd ./src/parsers/manifest/dash/wasm-parser && cargo build --target wasm32-unknown-unknown --release && wasm-opt -O3 -o ../../../../../dist/mpd-parser.wasm target/wasm32-unknown-unknown/release/mpd_node_parser.wasm && cd ../../../../../ && npm run wasm-strip",
|
|
39
39
|
"certificate": "./scripts/generate_certificate",
|
|
40
40
|
"check": "npm run check:types && npm run lint",
|
|
41
|
-
"check:all": "npm run check:types && npm run lint && npm run lint:demo && npm run lint:tests && npm run test && npm run test:memory && node -r esm ./scripts/check_nodejs_import_compatibility.js",
|
|
41
|
+
"check:all": "npm run check:types && npm run lint && npm run lint:demo && npm run lint:tests && npm run test:unit && npm run test:integration && npm run test:memory && node -r esm ./scripts/check_nodejs_import_compatibility.js",
|
|
42
42
|
"check:appveyor": "npm run check:types && npm run lint && npm run lint:demo && npm run lint:tests && npm run test:appveyor",
|
|
43
43
|
"check:types": "tsc --noEmit --project .",
|
|
44
44
|
"check:types:watch": "tsc --noEmit --watch --project .",
|
|
@@ -76,46 +76,43 @@
|
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
78
|
"next-tick": "1.1.0",
|
|
79
|
-
"pinkie": "2.0.4",
|
|
80
79
|
"rxjs": "7.4.0"
|
|
81
80
|
},
|
|
82
81
|
"devDependencies": {
|
|
83
|
-
"@babel/core": "7.
|
|
84
|
-
"@babel/plugin-transform-runtime": "7.
|
|
85
|
-
"@babel/preset-env": "7.16.
|
|
82
|
+
"@babel/core": "7.17.7",
|
|
83
|
+
"@babel/plugin-transform-runtime": "7.17.0",
|
|
84
|
+
"@babel/preset-env": "7.16.11",
|
|
86
85
|
"@babel/preset-react": "7.16.7",
|
|
87
86
|
"@types/chai": "4.3.0",
|
|
88
|
-
"@types/jest": "27.4.
|
|
89
|
-
"@types/mocha": "9.
|
|
90
|
-
"@types/node": "17.0.
|
|
91
|
-
"@types/sinon": "10.0.
|
|
92
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
93
|
-
"@typescript-eslint/eslint-plugin-tslint": "5.
|
|
94
|
-
"@typescript-eslint/parser": "5.
|
|
87
|
+
"@types/jest": "27.4.1",
|
|
88
|
+
"@types/mocha": "9.1.0",
|
|
89
|
+
"@types/node": "17.0.21",
|
|
90
|
+
"@types/sinon": "10.0.11",
|
|
91
|
+
"@typescript-eslint/eslint-plugin": "5.15.0",
|
|
92
|
+
"@typescript-eslint/eslint-plugin-tslint": "5.15.0",
|
|
93
|
+
"@typescript-eslint/parser": "5.15.0",
|
|
95
94
|
"arraybuffer-loader": "1.0.8",
|
|
96
95
|
"babel-loader": "8.2.3",
|
|
97
|
-
"chai": "4.3.
|
|
96
|
+
"chai": "4.3.6",
|
|
98
97
|
"cheerio": "1.0.0-rc.10",
|
|
99
|
-
"core-js": "3.
|
|
100
|
-
"esbuild": "0.14.
|
|
101
|
-
"eslint": "8.
|
|
98
|
+
"core-js": "3.21.1",
|
|
99
|
+
"esbuild": "0.14.27",
|
|
100
|
+
"eslint": "8.11.0",
|
|
102
101
|
"eslint-plugin-import": "2.25.4",
|
|
103
|
-
"eslint-plugin-jsdoc": "
|
|
104
|
-
"eslint-plugin-react": "7.
|
|
102
|
+
"eslint-plugin-jsdoc": "38.0.4",
|
|
103
|
+
"eslint-plugin-react": "7.29.4",
|
|
105
104
|
"esm": "3.2.25",
|
|
106
|
-
"express": "4.17.
|
|
107
|
-
"highlight.js": "11.
|
|
105
|
+
"express": "4.17.3",
|
|
106
|
+
"highlight.js": "11.5.0",
|
|
108
107
|
"html-entities": "2.3.2",
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"karma": "
|
|
112
|
-
"karma-chrome-launcher": "3.1.0",
|
|
113
|
-
"karma-coverage-istanbul-reporter": "3.0.3",
|
|
108
|
+
"jest": "27.5.1",
|
|
109
|
+
"karma": "6.3.17",
|
|
110
|
+
"karma-chrome-launcher": "3.1.1",
|
|
114
111
|
"karma-firefox-launcher": "2.1.2",
|
|
115
112
|
"karma-mocha": "2.0.1",
|
|
116
113
|
"karma-webpack": "5.0.0",
|
|
117
|
-
"markdown-it": "12.3.
|
|
118
|
-
"mocha": "9.
|
|
114
|
+
"markdown-it": "12.3.2",
|
|
115
|
+
"mocha": "9.2.2",
|
|
119
116
|
"mocha-loader": "5.1.5",
|
|
120
117
|
"raw-loader": "4.0.2",
|
|
121
118
|
"react": "17.0.2",
|
|
@@ -123,15 +120,15 @@
|
|
|
123
120
|
"regenerator-runtime": "0.13.9",
|
|
124
121
|
"rimraf": "3.0.2",
|
|
125
122
|
"semver": "7.3.5",
|
|
126
|
-
"sinon": "
|
|
127
|
-
"terser-webpack-plugin": "5.3.
|
|
128
|
-
"ts-jest": "27.1.
|
|
129
|
-
"ts-loader": "9.2.
|
|
123
|
+
"sinon": "13.0.1",
|
|
124
|
+
"terser-webpack-plugin": "5.3.1",
|
|
125
|
+
"ts-jest": "27.1.3",
|
|
126
|
+
"ts-loader": "9.2.8",
|
|
130
127
|
"tslint": "6.1.3",
|
|
131
|
-
"typescript": "4.
|
|
132
|
-
"webpack": "5.
|
|
128
|
+
"typescript": "4.6.2",
|
|
129
|
+
"webpack": "5.70.0",
|
|
133
130
|
"webpack-bundle-analyzer": "4.5.0",
|
|
134
|
-
"webpack-cli": "4.9.
|
|
131
|
+
"webpack-cli": "4.9.2"
|
|
135
132
|
},
|
|
136
133
|
"scripts-list": {
|
|
137
134
|
"Build a demo page (e.g. to test a code change)": {
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2015 CANAL+ Group
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
export * from "../__BUILD_DIR__/experimental/index.js";
|
package/scripts/update-version
CHANGED
|
@@ -24,8 +24,8 @@ set -e
|
|
|
24
24
|
version=$1
|
|
25
25
|
|
|
26
26
|
sed -i.bak -e "s/\/\\* PLAYER_VERSION \\*\/\"\(.*\)\";/\/* PLAYER_VERSION *\/\"${version}\";/g" src/core/api/public_api.ts && rm src/core/api/public_api.ts.bak
|
|
27
|
-
sed -i.bak -e "s/\"version\"
|
|
28
|
-
sed -i.bak -e "s/sonar\.projectVersion=
|
|
27
|
+
sed -i.bak -e "s/\"version\":\s*\"[0-9]\+\.[0-9]\+\.[0-9]\+[^\"]*\"/\"version\": \"${version}\"/g" package.json && rm package.json.bak
|
|
28
|
+
sed -i.bak -e "s/sonar\.projectVersion= *.*/sonar.projectVersion=${version}/g" sonar-project.properties && rm sonar-project.properties.bak
|
|
29
29
|
echo $version > VERSION
|
|
30
30
|
|
|
31
31
|
npm install
|
package/sonar-project.properties
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
sonar.projectKey=rx-player
|
|
2
2
|
sonar.organization=rx-player
|
|
3
3
|
sonar.projectName=rx-player
|
|
4
|
-
sonar.projectVersion=3.
|
|
4
|
+
sonar.projectVersion=3.27.0-dev.2022032100
|
|
5
5
|
sonar.sources=./src,./demo,./tests
|
|
6
6
|
sonar.exclusions=demo/full/bundle.js,demo/standalone/lib.js,demo/bundle.js
|
|
7
7
|
sonar.host.url=https://sonarcloud.io
|
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 | ~
|
|
@@ -21,11 +21,9 @@
|
|
|
21
21
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
22
22
|
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
23
23
|
|
|
24
|
-
import PPromise from "../../utils/promise";
|
|
25
|
-
|
|
26
24
|
describe("compat - play", () => {
|
|
27
25
|
it("should call play and returns an Observable if play returns a Promise", (done) => {
|
|
28
|
-
const mockPlay = jest.fn(() =>
|
|
26
|
+
const mockPlay = jest.fn(() => Promise.resolve());
|
|
29
27
|
const fakeMediaElement = { play: mockPlay };
|
|
30
28
|
|
|
31
29
|
const play$ = require("../play").default;
|
|
@@ -48,7 +46,7 @@ describe("compat - play", () => {
|
|
|
48
46
|
it("should throw through an Observable if the `play` promise is rejected", (done) => {
|
|
49
47
|
const notAllowedError = new Error("NotAllowedError: Can't play");
|
|
50
48
|
const mockPlay = jest.fn(() => {
|
|
51
|
-
return
|
|
49
|
+
return Promise.reject(notAllowedError);
|
|
52
50
|
});
|
|
53
51
|
const fakeMediaElement = { play: mockPlay };
|
|
54
52
|
|
|
@@ -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,98 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
of as observableOf,
|
|
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 TaskCanceller, {
|
|
20
|
+
CancellationError,
|
|
21
|
+
} from "../../utils/task_canceller";
|
|
27
22
|
import { ICustomMediaKeySession } from "./custom_media_keys";
|
|
28
23
|
|
|
29
24
|
/**
|
|
30
|
-
* Close
|
|
31
|
-
*
|
|
25
|
+
* Close the given `MediaKeySession` and returns a Promise resolving when the
|
|
26
|
+
* session is closed.
|
|
27
|
+
* This promise does not reject, even if we're unable to close the
|
|
28
|
+
* `MediaKeySession`.
|
|
29
|
+
*
|
|
30
|
+
* Note that there is a lot of browser issues linked to the impossibility to
|
|
31
|
+
* either close a MediaKeySession or to know if a MediaKeySession was closed.
|
|
32
|
+
* Due to this, the returned Promise might take some time before resolving on
|
|
33
|
+
* some devices.
|
|
32
34
|
* @param {MediaKeySession|Object} session
|
|
33
|
-
* @returns {
|
|
35
|
+
* @returns {Promise.<undefined>}
|
|
34
36
|
*/
|
|
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
|
-
|
|
37
|
+
export default function closeSession(
|
|
38
|
+
session: MediaKeySession | ICustomMediaKeySession
|
|
39
|
+
): Promise<void> {
|
|
40
|
+
const timeoutCanceller = new TaskCanceller();
|
|
41
|
+
|
|
42
|
+
return Promise.race([
|
|
43
|
+
session.close()
|
|
44
|
+
.then(() => { timeoutCanceller.cancel(); }),
|
|
45
|
+
// The `closed` promise may resolve, even if `close()` result has not
|
|
46
|
+
// (seen at some point on Firefox).
|
|
47
|
+
session.closed
|
|
48
|
+
.then(() => { timeoutCanceller.cancel(); }),
|
|
49
|
+
waitTimeoutAndCheck(),
|
|
50
|
+
]);
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* If the session is not closed after 1000ms, try to communicate with the
|
|
54
|
+
* MediaKeySession and check if an error is returned.
|
|
55
|
+
* This is needed because on some browsers with poor EME implementation,
|
|
56
|
+
* knowing when a MediaKeySession is closed is actually a hard task.
|
|
57
|
+
*
|
|
58
|
+
* The returned Promise will never reject.
|
|
59
|
+
* @returns {Promise.<undefined>}
|
|
60
|
+
*/
|
|
61
|
+
async function waitTimeoutAndCheck() : Promise<void> {
|
|
62
|
+
try {
|
|
63
|
+
await cancellableSleep(1000, timeoutCanceller.signal);
|
|
64
|
+
await tryUpdatingSession();
|
|
65
|
+
} catch (err) {
|
|
66
|
+
if (err instanceof CancellationError) { // cancelled == session closed
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const message = err instanceof Error ?
|
|
70
|
+
err.message :
|
|
71
|
+
"Unknown error made it impossible to close the session";
|
|
72
|
+
log.error(`DRM: ${message}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Try to update `MediaKeySession` and check its error if it failed.
|
|
78
|
+
* If we still don't know whether it closed yet, wait a second
|
|
79
|
+
* timeout then quit.
|
|
80
|
+
*
|
|
81
|
+
* The returned Promise resolves if the `MediaKeySession` seems closed and
|
|
82
|
+
* rejects if we couldn't know or it doesn't.
|
|
83
|
+
* @returns {Promise.<undefined>}
|
|
84
|
+
*/
|
|
85
|
+
async function tryUpdatingSession() : Promise<void> {
|
|
86
|
+
try {
|
|
87
|
+
await session.update(new Uint8Array(1));
|
|
88
|
+
} catch (err) {
|
|
89
|
+
if (timeoutCanceller.isUsed) { // Reminder: cancelled == session closed
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// The caught error can tell if session is closed
|
|
94
|
+
// (Chrome may throw this error)
|
|
95
|
+
// I know... Checking the error message is not the best practice ever.
|
|
96
|
+
if (err instanceof Error &&
|
|
97
|
+
err.message === "The session is already closed."
|
|
98
|
+
) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
await cancellableSleep(1000, timeoutCanceller.signal);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (timeoutCanceller.isUsed) { // Reminder: cancelled == session closed
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
throw new Error("Compat: Couldn't know if session is closed");
|
|
110
|
+
}
|
|
78
111
|
}
|
|
@@ -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 PPromise from "../../utils/promise";
|
|
17
16
|
import { ICustomMediaKeys } from "./custom_media_keys";
|
|
18
17
|
|
|
19
18
|
// MediaKeySystemAccess implementation
|
|
@@ -56,7 +55,7 @@ export default class CustomMediaKeySystemAccess implements ICustomMediaKeySystem
|
|
|
56
55
|
* MediaKeySystemAccess. Never rejects.
|
|
57
56
|
*/
|
|
58
57
|
public createMediaKeys() : Promise<ICustomMediaKeys|MediaKeys> {
|
|
59
|
-
return new
|
|
58
|
+
return new Promise((res) => res(this._mediaKeys));
|
|
60
59
|
}
|
|
61
60
|
|
|
62
61
|
/**
|
|
@@ -20,7 +20,6 @@ import {
|
|
|
20
20
|
takeUntil,
|
|
21
21
|
} from "rxjs";
|
|
22
22
|
import EventEmitter from "../../../utils/event_emitter";
|
|
23
|
-
import PPromise from "../../../utils/promise";
|
|
24
23
|
import { ICompatHTMLMediaElement } from "../../browser_compatibility_types";
|
|
25
24
|
import * as events from "../../event_listeners";
|
|
26
25
|
import {
|
|
@@ -52,11 +51,11 @@ class IE11MediaKeySession
|
|
|
52
51
|
this.keyStatuses = new Map();
|
|
53
52
|
this._mk = mk;
|
|
54
53
|
this._closeSession$ = new Subject();
|
|
55
|
-
this.closed = new
|
|
54
|
+
this.closed = new Promise((resolve) => {
|
|
56
55
|
this._closeSession$.subscribe(resolve);
|
|
57
56
|
});
|
|
58
57
|
this.update = (license: Uint8Array) => {
|
|
59
|
-
return new
|
|
58
|
+
return new Promise((resolve, reject) => {
|
|
60
59
|
if (this._ss === undefined) {
|
|
61
60
|
return reject("MediaKeySession not set.");
|
|
62
61
|
}
|
|
@@ -74,7 +73,7 @@ class IE11MediaKeySession
|
|
|
74
73
|
};
|
|
75
74
|
}
|
|
76
75
|
generateRequest(_initDataType: string, initData: BufferSource): Promise<void> {
|
|
77
|
-
return new
|
|
76
|
+
return new Promise((resolve) => {
|
|
78
77
|
const initDataU8 =
|
|
79
78
|
initData instanceof Uint8Array ? initData :
|
|
80
79
|
initData instanceof ArrayBuffer ? new Uint8Array(initData) :
|
|
@@ -89,7 +88,7 @@ class IE11MediaKeySession
|
|
|
89
88
|
});
|
|
90
89
|
}
|
|
91
90
|
close(): Promise<void> {
|
|
92
|
-
return new
|
|
91
|
+
return new Promise((resolve) => {
|
|
93
92
|
if (this._ss != null) {
|
|
94
93
|
this._ss.close();
|
|
95
94
|
this._ss = undefined;
|
|
@@ -100,10 +99,10 @@ class IE11MediaKeySession
|
|
|
100
99
|
});
|
|
101
100
|
}
|
|
102
101
|
load(): Promise<boolean> {
|
|
103
|
-
return
|
|
102
|
+
return Promise.resolve(false);
|
|
104
103
|
}
|
|
105
104
|
remove(): Promise<void> {
|
|
106
|
-
return
|
|
105
|
+
return Promise.resolve();
|
|
107
106
|
}
|
|
108
107
|
get sessionId(): string {
|
|
109
108
|
return this._ss?.sessionId ?? "";
|