rx-player 3.26.3-dev.2022021400 → 3.27.0-dev.2022032100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +0 -4
- package/CHANGELOG.md +17 -2
- package/FILES.md +5 -4
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/browser_detection.d.ts +4 -2
- package/dist/_esm5.processed/compat/browser_detection.js +4 -2
- package/dist/_esm5.processed/compat/eme/close_session.d.ts +11 -5
- package/dist/_esm5.processed/compat/eme/close_session.js +143 -36
- package/dist/_esm5.processed/compat/eme/custom_key_system_access.d.ts +15 -0
- package/dist/_esm5.processed/compat/eme/custom_key_system_access.js +1 -17
- package/dist/_esm5.processed/compat/eme/custom_media_keys/ie11_media_keys.js +6 -7
- package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
- package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +20 -22
- package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +58 -40
- package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +49 -48
- package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
- package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
- package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
- package/dist/_esm5.processed/compat/eme/load_session.js +67 -17
- package/dist/_esm5.processed/compat/event_listeners.js +2 -1
- package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
- package/dist/_esm5.processed/config.d.ts +166 -1080
- package/dist/_esm5.processed/config.js +17 -1119
- package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
- package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
- package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
- package/dist/_esm5.processed/core/api/index.d.ts +2 -1
- package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +2 -1
- package/dist/_esm5.processed/core/api/option_utils.d.ts +6 -3
- package/dist/_esm5.processed/core/api/option_utils.js +21 -7
- package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
- package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
- package/dist/_esm5.processed/core/api/public_api.js +73 -35
- package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -49
- package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +25 -65
- package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
- package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +103 -0
- package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
- package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +40 -0
- package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
- package/dist/_esm5.processed/core/decrypt/content_decryptor.js +865 -0
- package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
- package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
- package/dist/_esm5.processed/core/decrypt/create_session.js +173 -0
- package/dist/_esm5.processed/core/{eme/dispose_media_keys.d.ts → decrypt/dispose_decryption_resources.d.ts} +4 -4
- package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
- package/dist/_esm5.processed/core/decrypt/find_key_system.js +299 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
- package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
- package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
- package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
- package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
- package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
- package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
- package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
- package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +119 -241
- package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
- package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
- package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +84 -0
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
- package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
- package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
- package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
- package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
- package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
- package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
- package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
- package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +302 -0
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
- package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
- package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +3 -5
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +1 -1
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
- package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +2 -3
- package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
- package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +1 -1
- package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
- package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +6 -3
- package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
- package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
- package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
- package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
- package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
- package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
- package/dist/_esm5.processed/core/init/types.d.ts +2 -4
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
- package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
- package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
- package/dist/_esm5.processed/core/stream/index.d.ts +1 -0
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
- package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
- package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.d.ts +15 -11
- package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +6 -3
- package/dist/_esm5.processed/core/stream/period/index.d.ts +1 -0
- package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +5 -12
- package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
- package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +2 -2
- package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
- package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
- package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
- package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
- package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
- package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
- package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
- package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
- package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
- package/dist/_esm5.processed/default_config.d.ts +1114 -0
- package/dist/_esm5.processed/default_config.js +1145 -0
- package/dist/_esm5.processed/experimental/index.d.ts +2 -0
- package/dist/_esm5.processed/experimental/index.js +2 -0
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +6 -7
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/index.js +2 -3
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +15 -0
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +3 -5
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +3 -5
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +1 -2
- package/dist/_esm5.processed/features/features_object.js +1 -1
- package/dist/_esm5.processed/features/initialize_features.js +1 -1
- package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
- package/dist/_esm5.processed/features/list/eme.js +5 -5
- package/dist/_esm5.processed/features/types.d.ts +3 -3
- package/dist/_esm5.processed/manifest/manifest.d.ts +1 -14
- package/dist/_esm5.processed/manifest/manifest.js +10 -74
- package/dist/_esm5.processed/manifest/representation.d.ts +35 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +87 -75
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +4 -5
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
- package/dist/_esm5.processed/public_types.d.ts +3 -2
- package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +1 -2
- package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +4 -3
- package/dist/_esm5.processed/transports/dash/image_pipelines.js +60 -11
- package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -2
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +2 -3
- package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +1 -1
- package/dist/_esm5.processed/transports/dash/segment_loader.js +3 -4
- package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
- package/dist/_esm5.processed/transports/dash/text_loader.js +1 -2
- package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
- package/dist/_esm5.processed/transports/local/segment_loader.js +2 -3
- package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
- package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
- package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +2 -3
- package/dist/_esm5.processed/transports/smooth/pipelines.js +71 -14
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +3 -4
- package/dist/_esm5.processed/transports/types.d.ts +22 -0
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -2
- package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -2
- package/dist/_esm5.processed/utils/cast_to_observable.js +1 -3
- package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
- package/dist/_esm5.processed/utils/deep_merge.js +53 -0
- package/dist/_esm5.processed/utils/reference.d.ts +29 -0
- package/dist/_esm5.processed/utils/reference.js +72 -24
- package/dist/_esm5.processed/utils/request/fetch.js +1 -2
- package/dist/_esm5.processed/utils/request/xhr.js +2 -3
- package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
- package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
- package/dist/_esm5.processed/utils/task_canceller.js +3 -3
- package/dist/rx-player.js +4936 -3340
- package/dist/rx-player.min.js +1 -1
- package/dummy +1 -0
- package/{dist/_esm5.processed/utils/promise.d.ts → experimental/index.d.ts} +1 -2
- package/{dist/_esm5.processed/utils/promise.js → experimental/index.js} +1 -3
- package/package.json +32 -35
- package/{src/typings/pinkie.d.ts → scripts/build/templates/experimental/index.d.ts} +1 -4
- package/scripts/build/templates/experimental/index.js +16 -0
- package/scripts/update-version +2 -2
- package/sonar-project.properties +1 -1
- package/src/README.md +6 -6
- package/src/compat/__tests__/play.test.ts +2 -4
- package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
- package/src/compat/browser_detection.ts +4 -2
- package/src/compat/eme/close_session.ts +89 -56
- package/src/compat/eme/custom_key_system_access.ts +1 -2
- package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +6 -7
- package/src/compat/eme/custom_media_keys/index.ts +20 -38
- package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +68 -52
- package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +57 -56
- package/src/compat/eme/generate_key_request.ts +25 -33
- package/src/compat/eme/load_session.ts +28 -31
- package/src/compat/event_listeners.ts +2 -1
- package/src/compat/should_favour_custom_safari_EME.ts +5 -2
- package/src/config.ts +17 -1210
- package/src/core/README.md +1 -1
- package/src/core/abr/bandwidth_estimator.ts +4 -4
- package/src/core/abr/network_analyzer.ts +5 -6
- package/src/core/api/__tests__/get_player_state.test.ts +3 -3
- package/src/core/api/__tests__/option_utils.test.ts +29 -17
- package/src/core/api/get_player_state.ts +1 -1
- package/src/core/api/index.ts +3 -0
- package/src/core/api/option_utils.ts +42 -23
- package/src/core/api/playback_observer.ts +12 -8
- package/src/core/api/public_api.ts +152 -113
- package/src/core/decrypt/README.md +22 -0
- package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
- package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
- package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
- package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
- package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
- package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +31 -93
- package/src/core/{eme → decrypt}/attach_media_keys.ts +48 -56
- package/src/core/decrypt/clear_on_stop.ts +47 -0
- package/src/core/decrypt/content_decryptor.ts +1157 -0
- package/src/core/decrypt/create_or_load_session.ts +130 -0
- package/src/core/decrypt/create_session.ts +174 -0
- package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
- package/src/core/{eme → decrypt}/find_key_system.ts +111 -122
- package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
- package/src/core/decrypt/get_media_keys.ts +145 -0
- package/src/core/{eme → decrypt}/index.ts +11 -8
- package/src/core/decrypt/init_media_keys.ts +51 -0
- package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
- package/src/core/decrypt/set_server_certificate.ts +104 -0
- package/src/core/{eme → decrypt}/types.ts +128 -258
- package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
- package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
- package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
- package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
- package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
- package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +19 -20
- package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
- package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
- package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
- package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
- package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
- package/src/core/decrypt/utils/key_session_record.ts +175 -0
- package/src/core/decrypt/utils/loaded_sessions_store.ts +317 -0
- package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
- package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
- package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
- package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
- package/src/core/fetchers/manifest/manifest_fetcher.ts +5 -7
- package/src/core/fetchers/segment/segment_fetcher.ts +4 -4
- package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
- package/src/core/fetchers/utils/try_urls_with_backoff.ts +2 -3
- package/src/core/init/.initialize_media_source.ts.un~ +0 -0
- package/src/core/init/get_initial_time.ts +2 -1
- package/src/core/init/initialize_directfile.ts +17 -20
- package/src/core/init/initialize_media_source.ts +44 -106
- package/src/core/init/link_drm_and_content.ts +176 -0
- package/src/core/init/manifest_update_scheduler.ts +5 -3
- package/src/core/init/stall_avoider.ts +6 -5
- package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
- package/src/core/init/types.ts +1 -39
- package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
- package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +3 -4
- package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
- package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
- package/src/core/stream/events_generators.ts +9 -4
- package/src/core/stream/index.ts +1 -0
- package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
- package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
- package/src/core/stream/period/get_adaptation_switch_strategy.ts +25 -15
- package/src/core/stream/period/index.ts +1 -0
- package/src/core/stream/period/period_stream.ts +10 -16
- package/src/core/stream/representation/force_garbage_collection.ts +2 -2
- package/src/core/stream/representation/get_buffer_status.ts +28 -16
- package/src/core/stream/representation/get_needed_segments.ts +124 -28
- package/src/core/stream/representation/get_segment_priority.ts +1 -2
- package/src/core/stream/representation/push_media_segment.ts +3 -2
- package/src/core/stream/representation/representation_stream.ts +30 -7
- package/src/core/stream/types.ts +1 -1
- package/src/default_config.ts +1241 -0
- package/src/experimental/index.ts +5 -0
- package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
- package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +7 -7
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +9 -10
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/decodingInfos.test.ts +2 -4
- package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +2 -3
- package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +1 -2
- package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +3 -5
- package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +3 -5
- package/src/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.ts +1 -2
- package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.ts +1 -2
- package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.ts +1 -2
- package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.ts +1 -2
- package/src/features/__tests__/initialize_features.test.ts +2 -2
- package/src/features/features_object.ts +1 -1
- package/src/features/initialize_features.ts +1 -1
- package/src/features/list/__tests__/eme.test.ts +5 -5
- package/src/features/list/eme.ts +5 -5
- package/src/features/types.ts +3 -10
- package/src/manifest/manifest.ts +6 -76
- package/src/manifest/representation.ts +36 -3
- package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
- package/src/parsers/manifest/dash/common/indexes/template.ts +1 -2
- package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +1 -1
- package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +109 -64
- package/src/parsers/manifest/dash/common/parse_mpd.ts +1 -2
- package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +4 -5
- package/src/parsers/manifest/smooth/create_parser.ts +1 -0
- package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
- package/src/public_types.ts +6 -1
- package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +1 -2
- package/src/transports/dash/image_pipelines.ts +15 -14
- package/src/transports/dash/init_segment_loader.ts +1 -2
- package/src/transports/dash/manifest_parser.ts +2 -3
- package/src/transports/dash/segment_loader.ts +4 -5
- package/src/transports/dash/segment_parser.ts +5 -0
- package/src/transports/dash/text_loader.ts +2 -3
- package/src/transports/dash/text_parser.ts +8 -0
- package/src/transports/local/segment_loader.ts +2 -3
- package/src/transports/local/segment_parser.ts +4 -0
- package/src/transports/local/text_parser.ts +8 -0
- package/src/transports/metaplaylist/pipelines.ts +2 -3
- package/src/transports/smooth/pipelines.ts +26 -14
- package/src/transports/smooth/segment_loader.ts +5 -6
- package/src/transports/types.ts +22 -0
- package/src/transports/utils/call_custom_manifest_loader.ts +1 -2
- package/src/utils/__tests__/deep_merge.test.ts +48 -0
- package/src/utils/cancellable_sleep.ts +1 -2
- package/src/utils/cast_to_observable.ts +0 -2
- package/src/utils/deep_merge.ts +46 -0
- package/src/utils/reference.ts +116 -23
- package/src/utils/request/fetch.ts +1 -2
- package/src/utils/request/xhr.ts +3 -3
- package/src/utils/rx-from_cancellable_promise.ts +7 -2
- package/src/utils/task_canceller.ts +6 -4
- package/tsconfig.json +0 -1
- package/tsconfig.modules.json +0 -1
- package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
- package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
- package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
- package/dist/_esm5.processed/core/eme/create_session.js +0 -126
- package/dist/_esm5.processed/core/eme/dispose_eme.d.ts +0 -19
- package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
- package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
- package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
- package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
- package/dist/_esm5.processed/core/eme/find_key_system.js +0 -253
- package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
- package/dist/_esm5.processed/core/eme/get_session.js +0 -68
- package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
- package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
- package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
- package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
- package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
- package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
- package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
- package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
- package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
- package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
- package/src/core/eme/README.md +0 -26
- package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
- package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
- package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
- package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
- package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
- package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
- package/src/core/eme/clear_eme_session.ts +0 -62
- package/src/core/eme/create_session.ts +0 -187
- package/src/core/eme/dispose_eme.ts +0 -25
- package/src/core/eme/dispose_media_keys.ts +0 -46
- package/src/core/eme/eme_manager.ts +0 -387
- package/src/core/eme/get_media_keys.ts +0 -141
- package/src/core/eme/get_session.ts +0 -135
- package/src/core/eme/init_media_keys.ts +0 -106
- package/src/core/eme/set_server_certificate.ts +0 -115
- package/src/core/eme/utils/close_session.ts +0 -113
- package/src/core/eme/utils/init_data_store.ts +0 -234
- package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
- package/src/core/init/create_eme_manager.ts +0 -95
- package/src/utils/__tests__/promise.test.ts +0 -23
- package/src/utils/promise.ts +0 -20
|
@@ -76,7 +76,6 @@ import EventEmitter, {
|
|
|
76
76
|
import isNullOrUndefined from "../../utils/is_null_or_undefined";
|
|
77
77
|
import Logger from "../../utils/logger";
|
|
78
78
|
import objectAssign from "../../utils/object_assign";
|
|
79
|
-
import PPromise from "../../utils/promise";
|
|
80
79
|
import {
|
|
81
80
|
getLeftSizeOfRange,
|
|
82
81
|
getPlayedSizeOfRange,
|
|
@@ -87,10 +86,10 @@ import createSharedReference, {
|
|
|
87
86
|
} from "../../utils/reference";
|
|
88
87
|
import warnOnce from "../../utils/warn_once";
|
|
89
88
|
import {
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
clearOnStop,
|
|
90
|
+
disposeDecryptionResources,
|
|
92
91
|
getCurrentKeySystem,
|
|
93
|
-
} from "../
|
|
92
|
+
} from "../decrypt";
|
|
94
93
|
import {
|
|
95
94
|
IManifestFetcherParsedResult,
|
|
96
95
|
IManifestFetcherWarningEvent,
|
|
@@ -140,7 +139,6 @@ import TrackChoiceManager, {
|
|
|
140
139
|
|
|
141
140
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
142
141
|
|
|
143
|
-
const { DEFAULT_UNMUTED_VOLUME } = config;
|
|
144
142
|
|
|
145
143
|
const { isPageActive,
|
|
146
144
|
isVideoVisible,
|
|
@@ -152,74 +150,6 @@ const { isPageActive,
|
|
|
152
150
|
onTextTrackChanges$,
|
|
153
151
|
videoWidth$ } = events;
|
|
154
152
|
|
|
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 | undefined;
|
|
167
|
-
wallClockTime? : number | undefined;
|
|
168
|
-
/**
|
|
169
|
-
* Only for live contents. Difference between the "live edge" and the current
|
|
170
|
-
* position, in seconds.
|
|
171
|
-
*/
|
|
172
|
-
liveGap? : number | undefined;
|
|
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
153
|
/**
|
|
224
154
|
* @class Player
|
|
225
155
|
* @extends EventEmitter
|
|
@@ -280,6 +210,8 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
280
210
|
maxBufferAhead : ISharedReference<number>;
|
|
281
211
|
/** Maximum kept buffer behind in the current position, in seconds. */
|
|
282
212
|
maxBufferBehind : ISharedReference<number>;
|
|
213
|
+
/** Maximum size of video buffer , in kiloBytes */
|
|
214
|
+
maxVideoBufferSize : ISharedReference<number>;
|
|
283
215
|
};
|
|
284
216
|
|
|
285
217
|
/** Information on the current bitrate settings. */
|
|
@@ -488,13 +420,14 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
488
420
|
throttleVideoBitrateWhenHidden,
|
|
489
421
|
videoElement,
|
|
490
422
|
wantedBufferAhead,
|
|
423
|
+
maxVideoBufferSize,
|
|
491
424
|
stopAtEnd } = parseConstructorOptions(options);
|
|
492
|
-
|
|
425
|
+
const { DEFAULT_UNMUTED_VOLUME } = config.getCurrent();
|
|
493
426
|
// Workaround to support Firefox autoplay on FF 42.
|
|
494
427
|
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
|
|
495
428
|
videoElement.preload = "auto";
|
|
496
429
|
|
|
497
|
-
this.version = /* PLAYER_VERSION */"3.
|
|
430
|
+
this.version = /* PLAYER_VERSION */"3.27.0-dev.2022032100";
|
|
498
431
|
this.log = log;
|
|
499
432
|
this.state = "STOPPED";
|
|
500
433
|
this.videoElement = videoElement;
|
|
@@ -554,6 +487,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
554
487
|
wantedBufferAhead: createSharedReference(wantedBufferAhead),
|
|
555
488
|
maxBufferAhead: createSharedReference(maxBufferAhead),
|
|
556
489
|
maxBufferBehind: createSharedReference(maxBufferBehind),
|
|
490
|
+
maxVideoBufferSize: createSharedReference(maxVideoBufferSize),
|
|
557
491
|
};
|
|
558
492
|
|
|
559
493
|
this._priv_bitrateInfos = {
|
|
@@ -613,8 +547,13 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
613
547
|
this.stop();
|
|
614
548
|
|
|
615
549
|
if (this.videoElement !== null) {
|
|
616
|
-
// free resources used for
|
|
617
|
-
|
|
550
|
+
// free resources used for decryption management
|
|
551
|
+
disposeDecryptionResources(this.videoElement)
|
|
552
|
+
.catch((err : unknown) => {
|
|
553
|
+
const message = err instanceof Error ? err.message :
|
|
554
|
+
"Unknown error";
|
|
555
|
+
log.error("API: Could not dispose decryption resources: " + message);
|
|
556
|
+
});
|
|
618
557
|
}
|
|
619
558
|
|
|
620
559
|
// free Observables linked to the Player instance
|
|
@@ -627,6 +566,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
627
566
|
this._priv_speed.finish();
|
|
628
567
|
this._priv_contentLock.finish();
|
|
629
568
|
this._priv_bufferOptions.wantedBufferAhead.finish();
|
|
569
|
+
this._priv_bufferOptions.maxVideoBufferSize.finish();
|
|
630
570
|
this._priv_bufferOptions.maxBufferAhead.finish();
|
|
631
571
|
this._priv_bufferOptions.maxBufferBehind.finish();
|
|
632
572
|
this._priv_bitrateInfos.manualBitrates.video.finish();
|
|
@@ -1025,28 +965,26 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
1025
965
|
const playerState$ = observableConcat(
|
|
1026
966
|
observableOf(PLAYER_STATES.LOADING), // Begin with LOADING
|
|
1027
967
|
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
968
|
+
loaded$.pipe(switchMap((_, i) => {
|
|
969
|
+
const isFirstLoad = i === 0;
|
|
970
|
+
return observableMerge(
|
|
971
|
+
// Purposely subscribed first so a RELOADING triggered synchronously
|
|
972
|
+
// after a LOADED state is catched.
|
|
973
|
+
reloading$.pipe(map(() => PLAYER_STATES.RELOADING)),
|
|
974
|
+
// Only switch to LOADED state for the first (i.e. non-RELOADING) load
|
|
975
|
+
isFirstLoad ? observableOf(PLAYER_STATES.LOADED) :
|
|
976
|
+
EMPTY,
|
|
977
|
+
// Purposely put last so any other state change happens after we've
|
|
978
|
+
// already switched to LOADED
|
|
979
|
+
loadedStateUpdates$.pipe(
|
|
1035
980
|
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
|
-
)
|
|
981
|
+
// For the first load, we prefer staying at the LOADED state over
|
|
982
|
+
// PAUSED when autoPlay is disabled.
|
|
983
|
+
// For consecutive loads however, there's no LOADED state.
|
|
984
|
+
skipWhile(state => isFirstLoad && state === PLAYER_STATES.PAUSED)
|
|
1047
985
|
)
|
|
1048
|
-
)
|
|
1049
|
-
)
|
|
986
|
+
);
|
|
987
|
+
}))
|
|
1050
988
|
).pipe(distinctUntilChanged());
|
|
1051
989
|
|
|
1052
990
|
let playbackSubscription : Subscription|undefined;
|
|
@@ -1338,7 +1276,24 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
1338
1276
|
|
|
1339
1277
|
const { isDirectFile, manifest } = this._priv_contentInfos;
|
|
1340
1278
|
if (isDirectFile) {
|
|
1341
|
-
|
|
1279
|
+
// Calculating the "wall-clock time" necessitate to obtain first an offset,
|
|
1280
|
+
// and then adding that offset to the HTMLMediaElement's current position.
|
|
1281
|
+
// That offset is in most case present inside the Manifest file, yet in
|
|
1282
|
+
// directfile mode, the RxPlayer won't parse that file, the browser does it.
|
|
1283
|
+
//
|
|
1284
|
+
// Thankfully Safari declares a `getStartDate` method allowing to obtain
|
|
1285
|
+
// that offset when available. This logic is thus mainly useful when
|
|
1286
|
+
// playing HLS contents in directfile mode on Safari.
|
|
1287
|
+
const mediaElement : HTMLMediaElement & {
|
|
1288
|
+
getStartDate? : () => number | null | undefined;
|
|
1289
|
+
} = this.videoElement;
|
|
1290
|
+
if (typeof mediaElement.getStartDate === "function") {
|
|
1291
|
+
const startDate = mediaElement.getStartDate();
|
|
1292
|
+
if (typeof startDate === "number" && !isNaN(startDate)) {
|
|
1293
|
+
return startDate + mediaElement.currentTime;
|
|
1294
|
+
}
|
|
1295
|
+
}
|
|
1296
|
+
return mediaElement.currentTime;
|
|
1342
1297
|
}
|
|
1343
1298
|
if (manifest !== null) {
|
|
1344
1299
|
const currentTime = this.videoElement.currentTime;
|
|
@@ -1583,7 +1538,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
1583
1538
|
/* eslint-disable @typescript-eslint/unbound-method */
|
|
1584
1539
|
if (isNullOrUndefined(playPromise) || typeof playPromise.catch !== "function") {
|
|
1585
1540
|
/* eslint-enable @typescript-eslint/unbound-method */
|
|
1586
|
-
return
|
|
1541
|
+
return Promise.resolve();
|
|
1587
1542
|
}
|
|
1588
1543
|
return playPromise.catch((error: Error) => {
|
|
1589
1544
|
if (error.name === "NotAllowedError") {
|
|
@@ -1757,6 +1712,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
1757
1712
|
* If the volume was set to 0, set a default volume instead (see config).
|
|
1758
1713
|
*/
|
|
1759
1714
|
unMute() : void {
|
|
1715
|
+
const { DEFAULT_UNMUTED_VOLUME } = config.getCurrent();
|
|
1760
1716
|
const vol = this.getVolume();
|
|
1761
1717
|
if (vol === 0) {
|
|
1762
1718
|
this.setVolume(this._priv_mutedMemory === 0 ? DEFAULT_UNMUTED_VOLUME :
|
|
@@ -1865,6 +1821,15 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
1865
1821
|
this._priv_bufferOptions.wantedBufferAhead.setValue(sizeInSeconds);
|
|
1866
1822
|
}
|
|
1867
1823
|
|
|
1824
|
+
/**
|
|
1825
|
+
* Set the max buffer size the buffer should take in memory
|
|
1826
|
+
* The player . will stop downloading chunks when this size is reached.
|
|
1827
|
+
* @param {Number} sizeInKBytes
|
|
1828
|
+
*/
|
|
1829
|
+
setMaxVideoBufferSize(sizeInKBytes : number) : void {
|
|
1830
|
+
this._priv_bufferOptions.maxVideoBufferSize.setValue(sizeInKBytes);
|
|
1831
|
+
}
|
|
1832
|
+
|
|
1868
1833
|
/**
|
|
1869
1834
|
* Returns the max buffer size for the buffer behind the current position.
|
|
1870
1835
|
* @returns {Number}
|
|
@@ -1889,6 +1854,14 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
1889
1854
|
return this._priv_bufferOptions.wantedBufferAhead.getValue();
|
|
1890
1855
|
}
|
|
1891
1856
|
|
|
1857
|
+
/**
|
|
1858
|
+
* Returns the max buffer memory size for the buffer in kilobytes
|
|
1859
|
+
* @returns {Number}
|
|
1860
|
+
*/
|
|
1861
|
+
getMaxVideoBufferSize() : number {
|
|
1862
|
+
return this._priv_bufferOptions.maxVideoBufferSize.getValue();
|
|
1863
|
+
}
|
|
1864
|
+
|
|
1892
1865
|
/**
|
|
1893
1866
|
* Returns type of current keysystem (e.g. playready, widevine) if the content
|
|
1894
1867
|
* is encrypted. null otherwise.
|
|
@@ -2336,25 +2309,23 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
2336
2309
|
|
|
2337
2310
|
this._priv_contentEventsMemory = {};
|
|
2338
2311
|
|
|
2339
|
-
//
|
|
2312
|
+
// DRM-related clean-up
|
|
2340
2313
|
const freeUpContentLock = () => {
|
|
2341
2314
|
log.debug("Unlocking `contentLock`. Next content can begin.");
|
|
2342
2315
|
this._priv_contentLock.setValue(false);
|
|
2343
2316
|
};
|
|
2344
2317
|
|
|
2345
2318
|
if (!isNullOrUndefined(this.videoElement)) {
|
|
2346
|
-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
freeUpContentLock();
|
|
2357
|
-
},
|
|
2319
|
+
clearOnStop(this.videoElement).then(
|
|
2320
|
+
() => {
|
|
2321
|
+
log.debug("API: DRM session cleaned-up with success!");
|
|
2322
|
+
freeUpContentLock();
|
|
2323
|
+
},
|
|
2324
|
+
(err : unknown) => {
|
|
2325
|
+
log.error("API: An error arised when trying to clean-up the DRM session:" +
|
|
2326
|
+
(err instanceof Error ? err.toString() :
|
|
2327
|
+
"Unknown Error"));
|
|
2328
|
+
freeUpContentLock();
|
|
2358
2329
|
});
|
|
2359
2330
|
} else {
|
|
2360
2331
|
freeUpContentLock();
|
|
@@ -2975,7 +2946,75 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
2975
2946
|
return activeRepresentations[currentPeriod.id];
|
|
2976
2947
|
}
|
|
2977
2948
|
}
|
|
2978
|
-
Player.version = /* PLAYER_VERSION */"3.
|
|
2949
|
+
Player.version = /* PLAYER_VERSION */"3.27.0-dev.2022032100";
|
|
2950
|
+
|
|
2951
|
+
/** Payload emitted with a `positionUpdate` event. */
|
|
2952
|
+
export interface IPositionUpdateItem {
|
|
2953
|
+
/** current position the player is in, in seconds. */
|
|
2954
|
+
position : number;
|
|
2955
|
+
/** Last position set for the current media currently, in seconds. */
|
|
2956
|
+
duration : number;
|
|
2957
|
+
/** Playback rate (i.e. speed) at which the current media is played. */
|
|
2958
|
+
playbackRate : number;
|
|
2959
|
+
/** Amount of buffer available for now in front of the current position, in seconds. */
|
|
2960
|
+
bufferGap : number;
|
|
2961
|
+
/** Current maximum seekable position. */
|
|
2962
|
+
maximumBufferTime? : number | undefined;
|
|
2963
|
+
wallClockTime? : number | undefined;
|
|
2964
|
+
/**
|
|
2965
|
+
* Only for live contents. Difference between the "live edge" and the current
|
|
2966
|
+
* position, in seconds.
|
|
2967
|
+
*/
|
|
2968
|
+
liveGap? : number | undefined;
|
|
2969
|
+
}
|
|
2970
|
+
|
|
2971
|
+
/** Payload emitted with a `bitrateEstimationChange` event. */
|
|
2972
|
+
export interface IBitrateEstimate {
|
|
2973
|
+
/** The type of buffer this estimate was done for (e.g. "audio). */
|
|
2974
|
+
type : IBufferType;
|
|
2975
|
+
/** The calculated bitrate, in bits per seconds. */
|
|
2976
|
+
bitrate : number | undefined;
|
|
2977
|
+
}
|
|
2978
|
+
|
|
2979
|
+
export type IStreamEvent = { data: IStreamEventData;
|
|
2980
|
+
start: number;
|
|
2981
|
+
end: number;
|
|
2982
|
+
onExit?: () => void; } |
|
|
2983
|
+
{ data: IStreamEventData;
|
|
2984
|
+
start: number; };
|
|
2985
|
+
|
|
2986
|
+
/** Every events sent by the RxPlayer's public API. */
|
|
2987
|
+
interface IPublicAPIEvent {
|
|
2988
|
+
playerStateChange : string;
|
|
2989
|
+
positionUpdate : IPositionUpdateItem;
|
|
2990
|
+
audioTrackChange : ITMAudioTrack | null;
|
|
2991
|
+
textTrackChange : ITMTextTrack | null;
|
|
2992
|
+
videoTrackChange : ITMVideoTrack | null;
|
|
2993
|
+
audioBitrateChange : number;
|
|
2994
|
+
videoBitrateChange : number;
|
|
2995
|
+
imageTrackUpdate : { data: IBifThumbnail[] };
|
|
2996
|
+
fullscreenChange : boolean;
|
|
2997
|
+
bitrateEstimationChange : IBitrateEstimate;
|
|
2998
|
+
volumeChange : number;
|
|
2999
|
+
error : ICustomError | Error;
|
|
3000
|
+
warning : ICustomError | Error;
|
|
3001
|
+
nativeTextTracksChange : TextTrack[];
|
|
3002
|
+
periodChange : Period;
|
|
3003
|
+
availableAudioBitratesChange : number[];
|
|
3004
|
+
availableVideoBitratesChange : number[];
|
|
3005
|
+
availableAudioTracksChange : ITMAudioTrackListItem[];
|
|
3006
|
+
availableTextTracksChange : ITMTextTrackListItem[];
|
|
3007
|
+
availableVideoTracksChange : ITMVideoTrackListItem[];
|
|
3008
|
+
decipherabilityUpdate : Array<{ manifest : Manifest;
|
|
3009
|
+
period : Period;
|
|
3010
|
+
adaptation : Adaptation;
|
|
3011
|
+
representation : Representation; }>;
|
|
3012
|
+
seeking : null;
|
|
3013
|
+
seeked : null;
|
|
3014
|
+
streamEvent : IStreamEvent;
|
|
3015
|
+
streamEventSkip : IStreamEvent;
|
|
3016
|
+
inbandEvents : IInbandEvent[];
|
|
3017
|
+
}
|
|
2979
3018
|
|
|
2980
3019
|
export default Player;
|
|
2981
3020
|
export { IStreamEventData };
|
|
@@ -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`.
|