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
|
@@ -18,7 +18,6 @@ import { SegmentBufferOperation, } from "../../segment_buffers";
|
|
|
18
18
|
import checkForDiscontinuity from "./check_for_discontinuity";
|
|
19
19
|
import getNeededSegments from "./get_needed_segments";
|
|
20
20
|
import getSegmentPriority from "./get_segment_priority";
|
|
21
|
-
var MINIMUM_SEGMENT_SIZE = config.MINIMUM_SEGMENT_SIZE;
|
|
22
21
|
/**
|
|
23
22
|
* Checks on the current buffered data for the given type and Period
|
|
24
23
|
* and returns what should be done to fill the buffer according to the buffer
|
|
@@ -33,7 +32,7 @@ var MINIMUM_SEGMENT_SIZE = config.MINIMUM_SEGMENT_SIZE;
|
|
|
33
32
|
* @param {Object} segmentBuffer
|
|
34
33
|
* @returns {Object}
|
|
35
34
|
*/
|
|
36
|
-
export default function getBufferStatus(content, wantedStartPosition, playbackObserver, fastSwitchThreshold, bufferGoal, segmentBuffer) {
|
|
35
|
+
export default function getBufferStatus(content, wantedStartPosition, playbackObserver, fastSwitchThreshold, bufferGoal, maxBufferSize, segmentBuffer) {
|
|
37
36
|
var _a;
|
|
38
37
|
var period = content.period, representation = content.representation;
|
|
39
38
|
segmentBuffer.synchronizeInventory();
|
|
@@ -56,8 +55,11 @@ export default function getBufferStatus(content, wantedStartPosition, playbackOb
|
|
|
56
55
|
/** Callback allowing to retrieve a segment's history in the buffer. */
|
|
57
56
|
var getBufferedHistory = segmentBuffer.getSegmentHistory.bind(segmentBuffer);
|
|
58
57
|
/** List of segments we will need to download. */
|
|
59
|
-
var
|
|
60
|
-
|
|
58
|
+
var _b = getNeededSegments({ content: content, bufferedSegments: bufferedSegments, currentPlaybackTime: currentPlaybackTime, fastSwitchThreshold: fastSwitchThreshold, getBufferedHistory: getBufferedHistory, neededRange: neededRange, segmentsBeingPushed: segmentsBeingPushed, maxBufferSize: maxBufferSize }), neededSegments = _b.neededSegments, isBufferFull = _b.isBufferFull;
|
|
59
|
+
var prioritizedNeededSegments = neededSegments.map(function (segment) { return ({
|
|
60
|
+
priority: getSegmentPriority(segment.time, wantedStartPosition),
|
|
61
|
+
segment: segment,
|
|
62
|
+
}); });
|
|
61
63
|
/**
|
|
62
64
|
* `true` if the current `RepresentationStream` has loaded all the
|
|
63
65
|
* needed segments for this Representation until the end of the Period.
|
|
@@ -66,7 +68,7 @@ export default function getBufferStatus(content, wantedStartPosition, playbackOb
|
|
|
66
68
|
var lastPosition = representation.index.getLastPosition();
|
|
67
69
|
if (!representation.index.isInitialized() ||
|
|
68
70
|
period.end === undefined ||
|
|
69
|
-
|
|
71
|
+
prioritizedNeededSegments.length > 0) {
|
|
70
72
|
hasFinishedLoading = false;
|
|
71
73
|
}
|
|
72
74
|
else {
|
|
@@ -110,14 +112,14 @@ export default function getBufferStatus(content, wantedStartPosition, playbackOb
|
|
|
110
112
|
if (segmentsBeingPushed.length > 0) {
|
|
111
113
|
nextSegmentStart = Math.min.apply(Math, segmentsBeingPushed.map(function (info) { return info.segment.time; }));
|
|
112
114
|
}
|
|
113
|
-
if (
|
|
115
|
+
if (prioritizedNeededSegments.length > 0) {
|
|
114
116
|
nextSegmentStart = nextSegmentStart !== null ?
|
|
115
|
-
Math.min(nextSegmentStart,
|
|
116
|
-
|
|
117
|
+
Math.min(nextSegmentStart, prioritizedNeededSegments[0].segment.time) :
|
|
118
|
+
prioritizedNeededSegments[0].segment.time;
|
|
117
119
|
}
|
|
118
120
|
imminentDiscontinuity = checkForDiscontinuity(content, neededRange, nextSegmentStart, hasFinishedLoading, bufferedSegments);
|
|
119
121
|
}
|
|
120
|
-
return { imminentDiscontinuity: imminentDiscontinuity, hasFinishedLoading: hasFinishedLoading, neededSegments:
|
|
122
|
+
return { imminentDiscontinuity: imminentDiscontinuity, hasFinishedLoading: hasFinishedLoading, neededSegments: prioritizedNeededSegments, isBufferFull: isBufferFull, shouldRefreshManifest: shouldRefreshManifest };
|
|
121
123
|
}
|
|
122
124
|
/**
|
|
123
125
|
* From the given SegmentInventory, filters the "playable" (in a supported codec
|
|
@@ -128,6 +130,7 @@ export default function getBufferStatus(content, wantedStartPosition, playbackOb
|
|
|
128
130
|
* @returns {Array.<Object>}
|
|
129
131
|
*/
|
|
130
132
|
function getPlayableBufferedSegments(neededRange, segmentInventory) {
|
|
133
|
+
var MINIMUM_SEGMENT_SIZE = config.getCurrent().MINIMUM_SEGMENT_SIZE;
|
|
131
134
|
var segmentRoundingError = Math.max(1 / 60, MINIMUM_SEGMENT_SIZE);
|
|
132
135
|
var minEnd = neededRange.start + segmentRoundingError;
|
|
133
136
|
var maxStart = neededRange.end - segmentRoundingError;
|
|
@@ -14,17 +14,18 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import Manifest, { Adaptation, ISegment, Period, Representation } from "../../../manifest";
|
|
17
|
-
import { IBufferedChunk } from "../../segment_buffers";
|
|
17
|
+
import { IBufferedChunk, IEndOfSegmentInfos } from "../../segment_buffers";
|
|
18
18
|
import { IBufferedHistoryEntry, IChunkContext } from "../../segment_buffers/inventory";
|
|
19
|
+
interface IContentContext {
|
|
20
|
+
adaptation: Adaptation;
|
|
21
|
+
manifest: Manifest;
|
|
22
|
+
period: Period;
|
|
23
|
+
representation: Representation;
|
|
24
|
+
}
|
|
19
25
|
/** Arguments for `getNeededSegments`. */
|
|
20
26
|
export interface IGetNeededSegmentsArguments {
|
|
21
27
|
/** The content we want to load segments for */
|
|
22
|
-
content:
|
|
23
|
-
adaptation: Adaptation;
|
|
24
|
-
manifest: Manifest;
|
|
25
|
-
period: Period;
|
|
26
|
-
representation: Representation;
|
|
27
|
-
};
|
|
28
|
+
content: IContentContext;
|
|
28
29
|
/**
|
|
29
30
|
* The current playing position.
|
|
30
31
|
* Important to avoid asking for segments on the same exact position, which
|
|
@@ -46,12 +47,7 @@ export interface IGetNeededSegmentsArguments {
|
|
|
46
47
|
end: number;
|
|
47
48
|
};
|
|
48
49
|
/** The list of segments that are already in the process of being pushed. */
|
|
49
|
-
segmentsBeingPushed:
|
|
50
|
-
adaptation: Adaptation;
|
|
51
|
-
period: Period;
|
|
52
|
-
representation: Representation;
|
|
53
|
-
segment: ISegment;
|
|
54
|
-
}>;
|
|
50
|
+
segmentsBeingPushed: IEndOfSegmentInfos[];
|
|
55
51
|
/**
|
|
56
52
|
* Information on the segments already in the buffer, in chronological order.
|
|
57
53
|
*
|
|
@@ -62,8 +58,16 @@ export interface IGetNeededSegmentsArguments {
|
|
|
62
58
|
* re-requested.
|
|
63
59
|
*/
|
|
64
60
|
bufferedSegments: IBufferedChunk[];
|
|
61
|
+
/**
|
|
62
|
+
* maxBufferSize is the maximum memory in kilobytes that the buffer should take
|
|
63
|
+
*/
|
|
64
|
+
maxBufferSize: number;
|
|
65
65
|
getBufferedHistory: (context: IChunkContext) => IBufferedHistoryEntry[];
|
|
66
66
|
}
|
|
67
|
+
interface INeededSegments {
|
|
68
|
+
neededSegments: ISegment[];
|
|
69
|
+
isBufferFull: boolean;
|
|
70
|
+
}
|
|
67
71
|
/**
|
|
68
72
|
* Return the list of segments that can currently be downloaded to fill holes
|
|
69
73
|
* in the buffer in the given range, including already-pushed segments currently
|
|
@@ -74,4 +78,5 @@ export interface IGetNeededSegmentsArguments {
|
|
|
74
78
|
* @param {Object} args
|
|
75
79
|
* @returns {Array.<Object>}
|
|
76
80
|
*/
|
|
77
|
-
export default function getNeededSegments({ bufferedSegments, content, currentPlaybackTime, fastSwitchThreshold, getBufferedHistory, neededRange, segmentsBeingPushed, }: IGetNeededSegmentsArguments):
|
|
81
|
+
export default function getNeededSegments({ bufferedSegments, content, currentPlaybackTime, fastSwitchThreshold, getBufferedHistory, neededRange, segmentsBeingPushed, maxBufferSize, }: IGetNeededSegmentsArguments): INeededSegments;
|
|
82
|
+
export {};
|
|
@@ -18,12 +18,6 @@ import config from "../../../config";
|
|
|
18
18
|
import log from "../../../log";
|
|
19
19
|
import { areSameContent, } from "../../../manifest";
|
|
20
20
|
import objectAssign from "../../../utils/object_assign";
|
|
21
|
-
var CONTENT_REPLACEMENT_PADDING = config.CONTENT_REPLACEMENT_PADDING, BITRATE_REBUFFERING_RATIO = config.BITRATE_REBUFFERING_RATIO, MAX_TIME_MISSING_FROM_COMPLETE_SEGMENT = config.MAX_TIME_MISSING_FROM_COMPLETE_SEGMENT, MINIMUM_SEGMENT_SIZE = config.MINIMUM_SEGMENT_SIZE;
|
|
22
|
-
/**
|
|
23
|
-
* Epsilon compensating for rounding errors when comparing the start and end
|
|
24
|
-
* time of multiple segments.
|
|
25
|
-
*/
|
|
26
|
-
var ROUNDING_ERROR = Math.min(1 / 60, MINIMUM_SEGMENT_SIZE);
|
|
27
21
|
/**
|
|
28
22
|
* Return the list of segments that can currently be downloaded to fill holes
|
|
29
23
|
* in the buffer in the given range, including already-pushed segments currently
|
|
@@ -35,8 +29,11 @@ var ROUNDING_ERROR = Math.min(1 / 60, MINIMUM_SEGMENT_SIZE);
|
|
|
35
29
|
* @returns {Array.<Object>}
|
|
36
30
|
*/
|
|
37
31
|
export default function getNeededSegments(_a) {
|
|
38
|
-
var bufferedSegments = _a.bufferedSegments, content = _a.content, currentPlaybackTime = _a.currentPlaybackTime, fastSwitchThreshold = _a.fastSwitchThreshold, getBufferedHistory = _a.getBufferedHistory, neededRange = _a.neededRange, segmentsBeingPushed = _a.segmentsBeingPushed;
|
|
32
|
+
var bufferedSegments = _a.bufferedSegments, content = _a.content, currentPlaybackTime = _a.currentPlaybackTime, fastSwitchThreshold = _a.fastSwitchThreshold, getBufferedHistory = _a.getBufferedHistory, neededRange = _a.neededRange, segmentsBeingPushed = _a.segmentsBeingPushed, maxBufferSize = _a.maxBufferSize;
|
|
39
33
|
var representation = content.representation;
|
|
34
|
+
var availableBufferSize = getAvailableBufferSize(bufferedSegments, segmentsBeingPushed, maxBufferSize);
|
|
35
|
+
// Current buffer length in seconds
|
|
36
|
+
var bufferLength = getBufferLength(bufferedSegments, segmentsBeingPushed);
|
|
40
37
|
var availableSegmentsForRange = representation.index
|
|
41
38
|
.getSegments(neededRange.start, neededRange.end - neededRange.start);
|
|
42
39
|
// Remove from `bufferedSegments` any segments we would prefer to replace:
|
|
@@ -57,7 +54,7 @@ export default function getNeededSegments(_a) {
|
|
|
57
54
|
}
|
|
58
55
|
log.debug("Stream: skipping segment gc-ed at the start", currentSeg);
|
|
59
56
|
}
|
|
60
|
-
if (doesEndSeemGarbageCollected(currentSeg, nextSeg, neededRange.
|
|
57
|
+
if (doesEndSeemGarbageCollected(currentSeg, nextSeg, neededRange.end)) {
|
|
61
58
|
lazySegmentHistory = lazySegmentHistory !== null && lazySegmentHistory !== void 0 ? lazySegmentHistory : getBufferedHistory(currentSeg.infos);
|
|
62
59
|
if (shouldReloadSegmentGCedAtTheEnd(lazySegmentHistory, currentSeg.bufferedEnd)) {
|
|
63
60
|
return false;
|
|
@@ -66,7 +63,15 @@ export default function getNeededSegments(_a) {
|
|
|
66
63
|
}
|
|
67
64
|
return true;
|
|
68
65
|
});
|
|
69
|
-
var
|
|
66
|
+
var _b = config.getCurrent(), MINIMUM_SEGMENT_SIZE = _b.MINIMUM_SEGMENT_SIZE, MIN_BUFFER_LENGTH = _b.MIN_BUFFER_LENGTH, MIN_BUFFER_DISTANCE_BEFORE_CLEAN_UP = _b.MIN_BUFFER_DISTANCE_BEFORE_CLEAN_UP;
|
|
67
|
+
var isMemorySaturated = false;
|
|
68
|
+
/**
|
|
69
|
+
* Epsilon compensating for rounding errors when comparing the start and end
|
|
70
|
+
* time of multiple segments.
|
|
71
|
+
*/
|
|
72
|
+
var ROUNDING_ERROR = Math.min(1 / 60, MINIMUM_SEGMENT_SIZE);
|
|
73
|
+
var isBufferFull = false;
|
|
74
|
+
var neededSegments = availableSegmentsForRange.filter(function (segment) {
|
|
70
75
|
var contentObject = objectAssign({ segment: segment }, content);
|
|
71
76
|
// First, check that the segment is not already being pushed
|
|
72
77
|
if (segmentsBeingPushed.length > 0) {
|
|
@@ -80,6 +85,19 @@ export default function getNeededSegments(_a) {
|
|
|
80
85
|
if (segment.isInit) {
|
|
81
86
|
return true; // never skip initialization segments
|
|
82
87
|
}
|
|
88
|
+
if (isMemorySaturated) {
|
|
89
|
+
// If we are so saturated in memory
|
|
90
|
+
// That we cannot download atleast till
|
|
91
|
+
// NeededRange.Start ( current position ) + a CONST
|
|
92
|
+
// Then the buffer is full
|
|
93
|
+
if (time < neededRange.start + MIN_BUFFER_DISTANCE_BEFORE_CLEAN_UP) {
|
|
94
|
+
isBufferFull = true;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (isMemorySaturated &&
|
|
98
|
+
bufferLength > MIN_BUFFER_LENGTH) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
83
101
|
if (segment.complete && duration < MINIMUM_SEGMENT_SIZE) {
|
|
84
102
|
return false; // too small, don't download
|
|
85
103
|
}
|
|
@@ -130,9 +148,57 @@ export default function getNeededSegments(_a) {
|
|
|
130
148
|
getLastContiguousSegment(segmentsToKeep, i).end < end - ROUNDING_ERROR;
|
|
131
149
|
}
|
|
132
150
|
}
|
|
151
|
+
var estimatedSegmentSize = (duration * content.representation.bitrate) / 8000;
|
|
152
|
+
if (availableBufferSize - estimatedSegmentSize < 0 &&
|
|
153
|
+
bufferLength > MIN_BUFFER_LENGTH) {
|
|
154
|
+
isMemorySaturated = true;
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
availableBufferSize -= estimatedSegmentSize;
|
|
158
|
+
bufferLength += duration;
|
|
133
159
|
return true;
|
|
134
160
|
});
|
|
135
|
-
return
|
|
161
|
+
return { neededSegments: neededSegments, isBufferFull: isBufferFull };
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Compute the estimated available buffer size in memory in kilobytes
|
|
165
|
+
* @param bufferedSegments
|
|
166
|
+
* @param segmentsBeingPushed
|
|
167
|
+
* @param maxVideoBufferSize
|
|
168
|
+
* @returns availableBufferSize in kilobytes
|
|
169
|
+
*/
|
|
170
|
+
function getAvailableBufferSize(bufferedSegments, segmentsBeingPushed, maxVideoBufferSize) {
|
|
171
|
+
var availableBufferSize = maxVideoBufferSize;
|
|
172
|
+
availableBufferSize -= segmentsBeingPushed.reduce(function (size, segment) {
|
|
173
|
+
var bitrate = segment.representation.bitrate;
|
|
174
|
+
// Not taking into account the fact that the segment
|
|
175
|
+
// can still be generated and the duration not fully exact
|
|
176
|
+
var duration = segment.segment.duration;
|
|
177
|
+
return size + ((bitrate / 8000) * duration);
|
|
178
|
+
}, 0);
|
|
179
|
+
return bufferedSegments.reduce(function (size, chunk) {
|
|
180
|
+
if (chunk.chunkSize !== undefined) {
|
|
181
|
+
return size - (chunk.chunkSize / 8000);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
return size;
|
|
185
|
+
}
|
|
186
|
+
}, availableBufferSize);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Compute the length of the buffer in seconds
|
|
190
|
+
* @param bufferedSegments
|
|
191
|
+
* @param segmentsBeingPushed
|
|
192
|
+
* @returns bufferLength in seconds
|
|
193
|
+
*/
|
|
194
|
+
function getBufferLength(bufferedSegments, segmentsBeingPushed) {
|
|
195
|
+
var bufferLength = bufferedSegments.reduce(function (length, segment) {
|
|
196
|
+
return length + (segment.end - segment.start);
|
|
197
|
+
}, 0);
|
|
198
|
+
var bufferBeingPushed = segmentsBeingPushed.reduce(function (length, segment) {
|
|
199
|
+
return length + segment.segment.duration;
|
|
200
|
+
}, 0);
|
|
201
|
+
return bufferLength + bufferBeingPushed;
|
|
136
202
|
}
|
|
137
203
|
/**
|
|
138
204
|
* From the given array of buffered chunks (`bufferedSegments`) returns the last
|
|
@@ -143,6 +209,12 @@ export default function getNeededSegments(_a) {
|
|
|
143
209
|
*/
|
|
144
210
|
function getLastContiguousSegment(bufferedSegments, startIndex) {
|
|
145
211
|
var j = startIndex + 1;
|
|
212
|
+
var MINIMUM_SEGMENT_SIZE = config.getCurrent().MINIMUM_SEGMENT_SIZE;
|
|
213
|
+
/**
|
|
214
|
+
* Epsilon compensating for rounding errors when comparing the start and end
|
|
215
|
+
* time of multiple segments.
|
|
216
|
+
*/
|
|
217
|
+
var ROUNDING_ERROR = Math.min(1 / 60, MINIMUM_SEGMENT_SIZE);
|
|
146
218
|
// go through all contiguous segments and take the last one
|
|
147
219
|
while (j < bufferedSegments.length - 1 &&
|
|
148
220
|
(bufferedSegments[j - 1].end + ROUNDING_ERROR) >
|
|
@@ -162,6 +234,7 @@ function getLastContiguousSegment(bufferedSegments, startIndex) {
|
|
|
162
234
|
* @returns {boolean}
|
|
163
235
|
*/
|
|
164
236
|
function shouldContentBeReplaced(oldContent, currentContent, currentPlaybackTime, fastSwitchThreshold) {
|
|
237
|
+
var CONTENT_REPLACEMENT_PADDING = config.getCurrent().CONTENT_REPLACEMENT_PADDING;
|
|
165
238
|
if (oldContent.period.id !== currentContent.period.id) {
|
|
166
239
|
return false; // keep segments from another Period by default.
|
|
167
240
|
}
|
|
@@ -186,6 +259,7 @@ function shouldContentBeReplaced(oldContent, currentContent, currentPlaybackTime
|
|
|
186
259
|
*/
|
|
187
260
|
function canFastSwitch(oldSegmentRepresentation, newSegmentRepresentation, fastSwitchThreshold) {
|
|
188
261
|
var oldContentBitrate = oldSegmentRepresentation.bitrate;
|
|
262
|
+
var BITRATE_REBUFFERING_RATIO = config.getCurrent().BITRATE_REBUFFERING_RATIO;
|
|
189
263
|
if (fastSwitchThreshold === undefined) {
|
|
190
264
|
// only re-load comparatively-poor bitrates for the same Adaptation.
|
|
191
265
|
var bitrateCeil = oldContentBitrate * BITRATE_REBUFFERING_RATIO;
|
|
@@ -207,6 +281,7 @@ function canFastSwitch(oldSegmentRepresentation, newSegmentRepresentation, fastS
|
|
|
207
281
|
* that time, we will return `false`.
|
|
208
282
|
*/
|
|
209
283
|
function doesStartSeemGarbageCollected(currentSeg, prevSeg, maximumStartTime) {
|
|
284
|
+
var MAX_TIME_MISSING_FROM_COMPLETE_SEGMENT = config.getCurrent().MAX_TIME_MISSING_FROM_COMPLETE_SEGMENT;
|
|
210
285
|
if (currentSeg.bufferedStart === undefined) {
|
|
211
286
|
log.warn("Stream: Start of a segment unknown. " +
|
|
212
287
|
"Assuming it is garbage collected by default.", currentSeg);
|
|
@@ -237,6 +312,7 @@ function doesStartSeemGarbageCollected(currentSeg, prevSeg, maximumStartTime) {
|
|
|
237
312
|
* that time, we will return `false`.
|
|
238
313
|
*/
|
|
239
314
|
function doesEndSeemGarbageCollected(currentSeg, nextSeg, minimumEndTime) {
|
|
315
|
+
var MAX_TIME_MISSING_FROM_COMPLETE_SEGMENT = config.getCurrent().MAX_TIME_MISSING_FROM_COMPLETE_SEGMENT;
|
|
240
316
|
if (currentSeg.bufferedEnd === undefined) {
|
|
241
317
|
log.warn("Stream: End of a segment unknown. " +
|
|
242
318
|
"Assuming it is garbage collected by default.", currentSeg);
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import config from "../../../config";
|
|
17
|
-
var SEGMENT_PRIORITIES_STEPS = config.SEGMENT_PRIORITIES_STEPS;
|
|
18
17
|
/**
|
|
19
18
|
* Calculate the priority number for a given segment start time, in function of
|
|
20
19
|
* the distance with the wanted starting timestamp.
|
|
@@ -29,6 +28,7 @@ var SEGMENT_PRIORITIES_STEPS = config.SEGMENT_PRIORITIES_STEPS;
|
|
|
29
28
|
*/
|
|
30
29
|
export default function getSegmentPriority(segmentTime, wantedStartTimestamp) {
|
|
31
30
|
var distance = segmentTime - wantedStartTimestamp;
|
|
31
|
+
var SEGMENT_PRIORITIES_STEPS = config.getCurrent().SEGMENT_PRIORITIES_STEPS;
|
|
32
32
|
for (var priority = 0; priority < SEGMENT_PRIORITIES_STEPS.length; priority++) {
|
|
33
33
|
if (distance < SEGMENT_PRIORITIES_STEPS[priority]) {
|
|
34
34
|
return priority;
|
|
@@ -18,7 +18,6 @@ import config from "../../../config";
|
|
|
18
18
|
import objectAssign from "../../../utils/object_assign";
|
|
19
19
|
import EVENTS from "../events_generators";
|
|
20
20
|
import appendSegmentToBuffer from "./append_segment_to_buffer";
|
|
21
|
-
var APPEND_WINDOW_SECURITIES = config.APPEND_WINDOW_SECURITIES;
|
|
22
21
|
/**
|
|
23
22
|
* Push a given media segment (non-init segment) to a SegmentBuffer.
|
|
24
23
|
* The Observable returned:
|
|
@@ -34,8 +33,9 @@ export default function pushMediaSegment(_a) {
|
|
|
34
33
|
if (parsedSegment.chunkData === null) {
|
|
35
34
|
return EMPTY;
|
|
36
35
|
}
|
|
37
|
-
var chunkData = parsedSegment.chunkData, chunkInfos = parsedSegment.chunkInfos, chunkOffset = parsedSegment.chunkOffset, appendWindow = parsedSegment.appendWindow;
|
|
36
|
+
var chunkData = parsedSegment.chunkData, chunkInfos = parsedSegment.chunkInfos, chunkOffset = parsedSegment.chunkOffset, chunkSize = parsedSegment.chunkSize, appendWindow = parsedSegment.appendWindow;
|
|
38
37
|
var codec = content.representation.getMimeTypeString();
|
|
38
|
+
var APPEND_WINDOW_SECURITIES = config.getCurrent().APPEND_WINDOW_SECURITIES;
|
|
39
39
|
// Cutting exactly at the start or end of the appendWindow can lead to
|
|
40
40
|
// cases of infinite rebuffering due to how browser handle such windows.
|
|
41
41
|
// To work-around that, we add a small offset before and after those.
|
|
@@ -60,7 +60,7 @@ export default function pushMediaSegment(_a) {
|
|
|
60
60
|
if (safeAppendWindow[1] !== undefined) {
|
|
61
61
|
estimatedEnd = Math.min(estimatedEnd, safeAppendWindow[1]);
|
|
62
62
|
}
|
|
63
|
-
var inventoryInfos = objectAssign({ segment: segment, start: estimatedStart,
|
|
63
|
+
var inventoryInfos = objectAssign({ segment: segment, chunkSize: chunkSize, start: estimatedStart,
|
|
64
64
|
end: estimatedEnd }, content);
|
|
65
65
|
return appendSegmentToBuffer(playbackObserver, segmentBuffer, { data: data, inventoryInfos: inventoryInfos }).pipe(map(function () {
|
|
66
66
|
var buffered = segmentBuffer.getBufferedRanges();
|
|
@@ -79,6 +79,12 @@ export interface IRepresentationStreamOptions {
|
|
|
79
79
|
* goes below that size again.
|
|
80
80
|
*/
|
|
81
81
|
bufferGoal$: Observable<number>;
|
|
82
|
+
/**
|
|
83
|
+
* The buffer size limit in memory that we can reach.
|
|
84
|
+
* Once reached, no segments will be loaded until it
|
|
85
|
+
* goes below that size again
|
|
86
|
+
*/
|
|
87
|
+
maxBufferSize$: Observable<number>;
|
|
82
88
|
/**
|
|
83
89
|
* Hex-encoded DRM "system ID" as found in:
|
|
84
90
|
* https://dashif.org/identifiers/content_protection/
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
*/
|
|
24
24
|
import nextTick from "next-tick";
|
|
25
25
|
import { combineLatest as observableCombineLatest, concat as observableConcat, defer as observableDefer, EMPTY, ignoreElements, merge as observableMerge, mergeMap, of as observableOf, share, startWith, Subject, take, takeWhile, withLatestFrom, } from "rxjs";
|
|
26
|
+
import config from "../../../config";
|
|
26
27
|
import log from "../../../log";
|
|
27
28
|
import assertUnreachable from "../../../utils/assert_unreachable";
|
|
28
29
|
import objectAssign from "../../../utils/object_assign";
|
|
@@ -48,7 +49,7 @@ import pushMediaSegment from "./push_media_segment";
|
|
|
48
49
|
export default function RepresentationStream(_a) {
|
|
49
50
|
var content = _a.content, options = _a.options, playbackObserver = _a.playbackObserver, segmentBuffer = _a.segmentBuffer, segmentFetcher = _a.segmentFetcher, terminate$ = _a.terminate$;
|
|
50
51
|
var period = content.period, adaptation = content.adaptation, representation = content.representation;
|
|
51
|
-
var bufferGoal$ = options.bufferGoal$, drmSystemId = options.drmSystemId, fastSwitchThreshold$ = options.fastSwitchThreshold$;
|
|
52
|
+
var bufferGoal$ = options.bufferGoal$, maxBufferSize$ = options.maxBufferSize$, drmSystemId = options.drmSystemId, fastSwitchThreshold$ = options.fastSwitchThreshold$;
|
|
52
53
|
var bufferType = adaptation.type;
|
|
53
54
|
/** Saved initialization segment state for this representation. */
|
|
54
55
|
var initSegmentState = {
|
|
@@ -81,7 +82,7 @@ export default function RepresentationStream(_a) {
|
|
|
81
82
|
var encryptionData = representation.getEncryptionData(drmSystemId);
|
|
82
83
|
if (encryptionData.length > 0) {
|
|
83
84
|
encryptionEvent$ = observableOf.apply(void 0, encryptionData.map(function (d) {
|
|
84
|
-
return EVENTS.encryptionDataEncountered(d);
|
|
85
|
+
return EVENTS.encryptionDataEncountered(d, content);
|
|
85
86
|
}));
|
|
86
87
|
hasSentEncryptionData = true;
|
|
87
88
|
}
|
|
@@ -93,12 +94,13 @@ export default function RepresentationStream(_a) {
|
|
|
93
94
|
var status$ = observableCombineLatest([
|
|
94
95
|
playbackObserver.observe(true),
|
|
95
96
|
bufferGoal$,
|
|
97
|
+
maxBufferSize$,
|
|
96
98
|
terminate$.pipe(take(1), startWith(null)),
|
|
97
99
|
reCheckNeededSegments$.pipe(startWith(undefined)),
|
|
98
100
|
]).pipe(withLatestFrom(fastSwitchThreshold$), mergeMap(function (_a) {
|
|
99
|
-
var _b = _a[0], observation = _b[0], bufferGoal = _b[1],
|
|
101
|
+
var _b = _a[0], observation = _b[0], bufferGoal = _b[1], maxBufferSize = _b[2], terminate = _b[3], fastSwitchThreshold = _a[1];
|
|
100
102
|
var wantedStartPosition = observation.position + observation.wantedTimeOffset;
|
|
101
|
-
var status = getBufferStatus(content, wantedStartPosition, playbackObserver, fastSwitchThreshold, bufferGoal, segmentBuffer);
|
|
103
|
+
var status = getBufferStatus(content, wantedStartPosition, playbackObserver, fastSwitchThreshold, bufferGoal, maxBufferSize, segmentBuffer);
|
|
102
104
|
var neededSegments = status.neededSegments;
|
|
103
105
|
var neededInitSegment = null;
|
|
104
106
|
// Add initialization segment if required
|
|
@@ -160,9 +162,18 @@ export default function RepresentationStream(_a) {
|
|
|
160
162
|
value: { period: period, position: observation.position, bufferType: bufferType, imminentDiscontinuity: status.imminentDiscontinuity,
|
|
161
163
|
hasFinishedLoading: status.hasFinishedLoading,
|
|
162
164
|
neededSegments: status.neededSegments } });
|
|
165
|
+
var bufferRemoval = EMPTY;
|
|
166
|
+
var UPTO_CURRENT_POSITION_CLEANUP = config.getCurrent().UPTO_CURRENT_POSITION_CLEANUP;
|
|
167
|
+
if (status.isBufferFull) {
|
|
168
|
+
var gcedPosition = Math.max(0, wantedStartPosition - UPTO_CURRENT_POSITION_CLEANUP);
|
|
169
|
+
bufferRemoval = segmentBuffer
|
|
170
|
+
.removeBuffer(0, gcedPosition)
|
|
171
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
172
|
+
.pipe(ignoreElements());
|
|
173
|
+
}
|
|
163
174
|
return status.shouldRefreshManifest ?
|
|
164
|
-
observableConcat(observableOf(EVENTS.needsManifestRefresh()), bufferStatusEvt) :
|
|
165
|
-
bufferStatusEvt;
|
|
175
|
+
observableConcat(observableOf(EVENTS.needsManifestRefresh()), bufferStatusEvt, bufferRemoval) :
|
|
176
|
+
observableConcat(bufferStatusEvt, bufferRemoval);
|
|
166
177
|
}), takeWhile(function (e) { return e.type !== "stream-terminating"; }, true));
|
|
167
178
|
return observableMerge(status$, queue$, encryptionEvent$).pipe(share());
|
|
168
179
|
/**
|
|
@@ -223,7 +234,7 @@ export default function RepresentationStream(_a) {
|
|
|
223
234
|
var allEncryptionData = representation.getAllEncryptionData();
|
|
224
235
|
var initEncEvt$ = !hasSentEncryptionData &&
|
|
225
236
|
allEncryptionData.length > 0 ? observableOf.apply(void 0, allEncryptionData.map(function (p) {
|
|
226
|
-
return EVENTS.encryptionDataEncountered(p);
|
|
237
|
+
return EVENTS.encryptionDataEncountered(p, content);
|
|
227
238
|
})) :
|
|
228
239
|
EMPTY;
|
|
229
240
|
var pushEvent$ = pushInitSegment({ playbackObserver: playbackObserver, content: content, segment: evt.segment,
|
|
@@ -236,7 +247,7 @@ export default function RepresentationStream(_a) {
|
|
|
236
247
|
// every protection data together? To check.
|
|
237
248
|
var segmentEncryptionEvent$ = protectionDataUpdate &&
|
|
238
249
|
!hasSentEncryptionData ? observableOf.apply(void 0, representation.getAllEncryptionData().map(function (p) {
|
|
239
|
-
return EVENTS.encryptionDataEncountered(p);
|
|
250
|
+
return EVENTS.encryptionDataEncountered(p, content);
|
|
240
251
|
})) :
|
|
241
252
|
EMPTY;
|
|
242
253
|
var manifestRefresh$ = needsManifestRefresh === true ?
|
|
@@ -17,7 +17,7 @@ import { Subject } from "rxjs";
|
|
|
17
17
|
import { ICustomError } from "../../errors";
|
|
18
18
|
import { Adaptation, ISegment, Period, Representation } from "../../manifest";
|
|
19
19
|
import { IEMSG } from "../../parsers/containers/isobmff";
|
|
20
|
-
import { IContentProtection } from "../
|
|
20
|
+
import { IContentProtection } from "../decrypt";
|
|
21
21
|
import { IBufferType } from "../segment_buffers";
|
|
22
22
|
/** Information about a Segment waiting to be loaded by the Stream. */
|
|
23
23
|
export interface IQueuedSegment {
|