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
|
@@ -1,181 +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 hashBuffer from "../../../utils/hash_buffer";
|
|
17
|
-
import areInitializationValuesCompatible from "./are_init_values_compatible";
|
|
18
|
-
/**
|
|
19
|
-
* Store a unique value associated to an initData and initDataType.
|
|
20
|
-
* @class InitDataStore
|
|
21
|
-
*/
|
|
22
|
-
var InitDataStore = /** @class */ (function () {
|
|
23
|
-
/** Construct a new InitDataStore. */
|
|
24
|
-
function InitDataStore() {
|
|
25
|
-
this._storage = [];
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Returns all stored value, in the order in which they have been stored.
|
|
29
|
-
* Note: it is possible to move a value to the end of this array by calling
|
|
30
|
-
* the `getAndReuse` method.
|
|
31
|
-
* @returns {Array}
|
|
32
|
-
*/
|
|
33
|
-
InitDataStore.prototype.getAll = function () {
|
|
34
|
-
return this._storage.map(function (item) { return item.payload; });
|
|
35
|
-
};
|
|
36
|
-
/**
|
|
37
|
-
* Returns the number of stored values.
|
|
38
|
-
* @returns {number}
|
|
39
|
-
*/
|
|
40
|
-
InitDataStore.prototype.getLength = function () {
|
|
41
|
-
return this._storage.length;
|
|
42
|
-
};
|
|
43
|
-
/**
|
|
44
|
-
* Returns `true` if no initialization data is stored yet in this
|
|
45
|
-
* InitDataStore.
|
|
46
|
-
* Returns `false` otherwise.
|
|
47
|
-
* @returns {boolean}
|
|
48
|
-
*/
|
|
49
|
-
InitDataStore.prototype.isEmpty = function () {
|
|
50
|
-
return this._storage.length === 0;
|
|
51
|
-
};
|
|
52
|
-
/**
|
|
53
|
-
* Returns the element associated with the given initData and initDataType.
|
|
54
|
-
* Returns `undefined` if not found.
|
|
55
|
-
* @param {Uint8Array} initData
|
|
56
|
-
* @param {string|undefined} initDataType
|
|
57
|
-
* @returns {*}
|
|
58
|
-
*/
|
|
59
|
-
InitDataStore.prototype.get = function (initializationData) {
|
|
60
|
-
var index = this._findIndex(initializationData);
|
|
61
|
-
return index >= 0 ? this._storage[index].payload :
|
|
62
|
-
undefined;
|
|
63
|
-
};
|
|
64
|
-
/**
|
|
65
|
-
* Like `get`, but also move the corresponding value at the end of the store
|
|
66
|
-
* (as returned by `getAll`) if found.
|
|
67
|
-
* This can be used for example to tell when a previously-stored value is
|
|
68
|
-
* re-used to then be able to implement a caching replacement algorithm based
|
|
69
|
-
* on the least-recently-used values by just evicting the first values
|
|
70
|
-
* returned by `getAll`.
|
|
71
|
-
* @param {Uint8Array} initData
|
|
72
|
-
* @param {string|undefined} initDataType
|
|
73
|
-
* @returns {*}
|
|
74
|
-
*/
|
|
75
|
-
InitDataStore.prototype.getAndReuse = function (initializationData) {
|
|
76
|
-
var index = this._findIndex(initializationData);
|
|
77
|
-
if (index === -1) {
|
|
78
|
-
return undefined;
|
|
79
|
-
}
|
|
80
|
-
var item = this._storage.splice(index, 1)[0];
|
|
81
|
-
this._storage.push(item);
|
|
82
|
-
return item.payload;
|
|
83
|
-
};
|
|
84
|
-
/**
|
|
85
|
-
* Add to the store a value linked to the corresponding initData and
|
|
86
|
-
* initDataType.
|
|
87
|
-
* If a value was already stored linked to those, replace it.
|
|
88
|
-
* @param {Object} initializationData
|
|
89
|
-
* @param {*} payload
|
|
90
|
-
*/
|
|
91
|
-
InitDataStore.prototype.store = function (initializationData, payload) {
|
|
92
|
-
var indexOf = this._findIndex(initializationData);
|
|
93
|
-
if (indexOf >= 0) {
|
|
94
|
-
// this._storage contains the stored value in the same order they have
|
|
95
|
-
// been put. So here we want to remove the previous element and re-push
|
|
96
|
-
// it to the end.
|
|
97
|
-
this._storage.splice(indexOf, 1);
|
|
98
|
-
}
|
|
99
|
-
var values = this._formatValuesForStore(initializationData.values);
|
|
100
|
-
this._storage.push({ type: initializationData.type, values: values, payload: payload });
|
|
101
|
-
};
|
|
102
|
-
/**
|
|
103
|
-
* Add to the store a value linked to the corresponding initData and
|
|
104
|
-
* initDataType.
|
|
105
|
-
* If a value linked to those was already stored, do nothing and returns
|
|
106
|
-
* `false`.
|
|
107
|
-
* If not, add the value and return `true`.
|
|
108
|
-
*
|
|
109
|
-
* This can be used as a more performant version of doing both a `get` call -
|
|
110
|
-
* to see if a value is stored linked to that data - and then if not doing a
|
|
111
|
-
* store. `storeIfNone` is more performant as it will only perform hashing
|
|
112
|
-
* and a look-up a single time.
|
|
113
|
-
* @param {Object} initializationData
|
|
114
|
-
* @param {*} payload
|
|
115
|
-
* @returns {boolean}
|
|
116
|
-
*/
|
|
117
|
-
InitDataStore.prototype.storeIfNone = function (initializationData, payload) {
|
|
118
|
-
var indexOf = this._findIndex(initializationData);
|
|
119
|
-
if (indexOf >= 0) {
|
|
120
|
-
return false;
|
|
121
|
-
}
|
|
122
|
-
var values = this._formatValuesForStore(initializationData.values);
|
|
123
|
-
this._storage.push({ type: initializationData.type, values: values, payload: payload });
|
|
124
|
-
return true;
|
|
125
|
-
};
|
|
126
|
-
/**
|
|
127
|
-
* Remove an initDataType and initData combination from this store.
|
|
128
|
-
* Returns the associated value if it has been found, `undefined` otherwise.
|
|
129
|
-
* @param {Uint8Array} initData
|
|
130
|
-
* @param {string|undefined} initDataType
|
|
131
|
-
* @returns {*}
|
|
132
|
-
*/
|
|
133
|
-
InitDataStore.prototype.remove = function (initializationData) {
|
|
134
|
-
var indexOf = this._findIndex(initializationData);
|
|
135
|
-
if (indexOf === -1) {
|
|
136
|
-
return undefined;
|
|
137
|
-
}
|
|
138
|
-
return this._storage.splice(indexOf, 1)[0].payload;
|
|
139
|
-
};
|
|
140
|
-
/**
|
|
141
|
-
* Find the index of the corresponding initialization data in `this._storage`.
|
|
142
|
-
* Returns `-1` if not found.
|
|
143
|
-
* @param {Object} initializationData
|
|
144
|
-
* @returns {boolean}
|
|
145
|
-
*/
|
|
146
|
-
InitDataStore.prototype._findIndex = function (initializationData) {
|
|
147
|
-
var formattedVals = this._formatValuesForStore(initializationData.values);
|
|
148
|
-
// Begin by the last element as we usually re-encounter the last stored
|
|
149
|
-
// initData sooner than the first one.
|
|
150
|
-
for (var i = this._storage.length - 1; i >= 0; i--) {
|
|
151
|
-
var stored = this._storage[i];
|
|
152
|
-
if (stored.type === initializationData.type) {
|
|
153
|
-
if (areInitializationValuesCompatible(stored.values, formattedVals)) {
|
|
154
|
-
return i;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
return -1;
|
|
159
|
-
};
|
|
160
|
-
/**
|
|
161
|
-
* Format given initializationData's values so they are ready to be stored:
|
|
162
|
-
* - sort them by systemId, so they are faster to compare
|
|
163
|
-
* - add hash for each initialization data encountered.
|
|
164
|
-
* @param {Array.<Object>} initialValues
|
|
165
|
-
* @returns {Array.<Object>}
|
|
166
|
-
*/
|
|
167
|
-
InitDataStore.prototype._formatValuesForStore = function (initialValues) {
|
|
168
|
-
return initialValues.slice()
|
|
169
|
-
.sort(function (a, b) { return a.systemId === b.systemId ? 0 :
|
|
170
|
-
a.systemId === undefined ? 1 :
|
|
171
|
-
b.systemId === undefined ? -1 :
|
|
172
|
-
a.systemId < b.systemId ? -1 :
|
|
173
|
-
1; })
|
|
174
|
-
.map(function (_a) {
|
|
175
|
-
var systemId = _a.systemId, data = _a.data;
|
|
176
|
-
return ({ systemId: systemId, data: data, hash: hashBuffer(data) });
|
|
177
|
-
});
|
|
178
|
-
};
|
|
179
|
-
return InitDataStore;
|
|
180
|
-
}());
|
|
181
|
-
export default InitDataStore;
|
|
@@ -1,123 +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 { ICustomMediaKeys, ICustomMediaKeySession } from "../../../compat";
|
|
18
|
-
import { IInitializationDataInfo } from "../types";
|
|
19
|
-
/** Stored MediaKeySession data assiociated to an initialization data. */
|
|
20
|
-
interface IStoredSessionEntry {
|
|
21
|
-
/** The initialization data linked to the MediaKeySession. */
|
|
22
|
-
initializationData: IInitializationDataInfo;
|
|
23
|
-
/** The MediaKeySession created. */
|
|
24
|
-
mediaKeySession: MediaKeySession | ICustomMediaKeySession;
|
|
25
|
-
/** The MediaKeySessionType (e.g. "temporary" or "persistent-license"). */
|
|
26
|
-
sessionType: MediaKeySessionType;
|
|
27
|
-
}
|
|
28
|
-
/** MediaKeySession information. */
|
|
29
|
-
export interface IStoredSessionData {
|
|
30
|
-
/** The MediaKeySession created. */
|
|
31
|
-
mediaKeySession: MediaKeySession | ICustomMediaKeySession;
|
|
32
|
-
/** The MediaKeySessionType (e.g. "temporary" or "persistent-license"). */
|
|
33
|
-
sessionType: MediaKeySessionType;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Create and store MediaKeySessions linked to a single MediaKeys
|
|
37
|
-
* instance.
|
|
38
|
-
*
|
|
39
|
-
* Keep track of sessionTypes and of the initialization data each
|
|
40
|
-
* MediaKeySession is created for.
|
|
41
|
-
* @class LoadedSessionsStore
|
|
42
|
-
*/
|
|
43
|
-
export default class LoadedSessionsStore {
|
|
44
|
-
/** MediaKeys instance on which the MediaKeySessions are created. */
|
|
45
|
-
private readonly _mediaKeys;
|
|
46
|
-
/** Store unique MediaKeySession information per initialization data. */
|
|
47
|
-
private _storage;
|
|
48
|
-
/**
|
|
49
|
-
* Create a new LoadedSessionsStore, which will store information about
|
|
50
|
-
* loaded MediaKeySessions on the given MediaKeys instance.
|
|
51
|
-
* @param {MediaKeys} mediaKeys
|
|
52
|
-
*/
|
|
53
|
-
constructor(mediaKeys: MediaKeys | ICustomMediaKeys);
|
|
54
|
-
/**
|
|
55
|
-
* Returns the stored MediaKeySession information related to the
|
|
56
|
-
* given initDataType and initData if found.
|
|
57
|
-
* Returns `null` if no such MediaKeySession is stored.
|
|
58
|
-
* @param {Object} initializationData
|
|
59
|
-
* @returns {Object|null}
|
|
60
|
-
*/
|
|
61
|
-
get(initializationData: IInitializationDataInfo): IStoredSessionData | null;
|
|
62
|
-
/**
|
|
63
|
-
* Like `get` but also moves the corresponding MediaKeySession to the end of
|
|
64
|
-
* its internal storage, as returned by the `getAll` method.
|
|
65
|
-
*
|
|
66
|
-
* This can be used for example to tell when a previously-stored
|
|
67
|
-
* initialization data is re-used to then be able to implement a caching
|
|
68
|
-
* replacement algorithm based on the least-recently-used values by just
|
|
69
|
-
* evicting the first values returned by `getAll`.
|
|
70
|
-
* @param {Object} initializationData
|
|
71
|
-
* @returns {Object|null}
|
|
72
|
-
*/
|
|
73
|
-
getAndReuse(initializationData: IInitializationDataInfo): IStoredSessionData | null;
|
|
74
|
-
/**
|
|
75
|
-
* Moves the corresponding MediaKeySession to the end of its internal storage,
|
|
76
|
-
* as returned by the `getAll` method.
|
|
77
|
-
*
|
|
78
|
-
* This can be used to signal that a previously-stored initialization data is
|
|
79
|
-
* re-used to then be able to implement a caching replacement algorithm based
|
|
80
|
-
* on the least-recently-used values by just evicting the first values
|
|
81
|
-
* returned by `getAll`.
|
|
82
|
-
*
|
|
83
|
-
* Returns `true` if the corresponding session was found in the store, `false`
|
|
84
|
-
* otherwise.
|
|
85
|
-
* @param {Object} initializationData
|
|
86
|
-
* @returns {boolean}
|
|
87
|
-
*/
|
|
88
|
-
reuse(initializationData: IInitializationDataInfo): boolean;
|
|
89
|
-
/**
|
|
90
|
-
* Create a new MediaKeySession and store it in this store.
|
|
91
|
-
* @throws {EncryptedMediaError}
|
|
92
|
-
* @param {Object} initializationData
|
|
93
|
-
* @param {string} sessionType
|
|
94
|
-
* @returns {MediaKeySession}
|
|
95
|
-
*/
|
|
96
|
-
createSession(initializationData: IInitializationDataInfo, sessionType: MediaKeySessionType): MediaKeySession | ICustomMediaKeySession;
|
|
97
|
-
/**
|
|
98
|
-
* Close a MediaKeySession corresponding to an initialization data and remove
|
|
99
|
-
* its related stored information from the LoadedSessionsStore.
|
|
100
|
-
* Emit when done.
|
|
101
|
-
* @param {Object} initializationData
|
|
102
|
-
* @returns {Observable}
|
|
103
|
-
*/
|
|
104
|
-
closeSession(initializationData: IInitializationDataInfo): Observable<unknown>;
|
|
105
|
-
/**
|
|
106
|
-
* Returns the number of stored MediaKeySessions in this LoadedSessionsStore.
|
|
107
|
-
* @returns {number}
|
|
108
|
-
*/
|
|
109
|
-
getLength(): number;
|
|
110
|
-
/**
|
|
111
|
-
* Returns information about all stored MediaKeySession, in the order in which
|
|
112
|
-
* the MediaKeySession have been created.
|
|
113
|
-
* @returns {Array.<Object>}
|
|
114
|
-
*/
|
|
115
|
-
getAll(): IStoredSessionEntry[];
|
|
116
|
-
/**
|
|
117
|
-
* Close all sessions in this store.
|
|
118
|
-
* Emit `null` when done.
|
|
119
|
-
* @returns {Observable}
|
|
120
|
-
*/
|
|
121
|
-
closeAllSessions(): Observable<null>;
|
|
122
|
-
}
|
|
123
|
-
export {};
|
|
@@ -1,173 +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 { concat as observableConcat, defer as observableDefer, EMPTY, ignoreElements, merge as observableMerge, of as observableOf, } from "rxjs";
|
|
17
|
-
import { EncryptedMediaError } from "../../../errors";
|
|
18
|
-
import log from "../../../log";
|
|
19
|
-
import isNullOrUndefined from "../../../utils/is_null_or_undefined";
|
|
20
|
-
import safelyCloseMediaKeySession from "./close_session";
|
|
21
|
-
import InitDataStore from "./init_data_store";
|
|
22
|
-
/**
|
|
23
|
-
* Create and store MediaKeySessions linked to a single MediaKeys
|
|
24
|
-
* instance.
|
|
25
|
-
*
|
|
26
|
-
* Keep track of sessionTypes and of the initialization data each
|
|
27
|
-
* MediaKeySession is created for.
|
|
28
|
-
* @class LoadedSessionsStore
|
|
29
|
-
*/
|
|
30
|
-
var LoadedSessionsStore = /** @class */ (function () {
|
|
31
|
-
/**
|
|
32
|
-
* Create a new LoadedSessionsStore, which will store information about
|
|
33
|
-
* loaded MediaKeySessions on the given MediaKeys instance.
|
|
34
|
-
* @param {MediaKeys} mediaKeys
|
|
35
|
-
*/
|
|
36
|
-
function LoadedSessionsStore(mediaKeys) {
|
|
37
|
-
this._mediaKeys = mediaKeys;
|
|
38
|
-
this._storage = new InitDataStore();
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Returns the stored MediaKeySession information related to the
|
|
42
|
-
* given initDataType and initData if found.
|
|
43
|
-
* Returns `null` if no such MediaKeySession is stored.
|
|
44
|
-
* @param {Object} initializationData
|
|
45
|
-
* @returns {Object|null}
|
|
46
|
-
*/
|
|
47
|
-
LoadedSessionsStore.prototype.get = function (initializationData) {
|
|
48
|
-
var entry = this._storage.get(initializationData);
|
|
49
|
-
return entry === undefined ? null :
|
|
50
|
-
{ mediaKeySession: entry.mediaKeySession,
|
|
51
|
-
sessionType: entry.sessionType };
|
|
52
|
-
};
|
|
53
|
-
/**
|
|
54
|
-
* Like `get` but also moves the corresponding MediaKeySession to the end of
|
|
55
|
-
* its internal storage, as returned by the `getAll` method.
|
|
56
|
-
*
|
|
57
|
-
* This can be used for example to tell when a previously-stored
|
|
58
|
-
* initialization data is re-used to then be able to implement a caching
|
|
59
|
-
* replacement algorithm based on the least-recently-used values by just
|
|
60
|
-
* evicting the first values returned by `getAll`.
|
|
61
|
-
* @param {Object} initializationData
|
|
62
|
-
* @returns {Object|null}
|
|
63
|
-
*/
|
|
64
|
-
LoadedSessionsStore.prototype.getAndReuse = function (initializationData) {
|
|
65
|
-
var entry = this._storage.getAndReuse(initializationData);
|
|
66
|
-
return entry === undefined ? null :
|
|
67
|
-
{ mediaKeySession: entry.mediaKeySession,
|
|
68
|
-
sessionType: entry.sessionType };
|
|
69
|
-
};
|
|
70
|
-
/**
|
|
71
|
-
* Moves the corresponding MediaKeySession to the end of its internal storage,
|
|
72
|
-
* as returned by the `getAll` method.
|
|
73
|
-
*
|
|
74
|
-
* This can be used to signal that a previously-stored initialization data is
|
|
75
|
-
* re-used to then be able to implement a caching replacement algorithm based
|
|
76
|
-
* on the least-recently-used values by just evicting the first values
|
|
77
|
-
* returned by `getAll`.
|
|
78
|
-
*
|
|
79
|
-
* Returns `true` if the corresponding session was found in the store, `false`
|
|
80
|
-
* otherwise.
|
|
81
|
-
* @param {Object} initializationData
|
|
82
|
-
* @returns {boolean}
|
|
83
|
-
*/
|
|
84
|
-
LoadedSessionsStore.prototype.reuse = function (initializationData) {
|
|
85
|
-
return this._storage.getAndReuse(initializationData) !== undefined;
|
|
86
|
-
};
|
|
87
|
-
/**
|
|
88
|
-
* Create a new MediaKeySession and store it in this store.
|
|
89
|
-
* @throws {EncryptedMediaError}
|
|
90
|
-
* @param {Object} initializationData
|
|
91
|
-
* @param {string} sessionType
|
|
92
|
-
* @returns {MediaKeySession}
|
|
93
|
-
*/
|
|
94
|
-
LoadedSessionsStore.prototype.createSession = function (initializationData, sessionType) {
|
|
95
|
-
var _this = this;
|
|
96
|
-
if (this._storage.get(initializationData) !== undefined) {
|
|
97
|
-
throw new EncryptedMediaError("MULTIPLE_SESSIONS_SAME_INIT_DATA", "This initialization data was already stored.");
|
|
98
|
-
}
|
|
99
|
-
var mediaKeySession = this._mediaKeys.createSession(sessionType);
|
|
100
|
-
var entry = { mediaKeySession: mediaKeySession, sessionType: sessionType, initializationData: initializationData };
|
|
101
|
-
if (!isNullOrUndefined(mediaKeySession.closed)) {
|
|
102
|
-
mediaKeySession.closed
|
|
103
|
-
.then(function () {
|
|
104
|
-
var currentEntry = _this._storage.get(initializationData);
|
|
105
|
-
if (currentEntry !== undefined &&
|
|
106
|
-
currentEntry.mediaKeySession === mediaKeySession) {
|
|
107
|
-
_this._storage.remove(initializationData);
|
|
108
|
-
}
|
|
109
|
-
})
|
|
110
|
-
.catch(function (e) {
|
|
111
|
-
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
112
|
-
log.warn("EME-LSS: MediaKeySession.closed rejected: ".concat(e));
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
log.debug("EME-LSS: Add MediaKeySession", entry.sessionType);
|
|
116
|
-
this._storage.store(initializationData, entry);
|
|
117
|
-
return mediaKeySession;
|
|
118
|
-
};
|
|
119
|
-
/**
|
|
120
|
-
* Close a MediaKeySession corresponding to an initialization data and remove
|
|
121
|
-
* its related stored information from the LoadedSessionsStore.
|
|
122
|
-
* Emit when done.
|
|
123
|
-
* @param {Object} initializationData
|
|
124
|
-
* @returns {Observable}
|
|
125
|
-
*/
|
|
126
|
-
LoadedSessionsStore.prototype.closeSession = function (initializationData) {
|
|
127
|
-
var _this = this;
|
|
128
|
-
return observableDefer(function () {
|
|
129
|
-
var entry = _this._storage.remove(initializationData);
|
|
130
|
-
if (entry === undefined) {
|
|
131
|
-
log.warn("EME-LSS: No MediaKeySession found with " +
|
|
132
|
-
"the given initData and initDataType");
|
|
133
|
-
return EMPTY;
|
|
134
|
-
}
|
|
135
|
-
return safelyCloseMediaKeySession(entry.mediaKeySession);
|
|
136
|
-
});
|
|
137
|
-
};
|
|
138
|
-
/**
|
|
139
|
-
* Returns the number of stored MediaKeySessions in this LoadedSessionsStore.
|
|
140
|
-
* @returns {number}
|
|
141
|
-
*/
|
|
142
|
-
LoadedSessionsStore.prototype.getLength = function () {
|
|
143
|
-
return this._storage.getLength();
|
|
144
|
-
};
|
|
145
|
-
/**
|
|
146
|
-
* Returns information about all stored MediaKeySession, in the order in which
|
|
147
|
-
* the MediaKeySession have been created.
|
|
148
|
-
* @returns {Array.<Object>}
|
|
149
|
-
*/
|
|
150
|
-
LoadedSessionsStore.prototype.getAll = function () {
|
|
151
|
-
return this._storage.getAll();
|
|
152
|
-
};
|
|
153
|
-
/**
|
|
154
|
-
* Close all sessions in this store.
|
|
155
|
-
* Emit `null` when done.
|
|
156
|
-
* @returns {Observable}
|
|
157
|
-
*/
|
|
158
|
-
LoadedSessionsStore.prototype.closeAllSessions = function () {
|
|
159
|
-
var _this = this;
|
|
160
|
-
return observableDefer(function () {
|
|
161
|
-
var closing$ = _this._storage.getAll()
|
|
162
|
-
.map(function (entry) { return safelyCloseMediaKeySession(entry.mediaKeySession); });
|
|
163
|
-
log.debug("EME-LSS: Closing all current MediaKeySessions", closing$.length);
|
|
164
|
-
// re-initialize the storage, so that new interactions with the
|
|
165
|
-
// `LoadedSessionsStore` do not rely on MediaKeySessions we're in the
|
|
166
|
-
// process of removing
|
|
167
|
-
_this._storage = new InitDataStore();
|
|
168
|
-
return observableConcat(observableMerge.apply(void 0, closing$).pipe(ignoreElements()), observableOf(null));
|
|
169
|
-
});
|
|
170
|
-
};
|
|
171
|
-
return LoadedSessionsStore;
|
|
172
|
-
}());
|
|
173
|
-
export default LoadedSessionsStore;
|
|
@@ -1,34 +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 { IContentProtection, IEMEManagerEvent, IKeySystemOption } from "../eme";
|
|
18
|
-
/**
|
|
19
|
-
* Event emitted after deciding that no EME logic should be launched for the
|
|
20
|
-
* current content.
|
|
21
|
-
*/
|
|
22
|
-
export interface IEMEDisabledEvent {
|
|
23
|
-
type: "eme-disabled";
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Create EMEManager if possible (has the APIs and configuration).
|
|
27
|
-
* Else, return an Observable throwing at the next encrypted event encountered.
|
|
28
|
-
* @param {HTMLMediaElement} mediaElement
|
|
29
|
-
* @param {Array.<Object>} keySystems
|
|
30
|
-
* @param {Observable<Object>} contentProtections$
|
|
31
|
-
* @returns {Observable}
|
|
32
|
-
*/
|
|
33
|
-
export default function createEMEManager(mediaElement: HTMLMediaElement, keySystems: IKeySystemOption[], contentProtections$: Observable<IContentProtection>): Observable<IEMEManagerEvent | IEMEDisabledEvent>;
|
|
34
|
-
export { IEMEManagerEvent };
|
|
@@ -1,52 +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 { map, merge as observableMerge, of as observableOf, } from "rxjs";
|
|
17
|
-
import { events, hasEMEAPIs, } from "../../compat/";
|
|
18
|
-
import { EncryptedMediaError } from "../../errors";
|
|
19
|
-
import features from "../../features";
|
|
20
|
-
import log from "../../log";
|
|
21
|
-
var onEncrypted$ = events.onEncrypted$;
|
|
22
|
-
/**
|
|
23
|
-
* Create EMEManager if possible (has the APIs and configuration).
|
|
24
|
-
* Else, return an Observable throwing at the next encrypted event encountered.
|
|
25
|
-
* @param {HTMLMediaElement} mediaElement
|
|
26
|
-
* @param {Array.<Object>} keySystems
|
|
27
|
-
* @param {Observable<Object>} contentProtections$
|
|
28
|
-
* @returns {Observable}
|
|
29
|
-
*/
|
|
30
|
-
export default function createEMEManager(mediaElement, keySystems, contentProtections$) {
|
|
31
|
-
var encryptedEvents$ = observableMerge(onEncrypted$(mediaElement), contentProtections$);
|
|
32
|
-
if (features.emeManager == null) {
|
|
33
|
-
return observableMerge(encryptedEvents$.pipe(map(function () {
|
|
34
|
-
log.error("Init: Encrypted event but EME feature not activated");
|
|
35
|
-
throw new EncryptedMediaError("MEDIA_IS_ENCRYPTED_ERROR", "EME feature not activated.");
|
|
36
|
-
})), observableOf({ type: "eme-disabled" }));
|
|
37
|
-
}
|
|
38
|
-
if (keySystems.length === 0) {
|
|
39
|
-
return observableMerge(encryptedEvents$.pipe(map(function () {
|
|
40
|
-
log.error("Init: Ciphered media and no keySystem passed");
|
|
41
|
-
throw new EncryptedMediaError("MEDIA_IS_ENCRYPTED_ERROR", "Media is encrypted and no `keySystems` given");
|
|
42
|
-
})), observableOf({ type: "eme-disabled" }));
|
|
43
|
-
}
|
|
44
|
-
if (!hasEMEAPIs()) {
|
|
45
|
-
return observableMerge(encryptedEvents$.pipe(map(function () {
|
|
46
|
-
log.error("Init: Encrypted event but no EME API available");
|
|
47
|
-
throw new EncryptedMediaError("MEDIA_IS_ENCRYPTED_ERROR", "Encryption APIs not found.");
|
|
48
|
-
})), observableOf({ type: "eme-disabled" }));
|
|
49
|
-
}
|
|
50
|
-
log.debug("Init: Creating EMEManager");
|
|
51
|
-
return features.emeManager(mediaElement, keySystems, contentProtections$);
|
|
52
|
-
}
|
|
@@ -1,85 +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
|
-
|
|
17
|
-
import log from "../../log";
|
|
18
|
-
import arrayFindIndex from "../../utils/array_find_index";
|
|
19
|
-
|
|
20
|
-
export interface IBufferBasedChooserPlaybackObservation {
|
|
21
|
-
bufferGap : number; // Difference in seconds between the current position and
|
|
22
|
-
// the next non-buffered position
|
|
23
|
-
currentBitrate? : number; // The bitrate of the currently downloaded segments, in bps
|
|
24
|
-
currentScore? : number; // The "maintainability score" of the currently
|
|
25
|
-
// downloaded segments
|
|
26
|
-
speed : number; // Playback rate wanted
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* From the buffer gap, choose a representation.
|
|
31
|
-
* @param {Object} playbackObservation
|
|
32
|
-
* @param {Array.<Number>} bitrates
|
|
33
|
-
* @param {Array.<Number>} bufferLevels
|
|
34
|
-
* @returns {Object|undefined}
|
|
35
|
-
*/
|
|
36
|
-
export default function getEstimateFromBufferLevels(
|
|
37
|
-
playbackObservation : IBufferBasedChooserPlaybackObservation,
|
|
38
|
-
bitrates : number[],
|
|
39
|
-
bufferLevels : number[]
|
|
40
|
-
) : number|undefined {
|
|
41
|
-
const { bufferGap, currentBitrate, currentScore, speed } = playbackObservation;
|
|
42
|
-
if (currentBitrate == null) {
|
|
43
|
-
return bitrates[0];
|
|
44
|
-
}
|
|
45
|
-
const currentBitrateIndex = arrayFindIndex(bitrates, b => b === currentBitrate);
|
|
46
|
-
if (currentBitrateIndex < 0 || bitrates.length !== bufferLevels.length) {
|
|
47
|
-
log.error("ABR: Current Bitrate not found in the calculated levels");
|
|
48
|
-
return bitrates[0];
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
let scaledScore : number|undefined;
|
|
52
|
-
if (currentScore != null) {
|
|
53
|
-
scaledScore = speed === 0 ? currentScore : (currentScore / speed);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (scaledScore != null && scaledScore > 1) {
|
|
57
|
-
const currentBufferLevel = bufferLevels[currentBitrateIndex];
|
|
58
|
-
const nextIndex = (() => {
|
|
59
|
-
for (let i = currentBitrateIndex + 1; i < bufferLevels.length; i++) {
|
|
60
|
-
if (bufferLevels[i] > currentBufferLevel) {
|
|
61
|
-
return i;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
})();
|
|
65
|
-
if (nextIndex != null) {
|
|
66
|
-
const nextBufferLevel = bufferLevels[nextIndex];
|
|
67
|
-
if (bufferGap >= nextBufferLevel) {
|
|
68
|
-
return bitrates[nextIndex];
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (scaledScore == null || scaledScore < 1.15) {
|
|
74
|
-
const currentBufferLevel = bufferLevels[currentBitrateIndex];
|
|
75
|
-
if (bufferGap < currentBufferLevel) {
|
|
76
|
-
for (let i = currentBitrateIndex - 1; i >= 0; i--) {
|
|
77
|
-
if (bitrates[i] < currentBitrate) {
|
|
78
|
-
return bitrates[i];
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return currentBitrate;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return currentBitrate;
|
|
85
|
-
}
|
package/src/core/eme/README.md
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# The EMEManager ###############################################################
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
## Overview ####################################################################
|
|
5
|
-
|
|
6
|
-
This directory exports the ``EMEManager``, which allows to easily interface with
|
|
7
|
-
the browser APIs for decrypting a crypted content, it follows the [Encrypted
|
|
8
|
-
Media Extensions recommandations](https://www.w3.org/TR/encrypted-media/).
|
|
9
|
-
|
|
10
|
-
Like most modules in the RxPlayer, the `EMEManager` is just a function - called
|
|
11
|
-
a single time - returning an Observable.
|
|
12
|
-
|
|
13
|
-
This Observable then return event corresponding to different milestones related
|
|
14
|
-
to decrypting the content.
|
|
15
|
-
|
|
16
|
-
This module is particularly isolated from the rest of the code it mostly take:
|
|
17
|
-
- The media element
|
|
18
|
-
- DRM-related options
|
|
19
|
-
- Observable emitting encryption initialization data found in the content
|
|
20
|
-
|
|
21
|
-
And can then do most of its work in the background.
|
|
22
|
-
|
|
23
|
-
Before going in, you're encouraged to read a little about the Encrypted Media
|
|
24
|
-
Extensions (EME). This code is heavy on EME APIs and may be difficult to follow
|
|
25
|
-
if you don't have a vague understanding of the concept of a `MediaKeySession`
|
|
26
|
-
or of a `MediaKeySystemAccess`.
|