rx-player 3.26.3-dev.2022021400 → 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/CHANGELOG.md +15 -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 +21 -22
- 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/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 +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/{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 +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 +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 +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.js +2 -2
- 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/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 +4 -2
- 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/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 +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 +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/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/smooth/create_parser.js +1 -0
- package/dist/_esm5.processed/public_types.d.ts +2 -2
- package/dist/_esm5.processed/transports/dash/image_pipelines.js +3 -0
- package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
- package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
- 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/smooth/pipelines.js +68 -10
- package/dist/_esm5.processed/transports/types.d.ts +22 -0
- 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 +1 -1
- 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 +5002 -3033
- 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 +32 -34
- package/scripts/build/templates/experimental/index.d.ts +16 -0
- package/scripts/build/templates/experimental/index.js +16 -0
- package/sonar-project.properties +1 -1
- package/src/README.md +6 -6
- 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/index.ts +21 -38
- 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/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 +17 -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 +37 -20
- package/src/core/api/playback_observer.ts +12 -8
- package/src/core/api/public_api.ts +151 -111
- 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 +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 +112 -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} +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 +4 -4
- package/src/core/fetchers/segment/segment_fetcher.ts +4 -4
- package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
- 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 +42 -105
- 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/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 +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 +2 -1
- 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/probers/DRMInfos.ts +1 -2
- package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.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/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 +5 -1
- package/src/transports/dash/image_pipelines.ts +3 -0
- package/src/transports/dash/segment_parser.ts +5 -0
- package/src/transports/dash/text_parser.ts +8 -0
- package/src/transports/local/segment_parser.ts +4 -0
- package/src/transports/local/text_parser.ts +8 -0
- package/src/transports/smooth/pipelines.ts +22 -9
- package/src/transports/types.ts +22 -0
- package/src/utils/__tests__/deep_merge.test.ts +48 -0
- 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 +2 -1
- package/src/utils/rx-from_cancellable_promise.ts +7 -2
- package/src/utils/task_canceller.ts +6 -4
- 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 -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
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import config from "../../config";
|
|
17
17
|
import EWMA from "./utils/ewma";
|
|
18
|
-
var ABR_MINIMUM_TOTAL_BYTES = config.ABR_MINIMUM_TOTAL_BYTES, ABR_MINIMUM_CHUNK_SIZE = config.ABR_MINIMUM_CHUNK_SIZE, ABR_FAST_EMA = config.ABR_FAST_EMA, ABR_SLOW_EMA = config.ABR_SLOW_EMA;
|
|
19
18
|
/**
|
|
20
19
|
* Calculate a mean bandwidth based on the bytes downloaded and the amount
|
|
21
20
|
* of time needed to do so.
|
|
@@ -25,6 +24,7 @@ var ABR_MINIMUM_TOTAL_BYTES = config.ABR_MINIMUM_TOTAL_BYTES, ABR_MINIMUM_CHUNK_
|
|
|
25
24
|
*/
|
|
26
25
|
var BandwidthEstimator = /** @class */ (function () {
|
|
27
26
|
function BandwidthEstimator() {
|
|
27
|
+
var _a = config.getCurrent(), ABR_FAST_EMA = _a.ABR_FAST_EMA, ABR_SLOW_EMA = _a.ABR_SLOW_EMA;
|
|
28
28
|
/**
|
|
29
29
|
* A fast-moving average.
|
|
30
30
|
* @private
|
|
@@ -49,6 +49,7 @@ var BandwidthEstimator = /** @class */ (function () {
|
|
|
49
49
|
* request.
|
|
50
50
|
*/
|
|
51
51
|
BandwidthEstimator.prototype.addSample = function (durationInMs, numberOfBytes) {
|
|
52
|
+
var ABR_MINIMUM_CHUNK_SIZE = config.getCurrent().ABR_MINIMUM_CHUNK_SIZE;
|
|
52
53
|
if (numberOfBytes < ABR_MINIMUM_CHUNK_SIZE) {
|
|
53
54
|
return;
|
|
54
55
|
}
|
|
@@ -63,6 +64,7 @@ var BandwidthEstimator = /** @class */ (function () {
|
|
|
63
64
|
* @returns {Number|undefined}
|
|
64
65
|
*/
|
|
65
66
|
BandwidthEstimator.prototype.getEstimate = function () {
|
|
67
|
+
var ABR_MINIMUM_TOTAL_BYTES = config.getCurrent().ABR_MINIMUM_TOTAL_BYTES;
|
|
66
68
|
if (this._bytesSampled < ABR_MINIMUM_TOTAL_BYTES) {
|
|
67
69
|
return undefined;
|
|
68
70
|
}
|
|
@@ -74,6 +76,7 @@ var BandwidthEstimator = /** @class */ (function () {
|
|
|
74
76
|
* Reset the bandwidth estimation.
|
|
75
77
|
*/
|
|
76
78
|
BandwidthEstimator.prototype.reset = function () {
|
|
79
|
+
var _a = config.getCurrent(), ABR_FAST_EMA = _a.ABR_FAST_EMA, ABR_SLOW_EMA = _a.ABR_SLOW_EMA;
|
|
77
80
|
this._fastEWMA = new EWMA(ABR_FAST_EMA);
|
|
78
81
|
this._slowEWMA = new EWMA(ABR_SLOW_EMA);
|
|
79
82
|
this._bytesSampled = 0;
|
|
@@ -17,7 +17,6 @@ import config from "../../config";
|
|
|
17
17
|
import log from "../../log";
|
|
18
18
|
import arrayFind from "../../utils/array_find";
|
|
19
19
|
import EWMA from "./utils/ewma";
|
|
20
|
-
var ABR_REGULAR_FACTOR = config.ABR_REGULAR_FACTOR, ABR_STARVATION_DURATION_DELTA = config.ABR_STARVATION_DURATION_DELTA, ABR_STARVATION_FACTOR = config.ABR_STARVATION_FACTOR, ABR_STARVATION_GAP = config.ABR_STARVATION_GAP, OUT_OF_STARVATION_GAP = config.OUT_OF_STARVATION_GAP;
|
|
21
20
|
/**
|
|
22
21
|
* Get pending segment request(s) starting with the asked segment position.
|
|
23
22
|
* @param {Object} requests - Every requests pending, in a chronological
|
|
@@ -214,6 +213,7 @@ function shouldDirectlySwitchToLowBitrate(playbackInfo, requests, lowLatencyMode
|
|
|
214
213
|
*/
|
|
215
214
|
var NetworkAnalyzer = /** @class */ (function () {
|
|
216
215
|
function NetworkAnalyzer(initialBitrate, lowLatencyMode) {
|
|
216
|
+
var _a = config.getCurrent(), ABR_STARVATION_GAP = _a.ABR_STARVATION_GAP, OUT_OF_STARVATION_GAP = _a.OUT_OF_STARVATION_GAP, ABR_STARVATION_FACTOR = _a.ABR_STARVATION_FACTOR, ABR_REGULAR_FACTOR = _a.ABR_REGULAR_FACTOR;
|
|
217
217
|
this._initialBitrate = initialBitrate;
|
|
218
218
|
this._inStarvationMode = false;
|
|
219
219
|
this._lowLatencyMode = lowLatencyMode;
|
|
@@ -253,6 +253,7 @@ var NetworkAnalyzer = /** @class */ (function () {
|
|
|
253
253
|
var bufferGap = playbackInfo.bufferGap, position = playbackInfo.position, duration = playbackInfo.duration;
|
|
254
254
|
var realBufferGap = isFinite(bufferGap) ? bufferGap :
|
|
255
255
|
0;
|
|
256
|
+
var ABR_STARVATION_DURATION_DELTA = config.getCurrent().ABR_STARVATION_DURATION_DELTA;
|
|
256
257
|
// check if should get in/out of starvation mode
|
|
257
258
|
if (isNaN(duration) ||
|
|
258
259
|
realBufferGap + position < duration - ABR_STARVATION_DURATION_DELTA) {
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import config from "../../config";
|
|
17
|
-
var FORCED_ENDED_THRESHOLD = config.FORCED_ENDED_THRESHOLD;
|
|
18
17
|
/** Player state dictionnary. */
|
|
19
18
|
export var PLAYER_STATES = { STOPPED: "STOPPED",
|
|
20
19
|
LOADED: "LOADED",
|
|
@@ -35,6 +34,7 @@ export var PLAYER_STATES = { STOPPED: "STOPPED",
|
|
|
35
34
|
* @returns {string}
|
|
36
35
|
*/
|
|
37
36
|
export default function getLoadedContentState(mediaElement, isPlaying, stalledStatus) {
|
|
37
|
+
var FORCED_ENDED_THRESHOLD = config.getCurrent().FORCED_ENDED_THRESHOLD;
|
|
38
38
|
if (mediaElement.ended) {
|
|
39
39
|
return PLAYER_STATES.ENDED;
|
|
40
40
|
}
|
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import PlaybackObserver from "./playback_observer";
|
|
17
17
|
import Player from "./public_api";
|
|
18
|
-
export { IStreamEvent, IStreamEventData, } from "./public_api";
|
|
18
|
+
export { IBitrateEstimate, IPositionUpdateItem, IStreamEvent, IStreamEventData, } from "./public_api";
|
|
19
19
|
export { PlaybackObserver };
|
|
20
|
+
export { IPlayerState } from "./get_player_state";
|
|
20
21
|
export { IPlaybackObservation, IPlaybackObserverEventType, IReadOnlyPlaybackObserver, IFreezingStatus, IRebufferingStatus, } from "./playback_observer";
|
|
21
22
|
export { IConstructorOptions, ILoadVideoOptions, ITransportOptions, IKeySystemOption, ISupplementaryTextTrackOption, ISupplementaryImageTrackOption, IDefaultAudioTrackOption, IDefaultTextTrackOption, INetworkConfigOption, IStartAtOption, } from "./option_utils";
|
|
22
23
|
export { ITMAudioTrackListItem, ITMTextTrackListItem, ITMVideoTrackListItem, ITMAudioTrack, ITMTextTrack, ITMVideoTrack, IAudioTrackPreference, ITextTrackPreference, IVideoTrackPreference, } from "./track_choice_manager";
|
|
@@ -131,8 +131,9 @@ function createVideoTracks(videoTracks) {
|
|
|
131
131
|
var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
|
|
132
132
|
__extends(MediaElementTrackChoiceManager, _super);
|
|
133
133
|
function MediaElementTrackChoiceManager(mediaElement) {
|
|
134
|
+
var _this = this;
|
|
134
135
|
var _a, _b, _c;
|
|
135
|
-
|
|
136
|
+
_this = _super.call(this) || this;
|
|
136
137
|
_this._preferredAudioTracks = [];
|
|
137
138
|
_this._preferredTextTracks = [];
|
|
138
139
|
_this._preferredVideoTracks = [];
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { IRepresentationFilter } from "../../manifest";
|
|
17
17
|
import { ICustomManifestLoader, ICustomSegmentLoader, ILoadedManifestFormat, ITransportOptions as IParsedTransportOptions } from "../../transports";
|
|
18
|
-
import { IKeySystemOption } from "../
|
|
18
|
+
import { IKeySystemOption } from "../decrypt";
|
|
19
19
|
import { IAudioTrackPreference, ITextTrackPreference, IVideoTrackPreference } from "./track_choice_manager";
|
|
20
20
|
export { IKeySystemOption };
|
|
21
21
|
/** Value of the `serverSyncInfos` transport option. */
|
|
@@ -154,6 +154,7 @@ export interface IConstructorOptions {
|
|
|
154
154
|
maxBufferAhead?: number;
|
|
155
155
|
maxBufferBehind?: number;
|
|
156
156
|
wantedBufferAhead?: number;
|
|
157
|
+
maxVideoBufferSize?: number;
|
|
157
158
|
limitVideoWidth?: boolean;
|
|
158
159
|
throttleWhenHidden?: boolean;
|
|
159
160
|
throttleVideoBitrateWhenHidden?: boolean;
|
|
@@ -174,6 +175,7 @@ export interface IParsedConstructorOptions {
|
|
|
174
175
|
maxBufferAhead: number;
|
|
175
176
|
maxBufferBehind: number;
|
|
176
177
|
wantedBufferAhead: number;
|
|
178
|
+
maxVideoBufferSize: number;
|
|
177
179
|
limitVideoWidth: boolean;
|
|
178
180
|
throttleWhenHidden: boolean;
|
|
179
181
|
throttleVideoBitrateWhenHidden: boolean;
|
|
@@ -24,7 +24,6 @@ import isNullOrUndefined from "../../utils/is_null_or_undefined";
|
|
|
24
24
|
import { normalizeAudioTrack, normalizeTextTrack, } from "../../utils/languages";
|
|
25
25
|
import objectAssign from "../../utils/object_assign";
|
|
26
26
|
import warnOnce from "../../utils/warn_once";
|
|
27
|
-
var DEFAULT_AUDIO_TRACK_SWITCHING_MODE = config.DEFAULT_AUDIO_TRACK_SWITCHING_MODE, DEFAULT_AUTO_PLAY = config.DEFAULT_AUTO_PLAY, DEFAULT_CODEC_SWITCHING_BEHAVIOR = config.DEFAULT_CODEC_SWITCHING_BEHAVIOR, DEFAULT_ENABLE_FAST_SWITCHING = config.DEFAULT_ENABLE_FAST_SWITCHING, DEFAULT_INITIAL_BITRATES = config.DEFAULT_INITIAL_BITRATES, DEFAULT_LIMIT_VIDEO_WIDTH = config.DEFAULT_LIMIT_VIDEO_WIDTH, DEFAULT_MANUAL_BITRATE_SWITCHING_MODE = config.DEFAULT_MANUAL_BITRATE_SWITCHING_MODE, DEFAULT_MIN_BITRATES = config.DEFAULT_MIN_BITRATES, DEFAULT_MAX_BITRATES = config.DEFAULT_MAX_BITRATES, DEFAULT_MAX_BUFFER_AHEAD = config.DEFAULT_MAX_BUFFER_AHEAD, DEFAULT_MAX_BUFFER_BEHIND = config.DEFAULT_MAX_BUFFER_BEHIND, DEFAULT_SHOW_NATIVE_SUBTITLE = config.DEFAULT_SHOW_NATIVE_SUBTITLE, DEFAULT_STOP_AT_END = config.DEFAULT_STOP_AT_END, DEFAULT_TEXT_TRACK_MODE = config.DEFAULT_TEXT_TRACK_MODE, DEFAULT_THROTTLE_WHEN_HIDDEN = config.DEFAULT_THROTTLE_WHEN_HIDDEN, DEFAULT_THROTTLE_VIDEO_BITRATE_WHEN_HIDDEN = config.DEFAULT_THROTTLE_VIDEO_BITRATE_WHEN_HIDDEN, DEFAULT_WANTED_BUFFER_AHEAD = config.DEFAULT_WANTED_BUFFER_AHEAD;
|
|
28
27
|
/**
|
|
29
28
|
* Parse options given to the API constructor and set default options as found
|
|
30
29
|
* in the config.
|
|
@@ -38,6 +37,7 @@ function parseConstructorOptions(options) {
|
|
|
38
37
|
var maxBufferAhead;
|
|
39
38
|
var maxBufferBehind;
|
|
40
39
|
var wantedBufferAhead;
|
|
40
|
+
var maxVideoBufferSize;
|
|
41
41
|
var throttleWhenHidden;
|
|
42
42
|
var throttleVideoBitrateWhenHidden;
|
|
43
43
|
var preferredAudioTracks;
|
|
@@ -50,6 +50,7 @@ function parseConstructorOptions(options) {
|
|
|
50
50
|
var minVideoBitrate;
|
|
51
51
|
var maxAudioBitrate;
|
|
52
52
|
var maxVideoBitrate;
|
|
53
|
+
var _a = config.getCurrent(), DEFAULT_INITIAL_BITRATES = _a.DEFAULT_INITIAL_BITRATES, DEFAULT_LIMIT_VIDEO_WIDTH = _a.DEFAULT_LIMIT_VIDEO_WIDTH, DEFAULT_MIN_BITRATES = _a.DEFAULT_MIN_BITRATES, DEFAULT_MAX_BITRATES = _a.DEFAULT_MAX_BITRATES, DEFAULT_MAX_BUFFER_AHEAD = _a.DEFAULT_MAX_BUFFER_AHEAD, DEFAULT_MAX_BUFFER_BEHIND = _a.DEFAULT_MAX_BUFFER_BEHIND, DEFAULT_MAX_VIDEO_BUFFER_SIZE = _a.DEFAULT_MAX_VIDEO_BUFFER_SIZE, DEFAULT_STOP_AT_END = _a.DEFAULT_STOP_AT_END, DEFAULT_THROTTLE_WHEN_HIDDEN = _a.DEFAULT_THROTTLE_WHEN_HIDDEN, DEFAULT_THROTTLE_VIDEO_BITRATE_WHEN_HIDDEN = _a.DEFAULT_THROTTLE_VIDEO_BITRATE_WHEN_HIDDEN, DEFAULT_WANTED_BUFFER_AHEAD = _a.DEFAULT_WANTED_BUFFER_AHEAD;
|
|
53
54
|
if (isNullOrUndefined(options.maxBufferAhead)) {
|
|
54
55
|
maxBufferAhead = DEFAULT_MAX_BUFFER_AHEAD;
|
|
55
56
|
}
|
|
@@ -79,6 +80,17 @@ function parseConstructorOptions(options) {
|
|
|
79
80
|
/* eslint-enable max-len */
|
|
80
81
|
}
|
|
81
82
|
}
|
|
83
|
+
if (isNullOrUndefined(options.maxVideoBufferSize)) {
|
|
84
|
+
maxVideoBufferSize = DEFAULT_MAX_VIDEO_BUFFER_SIZE;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
maxVideoBufferSize = Number(options.maxVideoBufferSize);
|
|
88
|
+
if (isNaN(maxVideoBufferSize)) {
|
|
89
|
+
/* eslint-disable max-len */
|
|
90
|
+
throw new Error("Invalid maxVideoBufferSize parameter. Should be a number.");
|
|
91
|
+
/* eslint-enable max-len */
|
|
92
|
+
}
|
|
93
|
+
}
|
|
82
94
|
var limitVideoWidth = isNullOrUndefined(options.limitVideoWidth) ?
|
|
83
95
|
DEFAULT_LIMIT_VIDEO_WIDTH :
|
|
84
96
|
!!options.limitVideoWidth;
|
|
@@ -218,7 +230,7 @@ function parseConstructorOptions(options) {
|
|
|
218
230
|
}
|
|
219
231
|
var stopAtEnd = isNullOrUndefined(options.stopAtEnd) ? DEFAULT_STOP_AT_END :
|
|
220
232
|
!!options.stopAtEnd;
|
|
221
|
-
return { maxBufferAhead: maxBufferAhead, maxBufferBehind: maxBufferBehind, limitVideoWidth: limitVideoWidth, videoElement: videoElement, wantedBufferAhead: wantedBufferAhead, throttleWhenHidden: throttleWhenHidden, throttleVideoBitrateWhenHidden: throttleVideoBitrateWhenHidden, preferredAudioTracks: preferredAudioTracks, preferredTextTracks: preferredTextTracks, preferredVideoTracks: preferredVideoTracks, initialAudioBitrate: initialAudioBitrate, initialVideoBitrate: initialVideoBitrate, minAudioBitrate: minAudioBitrate, minVideoBitrate: minVideoBitrate, maxAudioBitrate: maxAudioBitrate, maxVideoBitrate: maxVideoBitrate, stopAtEnd: stopAtEnd };
|
|
233
|
+
return { maxBufferAhead: maxBufferAhead, maxBufferBehind: maxBufferBehind, limitVideoWidth: limitVideoWidth, videoElement: videoElement, wantedBufferAhead: wantedBufferAhead, maxVideoBufferSize: maxVideoBufferSize, throttleWhenHidden: throttleWhenHidden, throttleVideoBitrateWhenHidden: throttleVideoBitrateWhenHidden, preferredAudioTracks: preferredAudioTracks, preferredTextTracks: preferredTextTracks, preferredVideoTracks: preferredVideoTracks, initialAudioBitrate: initialAudioBitrate, initialVideoBitrate: initialVideoBitrate, minAudioBitrate: minAudioBitrate, minVideoBitrate: minVideoBitrate, maxAudioBitrate: maxAudioBitrate, maxVideoBitrate: maxVideoBitrate, stopAtEnd: stopAtEnd };
|
|
222
234
|
}
|
|
223
235
|
/**
|
|
224
236
|
* Check the format of given reload options.
|
|
@@ -264,6 +276,7 @@ function parseLoadVideoOptions(options) {
|
|
|
264
276
|
var textTrackMode;
|
|
265
277
|
var textTrackElement;
|
|
266
278
|
var startAt;
|
|
279
|
+
var _g = config.getCurrent(), DEFAULT_AUDIO_TRACK_SWITCHING_MODE = _g.DEFAULT_AUDIO_TRACK_SWITCHING_MODE, DEFAULT_AUTO_PLAY = _g.DEFAULT_AUTO_PLAY, DEFAULT_CODEC_SWITCHING_BEHAVIOR = _g.DEFAULT_CODEC_SWITCHING_BEHAVIOR, DEFAULT_ENABLE_FAST_SWITCHING = _g.DEFAULT_ENABLE_FAST_SWITCHING, DEFAULT_MANUAL_BITRATE_SWITCHING_MODE = _g.DEFAULT_MANUAL_BITRATE_SWITCHING_MODE, DEFAULT_SHOW_NATIVE_SUBTITLE = _g.DEFAULT_SHOW_NATIVE_SUBTITLE, DEFAULT_TEXT_TRACK_MODE = _g.DEFAULT_TEXT_TRACK_MODE;
|
|
267
280
|
if (isNullOrUndefined(options)) {
|
|
268
281
|
throw new Error("No option set on loadVideo");
|
|
269
282
|
}
|
|
@@ -349,8 +362,8 @@ function parseLoadVideoOptions(options) {
|
|
|
349
362
|
"Please use the `TextTrackRenderer` tool instead.");
|
|
350
363
|
var supplementaryTextTracks = Array.isArray(options.supplementaryTextTracks) ?
|
|
351
364
|
options.supplementaryTextTracks : [options.supplementaryTextTracks];
|
|
352
|
-
for (var
|
|
353
|
-
var supplementaryTextTrack = supplementaryTextTracks_1[
|
|
365
|
+
for (var _h = 0, supplementaryTextTracks_1 = supplementaryTextTracks; _h < supplementaryTextTracks_1.length; _h++) {
|
|
366
|
+
var supplementaryTextTrack = supplementaryTextTracks_1[_h];
|
|
354
367
|
if (typeof supplementaryTextTrack.language !== "string" ||
|
|
355
368
|
typeof supplementaryTextTrack.mimeType !== "string" ||
|
|
356
369
|
typeof supplementaryTextTrack.url !== "string") {
|
|
@@ -365,8 +378,8 @@ function parseLoadVideoOptions(options) {
|
|
|
365
378
|
"Please use the `parseBifThumbnails` tool instead.");
|
|
366
379
|
var supplementaryImageTracks = Array.isArray(options.supplementaryImageTracks) ?
|
|
367
380
|
options.supplementaryImageTracks : [options.supplementaryImageTracks];
|
|
368
|
-
for (var
|
|
369
|
-
var supplementaryImageTrack = supplementaryImageTracks_1[
|
|
381
|
+
for (var _j = 0, supplementaryImageTracks_1 = supplementaryImageTracks; _j < supplementaryImageTracks_1.length; _j++) {
|
|
382
|
+
var supplementaryImageTrack = supplementaryImageTracks_1[_j];
|
|
370
383
|
if (typeof supplementaryImageTrack.mimeType !== "string" ||
|
|
371
384
|
typeof supplementaryImageTrack.url !== "string") {
|
|
372
385
|
throw new Error("Invalid supplementary image track given. " +
|
|
@@ -27,7 +27,6 @@ import config from "../../config";
|
|
|
27
27
|
import log from "../../log";
|
|
28
28
|
import objectAssign from "../../utils/object_assign";
|
|
29
29
|
import { getRange } from "../../utils/ranges";
|
|
30
|
-
var SAMPLING_INTERVAL_MEDIASOURCE = config.SAMPLING_INTERVAL_MEDIASOURCE, SAMPLING_INTERVAL_LOW_LATENCY = config.SAMPLING_INTERVAL_LOW_LATENCY, SAMPLING_INTERVAL_NO_MEDIASOURCE = config.SAMPLING_INTERVAL_NO_MEDIASOURCE, RESUME_GAP_AFTER_SEEKING = config.RESUME_GAP_AFTER_SEEKING, RESUME_GAP_AFTER_NOT_ENOUGH_DATA = config.RESUME_GAP_AFTER_NOT_ENOUGH_DATA, RESUME_GAP_AFTER_BUFFERING = config.RESUME_GAP_AFTER_BUFFERING, REBUFFERING_GAP = config.REBUFFERING_GAP, MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING = config.MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING;
|
|
31
30
|
/**
|
|
32
31
|
* HTMLMediaElement Events for which playback observations are calculated and
|
|
33
32
|
* emitted.
|
|
@@ -145,6 +144,7 @@ var PlaybackObserver = /** @class */ (function () {
|
|
|
145
144
|
PlaybackObserver.prototype._createInnerObservable = function () {
|
|
146
145
|
var _this = this;
|
|
147
146
|
return observableDefer(function () {
|
|
147
|
+
var _a = config.getCurrent(), SAMPLING_INTERVAL_MEDIASOURCE = _a.SAMPLING_INTERVAL_MEDIASOURCE, SAMPLING_INTERVAL_LOW_LATENCY = _a.SAMPLING_INTERVAL_LOW_LATENCY, SAMPLING_INTERVAL_NO_MEDIASOURCE = _a.SAMPLING_INTERVAL_NO_MEDIASOURCE;
|
|
148
148
|
var getCurrentObservation = function (event) {
|
|
149
149
|
var _a;
|
|
150
150
|
var tmpEvt = event;
|
|
@@ -212,6 +212,7 @@ function getRebufferingEndGap(rebufferingStatus, lowLatencyMode) {
|
|
|
212
212
|
}
|
|
213
213
|
var suffix = lowLatencyMode ? "LOW_LATENCY" :
|
|
214
214
|
"DEFAULT";
|
|
215
|
+
var _a = config.getCurrent(), RESUME_GAP_AFTER_SEEKING = _a.RESUME_GAP_AFTER_SEEKING, RESUME_GAP_AFTER_NOT_ENOUGH_DATA = _a.RESUME_GAP_AFTER_NOT_ENOUGH_DATA, RESUME_GAP_AFTER_BUFFERING = _a.RESUME_GAP_AFTER_BUFFERING;
|
|
215
216
|
switch (rebufferingStatus.reason) {
|
|
216
217
|
case "seeking":
|
|
217
218
|
return RESUME_GAP_AFTER_SEEKING[suffix];
|
|
@@ -228,6 +229,7 @@ function getRebufferingEndGap(rebufferingStatus, lowLatencyMode) {
|
|
|
228
229
|
* @returns {Boolean}
|
|
229
230
|
*/
|
|
230
231
|
function hasLoadedUntilTheEnd(currentRange, duration, lowLatencyMode) {
|
|
232
|
+
var REBUFFERING_GAP = config.getCurrent().REBUFFERING_GAP;
|
|
231
233
|
var suffix = lowLatencyMode ? "LOW_LATENCY" :
|
|
232
234
|
"DEFAULT";
|
|
233
235
|
return currentRange !== null &&
|
|
@@ -261,6 +263,7 @@ function getMediaInfos(mediaElement, event) {
|
|
|
261
263
|
*/
|
|
262
264
|
function getRebufferingStatus(prevObservation, currentInfo, _a) {
|
|
263
265
|
var withMediaSource = _a.withMediaSource, lowLatencyMode = _a.lowLatencyMode;
|
|
266
|
+
var REBUFFERING_GAP = config.getCurrent().REBUFFERING_GAP;
|
|
264
267
|
var currentEvt = currentInfo.event, currentTime = currentInfo.position, bufferGap = currentInfo.bufferGap, currentRange = currentInfo.currentRange, duration = currentInfo.duration, paused = currentInfo.paused, readyState = currentInfo.readyState, ended = currentInfo.ended;
|
|
265
268
|
var prevRebuffering = prevObservation.rebuffering, prevEvt = prevObservation.event, prevTime = prevObservation.position;
|
|
266
269
|
var fullyLoaded = hasLoadedUntilTheEnd(currentRange, duration, lowLatencyMode);
|
|
@@ -354,6 +357,7 @@ function getRebufferingStatus(prevObservation, currentInfo, _a) {
|
|
|
354
357
|
* @returns {Object|null}
|
|
355
358
|
*/
|
|
356
359
|
function getFreezingStatus(prevObservation, currentInfo) {
|
|
360
|
+
var MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING = config.getCurrent().MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING;
|
|
357
361
|
if (prevObservation.freezing) {
|
|
358
362
|
if (currentInfo.ended ||
|
|
359
363
|
currentInfo.paused ||
|
|
@@ -24,77 +24,6 @@ import { IInbandEvent } from "../stream";
|
|
|
24
24
|
import { IPlayerState } from "./get_player_state";
|
|
25
25
|
import { IConstructorOptions, ILoadVideoOptions } from "./option_utils";
|
|
26
26
|
import { IAudioTrackPreference, ITextTrackPreference, ITMAudioTrack, ITMAudioTrackListItem, ITMTextTrack, ITMTextTrackListItem, ITMVideoTrack, ITMVideoTrackListItem, IVideoTrackPreference } from "./track_choice_manager";
|
|
27
|
-
/** Payload emitted with a `positionUpdate` event. */
|
|
28
|
-
interface IPositionUpdateItem {
|
|
29
|
-
/** current position the player is in, in seconds. */
|
|
30
|
-
position: number;
|
|
31
|
-
/** Last position set for the current media currently, in seconds. */
|
|
32
|
-
duration: number;
|
|
33
|
-
/** Playback rate (i.e. speed) at which the current media is played. */
|
|
34
|
-
playbackRate: number;
|
|
35
|
-
/** Amount of buffer available for now in front of the current position, in seconds. */
|
|
36
|
-
bufferGap: number;
|
|
37
|
-
/** Current maximum seekable position. */
|
|
38
|
-
maximumBufferTime?: number | undefined;
|
|
39
|
-
wallClockTime?: number | undefined;
|
|
40
|
-
/**
|
|
41
|
-
* Only for live contents. Difference between the "live edge" and the current
|
|
42
|
-
* position, in seconds.
|
|
43
|
-
*/
|
|
44
|
-
liveGap?: number | undefined;
|
|
45
|
-
}
|
|
46
|
-
/** Payload emitted with a `bitrateEstimationChange` event. */
|
|
47
|
-
interface IBitrateEstimate {
|
|
48
|
-
/** The type of buffer this estimate was done for (e.g. "audio). */
|
|
49
|
-
type: IBufferType;
|
|
50
|
-
/** The calculated bitrate, in bits per seconds. */
|
|
51
|
-
bitrate: number | undefined;
|
|
52
|
-
}
|
|
53
|
-
export declare type IStreamEvent = {
|
|
54
|
-
data: IStreamEventData;
|
|
55
|
-
start: number;
|
|
56
|
-
end: number;
|
|
57
|
-
onExit?: () => void;
|
|
58
|
-
} | {
|
|
59
|
-
data: IStreamEventData;
|
|
60
|
-
start: number;
|
|
61
|
-
};
|
|
62
|
-
/** Every events sent by the RxPlayer's public API. */
|
|
63
|
-
interface IPublicAPIEvent {
|
|
64
|
-
playerStateChange: string;
|
|
65
|
-
positionUpdate: IPositionUpdateItem;
|
|
66
|
-
audioTrackChange: ITMAudioTrack | null;
|
|
67
|
-
textTrackChange: ITMTextTrack | null;
|
|
68
|
-
videoTrackChange: ITMVideoTrack | null;
|
|
69
|
-
audioBitrateChange: number;
|
|
70
|
-
videoBitrateChange: number;
|
|
71
|
-
imageTrackUpdate: {
|
|
72
|
-
data: IBifThumbnail[];
|
|
73
|
-
};
|
|
74
|
-
fullscreenChange: boolean;
|
|
75
|
-
bitrateEstimationChange: IBitrateEstimate;
|
|
76
|
-
volumeChange: number;
|
|
77
|
-
error: ICustomError | Error;
|
|
78
|
-
warning: ICustomError | Error;
|
|
79
|
-
nativeTextTracksChange: TextTrack[];
|
|
80
|
-
periodChange: Period;
|
|
81
|
-
availableAudioBitratesChange: number[];
|
|
82
|
-
availableVideoBitratesChange: number[];
|
|
83
|
-
availableAudioTracksChange: ITMAudioTrackListItem[];
|
|
84
|
-
availableTextTracksChange: ITMTextTrackListItem[];
|
|
85
|
-
availableVideoTracksChange: ITMVideoTrackListItem[];
|
|
86
|
-
decipherabilityUpdate: Array<{
|
|
87
|
-
manifest: Manifest;
|
|
88
|
-
period: Period;
|
|
89
|
-
adaptation: Adaptation;
|
|
90
|
-
representation: Representation;
|
|
91
|
-
}>;
|
|
92
|
-
seeking: null;
|
|
93
|
-
seeked: null;
|
|
94
|
-
streamEvent: IStreamEvent;
|
|
95
|
-
streamEventSkip: IStreamEvent;
|
|
96
|
-
inbandEvents: IInbandEvent[];
|
|
97
|
-
}
|
|
98
27
|
/**
|
|
99
28
|
* @class Player
|
|
100
29
|
* @extends EventEmitter
|
|
@@ -594,6 +523,12 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
594
523
|
* @param {Number} sizeInSeconds
|
|
595
524
|
*/
|
|
596
525
|
setWantedBufferAhead(sizeInSeconds: number): void;
|
|
526
|
+
/**
|
|
527
|
+
* Set the max buffer size the buffer should take in memory
|
|
528
|
+
* The player . will stop downloading chunks when this size is reached.
|
|
529
|
+
* @param {Number} sizeInKBytes
|
|
530
|
+
*/
|
|
531
|
+
setMaxVideoBufferSize(sizeInKBytes: number): void;
|
|
597
532
|
/**
|
|
598
533
|
* Returns the max buffer size for the buffer behind the current position.
|
|
599
534
|
* @returns {Number}
|
|
@@ -609,6 +544,11 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
609
544
|
* @returns {Number}
|
|
610
545
|
*/
|
|
611
546
|
getWantedBufferAhead(): number;
|
|
547
|
+
/**
|
|
548
|
+
* Returns the max buffer memory size for the buffer in kilobytes
|
|
549
|
+
* @returns {Number}
|
|
550
|
+
*/
|
|
551
|
+
getMaxVideoBufferSize(): number;
|
|
612
552
|
/**
|
|
613
553
|
* Returns type of current keysystem (e.g. playready, widevine) if the content
|
|
614
554
|
* is encrypted. null otherwise.
|
|
@@ -865,5 +805,76 @@ declare class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
865
805
|
private _priv_triggerCurrentBitrateChangeEvent;
|
|
866
806
|
private _priv_getCurrentRepresentations;
|
|
867
807
|
}
|
|
808
|
+
/** Payload emitted with a `positionUpdate` event. */
|
|
809
|
+
export interface IPositionUpdateItem {
|
|
810
|
+
/** current position the player is in, in seconds. */
|
|
811
|
+
position: number;
|
|
812
|
+
/** Last position set for the current media currently, in seconds. */
|
|
813
|
+
duration: number;
|
|
814
|
+
/** Playback rate (i.e. speed) at which the current media is played. */
|
|
815
|
+
playbackRate: number;
|
|
816
|
+
/** Amount of buffer available for now in front of the current position, in seconds. */
|
|
817
|
+
bufferGap: number;
|
|
818
|
+
/** Current maximum seekable position. */
|
|
819
|
+
maximumBufferTime?: number | undefined;
|
|
820
|
+
wallClockTime?: number | undefined;
|
|
821
|
+
/**
|
|
822
|
+
* Only for live contents. Difference between the "live edge" and the current
|
|
823
|
+
* position, in seconds.
|
|
824
|
+
*/
|
|
825
|
+
liveGap?: number | undefined;
|
|
826
|
+
}
|
|
827
|
+
/** Payload emitted with a `bitrateEstimationChange` event. */
|
|
828
|
+
export interface IBitrateEstimate {
|
|
829
|
+
/** The type of buffer this estimate was done for (e.g. "audio). */
|
|
830
|
+
type: IBufferType;
|
|
831
|
+
/** The calculated bitrate, in bits per seconds. */
|
|
832
|
+
bitrate: number | undefined;
|
|
833
|
+
}
|
|
834
|
+
export declare type IStreamEvent = {
|
|
835
|
+
data: IStreamEventData;
|
|
836
|
+
start: number;
|
|
837
|
+
end: number;
|
|
838
|
+
onExit?: () => void;
|
|
839
|
+
} | {
|
|
840
|
+
data: IStreamEventData;
|
|
841
|
+
start: number;
|
|
842
|
+
};
|
|
843
|
+
/** Every events sent by the RxPlayer's public API. */
|
|
844
|
+
interface IPublicAPIEvent {
|
|
845
|
+
playerStateChange: string;
|
|
846
|
+
positionUpdate: IPositionUpdateItem;
|
|
847
|
+
audioTrackChange: ITMAudioTrack | null;
|
|
848
|
+
textTrackChange: ITMTextTrack | null;
|
|
849
|
+
videoTrackChange: ITMVideoTrack | null;
|
|
850
|
+
audioBitrateChange: number;
|
|
851
|
+
videoBitrateChange: number;
|
|
852
|
+
imageTrackUpdate: {
|
|
853
|
+
data: IBifThumbnail[];
|
|
854
|
+
};
|
|
855
|
+
fullscreenChange: boolean;
|
|
856
|
+
bitrateEstimationChange: IBitrateEstimate;
|
|
857
|
+
volumeChange: number;
|
|
858
|
+
error: ICustomError | Error;
|
|
859
|
+
warning: ICustomError | Error;
|
|
860
|
+
nativeTextTracksChange: TextTrack[];
|
|
861
|
+
periodChange: Period;
|
|
862
|
+
availableAudioBitratesChange: number[];
|
|
863
|
+
availableVideoBitratesChange: number[];
|
|
864
|
+
availableAudioTracksChange: ITMAudioTrackListItem[];
|
|
865
|
+
availableTextTracksChange: ITMTextTrackListItem[];
|
|
866
|
+
availableVideoTracksChange: ITMVideoTrackListItem[];
|
|
867
|
+
decipherabilityUpdate: Array<{
|
|
868
|
+
manifest: Manifest;
|
|
869
|
+
period: Period;
|
|
870
|
+
adaptation: Adaptation;
|
|
871
|
+
representation: Representation;
|
|
872
|
+
}>;
|
|
873
|
+
seeking: null;
|
|
874
|
+
seeked: null;
|
|
875
|
+
streamEvent: IStreamEvent;
|
|
876
|
+
streamEventSkip: IStreamEvent;
|
|
877
|
+
inbandEvents: IInbandEvent[];
|
|
878
|
+
}
|
|
868
879
|
export default Player;
|
|
869
880
|
export { IStreamEventData };
|
|
@@ -60,7 +60,7 @@ import PPromise from "../../utils/promise";
|
|
|
60
60
|
import { getLeftSizeOfRange, getPlayedSizeOfRange, getSizeOfRange, } from "../../utils/ranges";
|
|
61
61
|
import createSharedReference from "../../utils/reference";
|
|
62
62
|
import warnOnce from "../../utils/warn_once";
|
|
63
|
-
import {
|
|
63
|
+
import { clearOnStop, disposeDecryptionResources, getCurrentKeySystem, } from "../decrypt";
|
|
64
64
|
import { ManifestFetcher, SegmentFetcherCreator, } from "../fetchers";
|
|
65
65
|
import initializeMediaSourcePlayback from "../init";
|
|
66
66
|
import emitSeekEvents from "./emit_seek_events";
|
|
@@ -69,7 +69,6 @@ import { checkReloadOptions, parseConstructorOptions, parseLoadVideoOptions, } f
|
|
|
69
69
|
import PlaybackObserver from "./playback_observer";
|
|
70
70
|
import TrackChoiceManager from "./track_choice_manager";
|
|
71
71
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
72
|
-
var DEFAULT_UNMUTED_VOLUME = config.DEFAULT_UNMUTED_VOLUME;
|
|
73
72
|
var isPageActive = events.isPageActive, isVideoVisible = events.isVideoVisible, onEnded$ = events.onEnded$, onFullscreenChange$ = events.onFullscreenChange$, onPlayPause$ = events.onPlayPause$, onPictureInPictureEvent$ = events.onPictureInPictureEvent$, onSeeking$ = events.onSeeking$, onTextTrackChanges$ = events.onTextTrackChanges$, videoWidth$ = events.videoWidth$;
|
|
74
73
|
/**
|
|
75
74
|
* @class Player
|
|
@@ -84,11 +83,12 @@ var Player = /** @class */ (function (_super) {
|
|
|
84
83
|
function Player(options) {
|
|
85
84
|
if (options === void 0) { options = {}; }
|
|
86
85
|
var _this = _super.call(this) || this;
|
|
87
|
-
var _a = parseConstructorOptions(options), initialAudioBitrate = _a.initialAudioBitrate, initialVideoBitrate = _a.initialVideoBitrate, limitVideoWidth = _a.limitVideoWidth, minAudioBitrate = _a.minAudioBitrate, minVideoBitrate = _a.minVideoBitrate, maxAudioBitrate = _a.maxAudioBitrate, maxBufferAhead = _a.maxBufferAhead, maxBufferBehind = _a.maxBufferBehind, maxVideoBitrate = _a.maxVideoBitrate, preferredAudioTracks = _a.preferredAudioTracks, preferredTextTracks = _a.preferredTextTracks, preferredVideoTracks = _a.preferredVideoTracks, throttleWhenHidden = _a.throttleWhenHidden, throttleVideoBitrateWhenHidden = _a.throttleVideoBitrateWhenHidden, videoElement = _a.videoElement, wantedBufferAhead = _a.wantedBufferAhead, stopAtEnd = _a.stopAtEnd;
|
|
86
|
+
var _a = parseConstructorOptions(options), initialAudioBitrate = _a.initialAudioBitrate, initialVideoBitrate = _a.initialVideoBitrate, limitVideoWidth = _a.limitVideoWidth, minAudioBitrate = _a.minAudioBitrate, minVideoBitrate = _a.minVideoBitrate, maxAudioBitrate = _a.maxAudioBitrate, maxBufferAhead = _a.maxBufferAhead, maxBufferBehind = _a.maxBufferBehind, maxVideoBitrate = _a.maxVideoBitrate, preferredAudioTracks = _a.preferredAudioTracks, preferredTextTracks = _a.preferredTextTracks, preferredVideoTracks = _a.preferredVideoTracks, throttleWhenHidden = _a.throttleWhenHidden, throttleVideoBitrateWhenHidden = _a.throttleVideoBitrateWhenHidden, videoElement = _a.videoElement, wantedBufferAhead = _a.wantedBufferAhead, maxVideoBufferSize = _a.maxVideoBufferSize, stopAtEnd = _a.stopAtEnd;
|
|
87
|
+
var DEFAULT_UNMUTED_VOLUME = config.getCurrent().DEFAULT_UNMUTED_VOLUME;
|
|
88
88
|
// Workaround to support Firefox autoplay on FF 42.
|
|
89
89
|
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
|
|
90
90
|
videoElement.preload = "auto";
|
|
91
|
-
_this.version = /* PLAYER_VERSION */ "3.
|
|
91
|
+
_this.version = /* PLAYER_VERSION */ "3.27.0-dev.2022031700";
|
|
92
92
|
_this.log = log;
|
|
93
93
|
_this.state = "STOPPED";
|
|
94
94
|
_this.videoElement = videoElement;
|
|
@@ -138,6 +138,7 @@ var Player = /** @class */ (function (_super) {
|
|
|
138
138
|
wantedBufferAhead: createSharedReference(wantedBufferAhead),
|
|
139
139
|
maxBufferAhead: createSharedReference(maxBufferAhead),
|
|
140
140
|
maxBufferBehind: createSharedReference(maxBufferBehind),
|
|
141
|
+
maxVideoBufferSize: createSharedReference(maxVideoBufferSize),
|
|
141
142
|
};
|
|
142
143
|
_this._priv_bitrateInfos = {
|
|
143
144
|
lastBitrates: { audio: initialAudioBitrate,
|
|
@@ -224,8 +225,13 @@ var Player = /** @class */ (function (_super) {
|
|
|
224
225
|
// free resources linked to the loaded content
|
|
225
226
|
this.stop();
|
|
226
227
|
if (this.videoElement !== null) {
|
|
227
|
-
// free resources used for
|
|
228
|
-
|
|
228
|
+
// free resources used for decryption management
|
|
229
|
+
disposeDecryptionResources(this.videoElement)
|
|
230
|
+
.catch(function (err) {
|
|
231
|
+
var message = err instanceof Error ? err.message :
|
|
232
|
+
"Unknown error";
|
|
233
|
+
log.error("API: Could not dispose decryption resources: " + message);
|
|
234
|
+
});
|
|
229
235
|
}
|
|
230
236
|
// free Observables linked to the Player instance
|
|
231
237
|
this._priv_destroy$.next();
|
|
@@ -236,6 +242,7 @@ var Player = /** @class */ (function (_super) {
|
|
|
236
242
|
this._priv_speed.finish();
|
|
237
243
|
this._priv_contentLock.finish();
|
|
238
244
|
this._priv_bufferOptions.wantedBufferAhead.finish();
|
|
245
|
+
this._priv_bufferOptions.maxVideoBufferSize.finish();
|
|
239
246
|
this._priv_bufferOptions.maxBufferAhead.finish();
|
|
240
247
|
this._priv_bufferOptions.maxBufferBehind.finish();
|
|
241
248
|
this._priv_bitrateInfos.manualBitrates.video.finish();
|
|
@@ -527,18 +534,23 @@ var Player = /** @class */ (function (_super) {
|
|
|
527
534
|
}));
|
|
528
535
|
/** Emit all player "state" updates. */
|
|
529
536
|
var playerState$ = observableConcat(observableOf(PLAYER_STATES.LOADING), // Begin with LOADING
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
537
|
+
loaded$.pipe(switchMap(function (_, i) {
|
|
538
|
+
var isFirstLoad = i === 0;
|
|
539
|
+
return observableMerge(
|
|
540
|
+
// Purposely subscribed first so a RELOADING triggered synchronously
|
|
541
|
+
// after a LOADED state is catched.
|
|
542
|
+
reloading$.pipe(map(function () { return PLAYER_STATES.RELOADING; })),
|
|
543
|
+
// Only switch to LOADED state for the first (i.e. non-RELOADING) load
|
|
544
|
+
isFirstLoad ? observableOf(PLAYER_STATES.LOADED) :
|
|
545
|
+
EMPTY,
|
|
546
|
+
// Purposely put last so any other state change happens after we've
|
|
547
|
+
// already switched to LOADED
|
|
548
|
+
loadedStateUpdates$.pipe(takeUntil(reloading$),
|
|
549
|
+
// For the first load, we prefer staying at the LOADED state over
|
|
550
|
+
// PAUSED when autoPlay is disabled.
|
|
551
|
+
// For consecutive loads however, there's no LOADED state.
|
|
552
|
+
skipWhile(function (state) { return isFirstLoad && state === PLAYER_STATES.PAUSED; })));
|
|
553
|
+
}))).pipe(distinctUntilChanged());
|
|
542
554
|
var playbackSubscription;
|
|
543
555
|
stopContent$
|
|
544
556
|
.pipe(take(1))
|
|
@@ -794,7 +806,22 @@ var Player = /** @class */ (function (_super) {
|
|
|
794
806
|
}
|
|
795
807
|
var _a = this._priv_contentInfos, isDirectFile = _a.isDirectFile, manifest = _a.manifest;
|
|
796
808
|
if (isDirectFile) {
|
|
797
|
-
|
|
809
|
+
// Calculating the "wall-clock time" necessitate to obtain first an offset,
|
|
810
|
+
// and then adding that offset to the HTMLMediaElement's current position.
|
|
811
|
+
// That offset is in most case present inside the Manifest file, yet in
|
|
812
|
+
// directfile mode, the RxPlayer won't parse that file, the browser does it.
|
|
813
|
+
//
|
|
814
|
+
// Thankfully Safari declares a `getStartDate` method allowing to obtain
|
|
815
|
+
// that offset when available. This logic is thus mainly useful when
|
|
816
|
+
// playing HLS contents in directfile mode on Safari.
|
|
817
|
+
var mediaElement = this.videoElement;
|
|
818
|
+
if (typeof mediaElement.getStartDate === "function") {
|
|
819
|
+
var startDate = mediaElement.getStartDate();
|
|
820
|
+
if (typeof startDate === "number" && !isNaN(startDate)) {
|
|
821
|
+
return startDate + mediaElement.currentTime;
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
return mediaElement.currentTime;
|
|
798
825
|
}
|
|
799
826
|
if (manifest !== null) {
|
|
800
827
|
var currentTime = this.videoElement.currentTime;
|
|
@@ -1173,6 +1200,7 @@ var Player = /** @class */ (function (_super) {
|
|
|
1173
1200
|
* If the volume was set to 0, set a default volume instead (see config).
|
|
1174
1201
|
*/
|
|
1175
1202
|
Player.prototype.unMute = function () {
|
|
1203
|
+
var DEFAULT_UNMUTED_VOLUME = config.getCurrent().DEFAULT_UNMUTED_VOLUME;
|
|
1176
1204
|
var vol = this.getVolume();
|
|
1177
1205
|
if (vol === 0) {
|
|
1178
1206
|
this.setVolume(this._priv_mutedMemory === 0 ? DEFAULT_UNMUTED_VOLUME :
|
|
@@ -1271,6 +1299,14 @@ var Player = /** @class */ (function (_super) {
|
|
|
1271
1299
|
Player.prototype.setWantedBufferAhead = function (sizeInSeconds) {
|
|
1272
1300
|
this._priv_bufferOptions.wantedBufferAhead.setValue(sizeInSeconds);
|
|
1273
1301
|
};
|
|
1302
|
+
/**
|
|
1303
|
+
* Set the max buffer size the buffer should take in memory
|
|
1304
|
+
* The player . will stop downloading chunks when this size is reached.
|
|
1305
|
+
* @param {Number} sizeInKBytes
|
|
1306
|
+
*/
|
|
1307
|
+
Player.prototype.setMaxVideoBufferSize = function (sizeInKBytes) {
|
|
1308
|
+
this._priv_bufferOptions.maxVideoBufferSize.setValue(sizeInKBytes);
|
|
1309
|
+
};
|
|
1274
1310
|
/**
|
|
1275
1311
|
* Returns the max buffer size for the buffer behind the current position.
|
|
1276
1312
|
* @returns {Number}
|
|
@@ -1292,6 +1328,13 @@ var Player = /** @class */ (function (_super) {
|
|
|
1292
1328
|
Player.prototype.getWantedBufferAhead = function () {
|
|
1293
1329
|
return this._priv_bufferOptions.wantedBufferAhead.getValue();
|
|
1294
1330
|
};
|
|
1331
|
+
/**
|
|
1332
|
+
* Returns the max buffer memory size for the buffer in kilobytes
|
|
1333
|
+
* @returns {Number}
|
|
1334
|
+
*/
|
|
1335
|
+
Player.prototype.getMaxVideoBufferSize = function () {
|
|
1336
|
+
return this._priv_bufferOptions.maxVideoBufferSize.getValue();
|
|
1337
|
+
};
|
|
1295
1338
|
/**
|
|
1296
1339
|
* Returns type of current keysystem (e.g. playready, widevine) if the content
|
|
1297
1340
|
* is encrypted. null otherwise.
|
|
@@ -1712,24 +1755,20 @@ var Player = /** @class */ (function (_super) {
|
|
|
1712
1755
|
(_a = this._priv_mediaElementTrackChoiceManager) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
1713
1756
|
this._priv_mediaElementTrackChoiceManager = null;
|
|
1714
1757
|
this._priv_contentEventsMemory = {};
|
|
1715
|
-
//
|
|
1758
|
+
// DRM-related clean-up
|
|
1716
1759
|
var freeUpContentLock = function () {
|
|
1717
1760
|
log.debug("Unlocking `contentLock`. Next content can begin.");
|
|
1718
1761
|
_this._priv_contentLock.setValue(false);
|
|
1719
1762
|
};
|
|
1720
1763
|
if (!isNullOrUndefined(this.videoElement)) {
|
|
1721
|
-
|
|
1722
|
-
.
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
complete: function () {
|
|
1730
|
-
log.debug("API: EME session cleaned-up with success!");
|
|
1731
|
-
freeUpContentLock();
|
|
1732
|
-
},
|
|
1764
|
+
clearOnStop(this.videoElement).then(function () {
|
|
1765
|
+
log.debug("API: DRM session cleaned-up with success!");
|
|
1766
|
+
freeUpContentLock();
|
|
1767
|
+
}, function (err) {
|
|
1768
|
+
log.error("API: An error arised when trying to clean-up the DRM session:" +
|
|
1769
|
+
(err instanceof Error ? err.toString() :
|
|
1770
|
+
"Unknown Error"));
|
|
1771
|
+
freeUpContentLock();
|
|
1733
1772
|
});
|
|
1734
1773
|
}
|
|
1735
1774
|
else {
|
|
@@ -2264,5 +2303,5 @@ var Player = /** @class */ (function (_super) {
|
|
|
2264
2303
|
};
|
|
2265
2304
|
return Player;
|
|
2266
2305
|
}(EventEmitter));
|
|
2267
|
-
Player.version = /* PLAYER_VERSION */ "3.
|
|
2306
|
+
Player.version = /* PLAYER_VERSION */ "3.27.0-dev.2022031700";
|
|
2268
2307
|
export default Player;
|