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
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import config from "../../config";
|
|
17
17
|
import EWMA from "./utils/ewma";
|
|
18
|
-
var ABR_MINIMUM_TOTAL_BYTES = config.ABR_MINIMUM_TOTAL_BYTES, ABR_MINIMUM_CHUNK_SIZE = config.ABR_MINIMUM_CHUNK_SIZE, ABR_FAST_EMA = config.ABR_FAST_EMA, ABR_SLOW_EMA = config.ABR_SLOW_EMA;
|
|
19
18
|
/**
|
|
20
19
|
* Calculate a mean bandwidth based on the bytes downloaded and the amount
|
|
21
20
|
* of time needed to do so.
|
|
@@ -25,6 +24,7 @@ var ABR_MINIMUM_TOTAL_BYTES = config.ABR_MINIMUM_TOTAL_BYTES, ABR_MINIMUM_CHUNK_
|
|
|
25
24
|
*/
|
|
26
25
|
var BandwidthEstimator = /** @class */ (function () {
|
|
27
26
|
function BandwidthEstimator() {
|
|
27
|
+
var _a = config.getCurrent(), ABR_FAST_EMA = _a.ABR_FAST_EMA, ABR_SLOW_EMA = _a.ABR_SLOW_EMA;
|
|
28
28
|
/**
|
|
29
29
|
* A fast-moving average.
|
|
30
30
|
* @private
|
|
@@ -49,6 +49,7 @@ var BandwidthEstimator = /** @class */ (function () {
|
|
|
49
49
|
* request.
|
|
50
50
|
*/
|
|
51
51
|
BandwidthEstimator.prototype.addSample = function (durationInMs, numberOfBytes) {
|
|
52
|
+
var ABR_MINIMUM_CHUNK_SIZE = config.getCurrent().ABR_MINIMUM_CHUNK_SIZE;
|
|
52
53
|
if (numberOfBytes < ABR_MINIMUM_CHUNK_SIZE) {
|
|
53
54
|
return;
|
|
54
55
|
}
|
|
@@ -63,6 +64,7 @@ var BandwidthEstimator = /** @class */ (function () {
|
|
|
63
64
|
* @returns {Number|undefined}
|
|
64
65
|
*/
|
|
65
66
|
BandwidthEstimator.prototype.getEstimate = function () {
|
|
67
|
+
var ABR_MINIMUM_TOTAL_BYTES = config.getCurrent().ABR_MINIMUM_TOTAL_BYTES;
|
|
66
68
|
if (this._bytesSampled < ABR_MINIMUM_TOTAL_BYTES) {
|
|
67
69
|
return undefined;
|
|
68
70
|
}
|
|
@@ -74,6 +76,7 @@ var BandwidthEstimator = /** @class */ (function () {
|
|
|
74
76
|
* Reset the bandwidth estimation.
|
|
75
77
|
*/
|
|
76
78
|
BandwidthEstimator.prototype.reset = function () {
|
|
79
|
+
var _a = config.getCurrent(), ABR_FAST_EMA = _a.ABR_FAST_EMA, ABR_SLOW_EMA = _a.ABR_SLOW_EMA;
|
|
77
80
|
this._fastEWMA = new EWMA(ABR_FAST_EMA);
|
|
78
81
|
this._slowEWMA = new EWMA(ABR_SLOW_EMA);
|
|
79
82
|
this._bytesSampled = 0;
|
|
@@ -13,8 +13,6 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { Observable } from "rxjs";
|
|
17
|
-
import { IBufferBasedChooserPlaybackObservation } from "./get_estimate_from_buffer_levels";
|
|
18
16
|
/**
|
|
19
17
|
* Choose a bitrate based on the currently available buffer.
|
|
20
18
|
*
|
|
@@ -26,8 +24,32 @@ import { IBufferBasedChooserPlaybackObservation } from "./get_estimate_from_buff
|
|
|
26
24
|
* "maintanable" or not.
|
|
27
25
|
* If so, we may switch to a better quality, or conversely to a worse quality.
|
|
28
26
|
*
|
|
29
|
-
* @
|
|
30
|
-
* @param {Array.<number>} bitrates
|
|
31
|
-
* @returns {Observable}
|
|
27
|
+
* @class BufferBasedChooser
|
|
32
28
|
*/
|
|
33
|
-
export default
|
|
29
|
+
export default class BufferBasedChooser {
|
|
30
|
+
private _levelsMap;
|
|
31
|
+
private _bitrates;
|
|
32
|
+
/**
|
|
33
|
+
* @param {Array.<number>} number;
|
|
34
|
+
*/
|
|
35
|
+
constructor(bitrates: number[]);
|
|
36
|
+
/**
|
|
37
|
+
* @param {Object} playbackObservation
|
|
38
|
+
* @returns {number|undefined}
|
|
39
|
+
*/
|
|
40
|
+
getEstimate(playbackObservation: IBufferBasedChooserPlaybackObservation): number | undefined;
|
|
41
|
+
}
|
|
42
|
+
/** Playback observation needed by the `BufferBasedChooser`. */
|
|
43
|
+
export interface IBufferBasedChooserPlaybackObservation {
|
|
44
|
+
/**
|
|
45
|
+
* Difference in seconds between the current position and the next
|
|
46
|
+
* non-buffered position
|
|
47
|
+
*/
|
|
48
|
+
bufferGap: number;
|
|
49
|
+
/** The bitrate of the currently downloaded segments, in bps. */
|
|
50
|
+
currentBitrate?: number | undefined;
|
|
51
|
+
/** The "maintainability score" of the currently downloaded segments. */
|
|
52
|
+
currentScore?: number | undefined;
|
|
53
|
+
/** Playback rate wanted */
|
|
54
|
+
speed: number;
|
|
55
|
+
}
|
|
@@ -13,10 +13,9 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { map, } from "rxjs";
|
|
17
16
|
import log from "../../log";
|
|
17
|
+
import arrayFindIndex from "../../utils/array_find_index";
|
|
18
18
|
import getBufferLevels from "./get_buffer_levels";
|
|
19
|
-
import getEstimateFromBufferLevels from "./get_estimate_from_buffer_levels";
|
|
20
19
|
/**
|
|
21
20
|
* Choose a bitrate based on the currently available buffer.
|
|
22
21
|
*
|
|
@@ -28,14 +27,66 @@ import getEstimateFromBufferLevels from "./get_estimate_from_buffer_levels";
|
|
|
28
27
|
* "maintanable" or not.
|
|
29
28
|
* If so, we may switch to a better quality, or conversely to a worse quality.
|
|
30
29
|
*
|
|
31
|
-
* @
|
|
32
|
-
* @param {Array.<number>} bitrates
|
|
33
|
-
* @returns {Observable}
|
|
30
|
+
* @class BufferBasedChooser
|
|
34
31
|
*/
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
32
|
+
var BufferBasedChooser = /** @class */ (function () {
|
|
33
|
+
/**
|
|
34
|
+
* @param {Array.<number>} number;
|
|
35
|
+
*/
|
|
36
|
+
function BufferBasedChooser(bitrates) {
|
|
37
|
+
this._levelsMap = getBufferLevels(bitrates);
|
|
38
|
+
this._bitrates = bitrates;
|
|
39
|
+
log.debug("ABR: Steps for buffer based chooser.", this._levelsMap.map(function (l, i) { return ({ bufferLevel: l, bitrate: bitrates[i] }); }));
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @param {Object} playbackObservation
|
|
43
|
+
* @returns {number|undefined}
|
|
44
|
+
*/
|
|
45
|
+
BufferBasedChooser.prototype.getEstimate = function (playbackObservation) {
|
|
46
|
+
var bufferLevels = this._levelsMap;
|
|
47
|
+
var bitrates = this._bitrates;
|
|
48
|
+
var bufferGap = playbackObservation.bufferGap, currentBitrate = playbackObservation.currentBitrate, currentScore = playbackObservation.currentScore, speed = playbackObservation.speed;
|
|
49
|
+
if (currentBitrate == null) {
|
|
50
|
+
return bitrates[0];
|
|
51
|
+
}
|
|
52
|
+
var currentBitrateIndex = arrayFindIndex(bitrates, function (b) { return b === currentBitrate; });
|
|
53
|
+
if (currentBitrateIndex < 0 || bitrates.length !== bufferLevels.length) {
|
|
54
|
+
log.error("ABR: Current Bitrate not found in the calculated levels");
|
|
55
|
+
return bitrates[0];
|
|
56
|
+
}
|
|
57
|
+
var scaledScore;
|
|
58
|
+
if (currentScore != null) {
|
|
59
|
+
scaledScore = speed === 0 ? currentScore : (currentScore / speed);
|
|
60
|
+
}
|
|
61
|
+
if (scaledScore != null && scaledScore > 1) {
|
|
62
|
+
var currentBufferLevel_1 = bufferLevels[currentBitrateIndex];
|
|
63
|
+
var nextIndex = (function () {
|
|
64
|
+
for (var i = currentBitrateIndex + 1; i < bufferLevels.length; i++) {
|
|
65
|
+
if (bufferLevels[i] > currentBufferLevel_1) {
|
|
66
|
+
return i;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
})();
|
|
70
|
+
if (nextIndex != null) {
|
|
71
|
+
var nextBufferLevel = bufferLevels[nextIndex];
|
|
72
|
+
if (bufferGap >= nextBufferLevel) {
|
|
73
|
+
return bitrates[nextIndex];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (scaledScore == null || scaledScore < 1.15) {
|
|
78
|
+
var currentBufferLevel = bufferLevels[currentBitrateIndex];
|
|
79
|
+
if (bufferGap < currentBufferLevel) {
|
|
80
|
+
for (var i = currentBitrateIndex - 1; i >= 0; i--) {
|
|
81
|
+
if (bitrates[i] < currentBitrate) {
|
|
82
|
+
return bitrates[i];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return currentBitrate;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return currentBitrate;
|
|
89
|
+
};
|
|
90
|
+
return BufferBasedChooser;
|
|
91
|
+
}());
|
|
92
|
+
export default BufferBasedChooser;
|
|
@@ -69,7 +69,7 @@ export default class NetworkAnalyzer {
|
|
|
69
69
|
* @returns {Object}
|
|
70
70
|
*/
|
|
71
71
|
getBandwidthEstimate(playbackInfo: IPlaybackConditionsInfo, bandwidthEstimator: BandwidthEstimator, currentRepresentation: Representation | null, currentRequests: IRequestInfo[], lastEstimatedBitrate: number | undefined): {
|
|
72
|
-
bandwidthEstimate?: number;
|
|
72
|
+
bandwidthEstimate?: number | undefined;
|
|
73
73
|
bitrateChosen: number;
|
|
74
74
|
};
|
|
75
75
|
/**
|
|
@@ -17,7 +17,6 @@ import config from "../../config";
|
|
|
17
17
|
import log from "../../log";
|
|
18
18
|
import arrayFind from "../../utils/array_find";
|
|
19
19
|
import EWMA from "./utils/ewma";
|
|
20
|
-
var ABR_REGULAR_FACTOR = config.ABR_REGULAR_FACTOR, ABR_STARVATION_DURATION_DELTA = config.ABR_STARVATION_DURATION_DELTA, ABR_STARVATION_FACTOR = config.ABR_STARVATION_FACTOR, ABR_STARVATION_GAP = config.ABR_STARVATION_GAP, OUT_OF_STARVATION_GAP = config.OUT_OF_STARVATION_GAP;
|
|
21
20
|
/**
|
|
22
21
|
* Get pending segment request(s) starting with the asked segment position.
|
|
23
22
|
* @param {Object} requests - Every requests pending, in a chronological
|
|
@@ -214,6 +213,7 @@ function shouldDirectlySwitchToLowBitrate(playbackInfo, requests, lowLatencyMode
|
|
|
214
213
|
*/
|
|
215
214
|
var NetworkAnalyzer = /** @class */ (function () {
|
|
216
215
|
function NetworkAnalyzer(initialBitrate, lowLatencyMode) {
|
|
216
|
+
var _a = config.getCurrent(), ABR_STARVATION_GAP = _a.ABR_STARVATION_GAP, OUT_OF_STARVATION_GAP = _a.OUT_OF_STARVATION_GAP, ABR_STARVATION_FACTOR = _a.ABR_STARVATION_FACTOR, ABR_REGULAR_FACTOR = _a.ABR_REGULAR_FACTOR;
|
|
217
217
|
this._initialBitrate = initialBitrate;
|
|
218
218
|
this._inStarvationMode = false;
|
|
219
219
|
this._lowLatencyMode = lowLatencyMode;
|
|
@@ -253,6 +253,7 @@ var NetworkAnalyzer = /** @class */ (function () {
|
|
|
253
253
|
var bufferGap = playbackInfo.bufferGap, position = playbackInfo.position, duration = playbackInfo.duration;
|
|
254
254
|
var realBufferGap = isFinite(bufferGap) ? bufferGap :
|
|
255
255
|
0;
|
|
256
|
+
var ABR_STARVATION_DURATION_DELTA = config.getCurrent().ABR_STARVATION_DURATION_DELTA;
|
|
256
257
|
// check if should get in/out of starvation mode
|
|
257
258
|
if (isNaN(duration) ||
|
|
258
259
|
realBufferGap + position < duration - ABR_STARVATION_DURATION_DELTA) {
|
|
@@ -55,11 +55,9 @@ var PendingRequestsStore = /** @class */ (function () {
|
|
|
55
55
|
*/
|
|
56
56
|
PendingRequestsStore.prototype.remove = function (id) {
|
|
57
57
|
if (this._currentRequests[id] == null) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
// throw new Error("ABR: can't remove unknown request");
|
|
62
|
-
// }
|
|
58
|
+
if (0 /* CURRENT_ENV */ === 1 /* DEV */) {
|
|
59
|
+
throw new Error("ABR: can't remove unknown request");
|
|
60
|
+
}
|
|
63
61
|
log.warn("ABR: can't remove unknown request");
|
|
64
62
|
}
|
|
65
63
|
delete this._currentRequests[id];
|
|
@@ -79,7 +79,7 @@ export interface IABREstimate {
|
|
|
79
79
|
* have, you will most likely only want to do it when the Representation is
|
|
80
80
|
* known to be maintaninable.
|
|
81
81
|
*/
|
|
82
|
-
knownStableBitrate?: number;
|
|
82
|
+
knownStableBitrate?: number | undefined;
|
|
83
83
|
}
|
|
84
84
|
/** Media properties the `RepresentationEstimator` will need to keep track of. */
|
|
85
85
|
export interface IRepresentationEstimatorPlaybackObservation {
|
|
@@ -137,8 +137,8 @@ export default function RepresentationEstimator(_a) {
|
|
|
137
137
|
return { bufferGap: bufferGap, currentBitrate: currentBitrate, currentScore: currentScore, speed: speed };
|
|
138
138
|
}));
|
|
139
139
|
var bitrates = representations.map(function (r) { return r.bitrate; });
|
|
140
|
-
var
|
|
141
|
-
|
|
140
|
+
var bufferBasedChooser = new BufferBasedChooser(bitrates);
|
|
141
|
+
var bufferBasedEstimation$ = bufferBasedobservation$.pipe(map(function (bbo) { return bufferBasedChooser.getEstimate(bbo); }), startWith(undefined));
|
|
142
142
|
return observableCombineLatest([observation$,
|
|
143
143
|
minAutoBitrate$,
|
|
144
144
|
maxAutoBitrate$,
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import config from "../../config";
|
|
17
|
-
var FORCED_ENDED_THRESHOLD = config.FORCED_ENDED_THRESHOLD;
|
|
18
17
|
/** Player state dictionnary. */
|
|
19
18
|
export var PLAYER_STATES = { STOPPED: "STOPPED",
|
|
20
19
|
LOADED: "LOADED",
|
|
@@ -35,6 +34,7 @@ export var PLAYER_STATES = { STOPPED: "STOPPED",
|
|
|
35
34
|
* @returns {string}
|
|
36
35
|
*/
|
|
37
36
|
export default function getLoadedContentState(mediaElement, isPlaying, stalledStatus) {
|
|
37
|
+
var FORCED_ENDED_THRESHOLD = config.getCurrent().FORCED_ENDED_THRESHOLD;
|
|
38
38
|
if (mediaElement.ended) {
|
|
39
39
|
return PLAYER_STATES.ENDED;
|
|
40
40
|
}
|
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import PlaybackObserver from "./playback_observer";
|
|
17
17
|
import Player from "./public_api";
|
|
18
|
-
export { IStreamEvent, IStreamEventData, } from "./public_api";
|
|
18
|
+
export { IBitrateEstimate, IPositionUpdateItem, IStreamEvent, IStreamEventData, } from "./public_api";
|
|
19
19
|
export { PlaybackObserver };
|
|
20
|
+
export { IPlayerState } from "./get_player_state";
|
|
20
21
|
export { IPlaybackObservation, IPlaybackObserverEventType, IReadOnlyPlaybackObserver, IFreezingStatus, IRebufferingStatus, } from "./playback_observer";
|
|
21
22
|
export { IConstructorOptions, ILoadVideoOptions, ITransportOptions, IKeySystemOption, ISupplementaryTextTrackOption, ISupplementaryImageTrackOption, IDefaultAudioTrackOption, IDefaultTextTrackOption, INetworkConfigOption, IStartAtOption, } from "./option_utils";
|
|
22
23
|
export { ITMAudioTrackListItem, ITMTextTrackListItem, ITMVideoTrackListItem, ITMAudioTrack, ITMTextTrack, ITMVideoTrack, IAudioTrackPreference, ITextTrackPreference, IVideoTrackPreference, } from "./track_choice_manager";
|
|
@@ -247,5 +247,11 @@ export default class MediaElementTrackChoiceManager extends EventEmitter<IMediaE
|
|
|
247
247
|
* change events.
|
|
248
248
|
*/
|
|
249
249
|
private _handleNativeTracksCallbacks;
|
|
250
|
+
/**
|
|
251
|
+
* Enable an audio track (and disable all others), based on its index in the
|
|
252
|
+
* `this._audioTracks` array.
|
|
253
|
+
* @param {number} index}
|
|
254
|
+
*/
|
|
255
|
+
private _enableAudioTrackFromIndex;
|
|
250
256
|
}
|
|
251
257
|
export {};
|
|
@@ -28,6 +28,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
28
28
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
29
29
|
};
|
|
30
30
|
})();
|
|
31
|
+
import assert from "../../utils/assert";
|
|
31
32
|
import EventEmitter from "../../utils/event_emitter";
|
|
32
33
|
import normalizeLanguage from "../../utils/languages";
|
|
33
34
|
/**
|
|
@@ -130,8 +131,9 @@ function createVideoTracks(videoTracks) {
|
|
|
130
131
|
var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
|
|
131
132
|
__extends(MediaElementTrackChoiceManager, _super);
|
|
132
133
|
function MediaElementTrackChoiceManager(mediaElement) {
|
|
134
|
+
var _this = this;
|
|
133
135
|
var _a, _b, _c;
|
|
134
|
-
|
|
136
|
+
_this = _super.call(this) || this;
|
|
135
137
|
_this._preferredAudioTracks = [];
|
|
136
138
|
_this._preferredTextTracks = [];
|
|
137
139
|
_this._preferredVideoTracks = [];
|
|
@@ -205,7 +207,7 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
|
|
|
205
207
|
for (var i = 0; i < this._audioTracks.length; i++) {
|
|
206
208
|
var _a = this._audioTracks[i], track = _a.track, nativeTrack = _a.nativeTrack;
|
|
207
209
|
if (track.id === id) {
|
|
208
|
-
|
|
210
|
+
this._enableAudioTrackFromIndex(i);
|
|
209
211
|
this._audioTrackLockedOn = nativeTrack;
|
|
210
212
|
return;
|
|
211
213
|
}
|
|
@@ -433,7 +435,7 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
|
|
|
433
435
|
for (var i = 0; i < this._audioTracks.length; i++) {
|
|
434
436
|
var nativeTrack = this._audioTracks[i].nativeTrack;
|
|
435
437
|
if (nativeTrack === this._audioTrackLockedOn) {
|
|
436
|
-
|
|
438
|
+
this._enableAudioTrackFromIndex(i);
|
|
437
439
|
return;
|
|
438
440
|
}
|
|
439
441
|
}
|
|
@@ -457,7 +459,7 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
|
|
|
457
459
|
var audioTrack = this._audioTracks[j];
|
|
458
460
|
if (audioTrack.track.normalized === normalized &&
|
|
459
461
|
audioTrack.track.audioDescription === track.audioDescription) {
|
|
460
|
-
|
|
462
|
+
this._enableAudioTrackFromIndex(j);
|
|
461
463
|
return;
|
|
462
464
|
}
|
|
463
465
|
}
|
|
@@ -736,6 +738,22 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
|
|
|
736
738
|
};
|
|
737
739
|
}
|
|
738
740
|
};
|
|
741
|
+
/**
|
|
742
|
+
* Enable an audio track (and disable all others), based on its index in the
|
|
743
|
+
* `this._audioTracks` array.
|
|
744
|
+
* @param {number} index}
|
|
745
|
+
*/
|
|
746
|
+
MediaElementTrackChoiceManager.prototype._enableAudioTrackFromIndex = function (index) {
|
|
747
|
+
assert(index < this._audioTracks.length);
|
|
748
|
+
// Seen on Safari MacOS only (2022-02-14), not disabling ALL audio tracks
|
|
749
|
+
// first (even the wanted one), can lead to the media not playing.
|
|
750
|
+
for (var _i = 0, _a = this._audioTracks; _i < _a.length; _i++) {
|
|
751
|
+
var audioTrack = _a[_i];
|
|
752
|
+
audioTrack.nativeTrack.enabled = false;
|
|
753
|
+
}
|
|
754
|
+
this._audioTracks[index].nativeTrack.enabled = true;
|
|
755
|
+
return;
|
|
756
|
+
};
|
|
739
757
|
return MediaElementTrackChoiceManager;
|
|
740
758
|
}(EventEmitter));
|
|
741
759
|
export default MediaElementTrackChoiceManager;
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { IRepresentationFilter } from "../../manifest";
|
|
17
17
|
import { ICustomManifestLoader, ICustomSegmentLoader, ILoadedManifestFormat, ITransportOptions as IParsedTransportOptions } from "../../transports";
|
|
18
|
-
import { IKeySystemOption } from "../
|
|
18
|
+
import { IKeySystemOption } from "../decrypt";
|
|
19
19
|
import { IAudioTrackPreference, ITextTrackPreference, IVideoTrackPreference } from "./track_choice_manager";
|
|
20
20
|
export { IKeySystemOption };
|
|
21
21
|
/** Value of the `serverSyncInfos` transport option. */
|
|
@@ -154,6 +154,7 @@ export interface IConstructorOptions {
|
|
|
154
154
|
maxBufferAhead?: number;
|
|
155
155
|
maxBufferBehind?: number;
|
|
156
156
|
wantedBufferAhead?: number;
|
|
157
|
+
maxVideoBufferSize?: number;
|
|
157
158
|
limitVideoWidth?: boolean;
|
|
158
159
|
throttleWhenHidden?: boolean;
|
|
159
160
|
throttleVideoBitrateWhenHidden?: boolean;
|
|
@@ -174,6 +175,7 @@ export interface IParsedConstructorOptions {
|
|
|
174
175
|
maxBufferAhead: number;
|
|
175
176
|
maxBufferBehind: number;
|
|
176
177
|
wantedBufferAhead: number;
|
|
178
|
+
maxVideoBufferSize: number;
|
|
177
179
|
limitVideoWidth: boolean;
|
|
178
180
|
throttleWhenHidden: boolean;
|
|
179
181
|
throttleVideoBitrateWhenHidden: boolean;
|
|
@@ -24,7 +24,6 @@ import isNullOrUndefined from "../../utils/is_null_or_undefined";
|
|
|
24
24
|
import { normalizeAudioTrack, normalizeTextTrack, } from "../../utils/languages";
|
|
25
25
|
import objectAssign from "../../utils/object_assign";
|
|
26
26
|
import warnOnce from "../../utils/warn_once";
|
|
27
|
-
var DEFAULT_AUDIO_TRACK_SWITCHING_MODE = config.DEFAULT_AUDIO_TRACK_SWITCHING_MODE, DEFAULT_AUTO_PLAY = config.DEFAULT_AUTO_PLAY, DEFAULT_CODEC_SWITCHING_BEHAVIOR = config.DEFAULT_CODEC_SWITCHING_BEHAVIOR, DEFAULT_ENABLE_FAST_SWITCHING = config.DEFAULT_ENABLE_FAST_SWITCHING, DEFAULT_INITIAL_BITRATES = config.DEFAULT_INITIAL_BITRATES, DEFAULT_LIMIT_VIDEO_WIDTH = config.DEFAULT_LIMIT_VIDEO_WIDTH, DEFAULT_MANUAL_BITRATE_SWITCHING_MODE = config.DEFAULT_MANUAL_BITRATE_SWITCHING_MODE, DEFAULT_MIN_BITRATES = config.DEFAULT_MIN_BITRATES, DEFAULT_MAX_BITRATES = config.DEFAULT_MAX_BITRATES, DEFAULT_MAX_BUFFER_AHEAD = config.DEFAULT_MAX_BUFFER_AHEAD, DEFAULT_MAX_BUFFER_BEHIND = config.DEFAULT_MAX_BUFFER_BEHIND, DEFAULT_SHOW_NATIVE_SUBTITLE = config.DEFAULT_SHOW_NATIVE_SUBTITLE, DEFAULT_STOP_AT_END = config.DEFAULT_STOP_AT_END, DEFAULT_TEXT_TRACK_MODE = config.DEFAULT_TEXT_TRACK_MODE, DEFAULT_THROTTLE_WHEN_HIDDEN = config.DEFAULT_THROTTLE_WHEN_HIDDEN, DEFAULT_THROTTLE_VIDEO_BITRATE_WHEN_HIDDEN = config.DEFAULT_THROTTLE_VIDEO_BITRATE_WHEN_HIDDEN, DEFAULT_WANTED_BUFFER_AHEAD = config.DEFAULT_WANTED_BUFFER_AHEAD;
|
|
28
27
|
/**
|
|
29
28
|
* Parse options given to the API constructor and set default options as found
|
|
30
29
|
* in the config.
|
|
@@ -38,6 +37,7 @@ function parseConstructorOptions(options) {
|
|
|
38
37
|
var maxBufferAhead;
|
|
39
38
|
var maxBufferBehind;
|
|
40
39
|
var wantedBufferAhead;
|
|
40
|
+
var maxVideoBufferSize;
|
|
41
41
|
var throttleWhenHidden;
|
|
42
42
|
var throttleVideoBitrateWhenHidden;
|
|
43
43
|
var preferredAudioTracks;
|
|
@@ -50,6 +50,7 @@ function parseConstructorOptions(options) {
|
|
|
50
50
|
var minVideoBitrate;
|
|
51
51
|
var maxAudioBitrate;
|
|
52
52
|
var maxVideoBitrate;
|
|
53
|
+
var _a = config.getCurrent(), DEFAULT_INITIAL_BITRATES = _a.DEFAULT_INITIAL_BITRATES, DEFAULT_LIMIT_VIDEO_WIDTH = _a.DEFAULT_LIMIT_VIDEO_WIDTH, DEFAULT_MIN_BITRATES = _a.DEFAULT_MIN_BITRATES, DEFAULT_MAX_BITRATES = _a.DEFAULT_MAX_BITRATES, DEFAULT_MAX_BUFFER_AHEAD = _a.DEFAULT_MAX_BUFFER_AHEAD, DEFAULT_MAX_BUFFER_BEHIND = _a.DEFAULT_MAX_BUFFER_BEHIND, DEFAULT_MAX_VIDEO_BUFFER_SIZE = _a.DEFAULT_MAX_VIDEO_BUFFER_SIZE, DEFAULT_STOP_AT_END = _a.DEFAULT_STOP_AT_END, DEFAULT_THROTTLE_WHEN_HIDDEN = _a.DEFAULT_THROTTLE_WHEN_HIDDEN, DEFAULT_THROTTLE_VIDEO_BITRATE_WHEN_HIDDEN = _a.DEFAULT_THROTTLE_VIDEO_BITRATE_WHEN_HIDDEN, DEFAULT_WANTED_BUFFER_AHEAD = _a.DEFAULT_WANTED_BUFFER_AHEAD;
|
|
53
54
|
if (isNullOrUndefined(options.maxBufferAhead)) {
|
|
54
55
|
maxBufferAhead = DEFAULT_MAX_BUFFER_AHEAD;
|
|
55
56
|
}
|
|
@@ -79,6 +80,17 @@ function parseConstructorOptions(options) {
|
|
|
79
80
|
/* eslint-enable max-len */
|
|
80
81
|
}
|
|
81
82
|
}
|
|
83
|
+
if (isNullOrUndefined(options.maxVideoBufferSize)) {
|
|
84
|
+
maxVideoBufferSize = DEFAULT_MAX_VIDEO_BUFFER_SIZE;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
maxVideoBufferSize = Number(options.maxVideoBufferSize);
|
|
88
|
+
if (isNaN(maxVideoBufferSize)) {
|
|
89
|
+
/* eslint-disable max-len */
|
|
90
|
+
throw new Error("Invalid maxVideoBufferSize parameter. Should be a number.");
|
|
91
|
+
/* eslint-enable max-len */
|
|
92
|
+
}
|
|
93
|
+
}
|
|
82
94
|
var limitVideoWidth = isNullOrUndefined(options.limitVideoWidth) ?
|
|
83
95
|
DEFAULT_LIMIT_VIDEO_WIDTH :
|
|
84
96
|
!!options.limitVideoWidth;
|
|
@@ -218,7 +230,7 @@ function parseConstructorOptions(options) {
|
|
|
218
230
|
}
|
|
219
231
|
var stopAtEnd = isNullOrUndefined(options.stopAtEnd) ? DEFAULT_STOP_AT_END :
|
|
220
232
|
!!options.stopAtEnd;
|
|
221
|
-
return { maxBufferAhead: maxBufferAhead, maxBufferBehind: maxBufferBehind, limitVideoWidth: limitVideoWidth, videoElement: videoElement, wantedBufferAhead: wantedBufferAhead, throttleWhenHidden: throttleWhenHidden, throttleVideoBitrateWhenHidden: throttleVideoBitrateWhenHidden, preferredAudioTracks: preferredAudioTracks, preferredTextTracks: preferredTextTracks, preferredVideoTracks: preferredVideoTracks, initialAudioBitrate: initialAudioBitrate, initialVideoBitrate: initialVideoBitrate, minAudioBitrate: minAudioBitrate, minVideoBitrate: minVideoBitrate, maxAudioBitrate: maxAudioBitrate, maxVideoBitrate: maxVideoBitrate, stopAtEnd: stopAtEnd };
|
|
233
|
+
return { maxBufferAhead: maxBufferAhead, maxBufferBehind: maxBufferBehind, limitVideoWidth: limitVideoWidth, videoElement: videoElement, wantedBufferAhead: wantedBufferAhead, maxVideoBufferSize: maxVideoBufferSize, throttleWhenHidden: throttleWhenHidden, throttleVideoBitrateWhenHidden: throttleVideoBitrateWhenHidden, preferredAudioTracks: preferredAudioTracks, preferredTextTracks: preferredTextTracks, preferredVideoTracks: preferredVideoTracks, initialAudioBitrate: initialAudioBitrate, initialVideoBitrate: initialVideoBitrate, minAudioBitrate: minAudioBitrate, minVideoBitrate: minVideoBitrate, maxAudioBitrate: maxAudioBitrate, maxVideoBitrate: maxVideoBitrate, stopAtEnd: stopAtEnd };
|
|
222
234
|
}
|
|
223
235
|
/**
|
|
224
236
|
* Check the format of given reload options.
|
|
@@ -264,6 +276,7 @@ function parseLoadVideoOptions(options) {
|
|
|
264
276
|
var textTrackMode;
|
|
265
277
|
var textTrackElement;
|
|
266
278
|
var startAt;
|
|
279
|
+
var _g = config.getCurrent(), DEFAULT_AUDIO_TRACK_SWITCHING_MODE = _g.DEFAULT_AUDIO_TRACK_SWITCHING_MODE, DEFAULT_AUTO_PLAY = _g.DEFAULT_AUTO_PLAY, DEFAULT_CODEC_SWITCHING_BEHAVIOR = _g.DEFAULT_CODEC_SWITCHING_BEHAVIOR, DEFAULT_ENABLE_FAST_SWITCHING = _g.DEFAULT_ENABLE_FAST_SWITCHING, DEFAULT_MANUAL_BITRATE_SWITCHING_MODE = _g.DEFAULT_MANUAL_BITRATE_SWITCHING_MODE, DEFAULT_SHOW_NATIVE_SUBTITLE = _g.DEFAULT_SHOW_NATIVE_SUBTITLE, DEFAULT_TEXT_TRACK_MODE = _g.DEFAULT_TEXT_TRACK_MODE;
|
|
267
280
|
if (isNullOrUndefined(options)) {
|
|
268
281
|
throw new Error("No option set on loadVideo");
|
|
269
282
|
}
|
|
@@ -349,8 +362,8 @@ function parseLoadVideoOptions(options) {
|
|
|
349
362
|
"Please use the `TextTrackRenderer` tool instead.");
|
|
350
363
|
var supplementaryTextTracks = Array.isArray(options.supplementaryTextTracks) ?
|
|
351
364
|
options.supplementaryTextTracks : [options.supplementaryTextTracks];
|
|
352
|
-
for (var
|
|
353
|
-
var supplementaryTextTrack = supplementaryTextTracks_1[
|
|
365
|
+
for (var _h = 0, supplementaryTextTracks_1 = supplementaryTextTracks; _h < supplementaryTextTracks_1.length; _h++) {
|
|
366
|
+
var supplementaryTextTrack = supplementaryTextTracks_1[_h];
|
|
354
367
|
if (typeof supplementaryTextTrack.language !== "string" ||
|
|
355
368
|
typeof supplementaryTextTrack.mimeType !== "string" ||
|
|
356
369
|
typeof supplementaryTextTrack.url !== "string") {
|
|
@@ -365,8 +378,8 @@ function parseLoadVideoOptions(options) {
|
|
|
365
378
|
"Please use the `parseBifThumbnails` tool instead.");
|
|
366
379
|
var supplementaryImageTracks = Array.isArray(options.supplementaryImageTracks) ?
|
|
367
380
|
options.supplementaryImageTracks : [options.supplementaryImageTracks];
|
|
368
|
-
for (var
|
|
369
|
-
var supplementaryImageTrack = supplementaryImageTracks_1[
|
|
381
|
+
for (var _j = 0, supplementaryImageTracks_1 = supplementaryImageTracks; _j < supplementaryImageTracks_1.length; _j++) {
|
|
382
|
+
var supplementaryImageTrack = supplementaryImageTracks_1[_j];
|
|
370
383
|
if (typeof supplementaryImageTrack.mimeType !== "string" ||
|
|
371
384
|
typeof supplementaryImageTrack.url !== "string") {
|
|
372
385
|
throw new Error("Invalid supplementary image track given. " +
|
|
@@ -27,7 +27,6 @@ import config from "../../config";
|
|
|
27
27
|
import log from "../../log";
|
|
28
28
|
import objectAssign from "../../utils/object_assign";
|
|
29
29
|
import { getRange } from "../../utils/ranges";
|
|
30
|
-
var SAMPLING_INTERVAL_MEDIASOURCE = config.SAMPLING_INTERVAL_MEDIASOURCE, SAMPLING_INTERVAL_LOW_LATENCY = config.SAMPLING_INTERVAL_LOW_LATENCY, SAMPLING_INTERVAL_NO_MEDIASOURCE = config.SAMPLING_INTERVAL_NO_MEDIASOURCE, RESUME_GAP_AFTER_SEEKING = config.RESUME_GAP_AFTER_SEEKING, RESUME_GAP_AFTER_NOT_ENOUGH_DATA = config.RESUME_GAP_AFTER_NOT_ENOUGH_DATA, RESUME_GAP_AFTER_BUFFERING = config.RESUME_GAP_AFTER_BUFFERING, REBUFFERING_GAP = config.REBUFFERING_GAP, MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING = config.MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING;
|
|
31
30
|
/**
|
|
32
31
|
* HTMLMediaElement Events for which playback observations are calculated and
|
|
33
32
|
* emitted.
|
|
@@ -145,6 +144,7 @@ var PlaybackObserver = /** @class */ (function () {
|
|
|
145
144
|
PlaybackObserver.prototype._createInnerObservable = function () {
|
|
146
145
|
var _this = this;
|
|
147
146
|
return observableDefer(function () {
|
|
147
|
+
var _a = config.getCurrent(), SAMPLING_INTERVAL_MEDIASOURCE = _a.SAMPLING_INTERVAL_MEDIASOURCE, SAMPLING_INTERVAL_LOW_LATENCY = _a.SAMPLING_INTERVAL_LOW_LATENCY, SAMPLING_INTERVAL_NO_MEDIASOURCE = _a.SAMPLING_INTERVAL_NO_MEDIASOURCE;
|
|
148
148
|
var getCurrentObservation = function (event) {
|
|
149
149
|
var _a;
|
|
150
150
|
var tmpEvt = event;
|
|
@@ -212,6 +212,7 @@ function getRebufferingEndGap(rebufferingStatus, lowLatencyMode) {
|
|
|
212
212
|
}
|
|
213
213
|
var suffix = lowLatencyMode ? "LOW_LATENCY" :
|
|
214
214
|
"DEFAULT";
|
|
215
|
+
var _a = config.getCurrent(), RESUME_GAP_AFTER_SEEKING = _a.RESUME_GAP_AFTER_SEEKING, RESUME_GAP_AFTER_NOT_ENOUGH_DATA = _a.RESUME_GAP_AFTER_NOT_ENOUGH_DATA, RESUME_GAP_AFTER_BUFFERING = _a.RESUME_GAP_AFTER_BUFFERING;
|
|
215
216
|
switch (rebufferingStatus.reason) {
|
|
216
217
|
case "seeking":
|
|
217
218
|
return RESUME_GAP_AFTER_SEEKING[suffix];
|
|
@@ -228,6 +229,7 @@ function getRebufferingEndGap(rebufferingStatus, lowLatencyMode) {
|
|
|
228
229
|
* @returns {Boolean}
|
|
229
230
|
*/
|
|
230
231
|
function hasLoadedUntilTheEnd(currentRange, duration, lowLatencyMode) {
|
|
232
|
+
var REBUFFERING_GAP = config.getCurrent().REBUFFERING_GAP;
|
|
231
233
|
var suffix = lowLatencyMode ? "LOW_LATENCY" :
|
|
232
234
|
"DEFAULT";
|
|
233
235
|
return currentRange !== null &&
|
|
@@ -261,6 +263,7 @@ function getMediaInfos(mediaElement, event) {
|
|
|
261
263
|
*/
|
|
262
264
|
function getRebufferingStatus(prevObservation, currentInfo, _a) {
|
|
263
265
|
var withMediaSource = _a.withMediaSource, lowLatencyMode = _a.lowLatencyMode;
|
|
266
|
+
var REBUFFERING_GAP = config.getCurrent().REBUFFERING_GAP;
|
|
264
267
|
var currentEvt = currentInfo.event, currentTime = currentInfo.position, bufferGap = currentInfo.bufferGap, currentRange = currentInfo.currentRange, duration = currentInfo.duration, paused = currentInfo.paused, readyState = currentInfo.readyState, ended = currentInfo.ended;
|
|
265
268
|
var prevRebuffering = prevObservation.rebuffering, prevEvt = prevObservation.event, prevTime = prevObservation.position;
|
|
266
269
|
var fullyLoaded = hasLoadedUntilTheEnd(currentRange, duration, lowLatencyMode);
|
|
@@ -354,6 +357,7 @@ function getRebufferingStatus(prevObservation, currentInfo, _a) {
|
|
|
354
357
|
* @returns {Object|null}
|
|
355
358
|
*/
|
|
356
359
|
function getFreezingStatus(prevObservation, currentInfo) {
|
|
360
|
+
var MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING = config.getCurrent().MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING;
|
|
357
361
|
if (prevObservation.freezing) {
|
|
358
362
|
if (currentInfo.ended ||
|
|
359
363
|
currentInfo.paused ||
|