rx-player 3.26.2 → 3.27.0-dev.20220317
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/perfs.yml +22 -0
- package/CHANGELOG.md +33 -1
- package/FILES.md +5 -4
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/browser_detection.d.ts +4 -2
- package/dist/_esm5.processed/compat/browser_detection.js +4 -2
- package/dist/_esm5.processed/compat/eme/close_session.d.ts +11 -5
- package/dist/_esm5.processed/compat/eme/close_session.js +144 -36
- package/dist/_esm5.processed/compat/eme/custom_media_keys/index.d.ts +3 -5
- package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +27 -24
- package/dist/_esm5.processed/compat/eme/custom_media_keys/old_webkit_media_keys.js +53 -34
- package/dist/_esm5.processed/compat/eme/custom_media_keys/webkit_media_keys.js +43 -41
- package/dist/_esm5.processed/compat/eme/generate_key_request.d.ts +2 -3
- package/dist/_esm5.processed/compat/eme/generate_key_request.js +22 -26
- package/dist/_esm5.processed/compat/eme/load_session.d.ts +1 -2
- package/dist/_esm5.processed/compat/eme/load_session.js +68 -17
- package/dist/_esm5.processed/compat/event_listeners.js +2 -1
- package/dist/_esm5.processed/compat/should_favour_custom_safari_EME.js +2 -2
- package/dist/_esm5.processed/config.d.ts +166 -1080
- package/dist/_esm5.processed/config.js +17 -1119
- package/dist/_esm5.processed/core/abr/bandwidth_estimator.js +4 -1
- package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +28 -6
- package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +63 -12
- package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +1 -1
- package/dist/_esm5.processed/core/abr/network_analyzer.js +2 -1
- package/dist/_esm5.processed/core/abr/pending_requests_store.js +3 -5
- package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +1 -1
- package/dist/_esm5.processed/core/abr/representation_estimator.js +2 -2
- package/dist/_esm5.processed/core/api/get_player_state.js +1 -1
- package/dist/_esm5.processed/core/api/index.d.ts +2 -1
- package/dist/_esm5.processed/core/api/media_element_track_choice_manager.d.ts +6 -0
- package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +22 -4
- package/dist/_esm5.processed/core/api/option_utils.d.ts +3 -1
- package/dist/_esm5.processed/core/api/option_utils.js +19 -6
- package/dist/_esm5.processed/core/api/playback_observer.js +5 -1
- package/dist/_esm5.processed/core/api/public_api.d.ts +82 -71
- package/dist/_esm5.processed/core/api/public_api.js +72 -33
- package/dist/_esm5.processed/core/api/track_choice_manager.d.ts +6 -6
- package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.d.ts +7 -51
- package/dist/_esm5.processed/core/{eme → decrypt}/__tests__/__global__/utils.js +30 -75
- package/dist/_esm5.processed/core/{eme → decrypt}/attach_media_keys.d.ts +12 -12
- package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +104 -0
- package/dist/_esm5.processed/core/{eme/clear_eme_session.d.ts → decrypt/clear_on_stop.d.ts} +3 -4
- package/dist/_esm5.processed/core/decrypt/clear_on_stop.js +41 -0
- package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +216 -0
- package/dist/_esm5.processed/core/decrypt/content_decryptor.js +866 -0
- package/dist/_esm5.processed/core/{eme/get_session.d.ts → decrypt/create_or_load_session.d.ts} +28 -26
- package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +124 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/create_session.d.ts +22 -19
- package/dist/_esm5.processed/core/decrypt/create_session.js +174 -0
- package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.d.ts +21 -0
- package/dist/_esm5.processed/core/decrypt/dispose_decryption_resources.js +81 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/find_key_system.d.ts +11 -14
- package/dist/_esm5.processed/core/decrypt/find_key_system.js +300 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.d.ts +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/get_current_key_system.js +1 -1
- package/dist/_esm5.processed/core/{eme → decrypt}/get_media_keys.d.ts +13 -5
- package/dist/_esm5.processed/core/decrypt/get_media_keys.js +153 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/index.d.ts +5 -6
- package/dist/_esm5.processed/core/{eme → decrypt}/index.js +5 -5
- package/dist/_esm5.processed/core/{eme → decrypt}/init_media_keys.d.ts +6 -4
- package/dist/_esm5.processed/core/decrypt/init_media_keys.js +82 -0
- package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +77 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/session_events_listener.js +25 -24
- package/dist/_esm5.processed/core/{eme → decrypt}/set_server_certificate.d.ts +15 -6
- package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +141 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/types.d.ts +120 -242
- package/dist/_esm5.processed/core/{eme → decrypt}/types.js +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.d.ts +3 -3
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/are_init_values_compatible.js +5 -5
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.d.ts +2 -2
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/check_key_statuses.js +4 -3
- package/dist/_esm5.processed/core/{eme/utils/close_session.d.ts → decrypt/utils/clean_old_loaded_sessions.d.ts} +8 -7
- package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +85 -0
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.d.ts +1 -1
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.js +2 -2
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.d.ts +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/get_drm_system_id.js +1 -1
- package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.d.ts +69 -0
- package/dist/_esm5.processed/core/decrypt/utils/init_data_values_container.js +99 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.d.ts +0 -1
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/is_session_usable.js +4 -5
- package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.d.ts +44 -0
- package/dist/_esm5.processed/core/decrypt/utils/key_id_comparison.js +77 -0
- package/dist/_esm5.processed/core/decrypt/utils/key_session_record.d.ts +104 -0
- package/dist/_esm5.processed/core/decrypt/utils/key_session_record.js +155 -0
- package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +108 -0
- package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +303 -0
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.d.ts +4 -4
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/media_keys_infos_store.js +0 -0
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.d.ts +8 -18
- package/dist/_esm5.processed/core/{eme → decrypt}/utils/persistent_sessions_store.js +119 -97
- package/dist/_esm5.processed/core/{eme/utils/init_data_container.d.ts → decrypt/utils/serializable_bytes.d.ts} +8 -5
- package/dist/_esm5.processed/core/{eme/utils/init_data_container.js → decrypt/utils/serializable_bytes.js} +9 -9
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.d.ts +1 -1
- package/dist/_esm5.processed/core/{eme → decrypt/utils}/server_certificate_store.js +1 -1
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +4 -4
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +3 -3
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +2 -2
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +6 -2
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
- package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +1 -1
- package/dist/_esm5.processed/core/init/get_initial_time.js +1 -1
- package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +3 -3
- package/dist/_esm5.processed/core/init/initialize_directfile.js +11 -17
- package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +5 -3
- package/dist/_esm5.processed/core/init/initialize_media_source.js +18 -69
- package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +61 -0
- package/dist/_esm5.processed/core/init/link_drm_and_content.js +94 -0
- package/dist/_esm5.processed/core/init/manifest_update_scheduler.d.ts +4 -4
- package/dist/_esm5.processed/core/init/manifest_update_scheduler.js +2 -1
- package/dist/_esm5.processed/core/init/stall_avoider.js +1 -1
- package/dist/_esm5.processed/core/init/stream_events_emitter/are_same_stream_events.d.ts +4 -4
- package/dist/_esm5.processed/core/init/stream_events_emitter/stream_events_emitter.js +1 -1
- package/dist/_esm5.processed/core/init/stream_events_emitter/types.d.ts +2 -2
- package/dist/_esm5.processed/core/init/types.d.ts +2 -4
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +3 -3
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +3 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +32 -31
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +4 -4
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +17 -1
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +22 -5
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +2 -1
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +6 -3
- package/dist/_esm5.processed/core/stream/events_generators.d.ts +8 -3
- package/dist/_esm5.processed/core/stream/events_generators.js +3 -2
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +1 -0
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +3 -3
- package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -1
- package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.js +1 -1
- package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +2 -1
- package/dist/_esm5.processed/core/stream/period/period_stream.js +3 -3
- package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +5 -6
- package/dist/_esm5.processed/core/stream/representation/get_buffer_status.d.ts +6 -1
- package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +12 -9
- package/dist/_esm5.processed/core/stream/representation/get_needed_segments.d.ts +19 -14
- package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +86 -10
- package/dist/_esm5.processed/core/stream/representation/get_segment_priority.js +1 -1
- package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +3 -3
- package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +6 -0
- package/dist/_esm5.processed/core/stream/representation/representation_stream.js +19 -8
- package/dist/_esm5.processed/core/stream/types.d.ts +1 -1
- package/dist/_esm5.processed/default_config.d.ts +1114 -0
- package/dist/_esm5.processed/default_config.js +1145 -0
- package/dist/_esm5.processed/errors/request_error.js +3 -1
- package/dist/_esm5.processed/experimental/index.d.ts +2 -0
- package/dist/_esm5.processed/experimental/index.js +2 -0
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.d.ts +1 -0
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.d.ts +2 -2
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +2 -4
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +1 -1
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -1
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.js +1 -2
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.d.ts +3 -3
- package/dist/_esm5.processed/features/features_object.js +1 -1
- package/dist/_esm5.processed/features/initialize_features.js +1 -1
- package/dist/_esm5.processed/features/list/eme.d.ts +3 -3
- package/dist/_esm5.processed/features/list/eme.js +5 -5
- package/dist/_esm5.processed/features/types.d.ts +3 -3
- package/dist/_esm5.processed/manifest/adaptation.d.ts +2 -2
- package/dist/_esm5.processed/manifest/adaptation.js +3 -1
- package/dist/_esm5.processed/manifest/manifest.d.ts +10 -23
- package/dist/_esm5.processed/manifest/manifest.js +10 -74
- package/dist/_esm5.processed/manifest/period.d.ts +3 -3
- package/dist/_esm5.processed/manifest/representation.d.ts +37 -5
- package/dist/_esm5.processed/manifest/representation_index/types.d.ts +18 -18
- package/dist/_esm5.processed/manifest/types.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.d.ts +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +6 -6
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/is_period_fulfilled.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +14 -14
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +17 -17
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +28 -20
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +20 -5
- package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +17 -35
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +109 -96
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +8 -8
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +18 -27
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +25 -23
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +21 -15
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +19 -19
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +15 -38
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +8 -8
- package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +30 -30
- package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +7 -7
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -0
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +8 -8
- package/dist/_esm5.processed/parsers/manifest/types.d.ts +28 -28
- package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.d.ts +3 -2
- package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +15 -5
- package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.d.ts +11 -1
- package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +31 -19
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.d.ts +2 -2
- package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.d.ts +1 -1
- package/dist/_esm5.processed/public_types.d.ts +2 -2
- package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +2 -1
- package/dist/_esm5.processed/transports/dash/image_pipelines.js +4 -1
- package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
- package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
- package/dist/_esm5.processed/transports/dash/segment_loader.js +2 -2
- package/dist/_esm5.processed/transports/dash/segment_parser.d.ts +1 -1
- package/dist/_esm5.processed/transports/dash/segment_parser.js +6 -3
- package/dist/_esm5.processed/transports/dash/text_loader.d.ts +1 -1
- package/dist/_esm5.processed/transports/dash/text_loader.js +1 -1
- package/dist/_esm5.processed/transports/dash/text_parser.d.ts +1 -1
- package/dist/_esm5.processed/transports/dash/text_parser.js +8 -2
- package/dist/_esm5.processed/transports/local/segment_loader.d.ts +1 -2
- package/dist/_esm5.processed/transports/local/segment_loader.js +1 -1
- package/dist/_esm5.processed/transports/local/segment_parser.js +4 -1
- package/dist/_esm5.processed/transports/local/text_parser.js +8 -2
- package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.d.ts +1 -1
- package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
- package/dist/_esm5.processed/transports/smooth/pipelines.js +69 -11
- package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +0 -1
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +2 -2
- package/dist/_esm5.processed/transports/types.d.ts +58 -30
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
- package/dist/_esm5.processed/transports/utils/generate_manifest_loader.d.ts +1 -1
- package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -1
- package/dist/_esm5.processed/utils/cast_to_observable.d.ts +1 -2
- package/dist/_esm5.processed/utils/cast_to_observable.js +1 -1
- package/dist/_esm5.processed/utils/deep_merge.d.ts +12 -0
- package/dist/_esm5.processed/utils/deep_merge.js +53 -0
- package/dist/_esm5.processed/utils/reference.d.ts +29 -0
- package/dist/_esm5.processed/utils/reference.js +72 -24
- package/dist/_esm5.processed/utils/request/fetch.d.ts +4 -5
- package/dist/_esm5.processed/utils/request/fetch.js +8 -6
- package/dist/_esm5.processed/utils/request/xhr.d.ts +6 -6
- package/dist/_esm5.processed/utils/request/xhr.js +3 -2
- package/dist/_esm5.processed/utils/rx-from_cancellable_promise.d.ts +1 -2
- package/dist/_esm5.processed/utils/rx-from_cancellable_promise.js +7 -2
- package/dist/_esm5.processed/utils/task_canceller.d.ts +5 -3
- package/dist/_esm5.processed/utils/task_canceller.js +3 -3
- package/dist/rx-player.js +5242 -3190
- package/dist/rx-player.min.js +1 -1
- package/dummy +1 -0
- package/{dist/_esm5.processed/core/eme/dispose_eme.d.ts → experimental/index.d.ts} +1 -4
- package/{dist/_esm5.processed/core/eme/dispose_media_keys.d.ts → experimental/index.js} +1 -6
- package/package.json +33 -36
- package/scripts/build/templates/experimental/index.d.ts +16 -0
- package/scripts/build/templates/experimental/index.js +16 -0
- package/scripts/doc-generator/generate_header_html.js +6 -7
- package/scripts/doc-generator/generate_page_html.js +3 -4
- package/scripts/doc-generator/generate_page_list_html.js +4 -5
- package/scripts/doc-generator/generate_sidebar_html.js +4 -7
- package/scripts/doc-generator/utils.js +0 -11
- package/scripts/generate_demo_list.js +3 -3
- package/scripts/generate_documentation_list.js +3 -3
- package/scripts/launch_static_server.js +127 -67
- package/scripts/run_standalone_demo.js +1 -0
- package/scripts/start_demo_web_server.js +1 -0
- package/sonar-project.properties +1 -1
- package/src/README.md +6 -6
- package/src/compat/__tests__/fullscreen.test.ts +7 -7
- package/src/compat/__tests__/is_vtt_cue.test.ts +1 -1
- package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +45 -5
- package/src/compat/browser_detection.ts +4 -2
- package/src/compat/eme/close_session.ts +90 -56
- package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
- package/src/compat/eme/custom_media_keys/index.ts +28 -41
- package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +63 -46
- package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +51 -49
- package/src/compat/eme/generate_key_request.ts +25 -33
- package/src/compat/eme/load_session.ts +29 -31
- package/src/compat/event_listeners.ts +2 -1
- package/src/compat/should_favour_custom_safari_EME.ts +5 -2
- package/src/config.ts +17 -1210
- package/src/core/README.md +1 -1
- package/src/core/abr/__tests__/{get_estimate_from_buffer_levels.test.ts → buffer_based_chooser.test.ts} +94 -123
- package/src/core/abr/bandwidth_estimator.ts +4 -4
- package/src/core/abr/buffer_based_chooser.ts +85 -20
- package/src/core/abr/network_analyzer.ts +6 -7
- package/src/core/abr/pending_requests_store.ts +3 -5
- package/src/core/abr/representation_estimator.ts +6 -3
- package/src/core/api/__tests__/get_player_state.test.ts +3 -3
- package/src/core/api/__tests__/option_utils.test.ts +17 -17
- package/src/core/api/get_player_state.ts +1 -1
- package/src/core/api/index.ts +3 -0
- package/src/core/api/media_element_track_choice_manager.ts +22 -3
- package/src/core/api/option_utils.ts +37 -20
- package/src/core/api/playback_observer.ts +12 -8
- package/src/core/api/public_api.ts +152 -112
- package/src/core/api/track_choice_manager.ts +10 -9
- package/src/core/decrypt/README.md +22 -0
- package/src/core/decrypt/__tests__/__global__/get_license.test.ts +418 -0
- package/src/core/decrypt/__tests__/__global__/init_data.test.ts +675 -0
- package/src/core/{eme → decrypt}/__tests__/__global__/media_key_system_access.test.ts +99 -92
- package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +156 -0
- package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +262 -0
- package/src/core/{eme → decrypt}/__tests__/__global__/utils.ts +36 -103
- package/src/core/{eme → decrypt}/attach_media_keys.ts +49 -56
- package/src/core/decrypt/clear_on_stop.ts +48 -0
- package/src/core/decrypt/content_decryptor.ts +1158 -0
- package/src/core/decrypt/create_or_load_session.ts +130 -0
- package/src/core/decrypt/create_session.ts +175 -0
- package/src/core/decrypt/dispose_decryption_resources.ts +39 -0
- package/src/core/{eme → decrypt}/find_key_system.ts +126 -134
- package/src/core/{eme → decrypt}/get_current_key_system.ts +1 -1
- package/src/core/decrypt/get_media_keys.ts +145 -0
- package/src/core/{eme → decrypt}/index.ts +11 -8
- package/src/core/decrypt/init_media_keys.ts +51 -0
- package/src/core/{eme → decrypt}/session_events_listener.ts +93 -55
- package/src/core/decrypt/set_server_certificate.ts +104 -0
- package/src/core/{eme → decrypt}/types.ts +129 -259
- package/src/core/{eme → decrypt}/utils/__tests__/are_init_values_compatible.test.ts +1 -1
- package/src/core/{eme → decrypt/utils}/__tests__/clean_old_loaded_sessions.test.ts +29 -71
- package/src/core/{eme → decrypt/utils}/__tests__/clean_old_stored_persistent_info.test.ts +6 -6
- package/src/core/{eme → decrypt}/utils/are_init_values_compatible.ts +9 -9
- package/src/core/{eme → decrypt/utils}/check_key_statuses.ts +6 -5
- package/{dist/_esm5.processed/core/eme/clean_old_loaded_sessions.js → src/core/decrypt/utils/clean_old_loaded_sessions.ts} +20 -20
- package/src/core/{eme → decrypt/utils}/clean_old_stored_persistent_info.ts +3 -3
- package/src/core/{eme → decrypt/utils}/get_drm_system_id.ts +1 -1
- package/src/core/decrypt/utils/init_data_values_container.ts +119 -0
- package/src/core/{eme → decrypt}/utils/is_session_usable.ts +4 -5
- package/src/core/decrypt/utils/key_id_comparison.ts +82 -0
- package/src/core/decrypt/utils/key_session_record.ts +175 -0
- package/src/core/decrypt/utils/loaded_sessions_store.ts +318 -0
- package/src/core/{eme → decrypt/utils}/media_keys_infos_store.ts +4 -4
- package/src/core/{eme → decrypt}/utils/persistent_sessions_store.ts +122 -104
- package/src/core/{eme/utils/init_data_container.ts → decrypt/utils/serializable_bytes.ts} +8 -5
- package/src/core/{eme → decrypt/utils}/server_certificate_store.ts +2 -2
- package/src/core/fetchers/manifest/manifest_fetcher.ts +9 -9
- package/src/core/fetchers/segment/segment_fetcher.ts +10 -7
- package/src/core/fetchers/segment/segment_fetcher_creator.ts +2 -2
- package/src/core/fetchers/utils/try_urls_with_backoff.ts +1 -1
- package/src/core/init/.initialize_media_source.ts.un~ +0 -0
- package/src/core/init/get_initial_time.ts +2 -1
- package/src/core/init/initialize_directfile.ts +19 -22
- package/src/core/init/initialize_media_source.ts +43 -106
- package/src/core/init/link_drm_and_content.ts +176 -0
- package/src/core/init/manifest_update_scheduler.ts +12 -10
- package/src/core/init/stall_avoider.ts +6 -5
- package/src/core/init/stream_events_emitter/are_same_stream_events.ts +4 -4
- package/src/core/init/stream_events_emitter/stream_events_emitter.ts +2 -1
- package/src/core/init/stream_events_emitter/types.ts +2 -2
- package/src/core/init/types.ts +1 -39
- package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
- package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +6 -7
- package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +32 -31
- package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
- package/src/core/segment_buffers/inventory/segment_inventory.ts +42 -8
- package/src/core/stream/adaptation/adaptation_stream.ts +7 -1
- package/src/core/stream/events_generators.ts +9 -4
- package/src/core/stream/orchestrator/stream_orchestrator.ts +9 -4
- package/src/core/stream/period/create_empty_adaptation_stream.ts +2 -1
- package/src/core/stream/period/get_adaptation_switch_strategy.ts +1 -1
- package/src/core/stream/period/period_stream.ts +5 -2
- package/src/core/stream/representation/force_garbage_collection.ts +5 -7
- package/src/core/stream/representation/get_buffer_status.ts +28 -16
- package/src/core/stream/representation/get_needed_segments.ts +124 -28
- package/src/core/stream/representation/get_segment_priority.ts +1 -2
- package/src/core/stream/representation/push_media_segment.ts +3 -2
- package/src/core/stream/representation/representation_stream.ts +30 -7
- package/src/core/stream/types.ts +1 -1
- package/src/default_config.ts +1241 -0
- package/src/errors/request_error.ts +4 -1
- package/src/experimental/index.ts +5 -0
- package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +1 -0
- package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +5 -7
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +3 -10
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +4 -4
- package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +1 -1
- package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +3 -3
- package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +1 -2
- package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +1 -2
- package/src/experimental/tools/mediaCapabilitiesProber/types.ts +3 -3
- package/src/features/__tests__/initialize_features.test.ts +2 -2
- package/src/features/features_object.ts +1 -1
- package/src/features/initialize_features.ts +1 -1
- package/src/features/list/__tests__/eme.test.ts +5 -5
- package/src/features/list/eme.ts +5 -5
- package/src/features/types.ts +3 -10
- package/src/manifest/adaptation.ts +6 -4
- package/src/manifest/manifest.ts +16 -86
- package/src/manifest/period.ts +3 -3
- package/src/manifest/representation.ts +38 -5
- package/src/manifest/representation_index/types.ts +18 -18
- package/src/manifest/types.ts +3 -3
- package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +1 -0
- package/src/parsers/manifest/dash/common/get_hdr_information.ts +1 -1
- package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +3 -3
- package/src/parsers/manifest/dash/common/indexes/base.ts +6 -6
- package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +4 -2
- package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +2 -2
- package/src/parsers/manifest/dash/common/indexes/is_period_fulfilled.ts +1 -2
- package/src/parsers/manifest/dash/common/indexes/list.ts +14 -14
- package/src/parsers/manifest/dash/common/indexes/template.ts +18 -18
- package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +1 -1
- package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +51 -23
- package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +2 -2
- package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +1 -1
- package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +167 -134
- package/src/parsers/manifest/dash/common/parse_mpd.ts +9 -10
- package/src/parsers/manifest/dash/common/parse_periods.ts +80 -79
- package/src/parsers/manifest/dash/common/parse_representation_index.ts +83 -75
- package/src/parsers/manifest/dash/common/parse_representations.ts +44 -63
- package/src/parsers/manifest/dash/node_parser_types.ts +30 -30
- package/src/parsers/manifest/dash/parsers_types.ts +3 -3
- package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +1 -1
- package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +4 -4
- package/src/parsers/manifest/smooth/create_parser.ts +24 -21
- package/src/parsers/manifest/smooth/representation_index.ts +14 -14
- package/src/parsers/manifest/types.ts +28 -28
- package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +31 -33
- package/src/parsers/manifest/utils/clear_timeline_from_position.ts +15 -6
- package/src/parsers/manifest/utils/index_helpers.ts +2 -2
- package/src/parsers/manifest/utils/update_segment_timeline.ts +32 -21
- package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +1 -0
- package/src/parsers/texttracks/webvtt/html/to_html.ts +2 -2
- package/src/parsers/texttracks/webvtt/parse_cue_block.ts +1 -1
- package/src/public_types.ts +5 -1
- package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +2 -2
- package/src/transports/dash/image_pipelines.ts +4 -1
- package/src/transports/dash/init_segment_loader.ts +1 -1
- package/src/transports/dash/manifest_parser.ts +1 -1
- package/src/transports/dash/segment_loader.ts +7 -7
- package/src/transports/dash/segment_parser.ts +8 -1
- package/src/transports/dash/text_loader.ts +2 -2
- package/src/transports/dash/text_parser.ts +11 -1
- package/src/transports/local/segment_loader.ts +4 -4
- package/src/transports/local/segment_parser.ts +4 -0
- package/src/transports/local/text_parser.ts +8 -0
- package/src/transports/metaplaylist/manifest_loader.ts +1 -1
- package/src/transports/metaplaylist/pipelines.ts +1 -1
- package/src/transports/smooth/pipelines.ts +29 -16
- package/src/transports/smooth/segment_loader.ts +8 -8
- package/src/transports/types.ts +59 -30
- package/src/transports/utils/call_custom_manifest_loader.ts +6 -6
- package/src/transports/utils/generate_manifest_loader.ts +1 -1
- package/src/utils/__tests__/deep_merge.test.ts +48 -0
- package/src/utils/__tests__/flat_map.test.ts +12 -7
- package/src/utils/cancellable_sleep.ts +1 -1
- package/src/utils/cast_to_observable.ts +1 -2
- package/src/utils/deep_merge.ts +46 -0
- package/src/utils/reference.ts +116 -23
- package/src/utils/request/fetch.ts +17 -15
- package/src/utils/request/xhr.ts +11 -8
- package/src/utils/rx-from_cancellable_promise.ts +8 -4
- package/src/utils/task_canceller.ts +6 -4
- package/tsconfig.json +1 -2
- package/tsconfig.modules.json +1 -2
- package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +0 -29
- package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +0 -67
- package/dist/_esm5.processed/core/eme/attach_media_keys.js +0 -57
- package/dist/_esm5.processed/core/eme/clean_old_loaded_sessions.d.ts +0 -59
- package/dist/_esm5.processed/core/eme/clear_eme_session.js +0 -50
- package/dist/_esm5.processed/core/eme/create_session.js +0 -126
- package/dist/_esm5.processed/core/eme/dispose_eme.js +0 -23
- package/dist/_esm5.processed/core/eme/dispose_media_keys.js +0 -36
- package/dist/_esm5.processed/core/eme/eme_manager.d.ts +0 -31
- package/dist/_esm5.processed/core/eme/eme_manager.js +0 -278
- package/dist/_esm5.processed/core/eme/find_key_system.js +0 -243
- package/dist/_esm5.processed/core/eme/get_media_keys.js +0 -85
- package/dist/_esm5.processed/core/eme/get_session.js +0 -68
- package/dist/_esm5.processed/core/eme/init_media_keys.js +0 -66
- package/dist/_esm5.processed/core/eme/session_events_listener.d.ts +0 -41
- package/dist/_esm5.processed/core/eme/set_server_certificate.js +0 -85
- package/dist/_esm5.processed/core/eme/utils/close_session.js +0 -81
- package/dist/_esm5.processed/core/eme/utils/init_data_store.d.ts +0 -115
- package/dist/_esm5.processed/core/eme/utils/init_data_store.js +0 -181
- package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.d.ts +0 -123
- package/dist/_esm5.processed/core/eme/utils/loaded_sessions_store.js +0 -173
- package/dist/_esm5.processed/core/init/create_eme_manager.d.ts +0 -34
- package/dist/_esm5.processed/core/init/create_eme_manager.js +0 -52
- package/src/core/abr/get_estimate_from_buffer_levels.ts +0 -85
- package/src/core/eme/README.md +0 -26
- package/src/core/eme/__tests__/__global__/get_license.test.ts +0 -414
- package/src/core/eme/__tests__/__global__/init_data.test.ts +0 -908
- package/src/core/eme/__tests__/__global__/media_keys.test.ts +0 -266
- package/src/core/eme/__tests__/__global__/server_certificate.test.ts +0 -364
- package/src/core/eme/__tests__/init_media_keys.test.ts +0 -182
- package/src/core/eme/clean_old_loaded_sessions.ts +0 -96
- package/src/core/eme/clear_eme_session.ts +0 -62
- package/src/core/eme/create_session.ts +0 -187
- package/src/core/eme/dispose_eme.ts +0 -25
- package/src/core/eme/dispose_media_keys.ts +0 -46
- package/src/core/eme/eme_manager.ts +0 -387
- package/src/core/eme/get_media_keys.ts +0 -141
- package/src/core/eme/get_session.ts +0 -135
- package/src/core/eme/init_media_keys.ts +0 -106
- package/src/core/eme/set_server_certificate.ts +0 -115
- package/src/core/eme/utils/close_session.ts +0 -113
- package/src/core/eme/utils/init_data_store.ts +0 -234
- package/src/core/eme/utils/loaded_sessions_store.ts +0 -235
- package/src/core/init/create_eme_manager.ts +0 -95
|
@@ -17,7 +17,7 @@ import { Observable } from "rxjs";
|
|
|
17
17
|
import { IReadOnlySharedReference } from "../../utils/reference";
|
|
18
18
|
import { IABRManagerArguments } from "../abr";
|
|
19
19
|
import { PlaybackObserver } from "../api";
|
|
20
|
-
import { IKeySystemOption } from "../
|
|
20
|
+
import { IKeySystemOption } from "../decrypt";
|
|
21
21
|
import { IManifestFetcherParsedResult, IManifestFetcherWarningEvent, ManifestFetcher, SegmentFetcherCreator } from "../fetchers";
|
|
22
22
|
import { ITextTrackSegmentBufferOptions } from "../segment_buffers";
|
|
23
23
|
import { IInitialTimeOptions } from "./get_initial_time";
|
|
@@ -32,6 +32,8 @@ export interface IInitializeArguments {
|
|
|
32
32
|
bufferOptions: {
|
|
33
33
|
/** Buffer "goal" at which we stop downloading new segments. */
|
|
34
34
|
wantedBufferAhead: IReadOnlySharedReference<number>;
|
|
35
|
+
/** Buffer maximum size in kiloBytes at which we stop downloading */
|
|
36
|
+
maxVideoBufferSize: IReadOnlySharedReference<number>;
|
|
35
37
|
/** Max buffer size after the current position, in seconds (we GC further up). */
|
|
36
38
|
maxBufferAhead: IReadOnlySharedReference<number>;
|
|
37
39
|
/** Max buffer size before the current position, in seconds (we GC further down). */
|
|
@@ -67,7 +69,7 @@ export interface IInitializeArguments {
|
|
|
67
69
|
/** Emit the playback rate (speed) set by the user. */
|
|
68
70
|
speed: IReadOnlySharedReference<number>;
|
|
69
71
|
/** The configured starting position. */
|
|
70
|
-
startAt?: IInitialTimeOptions;
|
|
72
|
+
startAt?: IInitialTimeOptions | undefined;
|
|
71
73
|
/** Configuration specific to the text track. */
|
|
72
74
|
textTrackOptions: ITextTrackSegmentBufferOptions;
|
|
73
75
|
}
|
|
@@ -83,7 +85,7 @@ export interface IInitializeArguments {
|
|
|
83
85
|
*
|
|
84
86
|
* - download the content's Manifest and handle its refresh logic
|
|
85
87
|
*
|
|
86
|
-
* - Perform
|
|
88
|
+
* - Perform decryption if needed
|
|
87
89
|
*
|
|
88
90
|
* - ask for the choice of the wanted Adaptation through events (e.g. to
|
|
89
91
|
* choose a language)
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { combineLatest as observableCombineLatest,
|
|
16
|
+
import { combineLatest as observableCombineLatest, filter, finalize, ignoreElements, map, merge as observableMerge, mergeMap, of as observableOf, share, shareReplay, startWith, Subject, switchMap, take, takeUntil, } from "rxjs";
|
|
17
17
|
import { shouldReloadMediaSourceOnDecipherabilityUpdate } from "../../compat";
|
|
18
18
|
import config from "../../config";
|
|
19
19
|
import log from "../../log";
|
|
@@ -22,15 +22,14 @@ import { fromEvent } from "../../utils/event_emitter";
|
|
|
22
22
|
import filterMap from "../../utils/filter_map";
|
|
23
23
|
import objectAssign from "../../utils/object_assign";
|
|
24
24
|
import ABRManager from "../abr";
|
|
25
|
-
import { getCurrentKeySystem, } from "../
|
|
26
|
-
import createEMEManager from "./create_eme_manager";
|
|
25
|
+
import { getCurrentKeySystem, } from "../decrypt";
|
|
27
26
|
import openMediaSource from "./create_media_source";
|
|
28
27
|
import EVENTS from "./events_generators";
|
|
29
28
|
import getInitialTime from "./get_initial_time";
|
|
29
|
+
import linkDrmAndContent from "./link_drm_and_content";
|
|
30
30
|
import createMediaSourceLoader from "./load_on_media_source";
|
|
31
31
|
import manifestUpdateScheduler from "./manifest_update_scheduler";
|
|
32
32
|
import throwOnMediaError from "./throw_on_media_error";
|
|
33
|
-
var OUT_OF_SYNC_MANIFEST_REFRESH_DELAY = config.OUT_OF_SYNC_MANIFEST_REFRESH_DELAY;
|
|
34
33
|
/**
|
|
35
34
|
* Begin content playback.
|
|
36
35
|
*
|
|
@@ -43,7 +42,7 @@ var OUT_OF_SYNC_MANIFEST_REFRESH_DELAY = config.OUT_OF_SYNC_MANIFEST_REFRESH_DEL
|
|
|
43
42
|
*
|
|
44
43
|
* - download the content's Manifest and handle its refresh logic
|
|
45
44
|
*
|
|
46
|
-
* - Perform
|
|
45
|
+
* - Perform decryption if needed
|
|
47
46
|
*
|
|
48
47
|
* - ask for the choice of the wanted Adaptation through events (e.g. to
|
|
49
48
|
* choose a language)
|
|
@@ -74,20 +73,21 @@ export default function InitializeOnMediaSource(_a) {
|
|
|
74
73
|
* The MediaSource will be closed when subscriptions are down to 0.
|
|
75
74
|
*/
|
|
76
75
|
var openMediaSource$ = openMediaSource(mediaElement).pipe(shareReplay({ refCount: true }));
|
|
77
|
-
/** Send content protection data
|
|
76
|
+
/** Send content protection initialization data. */
|
|
78
77
|
var protectedSegments$ = new Subject();
|
|
79
|
-
/**
|
|
80
|
-
var
|
|
78
|
+
/** Initialize decryption capabilities and MediaSource. */
|
|
79
|
+
var drmEvents$ = linkDrmAndContent(mediaElement, keySystems, protectedSegments$, openMediaSource$)
|
|
80
|
+
.pipe(
|
|
81
81
|
// Because multiple Observables here depend on this Observable as a source,
|
|
82
82
|
// we prefer deferring Subscription until those Observables are themselves
|
|
83
83
|
// all subscribed to.
|
|
84
|
-
// This is needed because `
|
|
84
|
+
// This is needed because `drmEvents$` might send events synchronously
|
|
85
85
|
// on subscription. In that case, it might communicate those events directly
|
|
86
86
|
// after the first Subscription is done, making the next subscription miss
|
|
87
87
|
// out on those events, even if that second subscription is done
|
|
88
88
|
// synchronously after the first one.
|
|
89
89
|
// By calling `deferSubscriptions`, we ensure that subscription to
|
|
90
|
-
// `
|
|
90
|
+
// `drmEvents$` effectively starts after a very short delay, thus
|
|
91
91
|
// ensuring that no such race condition can occur.
|
|
92
92
|
deferSubscriptions(), share());
|
|
93
93
|
/**
|
|
@@ -95,53 +95,16 @@ export default function InitializeOnMediaSource(_a) {
|
|
|
95
95
|
* through a throwing Observable.
|
|
96
96
|
*/
|
|
97
97
|
var mediaError$ = throwOnMediaError(mediaElement);
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
* Steps are done in that specific order to avoid compatibility issues.
|
|
102
|
-
*
|
|
103
|
-
* This Observable will emit when ready both the MediaSource and useful
|
|
104
|
-
* DRM-specific information.
|
|
105
|
-
*/
|
|
106
|
-
var prepareMediaSource$ = emeManager$.pipe(mergeScan(function (acc, evt) {
|
|
107
|
-
switch (evt.type) {
|
|
108
|
-
case "eme-disabled":
|
|
109
|
-
case "attached-media-keys":
|
|
110
|
-
return observableOf({ isEmeReady: true,
|
|
111
|
-
drmSystemId: acc.drmSystemId });
|
|
112
|
-
case "created-media-keys":
|
|
113
|
-
var drmSystemId_1 = evt.value.initializationDataSystemId;
|
|
114
|
-
return openMediaSource$.pipe(mergeMap(function () {
|
|
115
|
-
// Now that the MediaSource has been opened and linked to the media
|
|
116
|
-
// element we can attach the MediaKeys instance to the latter.
|
|
117
|
-
evt.value.canAttachMediaKeys.setValue(true);
|
|
118
|
-
// If the `disableMediaKeysAttachmentLock` option has been set to
|
|
119
|
-
// `true`, we should not wait until the MediaKeys instance has been
|
|
120
|
-
// attached to start loading the content.
|
|
121
|
-
// TODO we may want to keep keySystems option knowledge in the EME
|
|
122
|
-
// code
|
|
123
|
-
var shouldDisableLock = evt.value.options
|
|
124
|
-
.disableMediaKeysAttachmentLock === true;
|
|
125
|
-
return shouldDisableLock ? observableOf({ isEmeReady: true, drmSystemId: drmSystemId_1 }) :
|
|
126
|
-
EMPTY;
|
|
127
|
-
}), startWith({ isEmeReady: false, drmSystemId: drmSystemId_1 }));
|
|
128
|
-
default:
|
|
129
|
-
return EMPTY;
|
|
130
|
-
}
|
|
131
|
-
}, { isEmeReady: false, drmSystemId: undefined }), filter(function (emitted) { return emitted.isEmeReady; }), take(1), exhaustMap(function (_a) {
|
|
132
|
-
var drmSystemId = _a.drmSystemId;
|
|
133
|
-
return openMediaSource$
|
|
134
|
-
.pipe(map(function (mediaSource) { return ({ mediaSource: mediaSource, drmSystemId: drmSystemId }); }));
|
|
135
|
-
}));
|
|
98
|
+
var mediaSourceReady$ = drmEvents$.pipe(filter(function (evt) {
|
|
99
|
+
return evt.type === "decryption-ready" || evt.type === "decryption-disabled";
|
|
100
|
+
}), map(function (e) { return e.value; }), take(1));
|
|
136
101
|
/** Load and play the content asked. */
|
|
137
|
-
var loadContent$ = observableCombineLatest([manifest$,
|
|
138
|
-
|
|
139
|
-
var manifestEvt = _a[0], mediaSourceInfo = _a[1];
|
|
102
|
+
var loadContent$ = observableCombineLatest([manifest$, mediaSourceReady$]).pipe(mergeMap(function (_a) {
|
|
103
|
+
var manifestEvt = _a[0], _b = _a[1], drmSystemId = _b.drmSystemId, initialMediaSource = _b.mediaSource;
|
|
140
104
|
if (manifestEvt.type === "warning") {
|
|
141
105
|
return observableOf(manifestEvt);
|
|
142
106
|
}
|
|
143
107
|
var manifest = manifestEvt.manifest;
|
|
144
|
-
var initialMediaSource = mediaSourceInfo.mediaSource, drmSystemId = mediaSourceInfo.drmSystemId;
|
|
145
108
|
log.debug("Init: Calculating initial time");
|
|
146
109
|
var initialTime = getInitialTime(manifest, lowLatencyMode, startAt);
|
|
147
110
|
log.debug("Init: Initial time calculated:", initialTime);
|
|
@@ -162,22 +125,7 @@ export default function InitializeOnMediaSource(_a) {
|
|
|
162
125
|
var manifestEvents$ = observableMerge(fromEvent(manifest, "manifestUpdate")
|
|
163
126
|
.pipe(map(function () { return EVENTS.manifestUpdate(); })), fromEvent(manifest, "decipherabilityUpdate")
|
|
164
127
|
.pipe(map(EVENTS.decipherabilityUpdate)));
|
|
165
|
-
|
|
166
|
-
if (evt.type === "keys-update") {
|
|
167
|
-
manifest.updateDeciperabilitiesBasedOnKeyIds(evt.value);
|
|
168
|
-
}
|
|
169
|
-
else if (evt.type === "blacklist-protection-data") {
|
|
170
|
-
log.info("Init: blacklisting Representations based on protection data.");
|
|
171
|
-
manifest.addUndecipherableProtectionData(evt.value);
|
|
172
|
-
}
|
|
173
|
-
}),
|
|
174
|
-
// NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
|
|
175
|
-
// first type parameter as `any` instead of the perfectly fine `unknown`,
|
|
176
|
-
// leading to linter issues, as it forbids the usage of `any`.
|
|
177
|
-
// This is why we're disabling the eslint rule.
|
|
178
|
-
/* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
|
|
179
|
-
ignoreElements());
|
|
180
|
-
return observableMerge(manifestEvents$, manifestUpdate$, setUndecipherableRepresentations$, recursiveLoad$)
|
|
128
|
+
return observableMerge(manifestEvents$, manifestUpdate$, recursiveLoad$)
|
|
181
129
|
.pipe(startWith(EVENTS.manifestReady(manifest)), finalize(function () { scheduleRefresh$.complete(); }));
|
|
182
130
|
/**
|
|
183
131
|
* Load the content defined by the Manifest in the mediaSource given at the
|
|
@@ -199,6 +147,7 @@ export default function InitializeOnMediaSource(_a) {
|
|
|
199
147
|
canUseUnsafeMode: true });
|
|
200
148
|
return null;
|
|
201
149
|
case "manifest-might-be-out-of-sync":
|
|
150
|
+
var OUT_OF_SYNC_MANIFEST_REFRESH_DELAY = config.getCurrent().OUT_OF_SYNC_MANIFEST_REFRESH_DELAY;
|
|
202
151
|
scheduleRefresh$.next({
|
|
203
152
|
completeRefresh: true,
|
|
204
153
|
canUseUnsafeMode: false,
|
|
@@ -240,5 +189,5 @@ export default function InitializeOnMediaSource(_a) {
|
|
|
240
189
|
return observableMerge(handleReloads$, currentLoad$);
|
|
241
190
|
}
|
|
242
191
|
}));
|
|
243
|
-
return observableMerge(loadContent$, mediaError$,
|
|
192
|
+
return observableMerge(loadContent$, mediaError$, drmEvents$.pipe(ignoreElements()));
|
|
244
193
|
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2015 CANAL+ Group
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { Observable } from "rxjs";
|
|
17
|
+
import { IContentProtection, IKeySystemOption } from "../decrypt";
|
|
18
|
+
import { IWarningEvent } from "./types";
|
|
19
|
+
/**
|
|
20
|
+
* @param {HTMLMediaElement} mediaElement
|
|
21
|
+
* @param {Array.<Object>} keySystems
|
|
22
|
+
* @param {Observable<Object>} contentProtections$
|
|
23
|
+
* @param {Promise} linkingMedia$
|
|
24
|
+
* @returns {Observable}
|
|
25
|
+
*/
|
|
26
|
+
export default function linkDrmAndContent<T>(mediaElement: HTMLMediaElement, keySystems: IKeySystemOption[], contentProtections$: Observable<IContentProtection>, linkingMedia$: Observable<T>): Observable<IContentDecryptorInitEvent<T>>;
|
|
27
|
+
export declare type IContentDecryptorInitEvent<T> = IDecryptionDisabledEvent<T> | IDecryptionReadyEvent<T> | IWarningEvent;
|
|
28
|
+
/**
|
|
29
|
+
* Event emitted after deciding that no decryption logic will be launched for
|
|
30
|
+
* the current content.
|
|
31
|
+
*/
|
|
32
|
+
export interface IDecryptionDisabledEvent<T> {
|
|
33
|
+
type: "decryption-disabled";
|
|
34
|
+
value: {
|
|
35
|
+
/**
|
|
36
|
+
* Identify the current DRM's system ID.
|
|
37
|
+
* Here `undefined` as no decryption capability has been added.
|
|
38
|
+
*/
|
|
39
|
+
drmSystemId: undefined;
|
|
40
|
+
/** The value outputed by the `linkingMedia$` Observable. */
|
|
41
|
+
mediaSource: T;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Event emitted when decryption capabilities have started and content can
|
|
46
|
+
* begin to be pushed on the HTMLMediaElement.
|
|
47
|
+
*/
|
|
48
|
+
export interface IDecryptionReadyEvent<T> {
|
|
49
|
+
type: "decryption-ready";
|
|
50
|
+
value: {
|
|
51
|
+
/**
|
|
52
|
+
* Identify the current DRM's systemId as an hexadecimal string, so the
|
|
53
|
+
* RxPlayer may be able to (optionally) only send the corresponding
|
|
54
|
+
* encryption initialization data.
|
|
55
|
+
* `undefined` if unknown.
|
|
56
|
+
*/
|
|
57
|
+
drmSystemId: string | undefined;
|
|
58
|
+
/** The value outputed by the `linkingMedia$` Observable. */
|
|
59
|
+
mediaSource: T;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2015 CANAL+ Group
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { map, merge as observableMerge, Observable, } from "rxjs";
|
|
17
|
+
import { events, hasEMEAPIs, } from "../../compat/";
|
|
18
|
+
import { EncryptedMediaError } from "../../errors";
|
|
19
|
+
import features from "../../features";
|
|
20
|
+
import log from "../../log";
|
|
21
|
+
import { ContentDecryptorState, } from "../decrypt";
|
|
22
|
+
var onEncrypted$ = events.onEncrypted$;
|
|
23
|
+
/**
|
|
24
|
+
* @param {HTMLMediaElement} mediaElement
|
|
25
|
+
* @param {Array.<Object>} keySystems
|
|
26
|
+
* @param {Observable<Object>} contentProtections$
|
|
27
|
+
* @param {Promise} linkingMedia$
|
|
28
|
+
* @returns {Observable}
|
|
29
|
+
*/
|
|
30
|
+
export default function linkDrmAndContent(mediaElement, keySystems, contentProtections$, linkingMedia$) {
|
|
31
|
+
var encryptedEvents$ = observableMerge(onEncrypted$(mediaElement), contentProtections$);
|
|
32
|
+
if (features.ContentDecryptor == null) {
|
|
33
|
+
return observableMerge(encryptedEvents$.pipe(map(function () {
|
|
34
|
+
log.error("Init: Encrypted event but EME feature not activated");
|
|
35
|
+
throw new EncryptedMediaError("MEDIA_IS_ENCRYPTED_ERROR", "EME feature not activated.");
|
|
36
|
+
})), linkingMedia$.pipe(map(function (mediaSource) { return ({
|
|
37
|
+
type: "decryption-disabled",
|
|
38
|
+
value: { drmSystemId: undefined, mediaSource: mediaSource },
|
|
39
|
+
}); })));
|
|
40
|
+
}
|
|
41
|
+
if (keySystems.length === 0) {
|
|
42
|
+
return observableMerge(encryptedEvents$.pipe(map(function () {
|
|
43
|
+
log.error("Init: Ciphered media and no keySystem passed");
|
|
44
|
+
throw new EncryptedMediaError("MEDIA_IS_ENCRYPTED_ERROR", "Media is encrypted and no `keySystems` given");
|
|
45
|
+
})), linkingMedia$.pipe(map(function (mediaSource) { return ({
|
|
46
|
+
type: "decryption-disabled",
|
|
47
|
+
value: { drmSystemId: undefined, mediaSource: mediaSource },
|
|
48
|
+
}); })));
|
|
49
|
+
}
|
|
50
|
+
if (!hasEMEAPIs()) {
|
|
51
|
+
return observableMerge(encryptedEvents$.pipe(map(function () {
|
|
52
|
+
log.error("Init: Encrypted event but no EME API available");
|
|
53
|
+
throw new EncryptedMediaError("MEDIA_IS_ENCRYPTED_ERROR", "Encryption APIs not found.");
|
|
54
|
+
})), linkingMedia$.pipe(map(function (mediaSource) { return ({
|
|
55
|
+
type: "decryption-disabled",
|
|
56
|
+
value: { drmSystemId: undefined, mediaSource: mediaSource },
|
|
57
|
+
}); })));
|
|
58
|
+
}
|
|
59
|
+
log.debug("Init: Creating ContentDecryptor");
|
|
60
|
+
var ContentDecryptor = features.ContentDecryptor;
|
|
61
|
+
return new Observable(function (obs) {
|
|
62
|
+
var contentDecryptor = new ContentDecryptor(mediaElement, keySystems);
|
|
63
|
+
var mediaSub;
|
|
64
|
+
contentDecryptor.addEventListener("stateChange", function (state) {
|
|
65
|
+
if (state === ContentDecryptorState.WaitingForAttachment) {
|
|
66
|
+
contentDecryptor.removeEventListener("stateChange");
|
|
67
|
+
mediaSub = linkingMedia$.subscribe(function (mediaSource) {
|
|
68
|
+
contentDecryptor.addEventListener("stateChange", function (newState) {
|
|
69
|
+
if (newState === ContentDecryptorState.ReadyForContent) {
|
|
70
|
+
obs.next({ type: "decryption-ready",
|
|
71
|
+
value: { drmSystemId: contentDecryptor.systemId, mediaSource: mediaSource } });
|
|
72
|
+
contentDecryptor.removeEventListener("stateChange");
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
contentDecryptor.attach();
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
contentDecryptor.addEventListener("error", function (e) {
|
|
80
|
+
obs.error(e);
|
|
81
|
+
});
|
|
82
|
+
contentDecryptor.addEventListener("warning", function (w) {
|
|
83
|
+
obs.next({ type: "warning", value: w });
|
|
84
|
+
});
|
|
85
|
+
var protectionDataSub = contentProtections$.subscribe(function (data) {
|
|
86
|
+
contentDecryptor.onInitializationData(data);
|
|
87
|
+
});
|
|
88
|
+
return function () {
|
|
89
|
+
protectionDataSub.unsubscribe();
|
|
90
|
+
mediaSub === null || mediaSub === void 0 ? void 0 : mediaSub.unsubscribe();
|
|
91
|
+
contentDecryptor.dispose();
|
|
92
|
+
};
|
|
93
|
+
});
|
|
94
|
+
}
|
|
@@ -24,9 +24,9 @@ export interface IManifestUpdateSchedulerArguments {
|
|
|
24
24
|
/** Information about the initial load of the manifest */
|
|
25
25
|
initialManifest: {
|
|
26
26
|
manifest: Manifest;
|
|
27
|
-
sendingTime?: number;
|
|
28
|
-
receivedTime?: number;
|
|
29
|
-
parsingTime?: number;
|
|
27
|
+
sendingTime?: number | undefined;
|
|
28
|
+
receivedTime?: number | undefined;
|
|
29
|
+
parsingTime?: number | undefined;
|
|
30
30
|
};
|
|
31
31
|
/** Minimum interval to keep between Manifest updates */
|
|
32
32
|
minimumManifestUpdateInterval: number;
|
|
@@ -47,7 +47,7 @@ export interface IManifestRefreshSchedulerEvent {
|
|
|
47
47
|
* Optional wanted refresh delay, which is the minimum time you want to wait
|
|
48
48
|
* before updating the Manifest
|
|
49
49
|
*/
|
|
50
|
-
delay?: number;
|
|
50
|
+
delay?: number | undefined;
|
|
51
51
|
/**
|
|
52
52
|
* Whether the parsing can be done in the more efficient "unsafeMode".
|
|
53
53
|
* This mode is extremely fast but can lead to de-synchronisation with the
|
|
@@ -17,7 +17,6 @@ import { defer as observableDefer, EMPTY, from as observableFrom, map, merge as
|
|
|
17
17
|
import config from "../../config";
|
|
18
18
|
import log from "../../log";
|
|
19
19
|
import throttle from "../../utils/rx-throttle";
|
|
20
|
-
var FAILED_PARTIAL_UPDATE_MANIFEST_REFRESH_DELAY = config.FAILED_PARTIAL_UPDATE_MANIFEST_REFRESH_DELAY, MAX_CONSECUTIVE_MANIFEST_PARSING_IN_UNSAFE_MODE = config.MAX_CONSECUTIVE_MANIFEST_PARSING_IN_UNSAFE_MODE, MIN_MANIFEST_PARSING_TIME_TO_ENTER_UNSAFE_MODE = config.MIN_MANIFEST_PARSING_TIME_TO_ENTER_UNSAFE_MODE;
|
|
21
20
|
/**
|
|
22
21
|
* Refresh the Manifest at the right time.
|
|
23
22
|
* @param {Object} manifestUpdateSchedulerArguments
|
|
@@ -56,6 +55,7 @@ export default function manifestUpdateScheduler(_a) {
|
|
|
56
55
|
var totalUpdateTime = parsingTime !== undefined ?
|
|
57
56
|
parsingTime + (updatingTime !== null && updatingTime !== void 0 ? updatingTime : 0) :
|
|
58
57
|
undefined;
|
|
58
|
+
var _b = config.getCurrent(), MAX_CONSECUTIVE_MANIFEST_PARSING_IN_UNSAFE_MODE = _b.MAX_CONSECUTIVE_MANIFEST_PARSING_IN_UNSAFE_MODE, MIN_MANIFEST_PARSING_TIME_TO_ENTER_UNSAFE_MODE = _b.MIN_MANIFEST_PARSING_TIME_TO_ENTER_UNSAFE_MODE;
|
|
59
59
|
/**
|
|
60
60
|
* "unsafeMode" is a mode where we unlock advanced Manifest parsing
|
|
61
61
|
* optimizations with the added risk to lose some information.
|
|
@@ -194,6 +194,7 @@ export default function manifestUpdateScheduler(_a) {
|
|
|
194
194
|
var message = e instanceof Error ? e.message :
|
|
195
195
|
"unknown error";
|
|
196
196
|
log.warn("MUS: Attempt to update Manifest failed: ".concat(message), "Re-downloading the Manifest fully");
|
|
197
|
+
var FAILED_PARTIAL_UPDATE_MANIFEST_REFRESH_DELAY = config.getCurrent().FAILED_PARTIAL_UPDATE_MANIFEST_REFRESH_DELAY;
|
|
197
198
|
return startManualRefreshTimer(FAILED_PARTIAL_UPDATE_MANIFEST_REFRESH_DELAY, minimumManifestUpdateInterval, newSendingTime)
|
|
198
199
|
.pipe(mergeMap(function () {
|
|
199
200
|
return refreshManifest({ completeRefresh: true, unsafeMode: false });
|
|
@@ -20,7 +20,6 @@ import { MediaError } from "../../errors";
|
|
|
20
20
|
import log from "../../log";
|
|
21
21
|
import { getNextRangeGap } from "../../utils/ranges";
|
|
22
22
|
import EVENTS from "../stream/events_generators";
|
|
23
|
-
var BUFFER_DISCONTINUITY_THRESHOLD = config.BUFFER_DISCONTINUITY_THRESHOLD, FORCE_DISCONTINUITY_SEEK_DELAY = config.FORCE_DISCONTINUITY_SEEK_DELAY, FREEZING_STALLED_DELAY = config.FREEZING_STALLED_DELAY, UNFREEZING_SEEK_DELAY = config.UNFREEZING_SEEK_DELAY, UNFREEZING_DELTA_POSITION = config.UNFREEZING_DELTA_POSITION;
|
|
24
23
|
/**
|
|
25
24
|
* Work-around rounding errors with floating points by setting an acceptable,
|
|
26
25
|
* very short, deviation when checking equalities.
|
|
@@ -106,6 +105,7 @@ export default function StallAvoider(playbackObserver, manifest, lockedStream$,
|
|
|
106
105
|
var stall$ = playbackObserver.observe(true).pipe(withLatestFrom(discontinuitiesStore$), map(function (_a) {
|
|
107
106
|
var observation = _a[0], discontinuitiesStore = _a[1];
|
|
108
107
|
var buffered = observation.buffered, position = observation.position, readyState = observation.readyState, rebuffering = observation.rebuffering, freezing = observation.freezing;
|
|
108
|
+
var _b = config.getCurrent(), BUFFER_DISCONTINUITY_THRESHOLD = _b.BUFFER_DISCONTINUITY_THRESHOLD, FORCE_DISCONTINUITY_SEEK_DELAY = _b.FORCE_DISCONTINUITY_SEEK_DELAY, FREEZING_STALLED_DELAY = _b.FREEZING_STALLED_DELAY, UNFREEZING_SEEK_DELAY = _b.UNFREEZING_SEEK_DELAY, UNFREEZING_DELTA_POSITION = _b.UNFREEZING_DELTA_POSITION;
|
|
109
109
|
if (freezing !== null) {
|
|
110
110
|
var now = performance.now();
|
|
111
111
|
var referenceTimestamp = prevFreezingState === null ?
|
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
* @returns {Boolean}
|
|
29
29
|
*/
|
|
30
30
|
declare function areSameStreamEvents(evt1: {
|
|
31
|
-
id?: string;
|
|
31
|
+
id?: string | undefined;
|
|
32
32
|
start: number;
|
|
33
|
-
end?: number;
|
|
33
|
+
end?: number | undefined;
|
|
34
34
|
}, evt2: {
|
|
35
|
-
id?: string;
|
|
35
|
+
id?: string | undefined;
|
|
36
36
|
start: number;
|
|
37
|
-
end?: number;
|
|
37
|
+
end?: number | undefined;
|
|
38
38
|
}): boolean;
|
|
39
39
|
export default areSameStreamEvents;
|
|
@@ -17,7 +17,6 @@ import { combineLatest as observableCombineLatest, concat as observableConcat, d
|
|
|
17
17
|
import config from "../../../config";
|
|
18
18
|
import { fromEvent } from "../../../utils/event_emitter";
|
|
19
19
|
import refreshScheduledEventsList from "./refresh_scheduled_events_list";
|
|
20
|
-
var STREAM_EVENT_EMITTER_POLL_INTERVAL = config.STREAM_EVENT_EMITTER_POLL_INTERVAL;
|
|
21
20
|
/**
|
|
22
21
|
* Tells if a stream event has a duration
|
|
23
22
|
* @param {Object} evt
|
|
@@ -109,6 +108,7 @@ function streamEventsEmitter(manifest, mediaElement, observation$) {
|
|
|
109
108
|
if (!hasEvents) {
|
|
110
109
|
return EMPTY;
|
|
111
110
|
}
|
|
111
|
+
var STREAM_EVENT_EMITTER_POLL_INTERVAL = config.getCurrent().STREAM_EVENT_EMITTER_POLL_INTERVAL;
|
|
112
112
|
return observableCombineLatest([
|
|
113
113
|
interval(STREAM_EVENT_EMITTER_POLL_INTERVAL).pipe(startWith(null)),
|
|
114
114
|
observation$,
|
|
@@ -22,14 +22,14 @@ export interface IStreamEventData {
|
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
24
|
export interface IStreamEventPayload {
|
|
25
|
-
id?: string;
|
|
25
|
+
id?: string | undefined;
|
|
26
26
|
start: number;
|
|
27
27
|
end: number;
|
|
28
28
|
data: IStreamEventData;
|
|
29
29
|
publicEvent: IPublicStreamEvent;
|
|
30
30
|
}
|
|
31
31
|
export interface INonFiniteStreamEventPayload {
|
|
32
|
-
id?: string;
|
|
32
|
+
id?: string | undefined;
|
|
33
33
|
start: number;
|
|
34
34
|
data: IStreamEventData;
|
|
35
35
|
publicEvent: IPublicNonFiniteStreamEvent;
|
|
@@ -15,10 +15,8 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { ICustomError } from "../../errors";
|
|
17
17
|
import Manifest, { Adaptation, Period, Representation } from "../../manifest";
|
|
18
|
-
import { IAttachedMediaKeysEvent, IBlacklistProtectionDataEvent, ICreatedMediaKeysEvent, IEncryptedEvent, IInitDataIgnoredEvent, IKeysUpdateEvent, INoUpdateEvent, ISessionMessageEvent, ISessionUpdatedEvent } from "../eme";
|
|
19
18
|
import SegmentBuffersStore from "../segment_buffers";
|
|
20
19
|
import { IActivePeriodChangedEvent, IAdaptationChangeEvent, IBitrateEstimationChangeEvent, ICompletedStreamEvent, IEncryptionDataEncounteredEvent, IInbandEventsEvent, INeedsBufferFlushEvent, INeedsDecipherabilityFlush, INeedsMediaSourceReload, IPeriodStreamClearedEvent, IPeriodStreamReadyEvent, IRepresentationChangeEvent, IStreamEventAddedSegment, IStreamManifestMightBeOutOfSync, IStreamNeedsManifestRefresh } from "../stream";
|
|
21
|
-
import { IEMEDisabledEvent } from "./create_eme_manager";
|
|
22
20
|
import { IStreamEventEvent, IStreamEventSkipEvent } from "./stream_events_emitter";
|
|
23
21
|
/** Event sent after the Manifest has been loaded and parsed for the first time. */
|
|
24
22
|
export interface IManifestReadyEvent {
|
|
@@ -91,6 +89,6 @@ export { IRepresentationChangeEvent };
|
|
|
91
89
|
/** Events emitted by a `MediaSourceLoader`. */
|
|
92
90
|
export declare type IMediaSourceLoaderEvent = IStalledEvent | IUnstalledEvent | ILoadedEvent | IWarningEvent | IStreamEventEvent | IStreamEventSkipEvent | IActivePeriodChangedEvent | IPeriodStreamClearedEvent | ICompletedStreamEvent | IPeriodStreamReadyEvent | INeedsMediaSourceReload | INeedsBufferFlushEvent | IAdaptationChangeEvent | IBitrateEstimationChangeEvent | INeedsDecipherabilityFlush | IRepresentationChangeEvent | IStreamEventAddedSegment<unknown> | IEncryptionDataEncounteredEvent | IStreamManifestMightBeOutOfSync | IStreamNeedsManifestRefresh | IInbandEventsEvent;
|
|
93
91
|
/** Every events emitted by the `Init` module. */
|
|
94
|
-
export declare type IInitEvent = IManifestReadyEvent | IManifestUpdateEvent | IReloadingMediaSourceEvent | IDecipherabilityUpdateEvent | IWarningEvent |
|
|
92
|
+
export declare type IInitEvent = IManifestReadyEvent | IManifestUpdateEvent | IReloadingMediaSourceEvent | IDecipherabilityUpdateEvent | IWarningEvent | IStalledEvent | IUnstalledEvent | ILoadedEvent | IStreamEventEvent | IStreamEventSkipEvent | IActivePeriodChangedEvent | IPeriodStreamClearedEvent | ICompletedStreamEvent | IPeriodStreamReadyEvent | IAdaptationChangeEvent | IBitrateEstimationChangeEvent | IRepresentationChangeEvent | IStreamEventAddedSegment<unknown> | IInbandEventsEvent;
|
|
95
93
|
/** Events emitted by the `Init` module for directfile contents. */
|
|
96
|
-
export declare type IDirectfileEvent = IStalledEvent | IUnstalledEvent | ILoadedEvent | IWarningEvent
|
|
94
|
+
export declare type IDirectfileEvent = IStalledEvent | IUnstalledEvent | ILoadedEvent | IWarningEvent;
|
|
@@ -39,7 +39,6 @@ import { toUint8Array } from "../../../../utils/byte_parsing";
|
|
|
39
39
|
import hashBuffer from "../../../../utils/hash_buffer";
|
|
40
40
|
import objectAssign from "../../../../utils/object_assign";
|
|
41
41
|
import { SegmentBuffer, SegmentBufferOperation, } from "../types";
|
|
42
|
-
var SOURCE_BUFFER_FLUSHING_INTERVAL = config.SOURCE_BUFFER_FLUSHING_INTERVAL;
|
|
43
42
|
/**
|
|
44
43
|
* Allows to push and remove new segments to a SourceBuffer in a FIFO queue (not
|
|
45
44
|
* doing so can lead to browser Errors) while keeping an inventory of what has
|
|
@@ -69,6 +68,7 @@ var AudioVideoSegmentBuffer = /** @class */ (function (_super) {
|
|
|
69
68
|
_this._pendingTask = null;
|
|
70
69
|
_this._lastInitSegment = null;
|
|
71
70
|
_this.codec = codec;
|
|
71
|
+
var SOURCE_BUFFER_FLUSHING_INTERVAL = config.getCurrent().SOURCE_BUFFER_FLUSHING_INTERVAL;
|
|
72
72
|
// Some browsers (happened with firefox 66) sometimes "forget" to send us
|
|
73
73
|
// `update` or `updateend` events.
|
|
74
74
|
// In that case, we're completely unable to continue the queue here and
|
|
@@ -124,9 +124,9 @@ export interface INativeTextTracksBufferSegmentData {
|
|
|
124
124
|
* This is mostly needed for "sami" subtitles, to know which cues can / should
|
|
125
125
|
* be parsed.
|
|
126
126
|
*/
|
|
127
|
-
language?: string;
|
|
127
|
+
language?: string | undefined;
|
|
128
128
|
/** start time from which the segment apply, in seconds. */
|
|
129
|
-
start?: number;
|
|
129
|
+
start?: number | undefined;
|
|
130
130
|
/** end time until which the segment apply, in seconds. */
|
|
131
|
-
end?: number;
|
|
131
|
+
end?: number | undefined;
|
|
132
132
|
}
|
|
@@ -38,7 +38,6 @@ import parseTextTrackToElements from "./parsers";
|
|
|
38
38
|
import TextTrackCuesStore from "./text_track_cues_store";
|
|
39
39
|
import updateProportionalElements from "./update_proportional_elements";
|
|
40
40
|
var onEnded$ = events.onEnded$, onSeeked$ = events.onSeeked$, onSeeking$ = events.onSeeking$;
|
|
41
|
-
var MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL = config.MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL, TEXT_TRACK_SIZE_CHECKS_INTERVAL = config.TEXT_TRACK_SIZE_CHECKS_INTERVAL;
|
|
42
41
|
/**
|
|
43
42
|
* Generate the interval at which TextTrack HTML Cues should be refreshed.
|
|
44
43
|
* @param {HTMLMediaElement} videoElement
|
|
@@ -48,6 +47,7 @@ function generateRefreshInterval(videoElement) {
|
|
|
48
47
|
var seeking$ = onSeeking$(videoElement);
|
|
49
48
|
var seeked$ = onSeeked$(videoElement);
|
|
50
49
|
var ended$ = onEnded$(videoElement);
|
|
50
|
+
var MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL = config.getCurrent().MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL;
|
|
51
51
|
var manualRefresh$ = observableMerge(seeked$, ended$);
|
|
52
52
|
var autoRefresh$ = observableInterval(MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL)
|
|
53
53
|
.pipe(startWith(null));
|
|
@@ -113,6 +113,7 @@ var HTMLTextSegmentBuffer = /** @class */ (function (_super) {
|
|
|
113
113
|
_this._disableCurrentCues();
|
|
114
114
|
return;
|
|
115
115
|
}
|
|
116
|
+
var MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL = config.getCurrent().MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL;
|
|
116
117
|
// to spread the time error, we divide the regular chosen interval.
|
|
117
118
|
var time = Math.max(_this._videoElement.currentTime +
|
|
118
119
|
(MAXIMUM_HTML_TEXT_TRACK_UPDATE_INTERVAL / 1000) / 2, 0);
|
|
@@ -315,6 +316,7 @@ var HTMLTextSegmentBuffer = /** @class */ (function (_super) {
|
|
|
315
316
|
var proportionalCues = this._currentCues
|
|
316
317
|
.filter(function (cue) { return cue.resolution !== null; });
|
|
317
318
|
if (proportionalCues.length > 0) {
|
|
319
|
+
var TEXT_TRACK_SIZE_CHECKS_INTERVAL = config.getCurrent().TEXT_TRACK_SIZE_CHECKS_INTERVAL;
|
|
318
320
|
// update propertionally-sized elements periodically
|
|
319
321
|
onHeightWidthChange(this._textTrackElement, TEXT_TRACK_SIZE_CHECKS_INTERVAL)
|
|
320
322
|
.pipe(takeUntil(this._clearSizeUpdates$), takeUntil(this._destroy$))
|