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
|
@@ -35,7 +35,6 @@ import createSegmentFetcher, {
|
|
|
35
35
|
import log from "../../../log";
|
|
36
36
|
import { ISegment } from "../../../manifest";
|
|
37
37
|
import objectAssign from "../../../utils/object_assign";
|
|
38
|
-
import PPromise from "../../../utils/promise";
|
|
39
38
|
import { freeRequest } from "./create_request";
|
|
40
39
|
import getCompleteSegmentId from "./get_complete_segment_id";
|
|
41
40
|
import getContentInfos from "./get_content_infos";
|
|
@@ -110,13 +109,13 @@ export default class VideoThumbnailLoader {
|
|
|
110
109
|
|
|
111
110
|
const manifest = this._player.getManifest();
|
|
112
111
|
if (manifest === null) {
|
|
113
|
-
return
|
|
112
|
+
return Promise.reject(
|
|
114
113
|
new VideoThumbnailLoaderError("NO_MANIFEST",
|
|
115
114
|
"No manifest available."));
|
|
116
115
|
}
|
|
117
116
|
const contentInfos = getContentInfos(time, manifest);
|
|
118
117
|
if (contentInfos === null) {
|
|
119
|
-
return
|
|
118
|
+
return Promise.reject(
|
|
120
119
|
new VideoThumbnailLoaderError("NO_TRACK",
|
|
121
120
|
"Couldn't find track for this time."));
|
|
122
121
|
}
|
|
@@ -125,7 +124,7 @@ export default class VideoThumbnailLoader {
|
|
|
125
124
|
.representation.index.getSegments(time, MIN_NEEDED_DATA_AFTER_TIME);
|
|
126
125
|
|
|
127
126
|
if (segments.length === 0) {
|
|
128
|
-
return
|
|
127
|
+
return Promise.reject(
|
|
129
128
|
new VideoThumbnailLoaderError("NO_THUMBNAIL",
|
|
130
129
|
"Couldn't find thumbnail for the given time."));
|
|
131
130
|
}
|
|
@@ -147,7 +146,7 @@ export default class VideoThumbnailLoader {
|
|
|
147
146
|
if (segments.length === 0) {
|
|
148
147
|
this._videoElement.currentTime = time;
|
|
149
148
|
log.debug("VTL: Thumbnails already loaded.", time);
|
|
150
|
-
return
|
|
149
|
+
return Promise.resolve(time);
|
|
151
150
|
}
|
|
152
151
|
|
|
153
152
|
log.debug("VTL: Found thumbnail for time", time, segments);
|
|
@@ -193,7 +192,7 @@ export default class VideoThumbnailLoader {
|
|
|
193
192
|
"VideoThumbnailLoaderError: No " +
|
|
194
193
|
"imported loader for this transport type: " +
|
|
195
194
|
contentInfos.manifest.transport);
|
|
196
|
-
return
|
|
195
|
+
return Promise.reject(error);
|
|
197
196
|
}
|
|
198
197
|
const killTask$ = new Subject<void>();
|
|
199
198
|
const abortError$ = killTask$.pipe(
|
|
@@ -249,7 +248,8 @@ export default class VideoThumbnailLoader {
|
|
|
249
248
|
if (end === undefined) {
|
|
250
249
|
end = start + (segment.duration / segment.timescale);
|
|
251
250
|
}
|
|
252
|
-
const inventoryInfos = objectAssign({
|
|
251
|
+
const inventoryInfos = objectAssign({ chunkSize: data.chunkSize,
|
|
252
|
+
segment,
|
|
253
253
|
start,
|
|
254
254
|
end }, contentInfos);
|
|
255
255
|
return pushData(inventoryInfos,
|
|
@@ -20,11 +20,8 @@
|
|
|
20
20
|
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
21
21
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
22
22
|
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
23
|
+
/* eslint-disable no-restricted-properties */
|
|
23
24
|
|
|
24
|
-
import {
|
|
25
|
-
map,
|
|
26
|
-
of as observableOf,
|
|
27
|
-
} from "rxjs";
|
|
28
25
|
import { ProberStatus } from "../../types";
|
|
29
26
|
|
|
30
27
|
|
|
@@ -81,7 +78,7 @@ describe("MediaCapabilitiesProber probers - DRMInfos", () => {
|
|
|
81
78
|
},
|
|
82
79
|
};
|
|
83
80
|
const mockRequestMediaKeySystemAccess = jest.fn(() => {
|
|
84
|
-
return
|
|
81
|
+
return Promise.resolve({
|
|
85
82
|
getConfiguration: () => ({}),
|
|
86
83
|
});
|
|
87
84
|
});
|
|
@@ -114,11 +111,7 @@ describe("MediaCapabilitiesProber probers - DRMInfos", () => {
|
|
|
114
111
|
};
|
|
115
112
|
const mockRequestMediaKeySystemAccess = jest.fn(
|
|
116
113
|
() => {
|
|
117
|
-
return
|
|
118
|
-
map(() => {
|
|
119
|
-
throw new Error();
|
|
120
|
-
})
|
|
121
|
-
);
|
|
114
|
+
return Promise.reject(new Error());
|
|
122
115
|
}
|
|
123
116
|
);
|
|
124
117
|
jest.mock("../../../../../compat", () => ({
|
|
@@ -20,9 +20,8 @@
|
|
|
20
20
|
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
21
21
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
22
22
|
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
23
|
+
/* eslint-disable no-restricted-properties */
|
|
23
24
|
|
|
24
|
-
import { of as observableOf } from "rxjs";
|
|
25
|
-
import PPromise from "../../../../../utils/promise";
|
|
26
25
|
import { ProberStatus } from "../../types";
|
|
27
26
|
|
|
28
27
|
|
|
@@ -57,10 +56,10 @@ describe("MediaCapabilitiesProber probers - HDCPPolicy", () => {
|
|
|
57
56
|
|
|
58
57
|
it("should resolve with `Unknown` if no getStatusForPolicy API", (done) => {
|
|
59
58
|
const mockCreateMediaKeys = jest.fn(() => {
|
|
60
|
-
return
|
|
59
|
+
return Promise.resolve({});
|
|
61
60
|
});
|
|
62
61
|
const mockRequestMediaKeySystemAcces = jest.fn(() => {
|
|
63
|
-
return
|
|
62
|
+
return Promise.resolve({
|
|
64
63
|
createMediaKeys: mockCreateMediaKeys,
|
|
65
64
|
});
|
|
66
65
|
});
|
|
@@ -85,12 +84,12 @@ describe("MediaCapabilitiesProber probers - HDCPPolicy", () => {
|
|
|
85
84
|
|
|
86
85
|
it("should resolve with `Supported` if policy is supported", (done) => {
|
|
87
86
|
const mockCreateMediaKeys = jest.fn(() => {
|
|
88
|
-
return
|
|
89
|
-
getStatusForPolicy: () =>
|
|
87
|
+
return Promise.resolve({
|
|
88
|
+
getStatusForPolicy: () => Promise.resolve("usable"),
|
|
90
89
|
});
|
|
91
90
|
});
|
|
92
91
|
const mockRequestMediaKeySystemAcces = jest.fn(() => {
|
|
93
|
-
return
|
|
92
|
+
return Promise.resolve({
|
|
94
93
|
createMediaKeys: mockCreateMediaKeys,
|
|
95
94
|
});
|
|
96
95
|
});
|
|
@@ -115,12 +114,12 @@ describe("MediaCapabilitiesProber probers - HDCPPolicy", () => {
|
|
|
115
114
|
|
|
116
115
|
it("should resolve with `NotSupported` if policy is not supported", (done) => {
|
|
117
116
|
const mockCreateMediaKeys = jest.fn(() => {
|
|
118
|
-
return
|
|
119
|
-
getStatusForPolicy: () =>
|
|
117
|
+
return Promise.resolve({
|
|
118
|
+
getStatusForPolicy: () => Promise.resolve("not-usable"),
|
|
120
119
|
});
|
|
121
120
|
});
|
|
122
121
|
const mockRequestMediaKeySystemAcces = jest.fn(() => {
|
|
123
|
-
return
|
|
122
|
+
return Promise.resolve({
|
|
124
123
|
createMediaKeys: mockCreateMediaKeys,
|
|
125
124
|
});
|
|
126
125
|
});
|
package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/decodingInfos.test.ts
CHANGED
|
@@ -23,8 +23,6 @@
|
|
|
23
23
|
/* eslint-disable @typescript-eslint/strict-boolean-expressions */
|
|
24
24
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
25
25
|
|
|
26
|
-
import PPromise from "../../../../../utils/promise";
|
|
27
|
-
|
|
28
26
|
import probeDecodingInfos from "../../probers/decodingInfo";
|
|
29
27
|
import {
|
|
30
28
|
IMediaConfiguration,
|
|
@@ -42,9 +40,9 @@ const origMediaCapabilities = (navigator as any).mediaCapabilities;
|
|
|
42
40
|
function stubDecodingInfo(isSupported: boolean, mustReject?: boolean) {
|
|
43
41
|
const decodingInfoStub = jest.fn(() => {
|
|
44
42
|
if (mustReject === true) {
|
|
45
|
-
return
|
|
43
|
+
return Promise.reject();
|
|
46
44
|
} else {
|
|
47
|
-
return
|
|
45
|
+
return Promise.resolve({
|
|
48
46
|
supported: isSupported,
|
|
49
47
|
});
|
|
50
48
|
}
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import arrayFind from "../../../../utils/array_find";
|
|
18
|
-
import PPromise from "../../../../utils/promise";
|
|
19
18
|
import log from "../log";
|
|
20
19
|
import {
|
|
21
20
|
ICompatibleKeySystem,
|
|
@@ -79,7 +78,7 @@ const mediaCapabilitiesProber = {
|
|
|
79
78
|
*/
|
|
80
79
|
getStatusForHDCP(hdcp: string) : Promise<string> {
|
|
81
80
|
if (hdcp === undefined || hdcp.length === 0) {
|
|
82
|
-
return
|
|
81
|
+
return Promise.reject("MediaCapabilitiesProbers >>> Bad Arguments: " +
|
|
83
82
|
"No HDCP Policy specified.");
|
|
84
83
|
}
|
|
85
84
|
const config = {
|
|
@@ -152,7 +151,7 @@ const mediaCapabilitiesProber = {
|
|
|
152
151
|
})
|
|
153
152
|
);
|
|
154
153
|
});
|
|
155
|
-
return
|
|
154
|
+
return Promise.all(promises)
|
|
156
155
|
.then((configs) => {
|
|
157
156
|
// TODO I added those lines to work-around a type issue but does it
|
|
158
157
|
// really correspond to the original intent? I find it hard to
|
|
@@ -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 getProbedConfiguration, { ICapabilitiesTypes } from "../capabilities";
|
|
18
17
|
import log from "../log";
|
|
19
18
|
import probers, {
|
|
@@ -102,7 +101,7 @@ function probeMediaConfiguration(
|
|
|
102
101
|
}
|
|
103
102
|
}
|
|
104
103
|
|
|
105
|
-
return
|
|
104
|
+
return Promise.all(promises).then(() => {
|
|
106
105
|
if (globalStatus === undefined) {
|
|
107
106
|
globalStatus = ProberStatus.Unknown;
|
|
108
107
|
}
|
|
@@ -14,9 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import { lastValueFrom } from "rxjs";
|
|
18
17
|
import { requestMediaKeySystemAccess } from "../../../../compat";
|
|
19
|
-
import PPromise from "../../../../utils/promise";
|
|
20
18
|
import log from "../log";
|
|
21
19
|
import {
|
|
22
20
|
ICompatibleKeySystem,
|
|
@@ -38,7 +36,7 @@ export default function probeDRMInfos(
|
|
|
38
36
|
): Promise<[ProberStatus, ICompatibleKeySystem?]> {
|
|
39
37
|
const keySystem = mediaConfig.keySystem;
|
|
40
38
|
if (keySystem == null || keySystem.type == null) {
|
|
41
|
-
return
|
|
39
|
+
return Promise.reject("MediaCapabilitiesProber >>> API_CALL: " +
|
|
42
40
|
"Missing a type argument to request a media key system access.");
|
|
43
41
|
}
|
|
44
42
|
|
|
@@ -52,10 +50,10 @@ export default function probeDRMInfos(
|
|
|
52
50
|
"Your browser has no API to request a media key system access.");
|
|
53
51
|
// In that case, the API lack means that no EME workflow may be started.
|
|
54
52
|
// So, the DRM configuration is not supported.
|
|
55
|
-
return
|
|
53
|
+
return Promise.resolve([ProberStatus.NotSupported, result]);
|
|
56
54
|
}
|
|
57
55
|
|
|
58
|
-
return
|
|
56
|
+
return requestMediaKeySystemAccess(type, [configuration])
|
|
59
57
|
.then((keySystemAccess) => {
|
|
60
58
|
result.compatibleConfiguration = keySystemAccess.getConfiguration();
|
|
61
59
|
const status : [ProberStatus, ICompatibleKeySystem?] =
|
|
@@ -14,9 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import { lastValueFrom } from "rxjs";
|
|
18
17
|
import { requestMediaKeySystemAccess } from "../../../../compat";
|
|
19
|
-
import PPromise from "../../../../utils/promise";
|
|
20
18
|
import {
|
|
21
19
|
IMediaConfiguration,
|
|
22
20
|
ProberStatus,
|
|
@@ -39,11 +37,11 @@ export default function probeHDCPPolicy(
|
|
|
39
37
|
config: IMediaConfiguration
|
|
40
38
|
): Promise<[ProberStatus]> {
|
|
41
39
|
if (requestMediaKeySystemAccess == null) {
|
|
42
|
-
return
|
|
40
|
+
return Promise.reject("MediaCapabilitiesProber >>> API_CALL: " +
|
|
43
41
|
"API not available");
|
|
44
42
|
}
|
|
45
43
|
if (config.hdcp == null) {
|
|
46
|
-
return
|
|
44
|
+
return Promise.reject("MediaCapabilitiesProber >>> API_CALL: " +
|
|
47
45
|
"Missing policy argument for calling getStatusForPolicy.");
|
|
48
46
|
}
|
|
49
47
|
|
|
@@ -61,7 +59,7 @@ export default function probeHDCPPolicy(
|
|
|
61
59
|
}],
|
|
62
60
|
};
|
|
63
61
|
|
|
64
|
-
return
|
|
62
|
+
return requestMediaKeySystemAccess(keySystem, [drmConfig])
|
|
65
63
|
.then((mediaKeysSystemAccess) => {
|
|
66
64
|
return mediaKeysSystemAccess.createMediaKeys().then((mediaKeys) => {
|
|
67
65
|
if (!("getStatusForPolicy" in mediaKeys)) {
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import PPromise from "../../../../utils/promise";
|
|
18
17
|
import {
|
|
19
18
|
IMediaConfiguration,
|
|
20
19
|
ProberStatus,
|
|
@@ -31,7 +30,7 @@ export interface IDecodingInfos {
|
|
|
31
30
|
* @returns {Promise}
|
|
32
31
|
*/
|
|
33
32
|
function isMediaCapabilitiesAPIAvailable(): Promise<void> {
|
|
34
|
-
return new
|
|
33
|
+
return new Promise((resolve) => {
|
|
35
34
|
if (!("mediaCapabilities" in navigator)) {
|
|
36
35
|
throw new Error("MediaCapabilitiesProber >>> API_CALL: " +
|
|
37
36
|
"MediaCapabilities API not available");
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { MediaSource_ } from "../../../../compat";
|
|
18
|
-
import PPromise from "../../../../utils/promise";
|
|
19
18
|
import {
|
|
20
19
|
IMediaConfiguration,
|
|
21
20
|
ProberStatus,
|
|
@@ -28,7 +27,7 @@ import {
|
|
|
28
27
|
export default function probeContentType(
|
|
29
28
|
config: IMediaConfiguration
|
|
30
29
|
): Promise<[ProberStatus]> {
|
|
31
|
-
return new
|
|
30
|
+
return new Promise((resolve) => {
|
|
32
31
|
if (MediaSource_ == null) {
|
|
33
32
|
throw new Error("MediaCapabilitiesProber >>> API_CALL: " +
|
|
34
33
|
"MediaSource API not available");
|
package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.ts
CHANGED
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import PPromise from "../../../../../utils/promise";
|
|
18
17
|
import {
|
|
19
18
|
IMediaConfiguration,
|
|
20
19
|
ProberStatus,
|
|
@@ -33,7 +32,7 @@ export type ISupportWithFeatures = ""|"Maybe"|"Not Supported"|"Probably";
|
|
|
33
32
|
* @returns {Promise}
|
|
34
33
|
*/
|
|
35
34
|
function isTypeSupportedWithFeaturesAPIAvailable(): Promise<void> {
|
|
36
|
-
return new
|
|
35
|
+
return new Promise((resolve) => {
|
|
37
36
|
if (!("MSMediaKeys" in window)) {
|
|
38
37
|
throw new Error("MediaCapabilitiesProber >>> API_CALL: " +
|
|
39
38
|
"MSMediaKeys API not available");
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import PPromise from "../../../../utils/promise";
|
|
18
17
|
import {
|
|
19
18
|
IMediaConfiguration,
|
|
20
19
|
ProberStatus,
|
|
@@ -27,7 +26,7 @@ import {
|
|
|
27
26
|
export default function probeMatchMedia(
|
|
28
27
|
config: IMediaConfiguration
|
|
29
28
|
): Promise<[ProberStatus]> {
|
|
30
|
-
return new
|
|
29
|
+
return new Promise((resolve) => {
|
|
31
30
|
/* eslint-disable @typescript-eslint/unbound-method */
|
|
32
31
|
if (typeof window.matchMedia !== "function") {
|
|
33
32
|
/* eslint-enable @typescript-eslint/unbound-method */
|
|
@@ -93,7 +93,7 @@ describe("Features - initializeFeaturesObject", () => {
|
|
|
93
93
|
nativeTextTracksParsers: {},
|
|
94
94
|
htmlTextTracksBuffer: null,
|
|
95
95
|
htmlTextTracksParsers: {},
|
|
96
|
-
|
|
96
|
+
ContentDecryptor: null,
|
|
97
97
|
directfile: null,
|
|
98
98
|
};
|
|
99
99
|
jest.mock("../features_object", () => ({
|
|
@@ -113,7 +113,7 @@ describe("Features - initializeFeaturesObject", () => {
|
|
|
113
113
|
js: require("../../parsers/manifest/dash/js-parser").default,
|
|
114
114
|
wasm: null,
|
|
115
115
|
},
|
|
116
|
-
|
|
116
|
+
ContentDecryptor: require("../../core/decrypt/index").default,
|
|
117
117
|
directfile: {
|
|
118
118
|
initDirectFile: require("../../core/init/initialize_directfile").default,
|
|
119
119
|
mediaElementTrackChoiceManager:
|
|
@@ -23,7 +23,7 @@ import { IFeaturesObject } from "./types";
|
|
|
23
23
|
const features : IFeaturesObject = { dashParsers: { wasm: null,
|
|
24
24
|
js: null },
|
|
25
25
|
directfile: null,
|
|
26
|
-
|
|
26
|
+
ContentDecryptor: null,
|
|
27
27
|
htmlTextTracksBuffer: null,
|
|
28
28
|
htmlTextTracksParsers: {},
|
|
29
29
|
imageBuffer: null,
|
|
@@ -27,7 +27,7 @@ import features from "./features_object";
|
|
|
27
27
|
*/
|
|
28
28
|
export default function initializeFeaturesObject() : void {
|
|
29
29
|
if (__FEATURES__.EME === __FEATURES__.IS_ENABLED as number) {
|
|
30
|
-
features.
|
|
30
|
+
features.ContentDecryptor = require("../core/decrypt/index.ts").default;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
if (__FEATURES__.BIF_PARSER === __FEATURES__.IS_ENABLED as number) {
|
|
@@ -17,20 +17,20 @@
|
|
|
17
17
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
18
18
|
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
19
19
|
|
|
20
|
-
import
|
|
20
|
+
import ContentDecryptor from "../../../core/decrypt";
|
|
21
21
|
import addEMEFeature from "../eme";
|
|
22
22
|
|
|
23
|
-
jest.mock("../../../core/
|
|
23
|
+
jest.mock("../../../core/decrypt", () => ({
|
|
24
24
|
__esModule: true as const,
|
|
25
25
|
default: jest.fn(),
|
|
26
26
|
}));
|
|
27
27
|
|
|
28
28
|
describe("Features list - EME", () => {
|
|
29
|
-
it("should add
|
|
29
|
+
it("should add the ContentDecryptor in the current features", () => {
|
|
30
30
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
31
31
|
const featureObject : any = {};
|
|
32
32
|
addEMEFeature(featureObject);
|
|
33
|
-
expect(featureObject).toEqual({
|
|
34
|
-
expect(featureObject.
|
|
33
|
+
expect(featureObject).toEqual({ ContentDecryptor });
|
|
34
|
+
expect(featureObject.ContentDecryptor).toBe(ContentDecryptor);
|
|
35
35
|
});
|
|
36
36
|
});
|
package/src/features/list/eme.ts
CHANGED
|
@@ -14,16 +14,16 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import
|
|
17
|
+
import ContentDecryptor from "../../core/decrypt";
|
|
18
18
|
import { IFeaturesObject } from "../types";
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* Add ability to play encrypted contents
|
|
22
22
|
* @param {Object} features
|
|
23
23
|
*/
|
|
24
|
-
function
|
|
25
|
-
features.
|
|
24
|
+
function addEMEFeature(features : IFeaturesObject) : void {
|
|
25
|
+
features.ContentDecryptor = ContentDecryptor;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
export {
|
|
29
|
-
export default
|
|
28
|
+
export { addEMEFeature as EME };
|
|
29
|
+
export default addEMEFeature;
|
package/src/features/types.ts
CHANGED
|
@@ -17,11 +17,7 @@
|
|
|
17
17
|
import { Observable } from "rxjs";
|
|
18
18
|
// eslint-disable-next-line max-len
|
|
19
19
|
import MediaElementTrackChoiceManager from "../core/api/media_element_track_choice_manager";
|
|
20
|
-
import
|
|
21
|
-
IContentProtection,
|
|
22
|
-
IEMEManagerEvent,
|
|
23
|
-
IKeySystemOption,
|
|
24
|
-
} from "../core/eme";
|
|
20
|
+
import type ContentDecryptor from "../core/decrypt";
|
|
25
21
|
import {
|
|
26
22
|
IDirectfileEvent,
|
|
27
23
|
IDirectFileOptions,
|
|
@@ -41,10 +37,7 @@ import { ITransportFunction } from "../transports";
|
|
|
41
37
|
export type IDirectFileInit = (args : IDirectFileOptions) =>
|
|
42
38
|
Observable<IDirectfileEvent>;
|
|
43
39
|
|
|
44
|
-
export type
|
|
45
|
-
keySystems: IKeySystemOption[],
|
|
46
|
-
contentProtections$ : Observable<IContentProtection>) =>
|
|
47
|
-
Observable<IEMEManagerEvent>;
|
|
40
|
+
export type IContentDecryptorClass = typeof ContentDecryptor;
|
|
48
41
|
|
|
49
42
|
export type IHTMLTextTracksBuffer =
|
|
50
43
|
new(mediaElement : HTMLMediaElement,
|
|
@@ -89,7 +82,7 @@ export interface IFeaturesObject {
|
|
|
89
82
|
directfile : { initDirectFile: IDirectFileInit;
|
|
90
83
|
mediaElementTrackChoiceManager : IMediaElementTrackChoiceManager; } |
|
|
91
84
|
null;
|
|
92
|
-
|
|
85
|
+
ContentDecryptor : IContentDecryptorClass|null;
|
|
93
86
|
htmlTextTracksBuffer : IHTMLTextTracksBuffer|null;
|
|
94
87
|
htmlTextTracksParsers : Partial<Record<string, IHTMLTextTracksParserFn>>;
|
|
95
88
|
imageBuffer : IImageBuffer|null;
|
package/src/manifest/manifest.ts
CHANGED
|
@@ -14,13 +14,11 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import { IInitializationDataInfo } from "../core/eme";
|
|
18
17
|
import {
|
|
19
18
|
ICustomError,
|
|
20
19
|
MediaError,
|
|
21
20
|
} from "../errors";
|
|
22
21
|
import { IParsedManifest } from "../parsers/manifest";
|
|
23
|
-
import areArraysOfNumbersEqual from "../utils/are_arrays_of_numbers_equal";
|
|
24
22
|
import arrayFind from "../utils/array_find";
|
|
25
23
|
import EventEmitter from "../utils/event_emitter";
|
|
26
24
|
import idGenerator from "../utils/id_generator";
|
|
@@ -502,73 +500,10 @@ export default class Manifest extends EventEmitter<IManifestEvents> {
|
|
|
502
500
|
* changes performed.
|
|
503
501
|
* @param {Object} keyUpdates
|
|
504
502
|
*/
|
|
505
|
-
public
|
|
506
|
-
|
|
507
|
-
blacklistedKeyIDs } : { whitelistedKeyIds : Uint8Array[];
|
|
508
|
-
blacklistedKeyIDs : Uint8Array[]; }
|
|
503
|
+
public updateRepresentationsDeciperability(
|
|
504
|
+
isDecipherableCb : (rep : Representation) => boolean | undefined
|
|
509
505
|
) : void {
|
|
510
|
-
const updates = updateDeciperability(this,
|
|
511
|
-
if (representation.decipherable === false ||
|
|
512
|
-
representation.contentProtections === undefined)
|
|
513
|
-
{
|
|
514
|
-
return representation.decipherable;
|
|
515
|
-
}
|
|
516
|
-
const contentKIDs = representation.contentProtections.keyIds;
|
|
517
|
-
for (let i = 0; i < contentKIDs.length; i++) {
|
|
518
|
-
const elt = contentKIDs[i];
|
|
519
|
-
for (let j = 0; j < blacklistedKeyIDs.length; j++) {
|
|
520
|
-
if (areArraysOfNumbersEqual(blacklistedKeyIDs[j], elt.keyId)) {
|
|
521
|
-
return false;
|
|
522
|
-
}
|
|
523
|
-
}
|
|
524
|
-
for (let j = 0; j < whitelistedKeyIds.length; j++) {
|
|
525
|
-
if (areArraysOfNumbersEqual(whitelistedKeyIds[j], elt.keyId)) {
|
|
526
|
-
return true;
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
}
|
|
530
|
-
return representation.decipherable;
|
|
531
|
-
});
|
|
532
|
-
|
|
533
|
-
if (updates.length > 0) {
|
|
534
|
-
this.trigger("decipherabilityUpdate", updates);
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
/**
|
|
539
|
-
* Look in the Manifest for Representations linked to the given content
|
|
540
|
-
* protection initialization data and mark them as being impossible to
|
|
541
|
-
* decrypt.
|
|
542
|
-
* Then trigger a "decipherabilityUpdate" event to notify everyone of the
|
|
543
|
-
* changes performed.
|
|
544
|
-
* @param {Object} initData
|
|
545
|
-
*/
|
|
546
|
-
public addUndecipherableProtectionData(initData : IInitializationDataInfo) : void {
|
|
547
|
-
const updates = updateDeciperability(this, (representation) => {
|
|
548
|
-
if (representation.decipherable === false) {
|
|
549
|
-
return false;
|
|
550
|
-
}
|
|
551
|
-
const segmentProtections = representation.contentProtections?.initData ?? [];
|
|
552
|
-
for (let i = 0; i < segmentProtections.length; i++) {
|
|
553
|
-
if (initData.type === undefined ||
|
|
554
|
-
segmentProtections[i].type === initData.type)
|
|
555
|
-
{
|
|
556
|
-
const containedInitData = initData.values.every(undecipherableVal => {
|
|
557
|
-
return segmentProtections[i].values.some(currVal => {
|
|
558
|
-
return (undecipherableVal.systemId === undefined ||
|
|
559
|
-
currVal.systemId === undecipherableVal.systemId) &&
|
|
560
|
-
areArraysOfNumbersEqual(currVal.data,
|
|
561
|
-
undecipherableVal.data);
|
|
562
|
-
});
|
|
563
|
-
});
|
|
564
|
-
if (containedInitData) {
|
|
565
|
-
return false;
|
|
566
|
-
}
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
return representation.decipherable;
|
|
570
|
-
});
|
|
571
|
-
|
|
506
|
+
const updates = updateDeciperability(this, isDecipherableCb);
|
|
572
507
|
if (updates.length > 0) {
|
|
573
508
|
this.trigger("decipherabilityUpdate", updates);
|
|
574
509
|
}
|
|
@@ -795,14 +730,9 @@ function updateDeciperability(
|
|
|
795
730
|
isDecipherable : (rep : Representation) => boolean | undefined
|
|
796
731
|
) : IDecipherabilityUpdateElement[] {
|
|
797
732
|
const updates : IDecipherabilityUpdateElement[] = [];
|
|
798
|
-
for (
|
|
799
|
-
const
|
|
800
|
-
|
|
801
|
-
for (let j = 0; j < adaptations.length; j++) {
|
|
802
|
-
const adaptation = adaptations[j];
|
|
803
|
-
const representations = adaptation.representations;
|
|
804
|
-
for (let k = 0; k < representations.length; k++) {
|
|
805
|
-
const representation = representations[k];
|
|
733
|
+
for (const period of manifest.periods) {
|
|
734
|
+
for (const adaptation of period.getAdaptations()) {
|
|
735
|
+
for (const representation of adaptation.representations) {
|
|
806
736
|
const result = isDecipherable(representation);
|
|
807
737
|
if (result !== representation.decipherable) {
|
|
808
738
|
updates.push({ manifest, period, adaptation, representation });
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { isCodecSupported } from "../compat";
|
|
18
|
-
import { IContentProtection } from "../core/eme";
|
|
19
18
|
import log from "../log";
|
|
20
19
|
import {
|
|
21
20
|
IContentProtections,
|
|
@@ -166,7 +165,7 @@ class Representation {
|
|
|
166
165
|
* @param {string} drmSystemId - The hexa-encoded DRM system ID
|
|
167
166
|
* @returns {Array.<Object>}
|
|
168
167
|
*/
|
|
169
|
-
public getEncryptionData(drmSystemId : string) :
|
|
168
|
+
public getEncryptionData(drmSystemId : string) : IRepresentationProtectionData[] {
|
|
170
169
|
const allInitData = this.getAllEncryptionData();
|
|
171
170
|
const filtered = [];
|
|
172
171
|
for (let i = 0; i < allInitData.length; i++) {
|
|
@@ -216,7 +215,7 @@ class Representation {
|
|
|
216
215
|
* after parsing this Representation's initialization segment, if one exists.
|
|
217
216
|
* @returns {Array.<Object>}
|
|
218
217
|
*/
|
|
219
|
-
public getAllEncryptionData() :
|
|
218
|
+
public getAllEncryptionData() : IRepresentationProtectionData[] {
|
|
220
219
|
if (this.contentProtections === undefined ||
|
|
221
220
|
this.contentProtections.initData.length === 0)
|
|
222
221
|
{
|
|
@@ -297,4 +296,38 @@ class Representation {
|
|
|
297
296
|
}
|
|
298
297
|
}
|
|
299
298
|
|
|
299
|
+
/** Protection data as returned by a Representation. */
|
|
300
|
+
export interface IRepresentationProtectionData {
|
|
301
|
+
/**
|
|
302
|
+
* Initialization data type.
|
|
303
|
+
* String describing the format of the initialization data sent through this
|
|
304
|
+
* event.
|
|
305
|
+
* https://www.w3.org/TR/eme-initdata-registry/
|
|
306
|
+
*/
|
|
307
|
+
type: string;
|
|
308
|
+
/**
|
|
309
|
+
* The key ids linked to those initialization data.
|
|
310
|
+
* This should be the key ids for the key concerned by the media which have
|
|
311
|
+
* the present initialization data.
|
|
312
|
+
*
|
|
313
|
+
* `undefined` when not known (different from an empty array - which would
|
|
314
|
+
* just mean that there's no key id involved).
|
|
315
|
+
*/
|
|
316
|
+
keyIds : Uint8Array[] | undefined;
|
|
317
|
+
/** Every initialization data for that type. */
|
|
318
|
+
values: Array<{
|
|
319
|
+
/**
|
|
320
|
+
* Hex encoded system id, which identifies the key system.
|
|
321
|
+
* https://dashif.org/identifiers/content_protection/
|
|
322
|
+
*/
|
|
323
|
+
systemId: string;
|
|
324
|
+
/**
|
|
325
|
+
* The initialization data itself for that type and systemId.
|
|
326
|
+
* For example, with "cenc" initialization data found in an ISOBMFF file,
|
|
327
|
+
* this will be the whole PSSH box.
|
|
328
|
+
*/
|
|
329
|
+
data: Uint8Array;
|
|
330
|
+
}>;
|
|
331
|
+
}
|
|
332
|
+
|
|
300
333
|
export default Representation;
|