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
|
@@ -24,77 +24,6 @@ import { IInbandEvent } from "../stream";
|
|
|
24
24
|
import { IPlayerState } from "./get_player_state";
|
|
25
25
|
import { IConstructorOptions, ILoadVideoOptions } from "./option_utils";
|
|
26
26
|
import { IAudioTrackPreference, ITextTrackPreference, ITMAudioTrack, ITMAudioTrackListItem, ITMTextTrack, ITMTextTrackListItem, ITMVideoTrack, ITMVideoTrackListItem, IVideoTrackPreference } from "./track_choice_manager";
|
|
27
|
-
/** Payload emitted with a `positionUpdate` event. */
|
|
28
|
-
interface IPositionUpdateItem {
|
|
29
|
-
/** current position the player is in, in seconds. */
|
|
30
|
-
position: number;
|
|
31
|
-
/** Last position set for the current media currently, in seconds. */
|
|
32
|
-
duration: number;
|
|
33
|
-
/** Playback rate (i.e. speed) at which the current media is played. */
|
|
34
|
-
playbackRate: number;
|
|
35
|
-
/** Amount of buffer available for now in front of the current position, in seconds. */
|
|
36
|
-
bufferGap: number;
|
|
37
|
-
/** Current maximum seekable position. */
|
|
38
|
-
maximumBufferTime?: number;
|
|
39
|
-
wallClockTime?: number;
|
|
40
|
-
/**
|
|
41
|
-
* Only for live contents. Difference between the "live edge" and the current
|
|
42
|
-
* position, in seconds.
|
|
43
|
-
*/
|
|
44
|
-
liveGap?: number;
|
|
45
|
-
}
|
|
46
|
-
/** Payload emitted with a `bitrateEstimationChange` event. */
|
|
47
|
-
interface IBitrateEstimate {
|
|
48
|
-
/** The type of buffer this estimate was done for (e.g. "audio). */
|
|
49
|
-
type: IBufferType;
|
|
50
|
-
/** The calculated bitrate, in bits per seconds. */
|
|
51
|
-
bitrate: number | undefined;
|
|
52
|
-
}
|
|
53
|
-
export declare type IStreamEvent = {
|
|
54
|
-
data: IStreamEventData;
|
|
55
|
-
start: number;
|
|
56
|
-
end: number;
|
|
57
|
-
onExit?: () => void;
|
|
58
|
-
} | {
|
|
59
|
-
data: IStreamEventData;
|
|
60
|
-
start: number;
|
|
61
|
-
};
|
|
62
|
-
/** Every events sent by the RxPlayer's public API. */
|
|
63
|
-
interface IPublicAPIEvent {
|
|
64
|
-
playerStateChange: string;
|
|
65
|
-
positionUpdate: IPositionUpdateItem;
|
|
66
|
-
audioTrackChange: ITMAudioTrack | null;
|
|
67
|
-
textTrackChange: ITMTextTrack | null;
|
|
68
|
-
videoTrackChange: ITMVideoTrack | null;
|
|
69
|
-
audioBitrateChange: number;
|
|
70
|
-
videoBitrateChange: number;
|
|
71
|
-
imageTrackUpdate: {
|
|
72
|
-
data: IBifThumbnail[];
|
|
73
|
-
};
|
|
74
|
-
fullscreenChange: boolean;
|
|
75
|
-
bitrateEstimationChange: IBitrateEstimate;
|
|
76
|
-
volumeChange: number;
|
|
77
|
-
error: ICustomError | Error;
|
|
78
|
-
warning: ICustomError | Error;
|
|
79
|
-
nativeTextTracksChange: TextTrack[];
|
|
80
|
-
periodChange: Period;
|
|
81
|
-
availableAudioBitratesChange: number[];
|
|
82
|
-
availableVideoBitratesChange: number[];
|
|
83
|
-
availableAudioTracksChange: ITMAudioTrackListItem[];
|
|
84
|
-
availableTextTracksChange: ITMTextTrackListItem[];
|
|
85
|
-
availableVideoTracksChange: ITMVideoTrackListItem[];
|
|
86
|
-
decipherabilityUpdate: Array<{
|
|
87
|
-
manifest: Manifest;
|
|
88
|
-
period: Period;
|
|
89
|
-
adaptation: Adaptation;
|
|
90
|
-
representation: Representation;
|
|
91
|
-
}>;
|
|
92
|
-
seeking: null;
|
|
93
|
-
seeked: null;
|
|
94
|
-
streamEvent: IStreamEvent;
|
|
95
|
-
streamEventSkip: IStreamEvent;
|
|
96
|
-
inbandEvents: IInbandEvent[];
|
|
97
|
-
}
|
|
98
27
|
/**
|
|
99
28
|
* @class Player
|
|
100
29
|
* @extends EventEmitter
|
|
@@ -594,6 +523,12 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
594
523
|
* @param {Number} sizeInSeconds
|
|
595
524
|
*/
|
|
596
525
|
setWantedBufferAhead(sizeInSeconds: number): void;
|
|
526
|
+
/**
|
|
527
|
+
* Set the max buffer size the buffer should take in memory
|
|
528
|
+
* The player . will stop downloading chunks when this size is reached.
|
|
529
|
+
* @param {Number} sizeInKBytes
|
|
530
|
+
*/
|
|
531
|
+
setMaxVideoBufferSize(sizeInKBytes: number): void;
|
|
597
532
|
/**
|
|
598
533
|
* Returns the max buffer size for the buffer behind the current position.
|
|
599
534
|
* @returns {Number}
|
|
@@ -609,6 +544,11 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
609
544
|
* @returns {Number}
|
|
610
545
|
*/
|
|
611
546
|
getWantedBufferAhead(): number;
|
|
547
|
+
/**
|
|
548
|
+
* Returns the max buffer memory size for the buffer in kilobytes
|
|
549
|
+
* @returns {Number}
|
|
550
|
+
*/
|
|
551
|
+
getMaxVideoBufferSize(): number;
|
|
612
552
|
/**
|
|
613
553
|
* Returns type of current keysystem (e.g. playready, widevine) if the content
|
|
614
554
|
* is encrypted. null otherwise.
|
|
@@ -865,5 +805,76 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
865
805
|
private _priv_triggerCurrentBitrateChangeEvent;
|
|
866
806
|
private _priv_getCurrentRepresentations;
|
|
867
807
|
}
|
|
808
|
+
/** Payload emitted with a `positionUpdate` event. */
|
|
809
|
+
export interface IPositionUpdateItem {
|
|
810
|
+
/** current position the player is in, in seconds. */
|
|
811
|
+
position: number;
|
|
812
|
+
/** Last position set for the current media currently, in seconds. */
|
|
813
|
+
duration: number;
|
|
814
|
+
/** Playback rate (i.e. speed) at which the current media is played. */
|
|
815
|
+
playbackRate: number;
|
|
816
|
+
/** Amount of buffer available for now in front of the current position, in seconds. */
|
|
817
|
+
bufferGap: number;
|
|
818
|
+
/** Current maximum seekable position. */
|
|
819
|
+
maximumBufferTime?: number | undefined;
|
|
820
|
+
wallClockTime?: number | undefined;
|
|
821
|
+
/**
|
|
822
|
+
* Only for live contents. Difference between the "live edge" and the current
|
|
823
|
+
* position, in seconds.
|
|
824
|
+
*/
|
|
825
|
+
liveGap?: number | undefined;
|
|
826
|
+
}
|
|
827
|
+
/** Payload emitted with a `bitrateEstimationChange` event. */
|
|
828
|
+
export interface IBitrateEstimate {
|
|
829
|
+
/** The type of buffer this estimate was done for (e.g. "audio). */
|
|
830
|
+
type: IBufferType;
|
|
831
|
+
/** The calculated bitrate, in bits per seconds. */
|
|
832
|
+
bitrate: number | undefined;
|
|
833
|
+
}
|
|
834
|
+
export declare type IStreamEvent = {
|
|
835
|
+
data: IStreamEventData;
|
|
836
|
+
start: number;
|
|
837
|
+
end: number;
|
|
838
|
+
onExit?: () => void;
|
|
839
|
+
} | {
|
|
840
|
+
data: IStreamEventData;
|
|
841
|
+
start: number;
|
|
842
|
+
};
|
|
843
|
+
/** Every events sent by the RxPlayer's public API. */
|
|
844
|
+
interface IPublicAPIEvent {
|
|
845
|
+
playerStateChange: string;
|
|
846
|
+
positionUpdate: IPositionUpdateItem;
|
|
847
|
+
audioTrackChange: ITMAudioTrack | null;
|
|
848
|
+
textTrackChange: ITMTextTrack | null;
|
|
849
|
+
videoTrackChange: ITMVideoTrack | null;
|
|
850
|
+
audioBitrateChange: number;
|
|
851
|
+
videoBitrateChange: number;
|
|
852
|
+
imageTrackUpdate: {
|
|
853
|
+
data: IBifThumbnail[];
|
|
854
|
+
};
|
|
855
|
+
fullscreenChange: boolean;
|
|
856
|
+
bitrateEstimationChange: IBitrateEstimate;
|
|
857
|
+
volumeChange: number;
|
|
858
|
+
error: ICustomError | Error;
|
|
859
|
+
warning: ICustomError | Error;
|
|
860
|
+
nativeTextTracksChange: TextTrack[];
|
|
861
|
+
periodChange: Period;
|
|
862
|
+
availableAudioBitratesChange: number[];
|
|
863
|
+
availableVideoBitratesChange: number[];
|
|
864
|
+
availableAudioTracksChange: ITMAudioTrackListItem[];
|
|
865
|
+
availableTextTracksChange: ITMTextTrackListItem[];
|
|
866
|
+
availableVideoTracksChange: ITMVideoTrackListItem[];
|
|
867
|
+
decipherabilityUpdate: Array<{
|
|
868
|
+
manifest: Manifest;
|
|
869
|
+
period: Period;
|
|
870
|
+
adaptation: Adaptation;
|
|
871
|
+
representation: Representation;
|
|
872
|
+
}>;
|
|
873
|
+
seeking: null;
|
|
874
|
+
seeked: null;
|
|
875
|
+
streamEvent: IStreamEvent;
|
|
876
|
+
streamEventSkip: IStreamEvent;
|
|
877
|
+
inbandEvents: IInbandEvent[];
|
|
878
|
+
}
|
|
868
879
|
export default Player;
|
|
869
880
|
export { IStreamEventData };
|
|
@@ -60,7 +60,7 @@ import PPromise from "../../utils/promise";
|
|
|
60
60
|
import { getLeftSizeOfRange, getPlayedSizeOfRange, getSizeOfRange, } from "../../utils/ranges";
|
|
61
61
|
import createSharedReference from "../../utils/reference";
|
|
62
62
|
import warnOnce from "../../utils/warn_once";
|
|
63
|
-
import {
|
|
63
|
+
import { clearOnStop, disposeDecryptionResources, getCurrentKeySystem, } from "../decrypt";
|
|
64
64
|
import { ManifestFetcher, SegmentFetcherCreator, } from "../fetchers";
|
|
65
65
|
import initializeMediaSourcePlayback from "../init";
|
|
66
66
|
import emitSeekEvents from "./emit_seek_events";
|
|
@@ -69,7 +69,6 @@ import { checkReloadOptions, parseConstructorOptions, parseLoadVideoOptions, } f
|
|
|
69
69
|
import PlaybackObserver from "./playback_observer";
|
|
70
70
|
import TrackChoiceManager from "./track_choice_manager";
|
|
71
71
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
72
|
-
var DEFAULT_UNMUTED_VOLUME = config.DEFAULT_UNMUTED_VOLUME;
|
|
73
72
|
var isPageActive = events.isPageActive, isVideoVisible = events.isVideoVisible, onEnded$ = events.onEnded$, onFullscreenChange$ = events.onFullscreenChange$, onPlayPause$ = events.onPlayPause$, onPictureInPictureEvent$ = events.onPictureInPictureEvent$, onSeeking$ = events.onSeeking$, onTextTrackChanges$ = events.onTextTrackChanges$, videoWidth$ = events.videoWidth$;
|
|
74
73
|
/**
|
|
75
74
|
* @class Player
|
|
@@ -84,11 +83,12 @@ var Player = /** @class */ (function (_super) {
|
|
|
84
83
|
function Player(options) {
|
|
85
84
|
if (options === void 0) { options = {}; }
|
|
86
85
|
var _this = _super.call(this) || this;
|
|
87
|
-
var _a = parseConstructorOptions(options), initialAudioBitrate = _a.initialAudioBitrate, initialVideoBitrate = _a.initialVideoBitrate, limitVideoWidth = _a.limitVideoWidth, minAudioBitrate = _a.minAudioBitrate, minVideoBitrate = _a.minVideoBitrate, maxAudioBitrate = _a.maxAudioBitrate, maxBufferAhead = _a.maxBufferAhead, maxBufferBehind = _a.maxBufferBehind, maxVideoBitrate = _a.maxVideoBitrate, preferredAudioTracks = _a.preferredAudioTracks, preferredTextTracks = _a.preferredTextTracks, preferredVideoTracks = _a.preferredVideoTracks, throttleWhenHidden = _a.throttleWhenHidden, throttleVideoBitrateWhenHidden = _a.throttleVideoBitrateWhenHidden, videoElement = _a.videoElement, wantedBufferAhead = _a.wantedBufferAhead, stopAtEnd = _a.stopAtEnd;
|
|
86
|
+
var _a = parseConstructorOptions(options), initialAudioBitrate = _a.initialAudioBitrate, initialVideoBitrate = _a.initialVideoBitrate, limitVideoWidth = _a.limitVideoWidth, minAudioBitrate = _a.minAudioBitrate, minVideoBitrate = _a.minVideoBitrate, maxAudioBitrate = _a.maxAudioBitrate, maxBufferAhead = _a.maxBufferAhead, maxBufferBehind = _a.maxBufferBehind, maxVideoBitrate = _a.maxVideoBitrate, preferredAudioTracks = _a.preferredAudioTracks, preferredTextTracks = _a.preferredTextTracks, preferredVideoTracks = _a.preferredVideoTracks, throttleWhenHidden = _a.throttleWhenHidden, throttleVideoBitrateWhenHidden = _a.throttleVideoBitrateWhenHidden, videoElement = _a.videoElement, wantedBufferAhead = _a.wantedBufferAhead, maxVideoBufferSize = _a.maxVideoBufferSize, stopAtEnd = _a.stopAtEnd;
|
|
87
|
+
var DEFAULT_UNMUTED_VOLUME = config.getCurrent().DEFAULT_UNMUTED_VOLUME;
|
|
88
88
|
// Workaround to support Firefox autoplay on FF 42.
|
|
89
89
|
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
|
|
90
90
|
videoElement.preload = "auto";
|
|
91
|
-
_this.version = /* PLAYER_VERSION */ "3.
|
|
91
|
+
_this.version = /* PLAYER_VERSION */ "3.27.0-dev.2022031700";
|
|
92
92
|
_this.log = log;
|
|
93
93
|
_this.state = "STOPPED";
|
|
94
94
|
_this.videoElement = videoElement;
|
|
@@ -138,6 +138,7 @@ var Player = /** @class */ (function (_super) {
|
|
|
138
138
|
wantedBufferAhead: createSharedReference(wantedBufferAhead),
|
|
139
139
|
maxBufferAhead: createSharedReference(maxBufferAhead),
|
|
140
140
|
maxBufferBehind: createSharedReference(maxBufferBehind),
|
|
141
|
+
maxVideoBufferSize: createSharedReference(maxVideoBufferSize),
|
|
141
142
|
};
|
|
142
143
|
_this._priv_bitrateInfos = {
|
|
143
144
|
lastBitrates: { audio: initialAudioBitrate,
|
|
@@ -224,8 +225,13 @@ var Player = /** @class */ (function (_super) {
|
|
|
224
225
|
// free resources linked to the loaded content
|
|
225
226
|
this.stop();
|
|
226
227
|
if (this.videoElement !== null) {
|
|
227
|
-
// free resources used for
|
|
228
|
-
|
|
228
|
+
// free resources used for decryption management
|
|
229
|
+
disposeDecryptionResources(this.videoElement)
|
|
230
|
+
.catch(function (err) {
|
|
231
|
+
var message = err instanceof Error ? err.message :
|
|
232
|
+
"Unknown error";
|
|
233
|
+
log.error("API: Could not dispose decryption resources: " + message);
|
|
234
|
+
});
|
|
229
235
|
}
|
|
230
236
|
// free Observables linked to the Player instance
|
|
231
237
|
this._priv_destroy$.next();
|
|
@@ -236,6 +242,7 @@ var Player = /** @class */ (function (_super) {
|
|
|
236
242
|
this._priv_speed.finish();
|
|
237
243
|
this._priv_contentLock.finish();
|
|
238
244
|
this._priv_bufferOptions.wantedBufferAhead.finish();
|
|
245
|
+
this._priv_bufferOptions.maxVideoBufferSize.finish();
|
|
239
246
|
this._priv_bufferOptions.maxBufferAhead.finish();
|
|
240
247
|
this._priv_bufferOptions.maxBufferBehind.finish();
|
|
241
248
|
this._priv_bitrateInfos.manualBitrates.video.finish();
|
|
@@ -527,18 +534,23 @@ var Player = /** @class */ (function (_super) {
|
|
|
527
534
|
}));
|
|
528
535
|
/** Emit all player "state" updates. */
|
|
529
536
|
var playerState$ = observableConcat(observableOf(PLAYER_STATES.LOADING), // Begin with LOADING
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
537
|
+
loaded$.pipe(switchMap(function (_, i) {
|
|
538
|
+
var isFirstLoad = i === 0;
|
|
539
|
+
return observableMerge(
|
|
540
|
+
// Purposely subscribed first so a RELOADING triggered synchronously
|
|
541
|
+
// after a LOADED state is catched.
|
|
542
|
+
reloading$.pipe(map(function () { return PLAYER_STATES.RELOADING; })),
|
|
543
|
+
// Only switch to LOADED state for the first (i.e. non-RELOADING) load
|
|
544
|
+
isFirstLoad ? observableOf(PLAYER_STATES.LOADED) :
|
|
545
|
+
EMPTY,
|
|
546
|
+
// Purposely put last so any other state change happens after we've
|
|
547
|
+
// already switched to LOADED
|
|
548
|
+
loadedStateUpdates$.pipe(takeUntil(reloading$),
|
|
549
|
+
// For the first load, we prefer staying at the LOADED state over
|
|
550
|
+
// PAUSED when autoPlay is disabled.
|
|
551
|
+
// For consecutive loads however, there's no LOADED state.
|
|
552
|
+
skipWhile(function (state) { return isFirstLoad && state === PLAYER_STATES.PAUSED; })));
|
|
553
|
+
}))).pipe(distinctUntilChanged());
|
|
542
554
|
var playbackSubscription;
|
|
543
555
|
stopContent$
|
|
544
556
|
.pipe(take(1))
|
|
@@ -794,7 +806,22 @@ var Player = /** @class */ (function (_super) {
|
|
|
794
806
|
}
|
|
795
807
|
var _a = this._priv_contentInfos, isDirectFile = _a.isDirectFile, manifest = _a.manifest;
|
|
796
808
|
if (isDirectFile) {
|
|
797
|
-
|
|
809
|
+
// Calculating the "wall-clock time" necessitate to obtain first an offset,
|
|
810
|
+
// and then adding that offset to the HTMLMediaElement's current position.
|
|
811
|
+
// That offset is in most case present inside the Manifest file, yet in
|
|
812
|
+
// directfile mode, the RxPlayer won't parse that file, the browser does it.
|
|
813
|
+
//
|
|
814
|
+
// Thankfully Safari declares a `getStartDate` method allowing to obtain
|
|
815
|
+
// that offset when available. This logic is thus mainly useful when
|
|
816
|
+
// playing HLS contents in directfile mode on Safari.
|
|
817
|
+
var mediaElement = this.videoElement;
|
|
818
|
+
if (typeof mediaElement.getStartDate === "function") {
|
|
819
|
+
var startDate = mediaElement.getStartDate();
|
|
820
|
+
if (typeof startDate === "number" && !isNaN(startDate)) {
|
|
821
|
+
return startDate + mediaElement.currentTime;
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
return mediaElement.currentTime;
|
|
798
825
|
}
|
|
799
826
|
if (manifest !== null) {
|
|
800
827
|
var currentTime = this.videoElement.currentTime;
|
|
@@ -1173,6 +1200,7 @@ var Player = /** @class */ (function (_super) {
|
|
|
1173
1200
|
* If the volume was set to 0, set a default volume instead (see config).
|
|
1174
1201
|
*/
|
|
1175
1202
|
Player.prototype.unMute = function () {
|
|
1203
|
+
var DEFAULT_UNMUTED_VOLUME = config.getCurrent().DEFAULT_UNMUTED_VOLUME;
|
|
1176
1204
|
var vol = this.getVolume();
|
|
1177
1205
|
if (vol === 0) {
|
|
1178
1206
|
this.setVolume(this._priv_mutedMemory === 0 ? DEFAULT_UNMUTED_VOLUME :
|
|
@@ -1271,6 +1299,14 @@ var Player = /** @class */ (function (_super) {
|
|
|
1271
1299
|
Player.prototype.setWantedBufferAhead = function (sizeInSeconds) {
|
|
1272
1300
|
this._priv_bufferOptions.wantedBufferAhead.setValue(sizeInSeconds);
|
|
1273
1301
|
};
|
|
1302
|
+
/**
|
|
1303
|
+
* Set the max buffer size the buffer should take in memory
|
|
1304
|
+
* The player . will stop downloading chunks when this size is reached.
|
|
1305
|
+
* @param {Number} sizeInKBytes
|
|
1306
|
+
*/
|
|
1307
|
+
Player.prototype.setMaxVideoBufferSize = function (sizeInKBytes) {
|
|
1308
|
+
this._priv_bufferOptions.maxVideoBufferSize.setValue(sizeInKBytes);
|
|
1309
|
+
};
|
|
1274
1310
|
/**
|
|
1275
1311
|
* Returns the max buffer size for the buffer behind the current position.
|
|
1276
1312
|
* @returns {Number}
|
|
@@ -1292,6 +1328,13 @@ var Player = /** @class */ (function (_super) {
|
|
|
1292
1328
|
Player.prototype.getWantedBufferAhead = function () {
|
|
1293
1329
|
return this._priv_bufferOptions.wantedBufferAhead.getValue();
|
|
1294
1330
|
};
|
|
1331
|
+
/**
|
|
1332
|
+
* Returns the max buffer memory size for the buffer in kilobytes
|
|
1333
|
+
* @returns {Number}
|
|
1334
|
+
*/
|
|
1335
|
+
Player.prototype.getMaxVideoBufferSize = function () {
|
|
1336
|
+
return this._priv_bufferOptions.maxVideoBufferSize.getValue();
|
|
1337
|
+
};
|
|
1295
1338
|
/**
|
|
1296
1339
|
* Returns type of current keysystem (e.g. playready, widevine) if the content
|
|
1297
1340
|
* is encrypted. null otherwise.
|
|
@@ -1712,24 +1755,20 @@ var Player = /** @class */ (function (_super) {
|
|
|
1712
1755
|
(_a = this._priv_mediaElementTrackChoiceManager) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
1713
1756
|
this._priv_mediaElementTrackChoiceManager = null;
|
|
1714
1757
|
this._priv_contentEventsMemory = {};
|
|
1715
|
-
//
|
|
1758
|
+
// DRM-related clean-up
|
|
1716
1759
|
var freeUpContentLock = function () {
|
|
1717
1760
|
log.debug("Unlocking `contentLock`. Next content can begin.");
|
|
1718
1761
|
_this._priv_contentLock.setValue(false);
|
|
1719
1762
|
};
|
|
1720
1763
|
if (!isNullOrUndefined(this.videoElement)) {
|
|
1721
|
-
|
|
1722
|
-
.
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
complete: function () {
|
|
1730
|
-
log.debug("API: EME session cleaned-up with success!");
|
|
1731
|
-
freeUpContentLock();
|
|
1732
|
-
},
|
|
1764
|
+
clearOnStop(this.videoElement).then(function () {
|
|
1765
|
+
log.debug("API: DRM session cleaned-up with success!");
|
|
1766
|
+
freeUpContentLock();
|
|
1767
|
+
}, function (err) {
|
|
1768
|
+
log.error("API: An error arised when trying to clean-up the DRM session:" +
|
|
1769
|
+
(err instanceof Error ? err.toString() :
|
|
1770
|
+
"Unknown Error"));
|
|
1771
|
+
freeUpContentLock();
|
|
1733
1772
|
});
|
|
1734
1773
|
}
|
|
1735
1774
|
else {
|
|
@@ -2264,5 +2303,5 @@ var Player = /** @class */ (function (_super) {
|
|
|
2264
2303
|
};
|
|
2265
2304
|
return Player;
|
|
2266
2305
|
}(EventEmitter));
|
|
2267
|
-
Player.version = /* PLAYER_VERSION */ "3.
|
|
2306
|
+
Player.version = /* PLAYER_VERSION */ "3.27.0-dev.2022031700";
|
|
2268
2307
|
export default Player;
|
|
@@ -50,7 +50,7 @@ interface IVideoTrackPreferenceObject {
|
|
|
50
50
|
interface ITMAudioRepresentation {
|
|
51
51
|
id: string | number;
|
|
52
52
|
bitrate: number;
|
|
53
|
-
codec?: string;
|
|
53
|
+
codec?: string | undefined;
|
|
54
54
|
}
|
|
55
55
|
/** Audio track returned by the TrackChoiceManager. */
|
|
56
56
|
export interface ITMAudioTrack {
|
|
@@ -75,11 +75,11 @@ export interface ITMTextTrack {
|
|
|
75
75
|
interface ITMVideoRepresentation {
|
|
76
76
|
id: string | number;
|
|
77
77
|
bitrate: number;
|
|
78
|
-
width?: number;
|
|
79
|
-
height?: number;
|
|
80
|
-
codec?: string;
|
|
81
|
-
frameRate?: string;
|
|
82
|
-
hdrInfo?: IHDRInformation;
|
|
78
|
+
width?: number | undefined;
|
|
79
|
+
height?: number | undefined;
|
|
80
|
+
codec?: string | undefined;
|
|
81
|
+
frameRate?: string | undefined;
|
|
82
|
+
hdrInfo?: IHDRInformation | undefined;
|
|
83
83
|
}
|
|
84
84
|
/** Video track returned by the TrackChoiceManager. */
|
|
85
85
|
export interface ITMVideoTrack {
|
|
@@ -14,14 +14,13 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
/// <reference types="jest" />
|
|
17
|
-
import {
|
|
17
|
+
import { Subject } from "rxjs";
|
|
18
18
|
import { IEncryptedEventData } from "../../../../compat/eme";
|
|
19
19
|
import EventEmitter from "../../../../utils/event_emitter";
|
|
20
20
|
/** Default MediaKeySystemAccess configuration used by the RxPlayer. */
|
|
21
21
|
export declare const defaultKSConfig: {
|
|
22
22
|
audioCapabilities: {
|
|
23
23
|
contentType: string;
|
|
24
|
-
robustness: undefined;
|
|
25
24
|
}[];
|
|
26
25
|
distinctiveIdentifier: "optional";
|
|
27
26
|
initDataTypes: readonly ["cenc"];
|
|
@@ -29,7 +28,6 @@ export declare const defaultKSConfig: {
|
|
|
29
28
|
sessionTypes: readonly ["temporary"];
|
|
30
29
|
videoCapabilities: {
|
|
31
30
|
contentType: string;
|
|
32
|
-
robustness: undefined;
|
|
33
31
|
}[];
|
|
34
32
|
}[];
|
|
35
33
|
/** Default Widevine MediaKeySystemAccess configuration used by the RxPlayer. */
|
|
@@ -99,7 +97,7 @@ export declare class MediaKeySystemAccessImpl {
|
|
|
99
97
|
createMediaKeys(): Promise<MediaKeysImpl>;
|
|
100
98
|
getConfiguration(): MediaKeySystemConfiguration[];
|
|
101
99
|
}
|
|
102
|
-
export declare function requestMediaKeySystemAccessImpl(keySystem: string, config: MediaKeySystemConfiguration[]):
|
|
100
|
+
export declare function requestMediaKeySystemAccessImpl(keySystem: string, config: MediaKeySystemConfiguration[]): Promise<MediaKeySystemAccessImpl>;
|
|
103
101
|
/**
|
|
104
102
|
* Mock functions coming from the compat directory.
|
|
105
103
|
*/
|
|
@@ -111,15 +109,13 @@ export declare function mockCompat(exportedFunctions?: {}): {
|
|
|
111
109
|
triggerKeyError: Subject<unknown>;
|
|
112
110
|
triggerKeyStatusesChange: Subject<unknown>;
|
|
113
111
|
};
|
|
114
|
-
requestMediaKeySystemAccessSpy: jest.Mock<
|
|
112
|
+
requestMediaKeySystemAccessSpy: jest.Mock<Promise<MediaKeySystemAccessImpl>, [keySystem: string, config: MediaKeySystemConfiguration[]]>;
|
|
115
113
|
getInitDataSpy: jest.Mock<IEncryptedEventData, [encryptedEvent: IEncryptedEventData]>;
|
|
116
|
-
setMediaKeysSpy: jest.Mock<
|
|
117
|
-
generateKeyRequestSpy: jest.Mock<
|
|
114
|
+
setMediaKeysSpy: jest.Mock<any, any>;
|
|
115
|
+
generateKeyRequestSpy: jest.Mock<Promise<void>, [mks: MediaKeySessionImpl, initializationDataType: any, initializationData: any]>;
|
|
118
116
|
};
|
|
119
117
|
/**
|
|
120
|
-
* Check that the
|
|
121
|
-
* directly without any event emitted.
|
|
122
|
-
*
|
|
118
|
+
* Check that the ContentDecryptor, when called with those arguments, throws.
|
|
123
119
|
* If that's the case, resolve with the corresponding error.
|
|
124
120
|
* Else, reject.
|
|
125
121
|
* @param {HTMLMediaElement} mediaElement
|
|
@@ -127,47 +123,7 @@ export declare function mockCompat(exportedFunctions?: {}): {
|
|
|
127
123
|
* @param {Observable} contentProtections$
|
|
128
124
|
* @returns {Promise}
|
|
129
125
|
*/
|
|
130
|
-
export declare function
|
|
131
|
-
/**
|
|
132
|
-
* Check that the event received corresponds to the session-message event for a
|
|
133
|
-
* license request.
|
|
134
|
-
* @param {Object} evt
|
|
135
|
-
* @param {Object} initDataVal
|
|
136
|
-
*/
|
|
137
|
-
export declare function expectLicenseRequestMessage(evt: {
|
|
138
|
-
type: string;
|
|
139
|
-
value: any;
|
|
140
|
-
}, initDataVal: {
|
|
141
|
-
type: string | undefined;
|
|
142
|
-
values: Array<{
|
|
143
|
-
systemId: string | unknown;
|
|
144
|
-
data: Uint8Array;
|
|
145
|
-
}>;
|
|
146
|
-
}): void;
|
|
147
|
-
/**
|
|
148
|
-
* @param {Object} evt
|
|
149
|
-
* @param {Uint8Array} initData
|
|
150
|
-
* @param {string|undefined} initDataType
|
|
151
|
-
*/
|
|
152
|
-
export declare function expectInitDataIgnored(evt: {
|
|
153
|
-
type: string;
|
|
154
|
-
value: any;
|
|
155
|
-
}, initDataVal: {
|
|
156
|
-
type: string | undefined;
|
|
157
|
-
values: Array<{
|
|
158
|
-
systemId: string | undefined;
|
|
159
|
-
data: Uint8Array;
|
|
160
|
-
}>;
|
|
161
|
-
}): void;
|
|
162
|
-
/**
|
|
163
|
-
* @param {Object} evt
|
|
164
|
-
* @param {Uint8Array} initData
|
|
165
|
-
* @param {string|undefined} initDataType
|
|
166
|
-
*/
|
|
167
|
-
export declare function expectEncryptedEventReceived(evt: {
|
|
168
|
-
type: string;
|
|
169
|
-
value: any;
|
|
170
|
-
}, initData: IEncryptedEventData): void;
|
|
126
|
+
export declare function testContentDecryptorError(ContentDecryptor: any, mediaElement: HTMLMediaElement, keySystemsConfigs: unknown[]): Promise<unknown>;
|
|
171
127
|
/**
|
|
172
128
|
* Does the reverse operation than what `formatFakeChallengeFromInitData` does:
|
|
173
129
|
* Retrieve initialization data from a fake challenge done in our tests
|
|
@@ -46,29 +46,26 @@ var __assign = (this && this.__assign) || function () {
|
|
|
46
46
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
47
47
|
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
48
48
|
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
49
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
|
50
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
51
|
+
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
|
|
49
52
|
/* eslint-disable no-restricted-properties */
|
|
50
|
-
import {
|
|
53
|
+
import { Subject } from "rxjs";
|
|
51
54
|
import { base64ToBytes, bytesToBase64, } from "../../../../utils/base64";
|
|
52
|
-
import castToObservable from "../../../../utils/cast_to_observable";
|
|
53
55
|
import EventEmitter, { fromEvent } from "../../../../utils/event_emitter";
|
|
54
56
|
import flatMap from "../../../../utils/flat_map";
|
|
55
57
|
import { strToUtf8, utf8ToStr, } from "../../../../utils/string_parsing";
|
|
56
58
|
/** Default MediaKeySystemAccess configuration used by the RxPlayer. */
|
|
57
59
|
export var defaultKSConfig = [{
|
|
58
|
-
audioCapabilities: [{ contentType: "audio/mp4;codecs=\"mp4a.40.2\"",
|
|
59
|
-
|
|
60
|
-
{ contentType: "audio/webm;codecs=opus",
|
|
61
|
-
robustness: undefined }],
|
|
60
|
+
audioCapabilities: [{ contentType: "audio/mp4;codecs=\"mp4a.40.2\"" },
|
|
61
|
+
{ contentType: "audio/webm;codecs=opus" }],
|
|
62
62
|
distinctiveIdentifier: "optional",
|
|
63
63
|
initDataTypes: ["cenc"],
|
|
64
64
|
persistentState: "optional",
|
|
65
65
|
sessionTypes: ["temporary"],
|
|
66
|
-
videoCapabilities: [{ contentType: "video/mp4;codecs=\"avc1.4d401e\"",
|
|
67
|
-
|
|
68
|
-
{ contentType: "video/
|
|
69
|
-
robustness: undefined },
|
|
70
|
-
{ contentType: "video/webm;codecs=\"vp8\"",
|
|
71
|
-
robustness: undefined }],
|
|
66
|
+
videoCapabilities: [{ contentType: "video/mp4;codecs=\"avc1.4d401e\"" },
|
|
67
|
+
{ contentType: "video/mp4;codecs=\"avc1.42e01e\"" },
|
|
68
|
+
{ contentType: "video/webm;codecs=\"vp8\"" }],
|
|
72
69
|
}];
|
|
73
70
|
/** Default Widevine MediaKeySystemAccess configuration used by the RxPlayer. */
|
|
74
71
|
export var defaultWidevineConfig = (function () {
|
|
@@ -160,13 +157,16 @@ var MediaKeySessionImpl = /** @class */ (function (_super) {
|
|
|
160
157
|
return Promise.resolve();
|
|
161
158
|
};
|
|
162
159
|
MediaKeySessionImpl.prototype.generateRequest = function (initDataType, initData) {
|
|
160
|
+
var _this = this;
|
|
163
161
|
var msg = formatFakeChallengeFromInitData(initData, initDataType);
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
162
|
+
setTimeout(function () {
|
|
163
|
+
var event = Object.assign(new CustomEvent("message"), { message: msg.buffer,
|
|
164
|
+
messageType: "license-request" });
|
|
165
|
+
_this.trigger("message", event);
|
|
166
|
+
if (_this.onmessage !== null && _this.onmessage !== undefined) {
|
|
167
|
+
_this.onmessage(event);
|
|
168
|
+
}
|
|
169
|
+
}, 5);
|
|
170
170
|
return Promise.resolve();
|
|
171
171
|
};
|
|
172
172
|
MediaKeySessionImpl.prototype.load = function (_sessionId) {
|
|
@@ -225,7 +225,7 @@ var MediaKeySystemAccessImpl = /** @class */ (function () {
|
|
|
225
225
|
}());
|
|
226
226
|
export { MediaKeySystemAccessImpl };
|
|
227
227
|
export function requestMediaKeySystemAccessImpl(keySystem, config) {
|
|
228
|
-
return
|
|
228
|
+
return Promise.resolve(new MediaKeySystemAccessImpl(keySystem, config));
|
|
229
229
|
}
|
|
230
230
|
/**
|
|
231
231
|
* Mock functions coming from the compat directory.
|
|
@@ -250,11 +250,9 @@ export function mockCompat(exportedFunctions) {
|
|
|
250
250
|
}),
|
|
251
251
|
};
|
|
252
252
|
var rmksaSpy = jest.fn(requestMediaKeySystemAccessImpl);
|
|
253
|
-
var setMediaKeysSpy = jest.fn(
|
|
253
|
+
var setMediaKeysSpy = jest.fn();
|
|
254
254
|
var generateKeyRequestSpy = jest.fn(function (mks, initializationDataType, initializationData) {
|
|
255
|
-
return
|
|
256
|
-
return castToObservable(mks.generateRequest(initializationDataType, initializationData));
|
|
257
|
-
});
|
|
255
|
+
return mks.generateRequest(initializationDataType, initializationData);
|
|
258
256
|
});
|
|
259
257
|
var getInitDataSpy = jest.fn(function (encryptedEvent) {
|
|
260
258
|
return encryptedEvent;
|
|
@@ -264,9 +262,7 @@ export function mockCompat(exportedFunctions) {
|
|
|
264
262
|
requestMediaKeySystemAccessSpy: rmksaSpy, getInitDataSpy: getInitDataSpy, setMediaKeysSpy: setMediaKeysSpy, generateKeyRequestSpy: generateKeyRequestSpy };
|
|
265
263
|
}
|
|
266
264
|
/**
|
|
267
|
-
* Check that the
|
|
268
|
-
* directly without any event emitted.
|
|
269
|
-
*
|
|
265
|
+
* Check that the ContentDecryptor, when called with those arguments, throws.
|
|
270
266
|
* If that's the case, resolve with the corresponding error.
|
|
271
267
|
* Else, reject.
|
|
272
268
|
* @param {HTMLMediaElement} mediaElement
|
|
@@ -274,58 +270,17 @@ export function mockCompat(exportedFunctions) {
|
|
|
274
270
|
* @param {Observable} contentProtections$
|
|
275
271
|
* @returns {Promise}
|
|
276
272
|
*/
|
|
277
|
-
export function
|
|
278
|
-
/* eslint-disable @typescript-eslint/naming-convention */
|
|
279
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
280
|
-
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
281
|
-
EMEManager,
|
|
282
|
-
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
283
|
-
/* eslint-enable @typescript-eslint/naming-convention */
|
|
284
|
-
mediaElement, keySystemsConfigs, contentProtections$) {
|
|
273
|
+
export function testContentDecryptorError(ContentDecryptor, mediaElement, keySystemsConfigs) {
|
|
285
274
|
return new Promise(function (res, rej) {
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
275
|
+
var contentDecryptor = new ContentDecryptor(mediaElement, keySystemsConfigs);
|
|
276
|
+
contentDecryptor.addEventListener("error", function (error) {
|
|
277
|
+
res(error);
|
|
278
|
+
});
|
|
279
|
+
setTimeout(function () {
|
|
280
|
+
rej(new Error("Timeout exceeded"));
|
|
281
|
+
}, 10);
|
|
292
282
|
});
|
|
293
283
|
}
|
|
294
|
-
/**
|
|
295
|
-
* Check that the event received corresponds to the session-message event for a
|
|
296
|
-
* license request.
|
|
297
|
-
* @param {Object} evt
|
|
298
|
-
* @param {Object} initDataVal
|
|
299
|
-
*/
|
|
300
|
-
export function expectLicenseRequestMessage(
|
|
301
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
302
|
-
evt, initDataVal) {
|
|
303
|
-
expect(evt.type).toEqual("session-message");
|
|
304
|
-
expect(evt.value.messageType).toEqual("license-request");
|
|
305
|
-
expect(evt.value.initializationData).toEqual(initDataVal);
|
|
306
|
-
}
|
|
307
|
-
/**
|
|
308
|
-
* @param {Object} evt
|
|
309
|
-
* @param {Uint8Array} initData
|
|
310
|
-
* @param {string|undefined} initDataType
|
|
311
|
-
*/
|
|
312
|
-
export function expectInitDataIgnored(
|
|
313
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
314
|
-
evt, initDataVal) {
|
|
315
|
-
expect(evt.type).toEqual("init-data-ignored");
|
|
316
|
-
expect(evt.value.initializationData).toEqual(initDataVal);
|
|
317
|
-
}
|
|
318
|
-
/**
|
|
319
|
-
* @param {Object} evt
|
|
320
|
-
* @param {Uint8Array} initData
|
|
321
|
-
* @param {string|undefined} initDataType
|
|
322
|
-
*/
|
|
323
|
-
export function expectEncryptedEventReceived(
|
|
324
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
325
|
-
evt, initData) {
|
|
326
|
-
expect(evt.type).toEqual("encrypted-event-received");
|
|
327
|
-
expect(evt.value).toEqual(initData);
|
|
328
|
-
}
|
|
329
284
|
/**
|
|
330
285
|
* Does the reverse operation than what `formatFakeChallengeFromInitData` does:
|
|
331
286
|
* Retrieve initialization data from a fake challenge done in our tests
|