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
|
@@ -16,15 +16,12 @@
|
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
18
|
combineLatest as observableCombineLatest,
|
|
19
|
-
EMPTY,
|
|
20
|
-
exhaustMap,
|
|
21
19
|
filter,
|
|
22
20
|
finalize,
|
|
23
21
|
ignoreElements,
|
|
24
22
|
map,
|
|
25
23
|
merge as observableMerge,
|
|
26
24
|
mergeMap,
|
|
27
|
-
mergeScan,
|
|
28
25
|
Observable,
|
|
29
26
|
of as observableOf,
|
|
30
27
|
share,
|
|
@@ -34,7 +31,6 @@ import {
|
|
|
34
31
|
switchMap,
|
|
35
32
|
take,
|
|
36
33
|
takeUntil,
|
|
37
|
-
tap,
|
|
38
34
|
} from "rxjs";
|
|
39
35
|
import { shouldReloadMediaSourceOnDecipherabilityUpdate } from "../../compat";
|
|
40
36
|
import config from "../../config";
|
|
@@ -51,9 +47,8 @@ import { PlaybackObserver } from "../api";
|
|
|
51
47
|
import {
|
|
52
48
|
getCurrentKeySystem,
|
|
53
49
|
IContentProtection,
|
|
54
|
-
IEMEManagerEvent,
|
|
55
50
|
IKeySystemOption,
|
|
56
|
-
} from "../
|
|
51
|
+
} from "../decrypt";
|
|
57
52
|
import {
|
|
58
53
|
IManifestFetcherParsedResult,
|
|
59
54
|
IManifestFetcherWarningEvent,
|
|
@@ -61,14 +56,15 @@ import {
|
|
|
61
56
|
SegmentFetcherCreator,
|
|
62
57
|
} from "../fetchers";
|
|
63
58
|
import { ITextTrackSegmentBufferOptions } from "../segment_buffers";
|
|
64
|
-
import createEMEManager, {
|
|
65
|
-
IEMEDisabledEvent,
|
|
66
|
-
} from "./create_eme_manager";
|
|
67
59
|
import openMediaSource from "./create_media_source";
|
|
68
60
|
import EVENTS from "./events_generators";
|
|
69
61
|
import getInitialTime, {
|
|
70
62
|
IInitialTimeOptions,
|
|
71
63
|
} from "./get_initial_time";
|
|
64
|
+
import linkDrmAndContent, {
|
|
65
|
+
IDecryptionDisabledEvent,
|
|
66
|
+
IDecryptionReadyEvent,
|
|
67
|
+
} from "./link_drm_and_content";
|
|
72
68
|
import createMediaSourceLoader from "./load_on_media_source";
|
|
73
69
|
import manifestUpdateScheduler, {
|
|
74
70
|
IManifestRefreshSchedulerEvent,
|
|
@@ -79,7 +75,11 @@ import {
|
|
|
79
75
|
IMediaSourceLoaderEvent,
|
|
80
76
|
} from "./types";
|
|
81
77
|
|
|
82
|
-
|
|
78
|
+
// NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
|
|
79
|
+
// first type parameter as `any` instead of the perfectly fine `unknown`,
|
|
80
|
+
// leading to linter issues, as it forbids the usage of `any`.
|
|
81
|
+
// This is why we're disabling the eslint rule.
|
|
82
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
83
83
|
|
|
84
84
|
/** Arguments to give to the `InitializeOnMediaSource` function. */
|
|
85
85
|
export interface IInitializeArguments {
|
|
@@ -91,6 +91,8 @@ export interface IInitializeArguments {
|
|
|
91
91
|
bufferOptions : {
|
|
92
92
|
/** Buffer "goal" at which we stop downloading new segments. */
|
|
93
93
|
wantedBufferAhead : IReadOnlySharedReference<number>;
|
|
94
|
+
/** Buffer maximum size in kiloBytes at which we stop downloading */
|
|
95
|
+
maxVideoBufferSize : IReadOnlySharedReference<number>;
|
|
94
96
|
/** Max buffer size after the current position, in seconds (we GC further up). */
|
|
95
97
|
maxBufferAhead : IReadOnlySharedReference<number>;
|
|
96
98
|
/** Max buffer size before the current position, in seconds (we GC further down). */
|
|
@@ -127,7 +129,7 @@ export interface IInitializeArguments {
|
|
|
127
129
|
/** Emit the playback rate (speed) set by the user. */
|
|
128
130
|
speed : IReadOnlySharedReference<number>;
|
|
129
131
|
/** The configured starting position. */
|
|
130
|
-
startAt? : IInitialTimeOptions;
|
|
132
|
+
startAt? : IInitialTimeOptions | undefined;
|
|
131
133
|
/** Configuration specific to the text track. */
|
|
132
134
|
textTrackOptions : ITextTrackSegmentBufferOptions;
|
|
133
135
|
}
|
|
@@ -144,7 +146,7 @@ export interface IInitializeArguments {
|
|
|
144
146
|
*
|
|
145
147
|
* - download the content's Manifest and handle its refresh logic
|
|
146
148
|
*
|
|
147
|
-
* - Perform
|
|
149
|
+
* - Perform decryption if needed
|
|
148
150
|
*
|
|
149
151
|
* - ask for the choice of the wanted Adaptation through events (e.g. to
|
|
150
152
|
* choose a language)
|
|
@@ -193,26 +195,28 @@ export default function InitializeOnMediaSource(
|
|
|
193
195
|
shareReplay({ refCount: true })
|
|
194
196
|
);
|
|
195
197
|
|
|
196
|
-
/** Send content protection data
|
|
198
|
+
/** Send content protection initialization data. */
|
|
197
199
|
const protectedSegments$ = new Subject<IContentProtection>();
|
|
198
200
|
|
|
199
|
-
/**
|
|
200
|
-
const
|
|
201
|
+
/** Initialize decryption capabilities and MediaSource. */
|
|
202
|
+
const drmEvents$ = linkDrmAndContent(mediaElement,
|
|
201
203
|
keySystems,
|
|
202
|
-
protectedSegments
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
204
|
+
protectedSegments$,
|
|
205
|
+
openMediaSource$)
|
|
206
|
+
.pipe(
|
|
207
|
+
// Because multiple Observables here depend on this Observable as a source,
|
|
208
|
+
// we prefer deferring Subscription until those Observables are themselves
|
|
209
|
+
// all subscribed to.
|
|
210
|
+
// This is needed because `drmEvents$` might send events synchronously
|
|
211
|
+
// on subscription. In that case, it might communicate those events directly
|
|
212
|
+
// after the first Subscription is done, making the next subscription miss
|
|
213
|
+
// out on those events, even if that second subscription is done
|
|
214
|
+
// synchronously after the first one.
|
|
215
|
+
// By calling `deferSubscriptions`, we ensure that subscription to
|
|
216
|
+
// `drmEvents$` effectively starts after a very short delay, thus
|
|
217
|
+
// ensuring that no such race condition can occur.
|
|
218
|
+
deferSubscriptions(),
|
|
219
|
+
share());
|
|
216
220
|
|
|
217
221
|
/**
|
|
218
222
|
* Translate errors coming from the media element into RxPlayer errors
|
|
@@ -220,71 +224,20 @@ export default function InitializeOnMediaSource(
|
|
|
220
224
|
*/
|
|
221
225
|
const mediaError$ = throwOnMediaError(mediaElement);
|
|
222
226
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
* DRM-specific information.
|
|
230
|
-
*/
|
|
231
|
-
const prepareMediaSource$ = emeManager$.pipe(
|
|
232
|
-
mergeScan((
|
|
233
|
-
acc : {
|
|
234
|
-
/** set to true once EME APIs have been initialized. */
|
|
235
|
-
isEmeReady : boolean;
|
|
236
|
-
/**
|
|
237
|
-
* ID identifying the current MediaKeys' system ID. Can be used to only
|
|
238
|
-
* send initialization data linked to that ID as an optimization measure.
|
|
239
|
-
*/
|
|
240
|
-
drmSystemId? : string;
|
|
241
|
-
},
|
|
242
|
-
evt : IEMEManagerEvent | IEMEDisabledEvent
|
|
243
|
-
) => {
|
|
244
|
-
switch (evt.type) {
|
|
245
|
-
case "eme-disabled":
|
|
246
|
-
case "attached-media-keys":
|
|
247
|
-
return observableOf({ isEmeReady: true,
|
|
248
|
-
drmSystemId: acc.drmSystemId });
|
|
249
|
-
case "created-media-keys":
|
|
250
|
-
const drmSystemId = evt.value.initializationDataSystemId;
|
|
251
|
-
return openMediaSource$.pipe(
|
|
252
|
-
mergeMap(() => {
|
|
253
|
-
// Now that the MediaSource has been opened and linked to the media
|
|
254
|
-
// element we can attach the MediaKeys instance to the latter.
|
|
255
|
-
evt.value.canAttachMediaKeys.setValue(true);
|
|
256
|
-
|
|
257
|
-
// If the `disableMediaKeysAttachmentLock` option has been set to
|
|
258
|
-
// `true`, we should not wait until the MediaKeys instance has been
|
|
259
|
-
// attached to start loading the content.
|
|
260
|
-
// TODO we may want to keep keySystems option knowledge in the EME
|
|
261
|
-
// code
|
|
262
|
-
const shouldDisableLock = evt.value.options
|
|
263
|
-
.disableMediaKeysAttachmentLock === true;
|
|
264
|
-
return shouldDisableLock ? observableOf({ isEmeReady: true,
|
|
265
|
-
drmSystemId }) :
|
|
266
|
-
EMPTY;
|
|
267
|
-
}),
|
|
268
|
-
startWith({ isEmeReady: false, drmSystemId }));
|
|
269
|
-
default:
|
|
270
|
-
return EMPTY;
|
|
271
|
-
}
|
|
272
|
-
}, { isEmeReady: false, drmSystemId: undefined }),
|
|
273
|
-
filter((emitted) => emitted.isEmeReady),
|
|
274
|
-
take(1),
|
|
275
|
-
exhaustMap(({ drmSystemId }) =>
|
|
276
|
-
openMediaSource$
|
|
277
|
-
.pipe(map((mediaSource) => ({ mediaSource, drmSystemId })))));
|
|
227
|
+
const mediaSourceReady$ = drmEvents$.pipe(
|
|
228
|
+
filter((evt) : evt is IDecryptionReadyEvent<MediaSource> |
|
|
229
|
+
IDecryptionDisabledEvent<MediaSource> =>
|
|
230
|
+
evt.type === "decryption-ready" || evt.type === "decryption-disabled"),
|
|
231
|
+
map(e => e.value),
|
|
232
|
+
take(1));
|
|
278
233
|
|
|
279
234
|
/** Load and play the content asked. */
|
|
280
|
-
const loadContent$ = observableCombineLatest([manifest$,
|
|
281
|
-
|
|
282
|
-
mergeMap(([manifestEvt, mediaSourceInfo]) => {
|
|
235
|
+
const loadContent$ = observableCombineLatest([manifest$, mediaSourceReady$]).pipe(
|
|
236
|
+
mergeMap(([manifestEvt, { drmSystemId, mediaSource: initialMediaSource } ]) => {
|
|
283
237
|
if (manifestEvt.type === "warning") {
|
|
284
238
|
return observableOf(manifestEvt);
|
|
285
239
|
}
|
|
286
240
|
const { manifest } = manifestEvt;
|
|
287
|
-
const { mediaSource: initialMediaSource, drmSystemId } = mediaSourceInfo;
|
|
288
241
|
|
|
289
242
|
log.debug("Init: Calculating initial time");
|
|
290
243
|
const initialTime = getInitialTime(manifest, lowLatencyMode, startAt);
|
|
@@ -320,25 +273,8 @@ export default function InitializeOnMediaSource(
|
|
|
320
273
|
fromEvent(manifest, "decipherabilityUpdate")
|
|
321
274
|
.pipe(map(EVENTS.decipherabilityUpdate)));
|
|
322
275
|
|
|
323
|
-
const setUndecipherableRepresentations$ = emeManager$.pipe(
|
|
324
|
-
tap((evt) => {
|
|
325
|
-
if (evt.type === "keys-update") {
|
|
326
|
-
manifest.updateDeciperabilitiesBasedOnKeyIds(evt.value);
|
|
327
|
-
} else if (evt.type === "blacklist-protection-data") {
|
|
328
|
-
log.info("Init: blacklisting Representations based on protection data.");
|
|
329
|
-
manifest.addUndecipherableProtectionData(evt.value);
|
|
330
|
-
}
|
|
331
|
-
}),
|
|
332
|
-
// NOTE As of now (RxJS 7.4.0), RxJS defines `ignoreElements` default
|
|
333
|
-
// first type parameter as `any` instead of the perfectly fine `unknown`,
|
|
334
|
-
// leading to linter issues, as it forbids the usage of `any`.
|
|
335
|
-
// This is why we're disabling the eslint rule.
|
|
336
|
-
/* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */
|
|
337
|
-
ignoreElements());
|
|
338
|
-
|
|
339
276
|
return observableMerge(manifestEvents$,
|
|
340
277
|
manifestUpdate$,
|
|
341
|
-
setUndecipherableRepresentations$,
|
|
342
278
|
recursiveLoad$)
|
|
343
279
|
.pipe(startWith(EVENTS.manifestReady(manifest)),
|
|
344
280
|
finalize(() => { scheduleRefresh$.complete(); }));
|
|
@@ -368,6 +304,7 @@ export default function InitializeOnMediaSource(
|
|
|
368
304
|
canUseUnsafeMode: true });
|
|
369
305
|
return null;
|
|
370
306
|
case "manifest-might-be-out-of-sync":
|
|
307
|
+
const { OUT_OF_SYNC_MANIFEST_REFRESH_DELAY } = config.getCurrent();
|
|
371
308
|
scheduleRefresh$.next({
|
|
372
309
|
completeRefresh: true,
|
|
373
310
|
canUseUnsafeMode: false,
|
|
@@ -420,5 +357,5 @@ export default function InitializeOnMediaSource(
|
|
|
420
357
|
}
|
|
421
358
|
}));
|
|
422
359
|
|
|
423
|
-
return observableMerge(loadContent$, mediaError$,
|
|
360
|
+
return observableMerge(loadContent$, mediaError$, drmEvents$.pipe(ignoreElements()));
|
|
424
361
|
}
|
|
@@ -0,0 +1,176 @@
|
|
|
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
|
+
|
|
17
|
+
import {
|
|
18
|
+
map,
|
|
19
|
+
merge as observableMerge,
|
|
20
|
+
Observable,
|
|
21
|
+
Subscription,
|
|
22
|
+
} from "rxjs";
|
|
23
|
+
import {
|
|
24
|
+
events,
|
|
25
|
+
hasEMEAPIs,
|
|
26
|
+
} from "../../compat/";
|
|
27
|
+
import { EncryptedMediaError } from "../../errors";
|
|
28
|
+
import features from "../../features";
|
|
29
|
+
import log from "../../log";
|
|
30
|
+
import {
|
|
31
|
+
IContentProtection,
|
|
32
|
+
IKeySystemOption,
|
|
33
|
+
ContentDecryptorState,
|
|
34
|
+
} from "../decrypt";
|
|
35
|
+
import { IWarningEvent } from "./types";
|
|
36
|
+
|
|
37
|
+
const { onEncrypted$ } = events;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @param {HTMLMediaElement} mediaElement
|
|
41
|
+
* @param {Array.<Object>} keySystems
|
|
42
|
+
* @param {Observable<Object>} contentProtections$
|
|
43
|
+
* @param {Promise} linkingMedia$
|
|
44
|
+
* @returns {Observable}
|
|
45
|
+
*/
|
|
46
|
+
export default function linkDrmAndContent<T>(
|
|
47
|
+
mediaElement : HTMLMediaElement,
|
|
48
|
+
keySystems : IKeySystemOption[],
|
|
49
|
+
contentProtections$ : Observable<IContentProtection>,
|
|
50
|
+
linkingMedia$ : Observable<T>
|
|
51
|
+
) : Observable<IContentDecryptorInitEvent<T>> {
|
|
52
|
+
const encryptedEvents$ = observableMerge(onEncrypted$(mediaElement),
|
|
53
|
+
contentProtections$);
|
|
54
|
+
if (features.ContentDecryptor == null) {
|
|
55
|
+
return observableMerge(
|
|
56
|
+
encryptedEvents$.pipe(map(() => {
|
|
57
|
+
log.error("Init: Encrypted event but EME feature not activated");
|
|
58
|
+
throw new EncryptedMediaError("MEDIA_IS_ENCRYPTED_ERROR",
|
|
59
|
+
"EME feature not activated.");
|
|
60
|
+
})),
|
|
61
|
+
linkingMedia$.pipe(map(mediaSource => ({
|
|
62
|
+
type: "decryption-disabled" as const,
|
|
63
|
+
value: { drmSystemId: undefined, mediaSource },
|
|
64
|
+
}))));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (keySystems.length === 0) {
|
|
68
|
+
return observableMerge(
|
|
69
|
+
encryptedEvents$.pipe(map(() => {
|
|
70
|
+
log.error("Init: Ciphered media and no keySystem passed");
|
|
71
|
+
throw new EncryptedMediaError("MEDIA_IS_ENCRYPTED_ERROR",
|
|
72
|
+
"Media is encrypted and no `keySystems` given");
|
|
73
|
+
})),
|
|
74
|
+
linkingMedia$.pipe(map(mediaSource => ({
|
|
75
|
+
type: "decryption-disabled" as const,
|
|
76
|
+
value: { drmSystemId: undefined, mediaSource },
|
|
77
|
+
}))));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (!hasEMEAPIs()) {
|
|
81
|
+
return observableMerge(
|
|
82
|
+
encryptedEvents$.pipe(map(() => {
|
|
83
|
+
log.error("Init: Encrypted event but no EME API available");
|
|
84
|
+
throw new EncryptedMediaError("MEDIA_IS_ENCRYPTED_ERROR",
|
|
85
|
+
"Encryption APIs not found.");
|
|
86
|
+
})),
|
|
87
|
+
linkingMedia$.pipe(map(mediaSource => ({
|
|
88
|
+
type: "decryption-disabled" as const,
|
|
89
|
+
value: { drmSystemId: undefined, mediaSource },
|
|
90
|
+
}))));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
log.debug("Init: Creating ContentDecryptor");
|
|
94
|
+
const ContentDecryptor = features.ContentDecryptor;
|
|
95
|
+
return new Observable((obs) => {
|
|
96
|
+
const contentDecryptor = new ContentDecryptor(mediaElement, keySystems);
|
|
97
|
+
|
|
98
|
+
let mediaSub : Subscription | undefined;
|
|
99
|
+
contentDecryptor.addEventListener("stateChange", (state) => {
|
|
100
|
+
if (state === ContentDecryptorState.WaitingForAttachment) {
|
|
101
|
+
contentDecryptor.removeEventListener("stateChange");
|
|
102
|
+
|
|
103
|
+
mediaSub = linkingMedia$.subscribe(mediaSource => {
|
|
104
|
+
contentDecryptor.addEventListener("stateChange", (newState) => {
|
|
105
|
+
if (newState === ContentDecryptorState.ReadyForContent) {
|
|
106
|
+
obs.next({ type: "decryption-ready",
|
|
107
|
+
value: { drmSystemId: contentDecryptor.systemId,
|
|
108
|
+
mediaSource } });
|
|
109
|
+
contentDecryptor.removeEventListener("stateChange");
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
contentDecryptor.attach();
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
contentDecryptor.addEventListener("error", (e) => {
|
|
119
|
+
obs.error(e);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
contentDecryptor.addEventListener("warning", (w) => {
|
|
123
|
+
obs.next({ type: "warning", value: w });
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
const protectionDataSub = contentProtections$.subscribe(data => {
|
|
127
|
+
contentDecryptor.onInitializationData(data);
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
return () => {
|
|
131
|
+
protectionDataSub.unsubscribe();
|
|
132
|
+
mediaSub?.unsubscribe();
|
|
133
|
+
contentDecryptor.dispose();
|
|
134
|
+
};
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export type IContentDecryptorInitEvent<T> = IDecryptionDisabledEvent<T> |
|
|
139
|
+
IDecryptionReadyEvent<T> |
|
|
140
|
+
IWarningEvent;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Event emitted after deciding that no decryption logic will be launched for
|
|
144
|
+
* the current content.
|
|
145
|
+
*/
|
|
146
|
+
export interface IDecryptionDisabledEvent<T> {
|
|
147
|
+
type: "decryption-disabled";
|
|
148
|
+
value: {
|
|
149
|
+
/**
|
|
150
|
+
* Identify the current DRM's system ID.
|
|
151
|
+
* Here `undefined` as no decryption capability has been added.
|
|
152
|
+
*/
|
|
153
|
+
drmSystemId: undefined;
|
|
154
|
+
/** The value outputed by the `linkingMedia$` Observable. */
|
|
155
|
+
mediaSource: T;
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Event emitted when decryption capabilities have started and content can
|
|
161
|
+
* begin to be pushed on the HTMLMediaElement.
|
|
162
|
+
*/
|
|
163
|
+
export interface IDecryptionReadyEvent<T> {
|
|
164
|
+
type: "decryption-ready";
|
|
165
|
+
value: {
|
|
166
|
+
/**
|
|
167
|
+
* Identify the current DRM's systemId as an hexadecimal string, so the
|
|
168
|
+
* RxPlayer may be able to (optionally) only send the corresponding
|
|
169
|
+
* encryption initialization data.
|
|
170
|
+
* `undefined` if unknown.
|
|
171
|
+
*/
|
|
172
|
+
drmSystemId: string | undefined;
|
|
173
|
+
/** The value outputed by the `linkingMedia$` Observable. */
|
|
174
|
+
mediaSource: T;
|
|
175
|
+
};
|
|
176
|
+
}
|
|
@@ -38,9 +38,6 @@ import {
|
|
|
38
38
|
} from "../fetchers";
|
|
39
39
|
import { IWarningEvent } from "./types";
|
|
40
40
|
|
|
41
|
-
const { FAILED_PARTIAL_UPDATE_MANIFEST_REFRESH_DELAY,
|
|
42
|
-
MAX_CONSECUTIVE_MANIFEST_PARSING_IN_UNSAFE_MODE,
|
|
43
|
-
MIN_MANIFEST_PARSING_TIME_TO_ENTER_UNSAFE_MODE } = config;
|
|
44
41
|
|
|
45
42
|
/** Arguments to give to the `manifestUpdateScheduler` */
|
|
46
43
|
export interface IManifestUpdateSchedulerArguments {
|
|
@@ -48,9 +45,9 @@ export interface IManifestUpdateSchedulerArguments {
|
|
|
48
45
|
manifestFetcher : ManifestFetcher;
|
|
49
46
|
/** Information about the initial load of the manifest */
|
|
50
47
|
initialManifest : { manifest : Manifest;
|
|
51
|
-
sendingTime? : number;
|
|
52
|
-
receivedTime? : number;
|
|
53
|
-
parsingTime? : number; };
|
|
48
|
+
sendingTime? : number | undefined;
|
|
49
|
+
receivedTime? : number | undefined;
|
|
50
|
+
parsingTime? : number | undefined; };
|
|
54
51
|
/** Minimum interval to keep between Manifest updates */
|
|
55
52
|
minimumManifestUpdateInterval : number;
|
|
56
53
|
/** Allows the rest of the code to ask for a Manifest refresh */
|
|
@@ -74,7 +71,7 @@ export interface IManifestRefreshSchedulerEvent {
|
|
|
74
71
|
* Optional wanted refresh delay, which is the minimum time you want to wait
|
|
75
72
|
* before updating the Manifest
|
|
76
73
|
*/
|
|
77
|
-
delay? : number;
|
|
74
|
+
delay? : number | undefined;
|
|
78
75
|
/**
|
|
79
76
|
* Whether the parsing can be done in the more efficient "unsafeMode".
|
|
80
77
|
* This mode is extremely fast but can lead to de-synchronisation with the
|
|
@@ -127,9 +124,9 @@ export default function manifestUpdateScheduler({
|
|
|
127
124
|
* encountered.
|
|
128
125
|
*/
|
|
129
126
|
function handleManifestRefresh$(
|
|
130
|
-
{ sendingTime, parsingTime, updatingTime } : { sendingTime?: number;
|
|
131
|
-
parsingTime? : number;
|
|
132
|
-
updatingTime? : number; }
|
|
127
|
+
{ sendingTime, parsingTime, updatingTime } : { sendingTime?: number | undefined;
|
|
128
|
+
parsingTime? : number | undefined;
|
|
129
|
+
updatingTime? : number | undefined; }
|
|
133
130
|
) : Observable<IWarningEvent> {
|
|
134
131
|
/**
|
|
135
132
|
* Total time taken to fully update the last Manifest, in milliseconds.
|
|
@@ -139,6 +136,9 @@ export default function manifestUpdateScheduler({
|
|
|
139
136
|
parsingTime + (updatingTime ?? 0) :
|
|
140
137
|
undefined;
|
|
141
138
|
|
|
139
|
+
const { MAX_CONSECUTIVE_MANIFEST_PARSING_IN_UNSAFE_MODE,
|
|
140
|
+
MIN_MANIFEST_PARSING_TIME_TO_ENTER_UNSAFE_MODE } = config.getCurrent();
|
|
141
|
+
|
|
142
142
|
/**
|
|
143
143
|
* "unsafeMode" is a mode where we unlock advanced Manifest parsing
|
|
144
144
|
* optimizations with the added risk to lose some information.
|
|
@@ -147,6 +147,7 @@ export default function manifestUpdateScheduler({
|
|
|
147
147
|
* Only perform parsing in `unsafeMode` when the last full parsing took a
|
|
148
148
|
* lot of time and do not go higher than the maximum consecutive time.
|
|
149
149
|
*/
|
|
150
|
+
|
|
150
151
|
const unsafeModeEnabled = consecutiveUnsafeMode > 0 ?
|
|
151
152
|
consecutiveUnsafeMode < MAX_CONSECUTIVE_MANIFEST_PARSING_IN_UNSAFE_MODE :
|
|
152
153
|
totalUpdateTime !== undefined ?
|
|
@@ -309,6 +310,7 @@ export default function manifestUpdateScheduler({
|
|
|
309
310
|
"unknown error";
|
|
310
311
|
log.warn(`MUS: Attempt to update Manifest failed: ${message}`,
|
|
311
312
|
"Re-downloading the Manifest fully");
|
|
313
|
+
const { FAILED_PARTIAL_UPDATE_MANIFEST_REFRESH_DELAY } = config.getCurrent();
|
|
312
314
|
return startManualRefreshTimer(FAILED_PARTIAL_UPDATE_MANIFEST_REFRESH_DELAY,
|
|
313
315
|
minimumManifestUpdateInterval,
|
|
314
316
|
newSendingTime)
|
|
@@ -44,11 +44,6 @@ import {
|
|
|
44
44
|
IWarningEvent,
|
|
45
45
|
} from "./types";
|
|
46
46
|
|
|
47
|
-
const { BUFFER_DISCONTINUITY_THRESHOLD,
|
|
48
|
-
FORCE_DISCONTINUITY_SEEK_DELAY,
|
|
49
|
-
FREEZING_STALLED_DELAY,
|
|
50
|
-
UNFREEZING_SEEK_DELAY,
|
|
51
|
-
UNFREEZING_DELTA_POSITION } = config;
|
|
52
47
|
|
|
53
48
|
/**
|
|
54
49
|
* Work-around rounding errors with floating points by setting an acceptable,
|
|
@@ -225,6 +220,12 @@ export default function StallAvoider(
|
|
|
225
220
|
rebuffering,
|
|
226
221
|
freezing } = observation;
|
|
227
222
|
|
|
223
|
+
const { BUFFER_DISCONTINUITY_THRESHOLD,
|
|
224
|
+
FORCE_DISCONTINUITY_SEEK_DELAY,
|
|
225
|
+
FREEZING_STALLED_DELAY,
|
|
226
|
+
UNFREEZING_SEEK_DELAY,
|
|
227
|
+
UNFREEZING_DELTA_POSITION } = config.getCurrent();
|
|
228
|
+
|
|
228
229
|
if (freezing !== null) {
|
|
229
230
|
const now = performance.now();
|
|
230
231
|
|
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
* @param {Object} evt2
|
|
29
29
|
* @returns {Boolean}
|
|
30
30
|
*/
|
|
31
|
-
function areSameStreamEvents(evt1: { id?: string;
|
|
31
|
+
function areSameStreamEvents(evt1: { id?: string | undefined;
|
|
32
32
|
start: number;
|
|
33
|
-
end?: number; },
|
|
34
|
-
evt2: { id?: string;
|
|
33
|
+
end?: number | undefined; },
|
|
34
|
+
evt2: { id?: string | undefined;
|
|
35
35
|
start: number;
|
|
36
|
-
end?: number; }): boolean {
|
|
36
|
+
end?: number | undefined; }): boolean {
|
|
37
37
|
return evt1.id === evt2.id &&
|
|
38
38
|
evt1.start === evt2.start &&
|
|
39
39
|
evt1.end === evt2.end;
|
|
@@ -43,7 +43,6 @@ import {
|
|
|
43
43
|
IStreamEventPayload,
|
|
44
44
|
} from "./types";
|
|
45
45
|
|
|
46
|
-
const { STREAM_EVENT_EMITTER_POLL_INTERVAL } = config;
|
|
47
46
|
|
|
48
47
|
/**
|
|
49
48
|
* Tells if a stream event has a duration
|
|
@@ -161,6 +160,8 @@ function streamEventsEmitter(manifest: Manifest,
|
|
|
161
160
|
if (!hasEvents) {
|
|
162
161
|
return EMPTY;
|
|
163
162
|
}
|
|
163
|
+
|
|
164
|
+
const { STREAM_EVENT_EMITTER_POLL_INTERVAL } = config.getCurrent();
|
|
164
165
|
return observableCombineLatest([
|
|
165
166
|
interval(STREAM_EVENT_EMITTER_POLL_INTERVAL).pipe(startWith(null)),
|
|
166
167
|
observation$,
|
|
@@ -22,7 +22,7 @@ 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;
|
|
@@ -30,7 +30,7 @@ export interface IStreamEventPayload {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
export interface INonFiniteStreamEventPayload {
|
|
33
|
-
id?: string;
|
|
33
|
+
id?: string | undefined;
|
|
34
34
|
start: number;
|
|
35
35
|
data: IStreamEventData;
|
|
36
36
|
publicEvent: IPublicNonFiniteStreamEvent;
|
package/src/core/init/types.ts
CHANGED
|
@@ -20,17 +20,6 @@ import Manifest, {
|
|
|
20
20
|
Period,
|
|
21
21
|
Representation,
|
|
22
22
|
} from "../../manifest";
|
|
23
|
-
import {
|
|
24
|
-
IAttachedMediaKeysEvent,
|
|
25
|
-
IBlacklistProtectionDataEvent,
|
|
26
|
-
ICreatedMediaKeysEvent,
|
|
27
|
-
IEncryptedEvent,
|
|
28
|
-
IInitDataIgnoredEvent,
|
|
29
|
-
IKeysUpdateEvent,
|
|
30
|
-
INoUpdateEvent,
|
|
31
|
-
ISessionMessageEvent,
|
|
32
|
-
ISessionUpdatedEvent,
|
|
33
|
-
} from "../eme";
|
|
34
23
|
import SegmentBuffersStore from "../segment_buffers";
|
|
35
24
|
import {
|
|
36
25
|
IActivePeriodChangedEvent,
|
|
@@ -49,7 +38,6 @@ import {
|
|
|
49
38
|
IStreamManifestMightBeOutOfSync,
|
|
50
39
|
IStreamNeedsManifestRefresh,
|
|
51
40
|
} from "../stream";
|
|
52
|
-
import { IEMEDisabledEvent } from "./create_eme_manager";
|
|
53
41
|
import {
|
|
54
42
|
IStreamEventEvent,
|
|
55
43
|
IStreamEventSkipEvent,
|
|
@@ -154,19 +142,6 @@ export type IInitEvent = IManifestReadyEvent |
|
|
|
154
142
|
IReloadingMediaSourceEvent |
|
|
155
143
|
IDecipherabilityUpdateEvent |
|
|
156
144
|
IWarningEvent |
|
|
157
|
-
IEMEDisabledEvent |
|
|
158
|
-
|
|
159
|
-
// Coming from the `EMEManager`
|
|
160
|
-
|
|
161
|
-
IEncryptedEvent |
|
|
162
|
-
ICreatedMediaKeysEvent |
|
|
163
|
-
IAttachedMediaKeysEvent |
|
|
164
|
-
IInitDataIgnoredEvent |
|
|
165
|
-
ISessionMessageEvent |
|
|
166
|
-
IKeysUpdateEvent |
|
|
167
|
-
INoUpdateEvent |
|
|
168
|
-
ISessionUpdatedEvent |
|
|
169
|
-
IBlacklistProtectionDataEvent |
|
|
170
145
|
|
|
171
146
|
// Coming from the `MediaSourceLoader`
|
|
172
147
|
|
|
@@ -192,17 +167,4 @@ export type IInitEvent = IManifestReadyEvent |
|
|
|
192
167
|
export type IDirectfileEvent = IStalledEvent |
|
|
193
168
|
IUnstalledEvent |
|
|
194
169
|
ILoadedEvent |
|
|
195
|
-
IWarningEvent
|
|
196
|
-
IEMEDisabledEvent |
|
|
197
|
-
|
|
198
|
-
// Coming from the `EMEManager`
|
|
199
|
-
|
|
200
|
-
IEncryptedEvent |
|
|
201
|
-
ICreatedMediaKeysEvent |
|
|
202
|
-
IAttachedMediaKeysEvent |
|
|
203
|
-
IInitDataIgnoredEvent |
|
|
204
|
-
ISessionMessageEvent |
|
|
205
|
-
IKeysUpdateEvent |
|
|
206
|
-
INoUpdateEvent |
|
|
207
|
-
ISessionUpdatedEvent |
|
|
208
|
-
IBlacklistProtectionDataEvent;
|
|
170
|
+
IWarningEvent;
|
|
@@ -48,7 +48,6 @@ import {
|
|
|
48
48
|
SegmentBufferOperation,
|
|
49
49
|
} from "../types";
|
|
50
50
|
|
|
51
|
-
const { SOURCE_BUFFER_FLUSHING_INTERVAL } = config;
|
|
52
51
|
|
|
53
52
|
/**
|
|
54
53
|
* Item added to the AudioVideoSegmentBuffer's queue before being processed into
|
|
@@ -172,6 +171,8 @@ export default class AudioVideoSegmentBuffer extends SegmentBuffer {
|
|
|
172
171
|
this._lastInitSegment = null;
|
|
173
172
|
this.codec = codec;
|
|
174
173
|
|
|
174
|
+
const { SOURCE_BUFFER_FLUSHING_INTERVAL } = config.getCurrent();
|
|
175
|
+
|
|
175
176
|
// Some browsers (happened with firefox 66) sometimes "forget" to send us
|
|
176
177
|
// `update` or `updateend` events.
|
|
177
178
|
// In that case, we're completely unable to continue the queue here and
|