rx-player 3.26.2 → 3.27.0-dev.20220317
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/perfs.yml +22 -0
- package/CHANGELOG.md +33 -1
- package/FILES.md +5 -4
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/browser_detection.d.ts +4 -2
- package/dist/_esm5.processed/compat/browser_detection.js +4 -2
- package/dist/_esm5.processed/compat/eme/close_session.d.ts +11 -5
- package/dist/_esm5.processed/compat/eme/close_session.js +144 -36
- package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
- package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +27 -24
- package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +53 -34
- package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +43 -41
- package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
- package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
- package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
- package/dist/_esm5.processed/compat/eme/load_session.js +68 -17
- package/dist/_esm5.processed/compat/event_listeners.js +2 -1
- package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
- package/dist/_esm5.processed/config.d.ts +166 -1080
- package/dist/_esm5.processed/config.js +17 -1119
- package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
- package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +28 -6
- package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +63 -12
- package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +1 -1
- package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
- package/dist/_esm5.processed/core/abr/pending_requests_store.js +3 -5
- package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +1 -1
- package/dist/_esm5.processed/core/abr/representation_estimator.js +2 -2
- package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
- package/dist/_esm5.processed/core/api/index.d.ts +2 -1
- package/dist/_esm5.processed/core/api/media_element_track_choice_manager.d.ts +6 -0
- package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +22 -4
- package/dist/_esm5.processed/core/api/option_utils.d.ts +3 -1
- package/dist/_esm5.processed/core/api/option_utils.js +19 -6
- package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
- package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
- package/dist/_esm5.processed/core/api/public_api.js +72 -33
- package/dist/_esm5.processed/core/api/track_choice_manager.d.ts +6 -6
- package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -51
- package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +30 -75
- package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
- package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +104 -0
- package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
- package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +41 -0
- package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
- package/dist/_esm5.processed/core/decrypt/content_decryptor.js +866 -0
- package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
- package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
- package/dist/_esm5.processed/core/decrypt/create_session.js +174 -0
- package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.d.ts +21 -0
- package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
- package/dist/_esm5.processed/core/decrypt/find_key_system.js +300 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
- package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
- package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
- package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
- package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
- package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
- package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
- package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
- package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +120 -242
- package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
- package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
- package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +85 -0
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
- package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
- package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
- package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
- package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
- package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
- package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
- package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
- package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +303 -0
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
- package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
- package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +4 -4
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +3 -3
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +2 -2
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +6 -2
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
- package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +1 -1
- package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
- package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +3 -3
- package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
- package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +5 -3
- package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
- package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
- package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
- package/dist/_esm5.processed/core/init/manifest_update_scheduler.d.ts +4 -4
- package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
- package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
- package/dist/_esm5.processed/core/init/stream_events_emitter/are_same_stream_events.d.ts +4 -4
- package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
- package/dist/_esm5.processed/core/init/stream_events_emitter/types.d.ts +2 -2
- package/dist/_esm5.processed/core/init/types.d.ts +2 -4
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +3 -3
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +32 -31
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +4 -4
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
- package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
- package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
- package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
- package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +1 -1
- package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +2 -1
- package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
- package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +5 -6
- package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
- package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
- package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
- package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
- package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
- package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
- package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
- package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
- package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
- package/dist/_esm5.processed/default_config.d.ts +1114 -0
- package/dist/_esm5.processed/default_config.js +1145 -0
- package/dist/_esm5.processed/errors/request_error.js +3 -1
- package/dist/_esm5.processed/experimental/index.d.ts +2 -0
- package/dist/_esm5.processed/experimental/index.js +2 -0
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.d.ts +2 -2
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +2 -4
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +1 -1
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -1
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.d.ts +3 -3
- package/dist/_esm5.processed/features/features_object.js +1 -1
- package/dist/_esm5.processed/features/initialize_features.js +1 -1
- package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
- package/dist/_esm5.processed/features/list/eme.js +5 -5
- package/dist/_esm5.processed/features/types.d.ts +3 -3
- package/dist/_esm5.processed/manifest/adaptation.d.ts +2 -2
- package/dist/_esm5.processed/manifest/adaptation.js +3 -1
- package/dist/_esm5.processed/manifest/manifest.d.ts +10 -23
- package/dist/_esm5.processed/manifest/manifest.js +10 -74
- package/dist/_esm5.processed/manifest/period.d.ts +3 -3
- package/dist/_esm5.processed/manifest/representation.d.ts +37 -5
- package/dist/_esm5.processed/manifest/representation_index/types.d.ts +18 -18
- package/dist/_esm5.processed/manifest/types.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.d.ts +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +6 -6
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +14 -14
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +17 -17
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +28 -20
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +20 -5
- package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +17 -35
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +109 -96
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +8 -8
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +18 -27
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +25 -23
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +21 -15
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +19 -19
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +15 -38
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +8 -8
- package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +30 -30
- package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +7 -7
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +8 -8
- package/dist/_esm5.processed/parsers/manifest/types.d.ts +28 -28
- package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.d.ts +3 -2
- package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +15 -5
- package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.d.ts +11 -1
- package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +31 -19
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.d.ts +2 -2
- package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.d.ts +1 -1
- package/dist/_esm5.processed/public_types.d.ts +2 -2
- package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +2 -1
- package/dist/_esm5.processed/transports/dash/image_pipelines.js +4 -1
- package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
- package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
- package/dist/_esm5.processed/transports/dash/segment_loader.js +2 -2
- package/dist/_esm5.processed/transports/dash/segment_parser.d.ts +1 -1
- package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
- package/dist/_esm5.processed/transports/dash/text_loader.d.ts +1 -1
- package/dist/_esm5.processed/transports/dash/text_loader.js +1 -1
- package/dist/_esm5.processed/transports/dash/text_parser.d.ts +1 -1
- package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
- package/dist/_esm5.processed/transports/local/segment_loader.d.ts +1 -2
- package/dist/_esm5.processed/transports/local/segment_loader.js +1 -1
- package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
- package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
- package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.d.ts +1 -1
- package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
- package/dist/_esm5.processed/transports/smooth/pipelines.js +69 -11
- package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +0 -1
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +2 -2
- package/dist/_esm5.processed/transports/types.d.ts +58 -30
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
- package/dist/_esm5.processed/transports/utils/generate_manifest_loader.d.ts +1 -1
- package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -1
- package/dist/_esm5.processed/utils/cast_to_observable.d.ts +1 -2
- package/dist/_esm5.processed/utils/cast_to_observable.js +1 -1
- package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
- package/dist/_esm5.processed/utils/deep_merge.js +53 -0
- package/dist/_esm5.processed/utils/reference.d.ts +29 -0
- package/dist/_esm5.processed/utils/reference.js +72 -24
- package/dist/_esm5.processed/utils/request/fetch.d.ts +4 -5
- package/dist/_esm5.processed/utils/request/fetch.js +8 -6
- package/dist/_esm5.processed/utils/request/xhr.d.ts +6 -6
- package/dist/_esm5.processed/utils/request/xhr.js +3 -2
- package/dist/_esm5.processed/utils/rx-from_cancellable_promise.d.ts +1 -2
- package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
- package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
- package/dist/_esm5.processed/utils/task_canceller.js +3 -3
- package/dist/rx-player.js +5242 -3190
- package/dist/rx-player.min.js +1 -1
- package/dummy +1 -0
- package/{dist/_esm5.processed/core/eme/dispose_eme.d.ts → experimental/index.d.ts} +1 -4
- package/{dist/_esm5.processed/core/eme/dispose_media_keys.d.ts → experimental/index.js} +1 -6
- package/package.json +33 -36
- package/scripts/build/templates/experimental/index.d.ts +16 -0
- package/scripts/build/templates/experimental/index.js +16 -0
- package/scripts/doc-generator/generate_header_html.js +6 -7
- package/scripts/doc-generator/generate_page_html.js +3 -4
- package/scripts/doc-generator/generate_page_list_html.js +4 -5
- package/scripts/doc-generator/generate_sidebar_html.js +4 -7
- package/scripts/doc-generator/utils.js +0 -11
- package/scripts/generate_demo_list.js +3 -3
- package/scripts/generate_documentation_list.js +3 -3
- package/scripts/launch_static_server.js +127 -67
- package/scripts/run_standalone_demo.js +1 -0
- package/scripts/start_demo_web_server.js +1 -0
- package/sonar-project.properties +1 -1
- package/src/README.md +6 -6
- package/src/compat/__tests__/fullscreen.test.ts +7 -7
- package/src/compat/__tests__/is_vtt_cue.test.ts +1 -1
- package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
- package/src/compat/browser_detection.ts +4 -2
- package/src/compat/eme/close_session.ts +90 -56
- package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
- package/src/compat/eme/custom_media_keys/index.ts +28 -41
- package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +63 -46
- package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +51 -49
- package/src/compat/eme/generate_key_request.ts +25 -33
- package/src/compat/eme/load_session.ts +29 -31
- package/src/compat/event_listeners.ts +2 -1
- package/src/compat/should_favour_custom_safari_EME.ts +5 -2
- package/src/config.ts +17 -1210
- package/src/core/README.md +1 -1
- package/src/core/abr/__tests__/{get_estimate_from_buffer_levels.test.ts → buffer_based_chooser.test.ts} +94 -123
- package/src/core/abr/bandwidth_estimator.ts +4 -4
- package/src/core/abr/buffer_based_chooser.ts +85 -20
- package/src/core/abr/network_analyzer.ts +6 -7
- package/src/core/abr/pending_requests_store.ts +3 -5
- package/src/core/abr/representation_estimator.ts +6 -3
- package/src/core/api/__tests__/get_player_state.test.ts +3 -3
- package/src/core/api/__tests__/option_utils.test.ts +17 -17
- package/src/core/api/get_player_state.ts +1 -1
- package/src/core/api/index.ts +3 -0
- package/src/core/api/media_element_track_choice_manager.ts +22 -3
- package/src/core/api/option_utils.ts +37 -20
- package/src/core/api/playback_observer.ts +12 -8
- package/src/core/api/public_api.ts +152 -112
- package/src/core/api/track_choice_manager.ts +10 -9
- package/src/core/decrypt/README.md +22 -0
- package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
- package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
- package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
- package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
- package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
- package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +36 -103
- package/src/core/{eme → decrypt}/attach_media_keys.ts +49 -56
- package/src/core/decrypt/clear_on_stop.ts +48 -0
- package/src/core/decrypt/content_decryptor.ts +1158 -0
- package/src/core/decrypt/create_or_load_session.ts +130 -0
- package/src/core/decrypt/create_session.ts +175 -0
- package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
- package/src/core/{eme → decrypt}/find_key_system.ts +126 -134
- package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
- package/src/core/decrypt/get_media_keys.ts +145 -0
- package/src/core/{eme → decrypt}/index.ts +11 -8
- package/src/core/decrypt/init_media_keys.ts +51 -0
- package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
- package/src/core/decrypt/set_server_certificate.ts +104 -0
- package/src/core/{eme → decrypt}/types.ts +129 -259
- package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
- package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
- package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
- package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
- package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
- package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +20 -20
- package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
- package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
- package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
- package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
- package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
- package/src/core/decrypt/utils/key_session_record.ts +175 -0
- package/src/core/decrypt/utils/loaded_sessions_store.ts +318 -0
- package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
- package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
- package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
- package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
- package/src/core/fetchers/manifest/manifest_fetcher.ts +9 -9
- package/src/core/fetchers/segment/segment_fetcher.ts +10 -7
- package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
- package/src/core/fetchers/utils/try_urls_with_backoff.ts +1 -1
- package/src/core/init/.initialize_media_source.ts.un~ +0 -0
- package/src/core/init/get_initial_time.ts +2 -1
- package/src/core/init/initialize_directfile.ts +19 -22
- package/src/core/init/initialize_media_source.ts +43 -106
- package/src/core/init/link_drm_and_content.ts +176 -0
- package/src/core/init/manifest_update_scheduler.ts +12 -10
- package/src/core/init/stall_avoider.ts +6 -5
- package/src/core/init/stream_events_emitter/are_same_stream_events.ts +4 -4
- package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
- package/src/core/init/stream_events_emitter/types.ts +2 -2
- package/src/core/init/types.ts +1 -39
- package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
- package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +6 -7
- package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +32 -31
- package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
- package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
- package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
- package/src/core/stream/events_generators.ts +9 -4
- package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
- package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
- package/src/core/stream/period/get_adaptation_switch_strategy.ts +1 -1
- package/src/core/stream/period/period_stream.ts +5 -2
- package/src/core/stream/representation/force_garbage_collection.ts +5 -7
- package/src/core/stream/representation/get_buffer_status.ts +28 -16
- package/src/core/stream/representation/get_needed_segments.ts +124 -28
- package/src/core/stream/representation/get_segment_priority.ts +1 -2
- package/src/core/stream/representation/push_media_segment.ts +3 -2
- package/src/core/stream/representation/representation_stream.ts +30 -7
- package/src/core/stream/types.ts +1 -1
- package/src/default_config.ts +1241 -0
- package/src/errors/request_error.ts +4 -1
- package/src/experimental/index.ts +5 -0
- package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
- package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +5 -7
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +4 -4
- package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +1 -1
- package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +3 -3
- package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +1 -2
- package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +1 -2
- package/src/experimental/tools/mediaCapabilitiesProber/types.ts +3 -3
- package/src/features/__tests__/initialize_features.test.ts +2 -2
- package/src/features/features_object.ts +1 -1
- package/src/features/initialize_features.ts +1 -1
- package/src/features/list/__tests__/eme.test.ts +5 -5
- package/src/features/list/eme.ts +5 -5
- package/src/features/types.ts +3 -10
- package/src/manifest/adaptation.ts +6 -4
- package/src/manifest/manifest.ts +16 -86
- package/src/manifest/period.ts +3 -3
- package/src/manifest/representation.ts +38 -5
- package/src/manifest/representation_index/types.ts +18 -18
- package/src/manifest/types.ts +3 -3
- package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +1 -0
- package/src/parsers/manifest/dash/common/get_hdr_information.ts +1 -1
- package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +3 -3
- package/src/parsers/manifest/dash/common/indexes/base.ts +6 -6
- package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +4 -2
- package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +2 -2
- package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
- package/src/parsers/manifest/dash/common/indexes/list.ts +14 -14
- package/src/parsers/manifest/dash/common/indexes/template.ts +18 -18
- package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +1 -1
- package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +51 -23
- package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +2 -2
- package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +1 -1
- package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +167 -134
- package/src/parsers/manifest/dash/common/parse_mpd.ts +9 -10
- package/src/parsers/manifest/dash/common/parse_periods.ts +80 -79
- package/src/parsers/manifest/dash/common/parse_representation_index.ts +83 -75
- package/src/parsers/manifest/dash/common/parse_representations.ts +44 -63
- package/src/parsers/manifest/dash/node_parser_types.ts +30 -30
- package/src/parsers/manifest/dash/parsers_types.ts +3 -3
- package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +1 -1
- package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +4 -4
- package/src/parsers/manifest/smooth/create_parser.ts +24 -21
- package/src/parsers/manifest/smooth/representation_index.ts +14 -14
- package/src/parsers/manifest/types.ts +28 -28
- package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +31 -33
- package/src/parsers/manifest/utils/clear_timeline_from_position.ts +15 -6
- package/src/parsers/manifest/utils/index_helpers.ts +2 -2
- package/src/parsers/manifest/utils/update_segment_timeline.ts +32 -21
- package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
- package/src/parsers/texttracks/webvtt/html/to_html.ts +2 -2
- package/src/parsers/texttracks/webvtt/parse_cue_block.ts +1 -1
- package/src/public_types.ts +5 -1
- package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +2 -2
- package/src/transports/dash/image_pipelines.ts +4 -1
- package/src/transports/dash/init_segment_loader.ts +1 -1
- package/src/transports/dash/manifest_parser.ts +1 -1
- package/src/transports/dash/segment_loader.ts +7 -7
- package/src/transports/dash/segment_parser.ts +8 -1
- package/src/transports/dash/text_loader.ts +2 -2
- package/src/transports/dash/text_parser.ts +11 -1
- package/src/transports/local/segment_loader.ts +4 -4
- package/src/transports/local/segment_parser.ts +4 -0
- package/src/transports/local/text_parser.ts +8 -0
- package/src/transports/metaplaylist/manifest_loader.ts +1 -1
- package/src/transports/metaplaylist/pipelines.ts +1 -1
- package/src/transports/smooth/pipelines.ts +29 -16
- package/src/transports/smooth/segment_loader.ts +8 -8
- package/src/transports/types.ts +59 -30
- package/src/transports/utils/call_custom_manifest_loader.ts +6 -6
- package/src/transports/utils/generate_manifest_loader.ts +1 -1
- package/src/utils/__tests__/deep_merge.test.ts +48 -0
- package/src/utils/__tests__/flat_map.test.ts +12 -7
- package/src/utils/cancellable_sleep.ts +1 -1
- package/src/utils/cast_to_observable.ts +1 -2
- package/src/utils/deep_merge.ts +46 -0
- package/src/utils/reference.ts +116 -23
- package/src/utils/request/fetch.ts +17 -15
- package/src/utils/request/xhr.ts +11 -8
- package/src/utils/rx-from_cancellable_promise.ts +8 -4
- package/src/utils/task_canceller.ts +6 -4
- package/tsconfig.json +1 -2
- package/tsconfig.modules.json +1 -2
- package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +0 -29
- package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +0 -67
- package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
- package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
- package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
- package/dist/_esm5.processed/core/eme/create_session.js +0 -126
- package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
- package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
- package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
- package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
- package/dist/_esm5.processed/core/eme/find_key_system.js +0 -243
- package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
- package/dist/_esm5.processed/core/eme/get_session.js +0 -68
- package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
- package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
- package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
- package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
- package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
- package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
- package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
- package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
- package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
- package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
- package/src/core/abr/get_estimate_from_buffer_levels.ts +0 -85
- package/src/core/eme/README.md +0 -26
- package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
- package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
- package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
- package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
- package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
- package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
- package/src/core/eme/clear_eme_session.ts +0 -62
- package/src/core/eme/create_session.ts +0 -187
- package/src/core/eme/dispose_eme.ts +0 -25
- package/src/core/eme/dispose_media_keys.ts +0 -46
- package/src/core/eme/eme_manager.ts +0 -387
- package/src/core/eme/get_media_keys.ts +0 -141
- package/src/core/eme/get_session.ts +0 -135
- package/src/core/eme/init_media_keys.ts +0 -106
- package/src/core/eme/set_server_certificate.ts +0 -115
- package/src/core/eme/utils/close_session.ts +0 -113
- package/src/core/eme/utils/init_data_store.ts +0 -234
- package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
- package/src/core/init/create_eme_manager.ts +0 -95
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import PPromise from "pinkie";
|
|
18
17
|
import config from "../../config";
|
|
19
18
|
import {
|
|
20
19
|
NetworkErrorTypes,
|
|
@@ -61,14 +60,14 @@ export interface IFetchedDataObject {
|
|
|
61
60
|
* Value of the "Content-Length" header, which should (yet also might not be)
|
|
62
61
|
* the size of the complete data that will be fetched.
|
|
63
62
|
*/
|
|
64
|
-
totalSize
|
|
63
|
+
totalSize : number | undefined;
|
|
65
64
|
/**
|
|
66
65
|
* Current available chunk, which might only be a sub-part of the whole
|
|
67
66
|
* data.
|
|
68
67
|
* To retrieve the whole data, all `chunk` received from `fetchRequest` can be
|
|
69
68
|
* concatenated.
|
|
70
69
|
*/
|
|
71
|
-
chunk: ArrayBuffer;
|
|
70
|
+
chunk : ArrayBuffer;
|
|
72
71
|
}
|
|
73
72
|
|
|
74
73
|
/** Options for the `fetchRequest` utils function. */
|
|
@@ -88,16 +87,15 @@ export interface IFetchOptions {
|
|
|
88
87
|
*/
|
|
89
88
|
cancelSignal : CancellationSignal;
|
|
90
89
|
/** Optional headers for the HTTP GET request perfomed by `fetchRequest`. */
|
|
91
|
-
headers? : { [ header: string ] : string }|null;
|
|
90
|
+
headers? : { [ header: string ] : string } | undefined | null;
|
|
92
91
|
/**
|
|
93
92
|
* Optional timeout for the HTTP GET request perfomed by `fetchRequest`.
|
|
94
93
|
* This timeout is just enabled until the HTTP response from the server, even
|
|
95
94
|
* if not all data has been received yet.
|
|
96
95
|
*/
|
|
97
|
-
timeout? : number;
|
|
96
|
+
timeout? : number | undefined;
|
|
98
97
|
}
|
|
99
98
|
|
|
100
|
-
const { DEFAULT_REQUEST_TIMEOUT } = config;
|
|
101
99
|
|
|
102
100
|
type IHeadersConstructor = new() => Headers;
|
|
103
101
|
type IAbortControllerConstructor = new() => AbortController;
|
|
@@ -112,7 +110,7 @@ const _AbortController : IAbortControllerConstructor|null =
|
|
|
112
110
|
|
|
113
111
|
export default function fetchRequest(
|
|
114
112
|
options : IFetchOptions
|
|
115
|
-
) :
|
|
113
|
+
) : Promise<IFetchedStreamComplete> {
|
|
116
114
|
let headers : Headers | { [key : string ] : string } | undefined;
|
|
117
115
|
if (!isNullOrUndefined(options.headers)) {
|
|
118
116
|
if (isNullOrUndefined(_Headers)) {
|
|
@@ -148,7 +146,7 @@ export default function fetchRequest(
|
|
|
148
146
|
}
|
|
149
147
|
|
|
150
148
|
const requestTimeout = isNullOrUndefined(options.timeout) ?
|
|
151
|
-
DEFAULT_REQUEST_TIMEOUT :
|
|
149
|
+
config.getCurrent().DEFAULT_REQUEST_TIMEOUT :
|
|
152
150
|
options.timeout;
|
|
153
151
|
const timeout = window.setTimeout(() => {
|
|
154
152
|
timeouted = true;
|
|
@@ -161,12 +159,16 @@ export default function fetchRequest(
|
|
|
161
159
|
abortFetch();
|
|
162
160
|
});
|
|
163
161
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
162
|
+
const fetchOpts : RequestInit = { method: "GET" };
|
|
163
|
+
if (headers !== undefined) {
|
|
164
|
+
fetchOpts.headers = headers;
|
|
165
|
+
}
|
|
166
|
+
fetchOpts.signal = !isNullOrUndefined(abortController) ? abortController.signal :
|
|
167
|
+
null;
|
|
168
|
+
return fetch(
|
|
169
|
+
options.url,
|
|
170
|
+
fetchOpts
|
|
171
|
+
).then((response : Response) : Promise<IFetchedStreamComplete> => {
|
|
170
172
|
if (!isNullOrUndefined(timeout)) {
|
|
171
173
|
clearTimeout(timeout);
|
|
172
174
|
}
|
|
@@ -192,7 +194,7 @@ export default function fetchRequest(
|
|
|
192
194
|
|
|
193
195
|
return readBufferAndSendEvents();
|
|
194
196
|
|
|
195
|
-
async function readBufferAndSendEvents() :
|
|
197
|
+
async function readBufferAndSendEvents() : Promise<IFetchedStreamComplete> {
|
|
196
198
|
const data = await reader.read();
|
|
197
199
|
|
|
198
200
|
if (!data.done && !isNullOrUndefined(data.value)) {
|
package/src/utils/request/xhr.ts
CHANGED
|
@@ -18,12 +18,12 @@ import config from "../../config";
|
|
|
18
18
|
import { RequestError } from "../../errors";
|
|
19
19
|
import isNonEmptyString from "../is_non_empty_string";
|
|
20
20
|
import isNullOrUndefined from "../is_null_or_undefined";
|
|
21
|
+
import PPromise from "../promise";
|
|
21
22
|
import {
|
|
22
23
|
CancellationError,
|
|
23
24
|
CancellationSignal,
|
|
24
25
|
} from "../task_canceller";
|
|
25
26
|
|
|
26
|
-
const { DEFAULT_REQUEST_TIMEOUT } = config;
|
|
27
27
|
|
|
28
28
|
const DEFAULT_RESPONSE_TYPE : XMLHttpRequestResponseType = "json";
|
|
29
29
|
|
|
@@ -129,6 +129,8 @@ export default function request(
|
|
|
129
129
|
export default function request<T>(
|
|
130
130
|
options : IRequestOptions< XMLHttpRequestResponseType | null | undefined >
|
|
131
131
|
) : Promise<IRequestResponse< T, XMLHttpRequestResponseType >> {
|
|
132
|
+
|
|
133
|
+
const { DEFAULT_REQUEST_TIMEOUT } = config.getCurrent();
|
|
132
134
|
const requestOptions = {
|
|
133
135
|
url: options.url,
|
|
134
136
|
headers: options.headers,
|
|
@@ -138,7 +140,7 @@ export default function request<T>(
|
|
|
138
140
|
options.timeout,
|
|
139
141
|
};
|
|
140
142
|
|
|
141
|
-
return new
|
|
143
|
+
return new PPromise((resolve, reject) => {
|
|
142
144
|
const { onProgress, cancelSignal } = options;
|
|
143
145
|
const { url,
|
|
144
146
|
headers,
|
|
@@ -279,25 +281,26 @@ export interface IRequestOptions<ResponseType> {
|
|
|
279
281
|
url : string;
|
|
280
282
|
/** Dictionary of headers you want to set. `null` or `undefined` for no header. */
|
|
281
283
|
headers? : { [ header: string ] : string } |
|
|
282
|
-
null
|
|
284
|
+
null |
|
|
285
|
+
undefined;
|
|
283
286
|
/** Wanted format for the response */
|
|
284
|
-
responseType? : ResponseType;
|
|
287
|
+
responseType? : ResponseType | undefined;
|
|
285
288
|
/**
|
|
286
289
|
* Optional timeout, in milliseconds, after which we will cancel a request.
|
|
287
290
|
* Set to DEFAULT_REQUEST_TIMEOUT by default.
|
|
288
291
|
*/
|
|
289
|
-
timeout? : number;
|
|
292
|
+
timeout? : number | undefined;
|
|
290
293
|
/**
|
|
291
294
|
* "Cancelation token" used to be able to cancel the request.
|
|
292
295
|
* When this token is "cancelled", the request will be aborted and the Promise
|
|
293
296
|
* returned by `request` will be rejected.
|
|
294
297
|
*/
|
|
295
|
-
cancelSignal? : CancellationSignal;
|
|
298
|
+
cancelSignal? : CancellationSignal | undefined;
|
|
296
299
|
/**
|
|
297
300
|
* When defined, this callback will be called on each XHR "progress" event
|
|
298
301
|
* with data related to this request's progress.
|
|
299
302
|
*/
|
|
300
|
-
onProgress? : (info : IProgressInfo) => void;
|
|
303
|
+
onProgress? : ((info : IProgressInfo) => void) | undefined;
|
|
301
304
|
}
|
|
302
305
|
|
|
303
306
|
/** Data emitted by `request`'s Promise when the request succeeded. */
|
|
@@ -330,5 +333,5 @@ export interface IProgressInfo {
|
|
|
330
333
|
size : number;
|
|
331
334
|
sendingTime : number;
|
|
332
335
|
url : string;
|
|
333
|
-
totalSize? : number;
|
|
336
|
+
totalSize? : number | undefined;
|
|
334
337
|
}
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import PPromise from "pinkie";
|
|
18
17
|
import { Observable } from "rxjs";
|
|
19
18
|
import TaskCanceller from "./task_canceller";
|
|
20
19
|
|
|
@@ -41,27 +40,32 @@ import TaskCanceller from "./task_canceller";
|
|
|
41
40
|
*/
|
|
42
41
|
export default function fromCancellablePromise<T>(
|
|
43
42
|
canceller : TaskCanceller,
|
|
44
|
-
fn : () =>
|
|
43
|
+
fn : () => Promise<T>
|
|
45
44
|
) : Observable<T> {
|
|
46
45
|
return new Observable((obs) => {
|
|
47
46
|
let isUnsubscribedFrom = false;
|
|
47
|
+
let isComplete = false;
|
|
48
48
|
fn().then(
|
|
49
49
|
(i) => {
|
|
50
50
|
if (isUnsubscribedFrom) {
|
|
51
51
|
return;
|
|
52
52
|
}
|
|
53
|
+
isComplete = true;
|
|
53
54
|
obs.next(i);
|
|
54
55
|
obs.complete();
|
|
55
56
|
},
|
|
56
57
|
(err) => {
|
|
58
|
+
isComplete = true;
|
|
57
59
|
if (isUnsubscribedFrom) {
|
|
58
60
|
return;
|
|
59
61
|
}
|
|
60
62
|
obs.error(err);
|
|
61
63
|
});
|
|
62
64
|
return () => {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
if (!isComplete) {
|
|
66
|
+
isUnsubscribedFrom = true;
|
|
67
|
+
canceller.cancel();
|
|
68
|
+
}
|
|
65
69
|
};
|
|
66
70
|
});
|
|
67
71
|
}
|
|
@@ -153,14 +153,14 @@ export default class TaskCanceller {
|
|
|
153
153
|
* An optional CancellationError can be given in argument for when this
|
|
154
154
|
* cancellation is actually triggered as a chain reaction from a previous
|
|
155
155
|
* cancellation.
|
|
156
|
-
* @param {Error} [
|
|
156
|
+
* @param {Error} [srcError]
|
|
157
157
|
*/
|
|
158
|
-
public cancel(
|
|
158
|
+
public cancel(srcError? : CancellationError) : void {
|
|
159
159
|
if (this.isUsed) {
|
|
160
160
|
return ;
|
|
161
161
|
}
|
|
162
162
|
this.isUsed = true;
|
|
163
|
-
const cancellationError =
|
|
163
|
+
const cancellationError = srcError ?? new CancellationError();
|
|
164
164
|
this._trigger(cancellationError);
|
|
165
165
|
}
|
|
166
166
|
|
|
@@ -188,7 +188,9 @@ export class CancellationSignal {
|
|
|
188
188
|
*/
|
|
189
189
|
public isCancelled : boolean;
|
|
190
190
|
/**
|
|
191
|
-
* Error associated to the cancellation
|
|
191
|
+
* Error associated to the cancellation, only set if the `CancellationSignal`
|
|
192
|
+
* has been used (which means that the task has been cancelled).
|
|
193
|
+
*
|
|
192
194
|
* Can be used to notify to a caller that this task was aborted (for example
|
|
193
195
|
* by rejecting it through the Promise associated to that task).
|
|
194
196
|
*
|
package/tsconfig.json
CHANGED
package/tsconfig.modules.json
CHANGED
|
@@ -1,29 +0,0 @@
|
|
|
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 interface IBufferBasedChooserPlaybackObservation {
|
|
17
|
-
bufferGap: number;
|
|
18
|
-
currentBitrate?: number;
|
|
19
|
-
currentScore?: number;
|
|
20
|
-
speed: number;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* From the buffer gap, choose a representation.
|
|
24
|
-
* @param {Object} playbackObservation
|
|
25
|
-
* @param {Array.<Number>} bitrates
|
|
26
|
-
* @param {Array.<Number>} bufferLevels
|
|
27
|
-
* @returns {Object|undefined}
|
|
28
|
-
*/
|
|
29
|
-
export default function getEstimateFromBufferLevels(playbackObservation: IBufferBasedChooserPlaybackObservation, bitrates: number[], bufferLevels: number[]): number | undefined;
|
|
@@ -1,67 +0,0 @@
|
|
|
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
|
-
import log from "../../log";
|
|
17
|
-
import arrayFindIndex from "../../utils/array_find_index";
|
|
18
|
-
/**
|
|
19
|
-
* From the buffer gap, choose a representation.
|
|
20
|
-
* @param {Object} playbackObservation
|
|
21
|
-
* @param {Array.<Number>} bitrates
|
|
22
|
-
* @param {Array.<Number>} bufferLevels
|
|
23
|
-
* @returns {Object|undefined}
|
|
24
|
-
*/
|
|
25
|
-
export default function getEstimateFromBufferLevels(playbackObservation, bitrates, bufferLevels) {
|
|
26
|
-
var bufferGap = playbackObservation.bufferGap, currentBitrate = playbackObservation.currentBitrate, currentScore = playbackObservation.currentScore, speed = playbackObservation.speed;
|
|
27
|
-
if (currentBitrate == null) {
|
|
28
|
-
return bitrates[0];
|
|
29
|
-
}
|
|
30
|
-
var currentBitrateIndex = arrayFindIndex(bitrates, function (b) { return b === currentBitrate; });
|
|
31
|
-
if (currentBitrateIndex < 0 || bitrates.length !== bufferLevels.length) {
|
|
32
|
-
log.error("ABR: Current Bitrate not found in the calculated levels");
|
|
33
|
-
return bitrates[0];
|
|
34
|
-
}
|
|
35
|
-
var scaledScore;
|
|
36
|
-
if (currentScore != null) {
|
|
37
|
-
scaledScore = speed === 0 ? currentScore : (currentScore / speed);
|
|
38
|
-
}
|
|
39
|
-
if (scaledScore != null && scaledScore > 1) {
|
|
40
|
-
var currentBufferLevel_1 = bufferLevels[currentBitrateIndex];
|
|
41
|
-
var nextIndex = (function () {
|
|
42
|
-
for (var i = currentBitrateIndex + 1; i < bufferLevels.length; i++) {
|
|
43
|
-
if (bufferLevels[i] > currentBufferLevel_1) {
|
|
44
|
-
return i;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
})();
|
|
48
|
-
if (nextIndex != null) {
|
|
49
|
-
var nextBufferLevel = bufferLevels[nextIndex];
|
|
50
|
-
if (bufferGap >= nextBufferLevel) {
|
|
51
|
-
return bitrates[nextIndex];
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
if (scaledScore == null || scaledScore < 1.15) {
|
|
56
|
-
var currentBufferLevel = bufferLevels[currentBitrateIndex];
|
|
57
|
-
if (bufferGap < currentBufferLevel) {
|
|
58
|
-
for (var i = currentBitrateIndex - 1; i >= 0; i--) {
|
|
59
|
-
if (bitrates[i] < currentBitrate) {
|
|
60
|
-
return bitrates[i];
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return currentBitrate;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return currentBitrate;
|
|
67
|
-
}
|
|
@@ -1,57 +0,0 @@
|
|
|
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
|
-
import { defer as observableDefer, mergeMap, tap, of as observableOf, } from "rxjs";
|
|
17
|
-
import { setMediaKeys, } from "../../compat";
|
|
18
|
-
import log from "../../log";
|
|
19
|
-
import MediaKeysInfosStore from "./media_keys_infos_store";
|
|
20
|
-
/**
|
|
21
|
-
* Dispose the media keys on media element.
|
|
22
|
-
* @param {Object} mediaElement
|
|
23
|
-
* @returns {Observable}
|
|
24
|
-
*/
|
|
25
|
-
export function disableMediaKeys(mediaElement) {
|
|
26
|
-
return observableDefer(function () {
|
|
27
|
-
MediaKeysInfosStore.setState(mediaElement, null);
|
|
28
|
-
return setMediaKeys(mediaElement, null);
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Attach MediaKeys and its associated state to an HTMLMediaElement.
|
|
33
|
-
*
|
|
34
|
-
* /!\ Mutates heavily MediaKeysInfosStore
|
|
35
|
-
* @param {Object} mediaKeysInfos
|
|
36
|
-
* @param {HTMLMediaElement} mediaElement
|
|
37
|
-
* @returns {Observable}
|
|
38
|
-
*/
|
|
39
|
-
export default function attachMediaKeys(mediaElement, _a) {
|
|
40
|
-
var keySystemOptions = _a.keySystemOptions, loadedSessionsStore = _a.loadedSessionsStore, mediaKeySystemAccess = _a.mediaKeySystemAccess, mediaKeys = _a.mediaKeys;
|
|
41
|
-
return observableDefer(function () {
|
|
42
|
-
var previousState = MediaKeysInfosStore.getState(mediaElement);
|
|
43
|
-
var closeAllSessions$ = previousState !== null &&
|
|
44
|
-
previousState.loadedSessionsStore !== loadedSessionsStore ?
|
|
45
|
-
previousState.loadedSessionsStore.closeAllSessions() :
|
|
46
|
-
observableOf(null);
|
|
47
|
-
return closeAllSessions$.pipe(mergeMap(function () {
|
|
48
|
-
MediaKeysInfosStore.setState(mediaElement, { keySystemOptions: keySystemOptions, mediaKeySystemAccess: mediaKeySystemAccess, mediaKeys: mediaKeys, loadedSessionsStore: loadedSessionsStore });
|
|
49
|
-
if (mediaElement.mediaKeys === mediaKeys) {
|
|
50
|
-
return observableOf(null);
|
|
51
|
-
}
|
|
52
|
-
log.info("EME: Attaching MediaKeys to the media element");
|
|
53
|
-
return setMediaKeys(mediaElement, mediaKeys)
|
|
54
|
-
.pipe(tap(function () { log.info("EME: MediaKeys attached with success"); }));
|
|
55
|
-
}));
|
|
56
|
-
});
|
|
57
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
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
|
-
import { Observable } from "rxjs";
|
|
17
|
-
import { ICustomMediaKeySession } from "../../compat";
|
|
18
|
-
import { IInitializationDataInfo } from "./types";
|
|
19
|
-
import LoadedSessionsStore from "./utils/loaded_sessions_store";
|
|
20
|
-
/**
|
|
21
|
-
* Event emitted when an old MediaKeySession has been closed to respect the
|
|
22
|
-
* maximum limit of concurrent MediaKeySession active.
|
|
23
|
-
*/
|
|
24
|
-
export interface ICleanedOldSessionEvent {
|
|
25
|
-
type: "cleaned-old-session";
|
|
26
|
-
value: {
|
|
27
|
-
/** The MediaKeySession cleaned. */
|
|
28
|
-
mediaKeySession: MediaKeySession | ICustomMediaKeySession;
|
|
29
|
-
/** The type of MediaKeySession (e.g. "temporary"). */
|
|
30
|
-
sessionType: MediaKeySessionType;
|
|
31
|
-
/** Initialization data assiociated to this MediaKeySession. */
|
|
32
|
-
initializationData: IInitializationDataInfo;
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Event emitted when we are beginning to close an old MediaKeySession to
|
|
37
|
-
* respect the maximum limit of concurrent MediaKeySession active.
|
|
38
|
-
*/
|
|
39
|
-
export interface ICleaningOldSessionEvent {
|
|
40
|
-
type: "cleaning-old-session";
|
|
41
|
-
value: {
|
|
42
|
-
/** The MediaKeySession that we are currently cleaning. */
|
|
43
|
-
mediaKeySession: MediaKeySession | ICustomMediaKeySession;
|
|
44
|
-
/** The type of MediaKeySession (e.g. "temporary"). */
|
|
45
|
-
sessionType: MediaKeySessionType;
|
|
46
|
-
/** Initialization data assiociated to this MediaKeySession. */
|
|
47
|
-
initializationData: IInitializationDataInfo;
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Close sessions from the loadedSessionsStore to allow at maximum `limit`
|
|
52
|
-
* stored MediaKeySessions in it.
|
|
53
|
-
*
|
|
54
|
-
* Emit event when a MediaKeySession begin to be closed and another when the
|
|
55
|
-
* MediaKeySession is closed.
|
|
56
|
-
* @param {Object} loadedSessionsStore
|
|
57
|
-
* @returns {Observable}
|
|
58
|
-
*/
|
|
59
|
-
export default function cleanOldLoadedSessions(loadedSessionsStore: LoadedSessionsStore, limit: number): Observable<ICleaningOldSessionEvent | ICleanedOldSessionEvent>;
|
|
@@ -1,50 +0,0 @@
|
|
|
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
|
-
import { defer as observableDefer, EMPTY, ignoreElements, } from "rxjs";
|
|
17
|
-
import { shouldUnsetMediaKeys } from "../../compat/";
|
|
18
|
-
import log from "../../log";
|
|
19
|
-
import disposeMediaKeys from "./dispose_media_keys";
|
|
20
|
-
import MediaKeysInfosStore from "./media_keys_infos_store";
|
|
21
|
-
/**
|
|
22
|
-
* Clear EME ressources that should be cleared when the current content stops
|
|
23
|
-
* its playback.
|
|
24
|
-
* @param {HTMLMediaElement} mediaElement
|
|
25
|
-
* @returns {Observable}
|
|
26
|
-
*/
|
|
27
|
-
export default function clearEMESession(mediaElement) {
|
|
28
|
-
return observableDefer(function () {
|
|
29
|
-
log.info("EME: Clearing-up EME session.");
|
|
30
|
-
if (shouldUnsetMediaKeys()) {
|
|
31
|
-
log.info("EME: disposing current MediaKeys.");
|
|
32
|
-
return disposeMediaKeys(mediaElement)
|
|
33
|
-
.pipe(ignoreElements());
|
|
34
|
-
}
|
|
35
|
-
var currentState = MediaKeysInfosStore.getState(mediaElement);
|
|
36
|
-
if (currentState !== null &&
|
|
37
|
-
currentState.keySystemOptions.closeSessionsOnStop === true) {
|
|
38
|
-
log.info("EME: closing all current sessions.");
|
|
39
|
-
return currentState.loadedSessionsStore.closeAllSessions()
|
|
40
|
-
// NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
|
|
41
|
-
// first type parameter as `any` instead of the perfectly fine `unknown`,
|
|
42
|
-
// leading to linter issues, as it forbids the usage of `any`.
|
|
43
|
-
// This is why we're disabling the eslint rule.
|
|
44
|
-
/* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
|
|
45
|
-
.pipe(ignoreElements());
|
|
46
|
-
}
|
|
47
|
-
log.info("EME: Nothing to clear. Returning right away. No state =", currentState === null);
|
|
48
|
-
return EMPTY;
|
|
49
|
-
});
|
|
50
|
-
}
|
|
@@ -1,126 +0,0 @@
|
|
|
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
|
-
import { catchError, defer as observableDefer, map, mergeMap, of as observableOf, } from "rxjs";
|
|
17
|
-
import { loadSession, } from "../../compat";
|
|
18
|
-
import log from "../../log";
|
|
19
|
-
import isSessionUsable from "./utils/is_session_usable";
|
|
20
|
-
/**
|
|
21
|
-
* Create a new Session on the given MediaKeys, corresponding to the given
|
|
22
|
-
* initializationData.
|
|
23
|
-
* If session creating fails, remove the oldest MediaKeySession loaded and
|
|
24
|
-
* retry.
|
|
25
|
-
*
|
|
26
|
-
* /!\ This only creates new sessions.
|
|
27
|
-
* It will fail if loadedSessionsStore already has a MediaKeySession with
|
|
28
|
-
* the given initializationData.
|
|
29
|
-
* @param {Uint8Array} initData
|
|
30
|
-
* @param {string|undefined} initDataType
|
|
31
|
-
* @param {Object} mediaKeysInfos
|
|
32
|
-
* @returns {Observable}
|
|
33
|
-
*/
|
|
34
|
-
export default function createSession(stores, initializationData, wantedSessionType) {
|
|
35
|
-
return observableDefer(function () {
|
|
36
|
-
var loadedSessionsStore = stores.loadedSessionsStore, persistentSessionsStore = stores.persistentSessionsStore;
|
|
37
|
-
if (wantedSessionType === "temporary") {
|
|
38
|
-
return createTemporarySession(loadedSessionsStore, initializationData);
|
|
39
|
-
}
|
|
40
|
-
else if (persistentSessionsStore === null) {
|
|
41
|
-
log.warn("EME: Cannot create persistent MediaKeySession, " +
|
|
42
|
-
"PersistentSessionsStore not created.");
|
|
43
|
-
return createTemporarySession(loadedSessionsStore, initializationData);
|
|
44
|
-
}
|
|
45
|
-
return createAndTryToRetrievePersistentSession(loadedSessionsStore, persistentSessionsStore, initializationData);
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Create a new temporary MediaKeySession linked to the given initData and
|
|
50
|
-
* initDataType.
|
|
51
|
-
* @param {Object} loadedSessionsStore
|
|
52
|
-
* @param {Object} initData
|
|
53
|
-
* @returns {Observable}
|
|
54
|
-
*/
|
|
55
|
-
function createTemporarySession(loadedSessionsStore, initData) {
|
|
56
|
-
return observableDefer(function () {
|
|
57
|
-
log.info("EME: Creating a new temporary session");
|
|
58
|
-
var session = loadedSessionsStore.createSession(initData, "temporary");
|
|
59
|
-
return observableOf({ type: "created-session",
|
|
60
|
-
value: { mediaKeySession: session,
|
|
61
|
-
sessionType: "temporary" } });
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Create a persistent MediaKeySession and try to load on it a previous
|
|
66
|
-
* MediaKeySession linked to the same initData and initDataType.
|
|
67
|
-
* @param {Object} loadedSessionsStore
|
|
68
|
-
* @param {Object} persistentSessionsStore
|
|
69
|
-
* @param {Object} initData
|
|
70
|
-
* @returns {Observable}
|
|
71
|
-
*/
|
|
72
|
-
function createAndTryToRetrievePersistentSession(loadedSessionsStore, persistentSessionsStore, initData) {
|
|
73
|
-
return observableDefer(function () {
|
|
74
|
-
log.info("EME: Creating persistent MediaKeySession");
|
|
75
|
-
var session = loadedSessionsStore
|
|
76
|
-
.createSession(initData, "persistent-license");
|
|
77
|
-
var storedEntry = persistentSessionsStore.getAndReuse(initData);
|
|
78
|
-
if (storedEntry === null) {
|
|
79
|
-
return observableOf({ type: "created-session",
|
|
80
|
-
value: { mediaKeySession: session,
|
|
81
|
-
sessionType: "persistent-license" } });
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Helper function to close and restart the current persistent session
|
|
85
|
-
* considered, and re-create it from scratch.
|
|
86
|
-
* @returns {Observable}
|
|
87
|
-
*/
|
|
88
|
-
var recreatePersistentSession = function () {
|
|
89
|
-
log.info("EME: Removing previous persistent session.");
|
|
90
|
-
if (persistentSessionsStore.get(initData) !== null) {
|
|
91
|
-
persistentSessionsStore.delete(initData);
|
|
92
|
-
}
|
|
93
|
-
return loadedSessionsStore.closeSession(initData)
|
|
94
|
-
.pipe(map(function () {
|
|
95
|
-
var newSession = loadedSessionsStore.createSession(initData, "persistent-license");
|
|
96
|
-
return { type: "created-session",
|
|
97
|
-
value: { mediaKeySession: newSession,
|
|
98
|
-
sessionType: "persistent-license" } };
|
|
99
|
-
}));
|
|
100
|
-
};
|
|
101
|
-
return loadSession(session, storedEntry.sessionId).pipe(mergeMap(function (hasLoadedSession) {
|
|
102
|
-
if (!hasLoadedSession) {
|
|
103
|
-
log.warn("EME: No data stored for the loaded session");
|
|
104
|
-
persistentSessionsStore.delete(initData);
|
|
105
|
-
return observableOf({ type: "created-session",
|
|
106
|
-
value: { mediaKeySession: session,
|
|
107
|
-
sessionType: "persistent-license" } });
|
|
108
|
-
}
|
|
109
|
-
if (hasLoadedSession && isSessionUsable(session)) {
|
|
110
|
-
persistentSessionsStore.add(initData, session);
|
|
111
|
-
log.info("EME: Succeeded to load persistent session.");
|
|
112
|
-
return observableOf({ type: "loaded-persistent-session",
|
|
113
|
-
value: { mediaKeySession: session,
|
|
114
|
-
sessionType: "persistent-license" } });
|
|
115
|
-
}
|
|
116
|
-
// Unusable persistent session: recreate a new session from scratch.
|
|
117
|
-
log.warn("EME: Previous persistent session not usable anymore.");
|
|
118
|
-
return recreatePersistentSession();
|
|
119
|
-
}), catchError(function (err) {
|
|
120
|
-
log.warn("EME: Unable to load persistent session: " +
|
|
121
|
-
(err instanceof Error ? err.toString() :
|
|
122
|
-
"Unknown Error"));
|
|
123
|
-
return recreatePersistentSession();
|
|
124
|
-
}));
|
|
125
|
-
});
|
|
126
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
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
|
-
import noop from "../../utils/noop";
|
|
17
|
-
import disposeMediaKeys from "./dispose_media_keys";
|
|
18
|
-
/**
|
|
19
|
-
* Free up all ressources taken by the EME management.
|
|
20
|
-
*/
|
|
21
|
-
export default function disposeEME(mediaElement) {
|
|
22
|
-
disposeMediaKeys(mediaElement).subscribe(noop);
|
|
23
|
-
}
|