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
|
@@ -87,10 +87,10 @@ import createSharedReference, {
|
|
|
87
87
|
} from "../../utils/reference";
|
|
88
88
|
import warnOnce from "../../utils/warn_once";
|
|
89
89
|
import {
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
clearOnStop,
|
|
91
|
+
disposeDecryptionResources,
|
|
92
92
|
getCurrentKeySystem,
|
|
93
|
-
} from "../
|
|
93
|
+
} from "../decrypt";
|
|
94
94
|
import {
|
|
95
95
|
IManifestFetcherParsedResult,
|
|
96
96
|
IManifestFetcherWarningEvent,
|
|
@@ -140,7 +140,6 @@ import TrackChoiceManager, {
|
|
|
140
140
|
|
|
141
141
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
142
142
|
|
|
143
|
-
const { DEFAULT_UNMUTED_VOLUME } = config;
|
|
144
143
|
|
|
145
144
|
const { isPageActive,
|
|
146
145
|
isVideoVisible,
|
|
@@ -152,74 +151,6 @@ const { isPageActive,
|
|
|
152
151
|
onTextTrackChanges$,
|
|
153
152
|
videoWidth$ } = events;
|
|
154
153
|
|
|
155
|
-
/** Payload emitted with a `positionUpdate` event. */
|
|
156
|
-
interface IPositionUpdateItem {
|
|
157
|
-
/** current position the player is in, in seconds. */
|
|
158
|
-
position : number;
|
|
159
|
-
/** Last position set for the current media currently, in seconds. */
|
|
160
|
-
duration : number;
|
|
161
|
-
/** Playback rate (i.e. speed) at which the current media is played. */
|
|
162
|
-
playbackRate : number;
|
|
163
|
-
/** Amount of buffer available for now in front of the current position, in seconds. */
|
|
164
|
-
bufferGap : number;
|
|
165
|
-
/** Current maximum seekable position. */
|
|
166
|
-
maximumBufferTime? : number;
|
|
167
|
-
wallClockTime? : number;
|
|
168
|
-
/**
|
|
169
|
-
* Only for live contents. Difference between the "live edge" and the current
|
|
170
|
-
* position, in seconds.
|
|
171
|
-
*/
|
|
172
|
-
liveGap? : number;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/** Payload emitted with a `bitrateEstimationChange` event. */
|
|
176
|
-
interface IBitrateEstimate {
|
|
177
|
-
/** The type of buffer this estimate was done for (e.g. "audio). */
|
|
178
|
-
type : IBufferType;
|
|
179
|
-
/** The calculated bitrate, in bits per seconds. */
|
|
180
|
-
bitrate : number | undefined;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
export type IStreamEvent = { data: IStreamEventData;
|
|
184
|
-
start: number;
|
|
185
|
-
end: number;
|
|
186
|
-
onExit?: () => void; } |
|
|
187
|
-
{ data: IStreamEventData;
|
|
188
|
-
start: number; };
|
|
189
|
-
|
|
190
|
-
/** Every events sent by the RxPlayer's public API. */
|
|
191
|
-
interface IPublicAPIEvent {
|
|
192
|
-
playerStateChange : string;
|
|
193
|
-
positionUpdate : IPositionUpdateItem;
|
|
194
|
-
audioTrackChange : ITMAudioTrack | null;
|
|
195
|
-
textTrackChange : ITMTextTrack | null;
|
|
196
|
-
videoTrackChange : ITMVideoTrack | null;
|
|
197
|
-
audioBitrateChange : number;
|
|
198
|
-
videoBitrateChange : number;
|
|
199
|
-
imageTrackUpdate : { data: IBifThumbnail[] };
|
|
200
|
-
fullscreenChange : boolean;
|
|
201
|
-
bitrateEstimationChange : IBitrateEstimate;
|
|
202
|
-
volumeChange : number;
|
|
203
|
-
error : ICustomError | Error;
|
|
204
|
-
warning : ICustomError | Error;
|
|
205
|
-
nativeTextTracksChange : TextTrack[];
|
|
206
|
-
periodChange : Period;
|
|
207
|
-
availableAudioBitratesChange : number[];
|
|
208
|
-
availableVideoBitratesChange : number[];
|
|
209
|
-
availableAudioTracksChange : ITMAudioTrackListItem[];
|
|
210
|
-
availableTextTracksChange : ITMTextTrackListItem[];
|
|
211
|
-
availableVideoTracksChange : ITMVideoTrackListItem[];
|
|
212
|
-
decipherabilityUpdate : Array<{ manifest : Manifest;
|
|
213
|
-
period : Period;
|
|
214
|
-
adaptation : Adaptation;
|
|
215
|
-
representation : Representation; }>;
|
|
216
|
-
seeking : null;
|
|
217
|
-
seeked : null;
|
|
218
|
-
streamEvent : IStreamEvent;
|
|
219
|
-
streamEventSkip : IStreamEvent;
|
|
220
|
-
inbandEvents : IInbandEvent[];
|
|
221
|
-
}
|
|
222
|
-
|
|
223
154
|
/**
|
|
224
155
|
* @class Player
|
|
225
156
|
* @extends EventEmitter
|
|
@@ -280,6 +211,8 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
280
211
|
maxBufferAhead : ISharedReference<number>;
|
|
281
212
|
/** Maximum kept buffer behind in the current position, in seconds. */
|
|
282
213
|
maxBufferBehind : ISharedReference<number>;
|
|
214
|
+
/** Maximum size of video buffer , in kiloBytes */
|
|
215
|
+
maxVideoBufferSize : ISharedReference<number>;
|
|
283
216
|
};
|
|
284
217
|
|
|
285
218
|
/** Information on the current bitrate settings. */
|
|
@@ -321,7 +254,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
321
254
|
* URL of the Manifest (or just of the content for DirectFile contents)
|
|
322
255
|
* currently being played.
|
|
323
256
|
*/
|
|
324
|
-
url
|
|
257
|
+
url : string | undefined;
|
|
325
258
|
|
|
326
259
|
/** Subject allowing to stop playing that content. */
|
|
327
260
|
stop$ : Subject<void>;
|
|
@@ -488,13 +421,14 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
488
421
|
throttleVideoBitrateWhenHidden,
|
|
489
422
|
videoElement,
|
|
490
423
|
wantedBufferAhead,
|
|
424
|
+
maxVideoBufferSize,
|
|
491
425
|
stopAtEnd } = parseConstructorOptions(options);
|
|
492
|
-
|
|
426
|
+
const { DEFAULT_UNMUTED_VOLUME } = config.getCurrent();
|
|
493
427
|
// Workaround to support Firefox autoplay on FF 42.
|
|
494
428
|
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
|
|
495
429
|
videoElement.preload = "auto";
|
|
496
430
|
|
|
497
|
-
this.version = /* PLAYER_VERSION */"3.
|
|
431
|
+
this.version = /* PLAYER_VERSION */"3.27.0-dev.2022031700";
|
|
498
432
|
this.log = log;
|
|
499
433
|
this.state = "STOPPED";
|
|
500
434
|
this.videoElement = videoElement;
|
|
@@ -554,6 +488,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
554
488
|
wantedBufferAhead: createSharedReference(wantedBufferAhead),
|
|
555
489
|
maxBufferAhead: createSharedReference(maxBufferAhead),
|
|
556
490
|
maxBufferBehind: createSharedReference(maxBufferBehind),
|
|
491
|
+
maxVideoBufferSize: createSharedReference(maxVideoBufferSize),
|
|
557
492
|
};
|
|
558
493
|
|
|
559
494
|
this._priv_bitrateInfos = {
|
|
@@ -613,8 +548,13 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
613
548
|
this.stop();
|
|
614
549
|
|
|
615
550
|
if (this.videoElement !== null) {
|
|
616
|
-
// free resources used for
|
|
617
|
-
|
|
551
|
+
// free resources used for decryption management
|
|
552
|
+
disposeDecryptionResources(this.videoElement)
|
|
553
|
+
.catch((err : unknown) => {
|
|
554
|
+
const message = err instanceof Error ? err.message :
|
|
555
|
+
"Unknown error";
|
|
556
|
+
log.error("API: Could not dispose decryption resources: " + message);
|
|
557
|
+
});
|
|
618
558
|
}
|
|
619
559
|
|
|
620
560
|
// free Observables linked to the Player instance
|
|
@@ -627,6 +567,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
627
567
|
this._priv_speed.finish();
|
|
628
568
|
this._priv_contentLock.finish();
|
|
629
569
|
this._priv_bufferOptions.wantedBufferAhead.finish();
|
|
570
|
+
this._priv_bufferOptions.maxVideoBufferSize.finish();
|
|
630
571
|
this._priv_bufferOptions.maxBufferAhead.finish();
|
|
631
572
|
this._priv_bufferOptions.maxBufferBehind.finish();
|
|
632
573
|
this._priv_bitrateInfos.manualBitrates.video.finish();
|
|
@@ -1025,28 +966,26 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
1025
966
|
const playerState$ = observableConcat(
|
|
1026
967
|
observableOf(PLAYER_STATES.LOADING), // Begin with LOADING
|
|
1027
968
|
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
969
|
+
loaded$.pipe(switchMap((_, i) => {
|
|
970
|
+
const isFirstLoad = i === 0;
|
|
971
|
+
return observableMerge(
|
|
972
|
+
// Purposely subscribed first so a RELOADING triggered synchronously
|
|
973
|
+
// after a LOADED state is catched.
|
|
974
|
+
reloading$.pipe(map(() => PLAYER_STATES.RELOADING)),
|
|
975
|
+
// Only switch to LOADED state for the first (i.e. non-RELOADING) load
|
|
976
|
+
isFirstLoad ? observableOf(PLAYER_STATES.LOADED) :
|
|
977
|
+
EMPTY,
|
|
978
|
+
// Purposely put last so any other state change happens after we've
|
|
979
|
+
// already switched to LOADED
|
|
980
|
+
loadedStateUpdates$.pipe(
|
|
1035
981
|
takeUntil(reloading$),
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
reloading$.pipe(
|
|
1041
|
-
switchMap(() =>
|
|
1042
|
-
loaded$.pipe(
|
|
1043
|
-
take(1), // wait for the next loaded event
|
|
1044
|
-
mergeMap(() => loadedStateUpdates$), // to update the state as usual
|
|
1045
|
-
startWith(PLAYER_STATES.RELOADING) // Starts with "RELOADING" state
|
|
1046
|
-
)
|
|
982
|
+
// For the first load, we prefer staying at the LOADED state over
|
|
983
|
+
// PAUSED when autoPlay is disabled.
|
|
984
|
+
// For consecutive loads however, there's no LOADED state.
|
|
985
|
+
skipWhile(state => isFirstLoad && state === PLAYER_STATES.PAUSED)
|
|
1047
986
|
)
|
|
1048
|
-
)
|
|
1049
|
-
)
|
|
987
|
+
);
|
|
988
|
+
}))
|
|
1050
989
|
).pipe(distinctUntilChanged());
|
|
1051
990
|
|
|
1052
991
|
let playbackSubscription : Subscription|undefined;
|
|
@@ -1338,7 +1277,24 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
1338
1277
|
|
|
1339
1278
|
const { isDirectFile, manifest } = this._priv_contentInfos;
|
|
1340
1279
|
if (isDirectFile) {
|
|
1341
|
-
|
|
1280
|
+
// Calculating the "wall-clock time" necessitate to obtain first an offset,
|
|
1281
|
+
// and then adding that offset to the HTMLMediaElement's current position.
|
|
1282
|
+
// That offset is in most case present inside the Manifest file, yet in
|
|
1283
|
+
// directfile mode, the RxPlayer won't parse that file, the browser does it.
|
|
1284
|
+
//
|
|
1285
|
+
// Thankfully Safari declares a `getStartDate` method allowing to obtain
|
|
1286
|
+
// that offset when available. This logic is thus mainly useful when
|
|
1287
|
+
// playing HLS contents in directfile mode on Safari.
|
|
1288
|
+
const mediaElement : HTMLMediaElement & {
|
|
1289
|
+
getStartDate? : () => number | null | undefined;
|
|
1290
|
+
} = this.videoElement;
|
|
1291
|
+
if (typeof mediaElement.getStartDate === "function") {
|
|
1292
|
+
const startDate = mediaElement.getStartDate();
|
|
1293
|
+
if (typeof startDate === "number" && !isNaN(startDate)) {
|
|
1294
|
+
return startDate + mediaElement.currentTime;
|
|
1295
|
+
}
|
|
1296
|
+
}
|
|
1297
|
+
return mediaElement.currentTime;
|
|
1342
1298
|
}
|
|
1343
1299
|
if (manifest !== null) {
|
|
1344
1300
|
const currentTime = this.videoElement.currentTime;
|
|
@@ -1757,6 +1713,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
1757
1713
|
* If the volume was set to 0, set a default volume instead (see config).
|
|
1758
1714
|
*/
|
|
1759
1715
|
unMute() : void {
|
|
1716
|
+
const { DEFAULT_UNMUTED_VOLUME } = config.getCurrent();
|
|
1760
1717
|
const vol = this.getVolume();
|
|
1761
1718
|
if (vol === 0) {
|
|
1762
1719
|
this.setVolume(this._priv_mutedMemory === 0 ? DEFAULT_UNMUTED_VOLUME :
|
|
@@ -1865,6 +1822,15 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
1865
1822
|
this._priv_bufferOptions.wantedBufferAhead.setValue(sizeInSeconds);
|
|
1866
1823
|
}
|
|
1867
1824
|
|
|
1825
|
+
/**
|
|
1826
|
+
* Set the max buffer size the buffer should take in memory
|
|
1827
|
+
* The player . will stop downloading chunks when this size is reached.
|
|
1828
|
+
* @param {Number} sizeInKBytes
|
|
1829
|
+
*/
|
|
1830
|
+
setMaxVideoBufferSize(sizeInKBytes : number) : void {
|
|
1831
|
+
this._priv_bufferOptions.maxVideoBufferSize.setValue(sizeInKBytes);
|
|
1832
|
+
}
|
|
1833
|
+
|
|
1868
1834
|
/**
|
|
1869
1835
|
* Returns the max buffer size for the buffer behind the current position.
|
|
1870
1836
|
* @returns {Number}
|
|
@@ -1889,6 +1855,14 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
1889
1855
|
return this._priv_bufferOptions.wantedBufferAhead.getValue();
|
|
1890
1856
|
}
|
|
1891
1857
|
|
|
1858
|
+
/**
|
|
1859
|
+
* Returns the max buffer memory size for the buffer in kilobytes
|
|
1860
|
+
* @returns {Number}
|
|
1861
|
+
*/
|
|
1862
|
+
getMaxVideoBufferSize() : number {
|
|
1863
|
+
return this._priv_bufferOptions.maxVideoBufferSize.getValue();
|
|
1864
|
+
}
|
|
1865
|
+
|
|
1892
1866
|
/**
|
|
1893
1867
|
* Returns type of current keysystem (e.g. playready, widevine) if the content
|
|
1894
1868
|
* is encrypted. null otherwise.
|
|
@@ -2336,25 +2310,23 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
2336
2310
|
|
|
2337
2311
|
this._priv_contentEventsMemory = {};
|
|
2338
2312
|
|
|
2339
|
-
//
|
|
2313
|
+
// DRM-related clean-up
|
|
2340
2314
|
const freeUpContentLock = () => {
|
|
2341
2315
|
log.debug("Unlocking `contentLock`. Next content can begin.");
|
|
2342
2316
|
this._priv_contentLock.setValue(false);
|
|
2343
2317
|
};
|
|
2344
2318
|
|
|
2345
2319
|
if (!isNullOrUndefined(this.videoElement)) {
|
|
2346
|
-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
freeUpContentLock();
|
|
2357
|
-
},
|
|
2320
|
+
clearOnStop(this.videoElement).then(
|
|
2321
|
+
() => {
|
|
2322
|
+
log.debug("API: DRM session cleaned-up with success!");
|
|
2323
|
+
freeUpContentLock();
|
|
2324
|
+
},
|
|
2325
|
+
(err : unknown) => {
|
|
2326
|
+
log.error("API: An error arised when trying to clean-up the DRM session:" +
|
|
2327
|
+
(err instanceof Error ? err.toString() :
|
|
2328
|
+
"Unknown Error"));
|
|
2329
|
+
freeUpContentLock();
|
|
2358
2330
|
});
|
|
2359
2331
|
} else {
|
|
2360
2332
|
freeUpContentLock();
|
|
@@ -2975,7 +2947,75 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
2975
2947
|
return activeRepresentations[currentPeriod.id];
|
|
2976
2948
|
}
|
|
2977
2949
|
}
|
|
2978
|
-
Player.version = /* PLAYER_VERSION */"3.
|
|
2950
|
+
Player.version = /* PLAYER_VERSION */"3.27.0-dev.2022031700";
|
|
2951
|
+
|
|
2952
|
+
/** Payload emitted with a `positionUpdate` event. */
|
|
2953
|
+
export interface IPositionUpdateItem {
|
|
2954
|
+
/** current position the player is in, in seconds. */
|
|
2955
|
+
position : number;
|
|
2956
|
+
/** Last position set for the current media currently, in seconds. */
|
|
2957
|
+
duration : number;
|
|
2958
|
+
/** Playback rate (i.e. speed) at which the current media is played. */
|
|
2959
|
+
playbackRate : number;
|
|
2960
|
+
/** Amount of buffer available for now in front of the current position, in seconds. */
|
|
2961
|
+
bufferGap : number;
|
|
2962
|
+
/** Current maximum seekable position. */
|
|
2963
|
+
maximumBufferTime? : number | undefined;
|
|
2964
|
+
wallClockTime? : number | undefined;
|
|
2965
|
+
/**
|
|
2966
|
+
* Only for live contents. Difference between the "live edge" and the current
|
|
2967
|
+
* position, in seconds.
|
|
2968
|
+
*/
|
|
2969
|
+
liveGap? : number | undefined;
|
|
2970
|
+
}
|
|
2971
|
+
|
|
2972
|
+
/** Payload emitted with a `bitrateEstimationChange` event. */
|
|
2973
|
+
export interface IBitrateEstimate {
|
|
2974
|
+
/** The type of buffer this estimate was done for (e.g. "audio). */
|
|
2975
|
+
type : IBufferType;
|
|
2976
|
+
/** The calculated bitrate, in bits per seconds. */
|
|
2977
|
+
bitrate : number | undefined;
|
|
2978
|
+
}
|
|
2979
|
+
|
|
2980
|
+
export type IStreamEvent = { data: IStreamEventData;
|
|
2981
|
+
start: number;
|
|
2982
|
+
end: number;
|
|
2983
|
+
onExit?: () => void; } |
|
|
2984
|
+
{ data: IStreamEventData;
|
|
2985
|
+
start: number; };
|
|
2986
|
+
|
|
2987
|
+
/** Every events sent by the RxPlayer's public API. */
|
|
2988
|
+
interface IPublicAPIEvent {
|
|
2989
|
+
playerStateChange : string;
|
|
2990
|
+
positionUpdate : IPositionUpdateItem;
|
|
2991
|
+
audioTrackChange : ITMAudioTrack | null;
|
|
2992
|
+
textTrackChange : ITMTextTrack | null;
|
|
2993
|
+
videoTrackChange : ITMVideoTrack | null;
|
|
2994
|
+
audioBitrateChange : number;
|
|
2995
|
+
videoBitrateChange : number;
|
|
2996
|
+
imageTrackUpdate : { data: IBifThumbnail[] };
|
|
2997
|
+
fullscreenChange : boolean;
|
|
2998
|
+
bitrateEstimationChange : IBitrateEstimate;
|
|
2999
|
+
volumeChange : number;
|
|
3000
|
+
error : ICustomError | Error;
|
|
3001
|
+
warning : ICustomError | Error;
|
|
3002
|
+
nativeTextTracksChange : TextTrack[];
|
|
3003
|
+
periodChange : Period;
|
|
3004
|
+
availableAudioBitratesChange : number[];
|
|
3005
|
+
availableVideoBitratesChange : number[];
|
|
3006
|
+
availableAudioTracksChange : ITMAudioTrackListItem[];
|
|
3007
|
+
availableTextTracksChange : ITMTextTrackListItem[];
|
|
3008
|
+
availableVideoTracksChange : ITMVideoTrackListItem[];
|
|
3009
|
+
decipherabilityUpdate : Array<{ manifest : Manifest;
|
|
3010
|
+
period : Period;
|
|
3011
|
+
adaptation : Adaptation;
|
|
3012
|
+
representation : Representation; }>;
|
|
3013
|
+
seeking : null;
|
|
3014
|
+
seeked : null;
|
|
3015
|
+
streamEvent : IStreamEvent;
|
|
3016
|
+
streamEventSkip : IStreamEvent;
|
|
3017
|
+
inbandEvents : IInbandEvent[];
|
|
3018
|
+
}
|
|
2979
3019
|
|
|
2980
3020
|
export default Player;
|
|
2981
3021
|
export { IStreamEventData };
|
|
@@ -63,7 +63,7 @@ interface IVideoTrackPreferenceObject {
|
|
|
63
63
|
*/
|
|
64
64
|
interface ITMAudioRepresentation { id : string|number;
|
|
65
65
|
bitrate : number;
|
|
66
|
-
codec? : string; }
|
|
66
|
+
codec? : string | undefined; }
|
|
67
67
|
|
|
68
68
|
/** Audio track returned by the TrackChoiceManager. */
|
|
69
69
|
export interface ITMAudioTrack { language : string;
|
|
@@ -85,11 +85,11 @@ export interface ITMTextTrack { language : string;
|
|
|
85
85
|
*/
|
|
86
86
|
interface ITMVideoRepresentation { id : string|number;
|
|
87
87
|
bitrate : number;
|
|
88
|
-
width? : number;
|
|
89
|
-
height? : number;
|
|
90
|
-
codec? : string;
|
|
91
|
-
frameRate? : string;
|
|
92
|
-
hdrInfo?: IHDRInformation; }
|
|
88
|
+
width? : number | undefined;
|
|
89
|
+
height? : number | undefined;
|
|
90
|
+
codec? : string | undefined;
|
|
91
|
+
frameRate? : string | undefined;
|
|
92
|
+
hdrInfo?: IHDRInformation | undefined; }
|
|
93
93
|
|
|
94
94
|
/** Video track returned by the TrackChoiceManager. */
|
|
95
95
|
export interface ITMVideoTrack { id : number|string;
|
|
@@ -134,10 +134,11 @@ type INormalizedPreferredAudioTrack = null |
|
|
|
134
134
|
|
|
135
135
|
/** Audio track preference when it is not set to `null`. */
|
|
136
136
|
interface INormalizedPreferredAudioTrackObject {
|
|
137
|
-
normalized? : string;
|
|
138
|
-
audioDescription? : boolean;
|
|
137
|
+
normalized? : string | undefined;
|
|
138
|
+
audioDescription? : boolean | undefined;
|
|
139
139
|
codec? : { all: boolean;
|
|
140
|
-
test: RegExp; }
|
|
140
|
+
test: RegExp; } |
|
|
141
|
+
undefined;
|
|
141
142
|
}
|
|
142
143
|
|
|
143
144
|
/** Text track preference once normalized by the TrackChoiceManager. */
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# The ContentDecryptor #########################################################
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
## Overview ####################################################################
|
|
5
|
+
|
|
6
|
+
This directory exports the `ContentDecryptor`, which allows to easily interface
|
|
7
|
+
with the browser APIs for decrypting an encrypted content, it follows the
|
|
8
|
+
[Encrypted Media Extensions recommandations](https://www.w3.org/TR/encrypted-media/).
|
|
9
|
+
|
|
10
|
+
The `ContentDecryptor` is a module isolated from the rest of the player taking
|
|
11
|
+
a form of a class.
|
|
12
|
+
It starts initializing decryption capabilities as soon as it is instanciated and
|
|
13
|
+
emits various events to communicate with external code.
|
|
14
|
+
|
|
15
|
+
A central concept of the `ContentDecryptor` is its states.
|
|
16
|
+
As decryption initialization goes on, it reaches multiple steps on which the
|
|
17
|
+
rest of the RxPlayer code might want to react.
|
|
18
|
+
|
|
19
|
+
Before going in, you're encouraged to read a little about the Encrypted Media
|
|
20
|
+
Extensions (EME). This code is heavy on EME APIs and may be difficult to follow
|
|
21
|
+
if you don't have a vague understanding of the concept of a `MediaKeySession`
|
|
22
|
+
or of a `MediaKeySystemAccess`.
|