rx-player 3.27.1-dev.2022060300 → 3.28.0-dev.2022061700
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -4
- package/FILES.md +7 -7
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/change_source_buffer_type.js +1 -1
- package/dist/_esm5.processed/compat/event_listeners.d.ts +34 -19
- package/dist/_esm5.processed/compat/event_listeners.js +159 -80
- package/dist/_esm5.processed/compat/index.d.ts +1 -2
- package/dist/_esm5.processed/compat/index.js +1 -2
- package/dist/_esm5.processed/core/{abr/representation_estimator.d.ts → adaptive/adaptive_representation_selector.d.ts} +139 -124
- package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +376 -0
- package/dist/_esm5.processed/core/{abr → adaptive}/buffer_based_chooser.d.ts +5 -4
- package/dist/_esm5.processed/core/{abr → adaptive}/buffer_based_chooser.js +5 -4
- package/dist/_esm5.processed/core/{abr → adaptive}/guess_based_chooser.d.ts +3 -3
- package/dist/_esm5.processed/core/{abr → adaptive}/guess_based_chooser.js +5 -5
- package/dist/_esm5.processed/core/adaptive/index.d.ts +18 -0
- package/dist/_esm5.processed/core/{abr → adaptive}/index.js +2 -2
- package/dist/_esm5.processed/core/{abr → adaptive}/network_analyzer.d.ts +4 -18
- package/dist/_esm5.processed/core/{abr → adaptive}/network_analyzer.js +4 -4
- package/dist/_esm5.processed/core/{abr → adaptive/utils}/bandwidth_estimator.d.ts +11 -9
- package/dist/_esm5.processed/core/{abr → adaptive/utils}/bandwidth_estimator.js +9 -25
- package/dist/_esm5.processed/core/{abr → adaptive}/utils/ewma.d.ts +2 -1
- package/dist/_esm5.processed/core/{abr → adaptive}/utils/ewma.js +0 -1
- package/dist/_esm5.processed/core/{abr → adaptive}/utils/filter_by_bitrate.d.ts +0 -0
- package/dist/_esm5.processed/core/{abr → adaptive}/utils/filter_by_bitrate.js +0 -0
- package/dist/_esm5.processed/core/{abr → adaptive}/utils/filter_by_width.d.ts +0 -0
- package/dist/_esm5.processed/core/{abr → adaptive}/utils/filter_by_width.js +0 -0
- package/dist/_esm5.processed/core/{abr → adaptive/utils}/get_buffer_levels.d.ts +0 -0
- package/dist/_esm5.processed/core/{abr → adaptive/utils}/get_buffer_levels.js +0 -0
- package/dist/_esm5.processed/core/{abr → adaptive/utils}/last_estimate_storage.d.ts +3 -3
- package/dist/_esm5.processed/core/{abr → adaptive/utils}/last_estimate_storage.js +3 -3
- package/dist/_esm5.processed/core/{abr → adaptive/utils}/pending_requests_store.d.ts +1 -2
- package/dist/_esm5.processed/core/{abr → adaptive/utils}/pending_requests_store.js +4 -5
- package/dist/_esm5.processed/core/{abr → adaptive/utils}/representation_score_calculator.d.ts +8 -1
- package/dist/_esm5.processed/core/{abr → adaptive/utils}/representation_score_calculator.js +4 -4
- package/dist/_esm5.processed/core/{abr → adaptive}/utils/select_optimal_representation.d.ts +0 -0
- package/dist/_esm5.processed/core/{abr → adaptive}/utils/select_optimal_representation.js +0 -0
- package/dist/_esm5.processed/core/api/get_player_state.d.ts +2 -3
- package/dist/_esm5.processed/core/api/get_player_state.js +3 -4
- package/dist/_esm5.processed/core/api/index.d.ts +0 -4
- package/dist/_esm5.processed/core/api/media_element_track_choice_manager.d.ts +13 -13
- package/dist/_esm5.processed/core/api/option_utils.d.ts +16 -168
- package/dist/_esm5.processed/core/api/playback_observer.d.ts +50 -1
- package/dist/_esm5.processed/core/api/playback_observer.js +62 -3
- package/dist/_esm5.processed/core/api/public_api.d.ts +34 -85
- package/dist/_esm5.processed/core/api/public_api.js +73 -79
- package/dist/_esm5.processed/core/api/track_choice_manager.d.ts +9 -97
- package/dist/_esm5.processed/core/api/track_choice_manager.js +10 -10
- package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.d.ts +6 -6
- package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.js +9 -9
- package/dist/_esm5.processed/core/decrypt/attach_media_keys.d.ts +1 -1
- package/dist/_esm5.processed/core/decrypt/content_decryptor.d.ts +3 -3
- package/dist/_esm5.processed/core/decrypt/content_decryptor.js +5 -5
- package/dist/_esm5.processed/core/decrypt/create_or_load_session.js +1 -1
- package/dist/_esm5.processed/core/decrypt/create_session.js +5 -5
- package/dist/_esm5.processed/core/decrypt/find_key_system.d.ts +1 -1
- package/dist/_esm5.processed/core/decrypt/find_key_system.js +3 -3
- package/dist/_esm5.processed/core/decrypt/get_media_keys.d.ts +2 -1
- package/dist/_esm5.processed/core/decrypt/init_media_keys.d.ts +1 -1
- package/dist/_esm5.processed/core/decrypt/session_events_listener.d.ts +4 -4
- package/dist/_esm5.processed/core/decrypt/session_events_listener.js +2 -2
- package/dist/_esm5.processed/core/decrypt/set_server_certificate.d.ts +2 -2
- package/dist/_esm5.processed/core/decrypt/set_server_certificate.js +1 -1
- package/dist/_esm5.processed/core/decrypt/types.d.ts +2 -121
- package/dist/_esm5.processed/core/decrypt/utils/media_keys_infos_store.d.ts +1 -1
- package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.d.ts +2 -1
- package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.js +16 -8
- package/dist/_esm5.processed/core/decrypt/utils/server_certificate_store.d.ts +1 -1
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +2 -2
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +1 -1
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +7 -7
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +4 -1
- package/dist/_esm5.processed/core/fetchers/utils/error_selector.d.ts +2 -2
- package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +4 -4
- package/dist/_esm5.processed/core/init/content_time_boundaries_observer.d.ts +2 -10
- package/dist/_esm5.processed/core/init/content_time_boundaries_observer.js +5 -4
- package/dist/_esm5.processed/core/init/create_media_source.js +2 -2
- package/dist/_esm5.processed/core/init/create_stream_playback_observer.d.ts +1 -0
- package/dist/_esm5.processed/core/init/create_stream_playback_observer.js +20 -15
- package/dist/_esm5.processed/core/init/events_generators.d.ts +2 -2
- package/dist/_esm5.processed/core/init/initial_seek_and_play.js +1 -1
- package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +1 -1
- package/dist/_esm5.processed/core/init/initialize_directfile.js +6 -3
- package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +3 -3
- package/dist/_esm5.processed/core/init/initialize_media_source.js +3 -3
- package/dist/_esm5.processed/core/init/link_drm_and_content.d.ts +2 -1
- package/dist/_esm5.processed/core/init/load_on_media_source.d.ts +4 -4
- package/dist/_esm5.processed/core/init/load_on_media_source.js +2 -2
- package/dist/_esm5.processed/core/init/media_duration_updater.js +10 -10
- package/dist/_esm5.processed/core/init/stream_events_emitter/index.d.ts +2 -2
- package/dist/_esm5.processed/core/init/stream_events_emitter/types.d.ts +1 -8
- package/dist/_esm5.processed/core/init/types.d.ts +2 -2
- package/dist/_esm5.processed/core/segment_buffers/garbage_collector.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +2 -2
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +2 -2
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/parsers.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +2 -2
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/parsers.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/utils/manual_time_ranges.js +2 -2
- package/dist/_esm5.processed/core/segment_buffers/inventory/buffered_history.d.ts +15 -7
- package/dist/_esm5.processed/core/segment_buffers/inventory/buffered_history.js +3 -4
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +1 -1
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +24 -11
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +45 -25
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +31 -28
- package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.d.ts +26 -22
- package/dist/_esm5.processed/core/stream/adaptation/create_representation_estimator.js +45 -40
- package/dist/_esm5.processed/core/stream/adaptation/index.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/events_generators.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/orchestrator/active_period_emitter.d.ts +1 -5
- package/dist/_esm5.processed/core/stream/orchestrator/active_period_emitter.js +1 -5
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +4 -4
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +25 -16
- package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.d.ts +2 -3
- package/dist/_esm5.processed/core/stream/period/create_empty_adaptation_stream.js +2 -3
- package/dist/_esm5.processed/core/stream/period/get_adaptation_switch_strategy.d.ts +1 -13
- package/dist/_esm5.processed/core/stream/period/index.d.ts +1 -1
- package/dist/_esm5.processed/core/stream/period/period_stream.d.ts +16 -14
- package/dist/_esm5.processed/core/stream/period/period_stream.js +5 -5
- package/dist/_esm5.processed/core/stream/reload_after_switch.d.ts +4 -2
- package/dist/_esm5.processed/core/stream/reload_after_switch.js +12 -4
- package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.d.ts +2 -4
- package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.js +2 -1
- package/dist/_esm5.processed/core/stream/representation/downloading_queue.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/representation/downloading_queue.js +2 -2
- package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +14 -2
- package/dist/_esm5.processed/core/stream/representation/get_needed_segments.js +43 -17
- package/dist/_esm5.processed/core/stream/representation/index.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/representation/push_init_segment.d.ts +2 -4
- package/dist/_esm5.processed/core/stream/representation/push_media_segment.d.ts +2 -4
- package/dist/_esm5.processed/core/stream/representation/representation_stream.d.ts +33 -22
- package/dist/_esm5.processed/core/stream/representation/representation_stream.js +11 -5
- package/dist/_esm5.processed/core/stream/types.d.ts +2 -2
- package/dist/_esm5.processed/default_config.d.ts +3 -3
- package/dist/_esm5.processed/default_config.js +3 -3
- package/dist/_esm5.processed/errors/format_error.d.ts +2 -2
- package/dist/_esm5.processed/errors/index.d.ts +2 -2
- package/dist/_esm5.processed/errors/is_known_error.d.ts +2 -6
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +5 -1
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +3 -1
- package/dist/_esm5.processed/features/initialize_features.js +25 -25
- package/dist/_esm5.processed/index.js +5 -2
- package/dist/_esm5.processed/manifest/adaptation.d.ts +4 -16
- package/dist/_esm5.processed/manifest/adaptation.js +3 -0
- package/dist/_esm5.processed/manifest/index.d.ts +3 -3
- package/dist/_esm5.processed/manifest/manifest.d.ts +3 -3
- package/dist/_esm5.processed/manifest/manifest.js +1 -1
- package/dist/_esm5.processed/manifest/period.d.ts +3 -18
- package/dist/_esm5.processed/manifest/period.js +1 -1
- package/dist/_esm5.processed/manifest/representation.d.ts +5 -4
- package/dist/_esm5.processed/manifest/representation.js +23 -4
- package/dist/_esm5.processed/manifest/representation_index/types.d.ts +2 -2
- package/dist/_esm5.processed/manifest/types.d.ts +0 -116
- package/dist/_esm5.processed/minimal.js +5 -2
- package/dist/_esm5.processed/parsers/containers/isobmff/get_box.d.ts +10 -1
- package/dist/_esm5.processed/parsers/containers/isobmff/get_box.js +21 -1
- package/dist/_esm5.processed/parsers/containers/isobmff/take_pssh_out.js +2 -1
- package/dist/_esm5.processed/parsers/containers/isobmff/utils.d.ts +7 -2
- package/dist/_esm5.processed/parsers/containers/isobmff/utils.js +53 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +2 -0
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +2 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +7 -7
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +4 -1
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +6 -0
- package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +2 -0
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +46 -42
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.js +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/ContentComponent.js +4 -4
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/ContentProtection.js +4 -4
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.js +9 -9
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/MPD.js +18 -18
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Period.js +13 -13
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +22 -22
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Scheme.js +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentBase.js +10 -10
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentTemplate.js +13 -13
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/SegmentUrl.js +4 -4
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/XLink.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/root.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/types.d.ts +5 -1
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/create_element.js +4 -4
- package/dist/_esm5.processed/parsers/texttracks/ttml/native/parse_cue.js +3 -2
- package/dist/_esm5.processed/parsers/texttracks/ttml/parse_ttml.d.ts +1 -1
- package/dist/_esm5.processed/parsers/texttracks/ttml/parse_ttml.js +9 -4
- package/dist/_esm5.processed/parsers/texttracks/ttml/xml_utils.d.ts +70 -0
- package/dist/_esm5.processed/parsers/texttracks/ttml/xml_utils.js +149 -0
- package/dist/_esm5.processed/public_types.d.ts +638 -7
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +2 -2
- package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -1
- package/dist/_esm5.processed/transports/dash/segment_parser.js +8 -3
- package/dist/_esm5.processed/transports/local/segment_parser.js +8 -2
- package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.d.ts +3 -2
- package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +2 -1
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +1 -1
- package/dist/_esm5.processed/transports/types.d.ts +16 -60
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.d.ts +3 -2
- package/dist/_esm5.processed/transports/utils/generate_manifest_loader.d.ts +3 -2
- package/dist/_esm5.processed/transports/utils/get_isobmff_timing_infos.js +6 -0
- package/dist/_esm5.processed/utils/assert.js +1 -1
- package/dist/_esm5.processed/utils/event_emitter.d.ts +5 -2
- package/dist/_esm5.processed/utils/event_emitter.js +10 -3
- package/dist/_esm5.processed/utils/logger.d.ts +8 -1
- package/dist/_esm5.processed/utils/logger.js +9 -0
- package/dist/_esm5.processed/utils/object_assign.d.ts +3 -3
- package/dist/_esm5.processed/utils/reference.d.ts +30 -3
- package/dist/_esm5.processed/utils/reference.js +24 -9
- package/dist/_esm5.processed/utils/request/fetch.js +1 -1
- package/dist/_esm5.processed/{compat/when_media_source_open.d.ts → utils/rx-next-tick.d.ts} +8 -4
- package/dist/_esm5.processed/utils/rx-next-tick.js +41 -0
- package/dist/_esm5.processed/utils/rx-retry_with_backoff.d.ts +2 -2
- package/dist/_esm5.processed/utils/string_parsing.js +8 -4
- package/dist/_esm5.processed/utils/take_first_set.d.ts +1 -0
- package/dist/_esm5.processed/utils/task_canceller.d.ts +3 -4
- package/dist/_esm5.processed/utils/task_canceller.js +1 -2
- package/dist/_esm5.processed/utils/uniq.d.ts +1 -1
- package/dist/mpd-parser.wasm +0 -0
- package/dist/rx-player.js +2528 -2386
- package/dist/rx-player.min.js +1 -1
- package/dist/rx-player.min.js.LICENSE.txt +2 -0
- package/jest.config.js +1 -1
- package/package.json +40 -36
- package/scripts/build/constants.d.ts +2 -0
- package/scripts/fast_demo_build.js +7 -21
- package/scripts/generate_full_demo.js +7 -21
- package/scripts/start_demo_web_server.js +6 -2
- package/sonar-project.properties +1 -1
- package/src/README.md +9 -9
- package/src/compat/__tests__/add_text_track.test.ts +4 -4
- package/src/compat/__tests__/browser_compatibility_types.test.ts +5 -5
- package/src/compat/__tests__/browser_version.test.ts +4 -4
- package/src/compat/__tests__/can_patch_isobmff.test.ts +2 -2
- package/src/compat/__tests__/can_rely_on_video_visibility_and_size.test.ts +4 -4
- package/src/compat/__tests__/clear_element_src.test.ts +8 -8
- package/src/compat/__tests__/fullscreen.test.ts +10 -10
- package/src/compat/__tests__/has_eme_apis.test.ts +2 -2
- package/src/compat/__tests__/is_codec_supported.test.ts +4 -4
- package/src/compat/__tests__/is_offline.test.ts +4 -4
- package/src/compat/__tests__/is_seeking_approximate.test.ts +2 -2
- package/src/compat/__tests__/is_vtt_cue.test.ts +3 -3
- package/src/compat/__tests__/make_vtt_cue.test.ts +13 -13
- package/src/compat/__tests__/play.test.ts +4 -4
- package/src/compat/__tests__/remove_cue.test.ts +5 -5
- package/src/compat/__tests__/set_element_src.test.ts +1 -1
- package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +10 -5
- package/src/compat/__tests__/should_renew_media_keys.test.ts +2 -2
- package/src/compat/__tests__/should_unset_media_keys.test.ts +2 -2
- package/src/compat/__tests__/should_validate_metadata.test.ts +2 -2
- package/src/compat/__tests__/should_wait_for_data_before_loaded.test.ts +7 -7
- package/src/compat/__tests__/when_loaded_metadata.test.ts +3 -3
- package/src/compat/change_source_buffer_type.ts +2 -1
- package/src/compat/event_listeners.ts +218 -138
- package/src/compat/index.ts +0 -2
- package/src/core/README.md +1 -1
- package/src/core/{abr → adaptive}/README.md +6 -6
- package/src/core/{abr → adaptive}/__tests__/buffer_based_chooser.test.ts +8 -8
- package/src/core/adaptive/adaptive_representation_selector.ts +882 -0
- package/src/core/{abr → adaptive}/buffer_based_chooser.ts +8 -6
- package/src/core/{abr → adaptive}/guess_based_chooser.ts +5 -5
- package/src/core/adaptive/index.ts +45 -0
- package/src/core/{abr → adaptive}/network_analyzer.ts +14 -25
- package/src/core/{abr → adaptive/utils}/__tests__/bandwith_estimator.test.ts +0 -0
- package/src/core/{abr → adaptive}/utils/__tests__/ewma.test.ts +0 -0
- package/src/core/{abr → adaptive}/utils/__tests__/filter_by_bitrate.test.ts +0 -0
- package/src/core/{abr → adaptive}/utils/__tests__/filter_by_width.test.ts +0 -0
- package/src/core/{abr → adaptive/utils}/__tests__/get_buffer_levels.test.ts +0 -0
- package/src/core/{abr → adaptive}/utils/__tests__/select_optimal_representation.test.ts +0 -0
- package/src/core/{abr → adaptive/utils}/bandwidth_estimator.ts +15 -28
- package/src/core/{abr → adaptive}/utils/ewma.ts +2 -1
- package/src/core/{abr → adaptive}/utils/filter_by_bitrate.ts +0 -0
- package/src/core/{abr → adaptive}/utils/filter_by_width.ts +0 -0
- package/src/core/{abr → adaptive/utils}/get_buffer_levels.ts +0 -0
- package/src/core/{abr → adaptive/utils}/last_estimate_storage.ts +3 -3
- package/src/core/{abr → adaptive/utils}/pending_requests_store.ts +3 -4
- package/src/core/{abr → adaptive/utils}/representation_score_calculator.ts +10 -3
- package/src/core/{abr → adaptive}/utils/select_optimal_representation.ts +0 -0
- package/src/core/api/__tests__/get_player_state.test.ts +73 -52
- package/src/core/api/__tests__/public_api.test.ts +65 -66
- package/src/core/api/get_player_state.ts +3 -15
- package/src/core/api/index.ts +0 -34
- package/src/core/api/media_element_track_choice_manager.ts +28 -28
- package/src/core/api/option_utils.ts +41 -189
- package/src/core/api/playback_observer.ts +109 -3
- package/src/core/api/public_api.ts +162 -200
- package/src/core/api/track_choice_manager.ts +43 -107
- package/src/core/decrypt/__tests__/__global__/get_license.test.ts +20 -20
- package/src/core/decrypt/__tests__/__global__/init_data.test.ts +149 -152
- package/src/core/decrypt/__tests__/__global__/media_key_system_access.test.ts +110 -110
- package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +12 -13
- package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +65 -66
- package/src/core/decrypt/__tests__/__global__/utils.ts +16 -16
- package/src/core/decrypt/attach_media_keys.ts +1 -3
- package/src/core/decrypt/content_decryptor.ts +6 -4
- package/src/core/decrypt/find_key_system.ts +4 -5
- package/src/core/decrypt/get_media_keys.ts +2 -4
- package/src/core/decrypt/init_media_keys.ts +1 -1
- package/src/core/decrypt/session_events_listener.ts +9 -10
- package/src/core/decrypt/set_server_certificate.ts +4 -3
- package/src/core/decrypt/types.ts +2 -136
- package/src/core/decrypt/utils/__tests__/clean_old_loaded_sessions.test.ts +8 -9
- package/src/core/decrypt/utils/__tests__/clean_old_stored_persistent_info.test.ts +18 -18
- package/src/core/decrypt/utils/media_keys_infos_store.ts +1 -1
- package/src/core/decrypt/utils/persistent_sessions_store.ts +22 -14
- package/src/core/fetchers/manifest/manifest_fetcher.ts +3 -5
- package/src/core/fetchers/segment/segment_fetcher.ts +15 -14
- package/src/core/fetchers/utils/error_selector.ts +2 -2
- package/src/core/init/__tests__/are_same_stream_events.test.ts +5 -6
- package/src/core/init/__tests__/refresh_scheduled_events_list.test.ts +1 -2
- package/src/core/init/content_time_boundaries_observer.ts +10 -14
- package/src/core/init/create_media_source.ts +4 -2
- package/src/core/init/create_stream_playback_observer.ts +20 -15
- package/src/core/init/events_generators.ts +2 -2
- package/src/core/init/initial_seek_and_play.ts +1 -1
- package/src/core/init/initialize_directfile.ts +7 -4
- package/src/core/init/initialize_media_source.ts +7 -7
- package/src/core/init/link_drm_and_content.ts +1 -1
- package/src/core/init/load_on_media_source.ts +5 -5
- package/src/core/init/media_duration_updater.ts +4 -2
- package/src/core/init/stream_events_emitter/index.ts +0 -2
- package/src/core/init/stream_events_emitter/types.ts +1 -6
- package/src/core/init/types.ts +2 -2
- package/src/core/segment_buffers/garbage_collector.ts +1 -1
- package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +2 -1
- package/src/core/segment_buffers/implementations/text/html/parsers.ts +1 -1
- package/src/core/segment_buffers/implementations/text/native/parsers.ts +1 -1
- package/src/core/segment_buffers/inventory/buffered_history.ts +14 -10
- package/src/core/segment_buffers/inventory/segment_inventory.ts +28 -13
- package/src/core/stream/adaptation/adaptation_stream.ts +148 -123
- package/src/core/stream/adaptation/create_representation_estimator.ts +78 -68
- package/src/core/stream/adaptation/index.ts +2 -0
- package/src/core/stream/events_generators.ts +2 -2
- package/src/core/stream/orchestrator/active_period_emitter.ts +1 -5
- package/src/core/stream/orchestrator/stream_orchestrator.ts +26 -18
- package/src/core/stream/period/create_empty_adaptation_stream.ts +4 -3
- package/src/core/stream/period/get_adaptation_switch_strategy.ts +1 -16
- package/src/core/stream/period/index.ts +1 -1
- package/src/core/stream/period/period_stream.ts +26 -21
- package/src/core/stream/reload_after_switch.ts +13 -7
- package/src/core/stream/representation/append_segment_to_buffer.ts +4 -3
- package/src/core/stream/representation/downloading_queue.ts +7 -4
- package/src/core/stream/representation/force_garbage_collection.ts +10 -2
- package/src/core/stream/representation/get_needed_segments.ts +54 -17
- package/src/core/stream/representation/index.ts +2 -0
- package/src/core/stream/representation/push_init_segment.ts +4 -2
- package/src/core/stream/representation/push_media_segment.ts +4 -2
- package/src/core/stream/representation/representation_stream.ts +152 -131
- package/src/core/stream/types.ts +2 -2
- package/src/default_config.ts +3 -3
- package/src/errors/__tests__/format_error.test.ts +5 -6
- package/src/errors/format_error.ts +3 -4
- package/src/errors/index.ts +1 -4
- package/src/errors/is_known_error.ts +2 -6
- package/src/experimental/features/__tests__/dash_wasm.test.ts +3 -3
- package/src/experimental/features/__tests__/local.test.ts +1 -1
- package/src/experimental/features/__tests__/metaplaylist.test.ts +1 -1
- package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +5 -1
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/capabilities.test.ts +1 -1
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +5 -5
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +5 -5
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/defaultCodecFinder.test.ts +16 -9
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaContentType.test.ts +20 -10
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaDisplayInfos.test.ts +12 -6
- package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +4 -2
- package/src/features/__tests__/add_features.test.ts +3 -3
- package/src/features/__tests__/initialize_features.test.ts +46 -46
- package/src/index.ts +3 -1
- package/src/manifest/__tests__/adaptation.test.ts +69 -68
- package/src/manifest/__tests__/manifest.test.ts +32 -32
- package/src/manifest/__tests__/period.test.ts +73 -71
- package/src/manifest/__tests__/representation.test.ts +18 -17
- package/src/manifest/__tests__/update_period_in_place.test.ts +152 -152
- package/src/manifest/__tests__/update_periods.test.ts +20 -20
- package/src/manifest/adaptation.ts +8 -20
- package/src/manifest/index.ts +1 -9
- package/src/manifest/manifest.ts +7 -8
- package/src/manifest/period.ts +7 -8
- package/src/manifest/representation.ts +23 -4
- package/src/manifest/representation_index/types.ts +2 -2
- package/src/manifest/types.ts +0 -119
- package/src/minimal.ts +3 -1
- package/src/parsers/containers/isobmff/get_box.ts +24 -0
- package/src/parsers/containers/isobmff/take_pssh_out.ts +2 -1
- package/src/parsers/containers/isobmff/utils.ts +56 -1
- package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +19 -19
- package/src/parsers/manifest/dash/common/__tests__/get_clock_offset.test.ts +17 -17
- package/src/parsers/manifest/dash/common/__tests__/get_http_utc-timing_url.test.ts +6 -6
- package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +6 -6
- package/src/parsers/manifest/dash/common/indexes/base.ts +7 -1
- package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +9 -10
- package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +5 -6
- package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +6 -2
- package/src/parsers/manifest/dash/common/parse_representations.ts +1 -1
- package/src/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.ts +8 -0
- package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/ContentProtection.test.ts +15 -15
- package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/Initialization.test.ts +24 -24
- package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/SegmentTimeline.test.ts +20 -20
- package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/SegmentURL.test.ts +36 -36
- package/src/parsers/manifest/dash/node_parser_types.ts +2 -0
- package/src/parsers/manifest/dash/wasm-parser/rs/events.rs +2 -0
- package/src/parsers/manifest/dash/wasm-parser/rs/processor/mod.rs +37 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +2 -1
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.ts +4 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +2 -0
- package/src/parsers/manifest/metaplaylist/representation_index.ts +2 -2
- package/src/parsers/manifest/smooth/representation_index.ts +3 -5
- package/src/parsers/manifest/types.ts +5 -1
- package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +45 -45
- package/src/parsers/texttracks/ttml/html/create_element.ts +8 -5
- package/src/parsers/texttracks/ttml/native/parse_cue.ts +6 -2
- package/src/parsers/texttracks/ttml/parse_ttml.ts +13 -7
- package/src/parsers/texttracks/ttml/xml_utils.ts +166 -0
- package/src/parsers/texttracks/webvtt/__tests__/parse_cue_block.test.ts +5 -5
- package/src/parsers/texttracks/webvtt/html/__tests__/convert_payload_to_html.test.ts +2 -2
- package/src/parsers/texttracks/webvtt/html/__tests__/parse_style_block.test.ts +11 -11
- package/src/parsers/texttracks/webvtt/html/__tests__/parse_webvtt_to_div.test.ts +4 -4
- package/src/parsers/texttracks/webvtt/html/__tests__/to_html.test.ts +5 -5
- package/src/public_types.ts +714 -53
- package/src/transports/dash/segment_loader.ts +1 -1
- package/src/transports/dash/segment_parser.ts +10 -3
- package/src/transports/local/pipelines.ts +1 -1
- package/src/transports/local/segment_parser.ts +7 -2
- package/src/transports/metaplaylist/manifest_loader.ts +6 -6
- package/src/transports/smooth/isobmff/__tests__/create_boxes.test.ts +71 -73
- package/src/transports/smooth/segment_loader.ts +1 -1
- package/src/transports/types.ts +26 -85
- package/src/transports/utils/__tests__/check_isobmff_integrity.test.ts +36 -28
- package/src/transports/utils/call_custom_manifest_loader.ts +5 -3
- package/src/transports/utils/generate_manifest_loader.ts +5 -3
- package/src/transports/utils/get_isobmff_timing_infos.ts +11 -4
- package/src/typings/globals.d.ts +1 -0
- package/src/utils/__tests__/base64.test.ts +7 -7
- package/src/utils/__tests__/event_emitter.test.ts +4 -3
- package/src/utils/__tests__/flat_map.test.ts +5 -5
- package/src/utils/__tests__/logger.test.ts +75 -75
- package/src/utils/__tests__/object_assign.test.ts +2 -2
- package/src/utils/__tests__/starts_with.test.ts +5 -5
- package/src/utils/event_emitter.ts +12 -4
- package/src/utils/logger.ts +13 -1
- package/src/utils/reference.ts +66 -14
- package/src/utils/request/fetch.ts +1 -1
- package/src/utils/rx-next-tick.ts +43 -0
- package/src/utils/rx-retry_with_backoff.ts +2 -2
- package/src/utils/string_parsing.ts +8 -4
- package/src/utils/take_first_set.ts +5 -0
- package/src/utils/task_canceller.ts +3 -4
- package/dist/_esm5.processed/compat/when_media_source_open.js +0 -32
- package/dist/_esm5.processed/core/abr/abr_manager.d.ts +0 -79
- package/dist/_esm5.processed/core/abr/abr_manager.js +0 -117
- package/dist/_esm5.processed/core/abr/index.d.ts +0 -19
- package/dist/_esm5.processed/core/abr/representation_estimator.js +0 -243
- package/dist/_esm5.processed/parsers/texttracks/ttml/get_attribute_in_elements.d.ts +0 -23
- package/dist/_esm5.processed/parsers/texttracks/ttml/get_attribute_in_elements.js +0 -33
- package/dist/_esm5.processed/parsers/texttracks/ttml/get_parent_elements_by_tag_name.d.ts +0 -23
- package/dist/_esm5.processed/parsers/texttracks/ttml/get_parent_elements_by_tag_name.js +0 -39
- package/dist/_esm5.processed/parsers/texttracks/ttml/nodes.d.ts +0 -36
- package/dist/_esm5.processed/parsers/texttracks/ttml/nodes.js +0 -45
- package/src/compat/__tests__/when_media_source_open.test.ts +0 -109
- package/src/compat/when_media_source_open.ts +0 -39
- package/src/core/abr/abr_manager.ts +0 -196
- package/src/core/abr/index.ts +0 -40
- package/src/core/abr/representation_estimator.ts +0 -686
- package/src/core/init/.initialize_media_source.ts.un~ +0 -0
- package/src/parsers/texttracks/ttml/get_attribute_in_elements.ts +0 -36
- package/src/parsers/texttracks/ttml/get_parent_elements_by_tag_name.ts +0 -46
- package/src/parsers/texttracks/ttml/nodes.ts +0 -55
package/CHANGELOG.md
CHANGED
|
@@ -1,21 +1,34 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## v3.
|
|
3
|
+
## v3.28.0-dev.2022061700 (2022-06-17)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- Add `label` to audio, video and text track APIs (such as `getAvailableAudioTracks`) which gives a human-readable description of the corresponding track, if available in the Manifest [#1105, #1109]
|
|
8
|
+
- Automatically set the LogLevel to `"DEBUG"` if a global `__RX_PLAYER_DEBUG_MODE__` constant is set to `true`, to simplify debugging [#1115]
|
|
9
|
+
- TTML: Add support for percent based thickness for textOutline in TTML Subtitles [#1108]
|
|
4
10
|
|
|
5
11
|
### Bug fixes
|
|
6
12
|
|
|
7
13
|
- Use the first **compatible** codec of the current AdaptationSet when creating a SourceBuffer [#1094]
|
|
8
14
|
- DASH/DRM: Fix potential infinite rebuffering when a KID is not anounced in the MPD [#1113]
|
|
9
15
|
- DASH: Avoid infinite loop due to rounding errors while parsing multi-Periods MPDs [#1111, #1110]
|
|
10
|
-
-
|
|
11
|
-
-
|
|
16
|
+
- Fix issue with `maxVideoBufferSize` setting which could lead to too much data being buffered [#1125]
|
|
17
|
+
- Prevent possibility of requests loops and infinite rebuffering when a pushed segment is always completely and immediately garbage collected by the browser [#1123]
|
|
18
|
+
- DASH: Fix issues that could arise if a segment is calculated to start at a negative position [#1122]
|
|
12
19
|
- DASH: Fix possibility of wrong segments being requested when a SegmentTimeline in a given Period (whose Period@end is set) had an S@r set to `-1` at its end [#1098]
|
|
13
|
-
- DASH:
|
|
20
|
+
- DASH: If the first `<S>` has its S@t attribute not set, make as if it is set to `0` [#1118]
|
|
21
|
+
- Reload in the paused state when the action that lead to reloading was performed directly as the RxPlayer went into the `PAUSED` state [#1132]
|
|
14
22
|
|
|
15
23
|
### Other improvements
|
|
16
24
|
|
|
25
|
+
- If seeking after the last potential position, load last segments before ending [#1097]
|
|
17
26
|
- The duration set on the media element is now only relative to the current chosen tracks (it was previously relative to all potential track). This allows to seek later when switching e.g. to a longer video track [#1102]
|
|
18
27
|
- Errors coming from an HTMLMediaElement now have the browser's error message if it exists [#1112]
|
|
28
|
+
- TTML: Better handle EBU-TT subtitles by handling the `tt` XML namespace in our TTML parser [#1131]
|
|
29
|
+
- DRM: Information on persisted DRM sessions are now automatically updated to their last version when possible [#1096]
|
|
30
|
+
- Only log values which are relatively inexpensive to stringify to reduce the difference between debugging sessions and what is usually seen in production [#1116]
|
|
31
|
+
|
|
19
32
|
|
|
20
33
|
## v3.27.0 (2022-03-31)
|
|
21
34
|
|
package/FILES.md
CHANGED
|
@@ -22,7 +22,7 @@ a single directory or subdirectory, in alphabetical order.
|
|
|
22
22
|
- [src/typings/: Typescript typings](#src-typings)
|
|
23
23
|
- [src/utils/: The utils](#src-utils)
|
|
24
24
|
- [src/core/: The core directory](#core)
|
|
25
|
-
- [src/core/
|
|
25
|
+
- [src/core/adaptive/: The adaptive bitrate code](#core-abr)
|
|
26
26
|
- [src/core/api/: The API definition](#core-api)
|
|
27
27
|
- [src/core/stream/: Load the right segments](#core-stream)
|
|
28
28
|
- [src/core/decrypt/: Decryption management](#core-decrypt)
|
|
@@ -211,17 +211,17 @@ As this directory is versatile and complicated, it also deserves its own chapter
|
|
|
211
211
|
|
|
212
212
|
|
|
213
213
|
<a name="core-abr"></a>
|
|
214
|
-
### src/core/
|
|
214
|
+
### src/core/adaptive/: The adaptive bitrate code ##############################
|
|
215
215
|
|
|
216
|
-
Defines
|
|
217
|
-
player.
|
|
216
|
+
Defines functions which manages the adaptive streaming part of the player.
|
|
218
217
|
|
|
219
218
|
This manager takes various observables/options as inputs to record the current
|
|
220
219
|
situation of the player, give an opinion about the best media tracks to choose,
|
|
221
|
-
and provide methods allowing to get/set various
|
|
220
|
+
and provide methods allowing to get/set various adaptive-related options.
|
|
222
221
|
|
|
223
|
-
Despite containing several files and using several classes, only the
|
|
224
|
-
|
|
222
|
+
Despite containing several files and using several classes, only the
|
|
223
|
+
`AdaptiveRepresentationSelector` exported in `adaptive/index.js` should be
|
|
224
|
+
needed by the rest of the core.
|
|
225
225
|
This allows to isolate this complex part and facilitate future refactoring and
|
|
226
226
|
improvements.
|
|
227
227
|
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.
|
|
1
|
+
3.28.0-dev.2022061700
|
|
@@ -28,7 +28,7 @@ export default function tryToChangeSourceBufferType(sourceBuffer, codec) {
|
|
|
28
28
|
sourceBuffer.changeType(codec);
|
|
29
29
|
}
|
|
30
30
|
catch (e) {
|
|
31
|
-
log.warn("Could not call 'changeType' on the given SourceBuffer:", e);
|
|
31
|
+
log.warn("Could not call 'changeType' on the given SourceBuffer:", e instanceof Error ? e : "");
|
|
32
32
|
return false;
|
|
33
33
|
}
|
|
34
34
|
return true;
|
|
@@ -19,6 +19,8 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import { Observable } from "rxjs";
|
|
21
21
|
import { IEventEmitter } from "../utils/event_emitter";
|
|
22
|
+
import { IReadOnlySharedReference } from "../utils/reference";
|
|
23
|
+
import { CancellationSignal } from "../utils/task_canceller";
|
|
22
24
|
import { ICompatPictureInPictureWindow } from "./browser_compatibility_types";
|
|
23
25
|
export interface IEventEmitterLike {
|
|
24
26
|
addEventListener: (eventName: string, handler: () => void) => void;
|
|
@@ -26,12 +28,14 @@ export interface IEventEmitterLike {
|
|
|
26
28
|
}
|
|
27
29
|
export declare type IEventTargetLike = HTMLElement | IEventEmitterLike | IEventEmitter<unknown>;
|
|
28
30
|
/**
|
|
29
|
-
*
|
|
30
|
-
* `
|
|
31
|
-
*
|
|
32
|
-
* @
|
|
31
|
+
* Returns a reference:
|
|
32
|
+
* - Set to `true` when the current page is considered visible and active.
|
|
33
|
+
* - Set to `false` otherwise.
|
|
34
|
+
* @param {Object} stopListening - `CancellationSignal` allowing to free the
|
|
35
|
+
* resources allocated to update this value.
|
|
36
|
+
* @returns {Object}
|
|
33
37
|
*/
|
|
34
|
-
declare function
|
|
38
|
+
declare function getPageActivityRef(stopListening: CancellationSignal): IReadOnlySharedReference<boolean>;
|
|
35
39
|
export interface IPictureInPictureEvent {
|
|
36
40
|
isEnabled: boolean;
|
|
37
41
|
pipWindow: ICompatPictureInPictureWindow | null;
|
|
@@ -41,22 +45,27 @@ export interface IPictureInPictureEvent {
|
|
|
41
45
|
* @param {HTMLMediaElement} mediaElement
|
|
42
46
|
* @returns {Observable}
|
|
43
47
|
*/
|
|
44
|
-
declare function
|
|
48
|
+
declare function getPictureOnPictureStateRef(elt: HTMLMediaElement, stopListening: CancellationSignal): IReadOnlySharedReference<IPictureInPictureEvent>;
|
|
45
49
|
/**
|
|
46
|
-
* Returns
|
|
47
|
-
*
|
|
48
|
-
*
|
|
50
|
+
* Returns a reference:
|
|
51
|
+
* - Set to `true` when video is considered as visible (the page is visible
|
|
52
|
+
* and/or the Picture-In-Picture is activated).
|
|
53
|
+
* - Set to `false` otherwise.
|
|
54
|
+
* @param {Object} pipStatus
|
|
55
|
+
* @param {Object} stopListening - `CancellationSignal` allowing to free the
|
|
56
|
+
* resources reserved to listen to video visibility change.
|
|
49
57
|
* @returns {Observable}
|
|
50
58
|
*/
|
|
51
|
-
declare function
|
|
59
|
+
declare function getVideoVisibilityRef(pipStatus: IReadOnlySharedReference<IPictureInPictureEvent>, stopListening: CancellationSignal): IReadOnlySharedReference<boolean>;
|
|
52
60
|
/**
|
|
53
61
|
* Get video width from HTML video element, or video estimated dimensions
|
|
54
62
|
* when Picture-in-Picture is activated.
|
|
55
63
|
* @param {HTMLMediaElement} mediaElement
|
|
56
|
-
* @param {
|
|
57
|
-
* @
|
|
64
|
+
* @param {Object} pipStatusRef
|
|
65
|
+
* @param {Object} stopListening
|
|
66
|
+
* @returns {Object}
|
|
58
67
|
*/
|
|
59
|
-
declare function
|
|
68
|
+
declare function getVideoWidthRef(mediaElement: HTMLMediaElement, pipStatusRef: IReadOnlySharedReference<IPictureInPictureEvent>, stopListening: CancellationSignal): IReadOnlySharedReference<number>;
|
|
60
69
|
/**
|
|
61
70
|
* @param {HTMLMediaElement} mediaElement
|
|
62
71
|
* @returns {Observable}
|
|
@@ -87,11 +96,6 @@ declare const onTimeUpdate$: (element: IEventTargetLike) => Observable<Event>;
|
|
|
87
96
|
* @returns {Observable}
|
|
88
97
|
*/
|
|
89
98
|
declare const onFullscreenChange$: (element: IEventTargetLike) => Observable<Event>;
|
|
90
|
-
/**
|
|
91
|
-
* @param {HTMLMediaElement} mediaElement
|
|
92
|
-
* @returns {Observable}
|
|
93
|
-
*/
|
|
94
|
-
declare const onPlayPause$: (mediaElement: HTMLMediaElement) => Observable<Event>;
|
|
95
99
|
/**
|
|
96
100
|
* @param {HTMLMediaElement} mediaElement
|
|
97
101
|
* @returns {Observable}
|
|
@@ -147,4 +151,15 @@ declare const onKeyError$: (element: IEventTargetLike) => Observable<Event>;
|
|
|
147
151
|
* @returns {Observable}
|
|
148
152
|
*/
|
|
149
153
|
declare const onKeyStatusesChange$: (element: IEventTargetLike) => Observable<Event>;
|
|
150
|
-
|
|
154
|
+
/**
|
|
155
|
+
* Utilitary function allowing to add an event listener and remove it
|
|
156
|
+
* automatically once the given `CancellationSignal` emits.
|
|
157
|
+
* @param {EventTarget} elt - The element on which should be attached the event
|
|
158
|
+
* listener.
|
|
159
|
+
* @param {string} evt - The event you wish to listen to
|
|
160
|
+
* @param {Function} listener - The listener function
|
|
161
|
+
* @param {Object} stopListening - Removes the event listener once this signal
|
|
162
|
+
* emits
|
|
163
|
+
*/
|
|
164
|
+
declare function addEventListener(elt: IEventEmitterLike, evt: string, listener: (x?: unknown) => void, stopListening: CancellationSignal): void;
|
|
165
|
+
export { addEventListener, getPageActivityRef, getPictureOnPictureStateRef, getVideoVisibilityRef, getVideoWidthRef, onEncrypted$, onEnded$, onFullscreenChange$, onKeyAdded$, onKeyError$, onKeyMessage$, onKeyStatusesChange$, onLoadedMetadata$, onRemoveSourceBuffers$, onSeeked$, onSeeking$, onSourceClose$, onSourceEnded$, onSourceOpen$, onTextTrackChanges$, onTimeUpdate$, onUpdate$, };
|
|
@@ -17,10 +17,13 @@
|
|
|
17
17
|
* This file provides browser-agnostic event listeners under the form of
|
|
18
18
|
* RxJS Observables
|
|
19
19
|
*/
|
|
20
|
-
import { NEVER,
|
|
20
|
+
import { NEVER, fromEvent as observableFromEvent, merge as observableMerge, } from "rxjs";
|
|
21
21
|
import config from "../config";
|
|
22
22
|
import log from "../log";
|
|
23
23
|
import isNonEmptyString from "../utils/is_non_empty_string";
|
|
24
|
+
import isNullOrUndefined from "../utils/is_null_or_undefined";
|
|
25
|
+
import noop from "../utils/noop";
|
|
26
|
+
import createSharedReference from "../utils/reference";
|
|
24
27
|
import isNode from "./is_node";
|
|
25
28
|
import shouldFavourCustomSafariEME from "./should_favour_custom_safari_EME";
|
|
26
29
|
var BROWSER_PREFIXES = ["", "webkit", "moz", "ms"];
|
|
@@ -86,7 +89,7 @@ function compatibleListener(eventNames, prefixes) {
|
|
|
86
89
|
return observableFromEvent(element, mem);
|
|
87
90
|
}
|
|
88
91
|
else {
|
|
89
|
-
if (0 /* CURRENT_ENV */ === 1 /* DEV */) {
|
|
92
|
+
if (0 /* __ENVIRONMENT__.CURRENT_ENV */ === 1 /* __ENVIRONMENT__.DEV */) {
|
|
90
93
|
log.warn("compat: element ".concat(element.tagName) +
|
|
91
94
|
" does not support any of these events: " +
|
|
92
95
|
prefixedEvents.join(", "));
|
|
@@ -102,12 +105,14 @@ function compatibleListener(eventNames, prefixes) {
|
|
|
102
105
|
};
|
|
103
106
|
}
|
|
104
107
|
/**
|
|
105
|
-
* Returns
|
|
106
|
-
* -
|
|
107
|
-
* -
|
|
108
|
-
* @
|
|
108
|
+
* Returns a reference:
|
|
109
|
+
* - set to `true` when the document is visible
|
|
110
|
+
* - set to `false` when the document is hidden
|
|
111
|
+
* @param {Object} stopListening - `CancellationSignal` allowing to free the
|
|
112
|
+
* ressources allocated to update this value.
|
|
113
|
+
* @returns {Object}
|
|
109
114
|
*/
|
|
110
|
-
function
|
|
115
|
+
function getDocumentVisibilityRef(stopListening) {
|
|
111
116
|
var prefix;
|
|
112
117
|
var doc = document;
|
|
113
118
|
if (doc.hidden != null) {
|
|
@@ -126,26 +131,44 @@ function visibilityChange() {
|
|
|
126
131
|
"hidden";
|
|
127
132
|
var visibilityChangeEvent = isNonEmptyString(prefix) ? prefix + "visibilitychange" :
|
|
128
133
|
"visibilitychange";
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
134
|
+
var isHidden = document[hidden];
|
|
135
|
+
var ref = createSharedReference(isHidden);
|
|
136
|
+
addEventListener(document, visibilityChangeEvent, function () {
|
|
137
|
+
var isVisible = !(document[hidden]);
|
|
138
|
+
ref.setValueIfChanged(isVisible);
|
|
139
|
+
}, stopListening);
|
|
140
|
+
stopListening.register(function () {
|
|
141
|
+
ref.finish();
|
|
133
142
|
});
|
|
143
|
+
return ref;
|
|
134
144
|
}
|
|
135
145
|
/**
|
|
136
|
-
*
|
|
137
|
-
* `
|
|
138
|
-
*
|
|
139
|
-
* @
|
|
146
|
+
* Returns a reference:
|
|
147
|
+
* - Set to `true` when the current page is considered visible and active.
|
|
148
|
+
* - Set to `false` otherwise.
|
|
149
|
+
* @param {Object} stopListening - `CancellationSignal` allowing to free the
|
|
150
|
+
* resources allocated to update this value.
|
|
151
|
+
* @returns {Object}
|
|
140
152
|
*/
|
|
141
|
-
function
|
|
142
|
-
var
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
153
|
+
function getPageActivityRef(stopListening) {
|
|
154
|
+
var isDocVisibleRef = getDocumentVisibilityRef(stopListening);
|
|
155
|
+
var currentTimeout;
|
|
156
|
+
var ref = createSharedReference(true);
|
|
157
|
+
stopListening.register(function () {
|
|
158
|
+
clearTimeout(currentTimeout);
|
|
159
|
+
ref.finish();
|
|
160
|
+
});
|
|
161
|
+
isDocVisibleRef.onUpdate(function onDocVisibilityChange(isVisible) {
|
|
162
|
+
clearTimeout(currentTimeout); // clear potential previous timeout
|
|
163
|
+
if (!isVisible) {
|
|
164
|
+
var INACTIVITY_DELAY = config.getCurrent().INACTIVITY_DELAY;
|
|
165
|
+
currentTimeout = window.setTimeout(function () {
|
|
166
|
+
ref.setValueIfChanged(false);
|
|
167
|
+
}, INACTIVITY_DELAY);
|
|
146
168
|
}
|
|
147
|
-
|
|
148
|
-
})
|
|
169
|
+
ref.setValueIfChanged(true);
|
|
170
|
+
}, { clearSignal: stopListening, emitCurrentValue: true });
|
|
171
|
+
return ref;
|
|
149
172
|
}
|
|
150
173
|
/**
|
|
151
174
|
* Get video width from Picture-in-Picture window
|
|
@@ -164,73 +187,120 @@ function getVideoWidthFromPIPWindow(mediaElement, pipWindow) {
|
|
|
164
187
|
* @param {HTMLMediaElement} mediaElement
|
|
165
188
|
* @returns {Observable}
|
|
166
189
|
*/
|
|
167
|
-
function
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
.
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
190
|
+
function getPictureOnPictureStateRef(elt, stopListening) {
|
|
191
|
+
var mediaElement = elt;
|
|
192
|
+
if (mediaElement.webkitSupportsPresentationMode === true &&
|
|
193
|
+
typeof mediaElement.webkitSetPresentationMode === "function") {
|
|
194
|
+
var isWebKitPIPEnabled = mediaElement.webkitPresentationMode === "picture-in-picture";
|
|
195
|
+
var ref_1 = createSharedReference({
|
|
196
|
+
isEnabled: isWebKitPIPEnabled,
|
|
197
|
+
pipWindow: null,
|
|
198
|
+
});
|
|
199
|
+
addEventListener(mediaElement, "webkitpresentationmodechanged", function () {
|
|
200
|
+
var isEnabled = mediaElement.webkitPresentationMode === "picture-in-picture";
|
|
201
|
+
ref_1.setValue({ isEnabled: isEnabled, pipWindow: null });
|
|
202
|
+
}, stopListening);
|
|
203
|
+
stopListening.register(function () {
|
|
204
|
+
ref_1.finish();
|
|
205
|
+
});
|
|
206
|
+
return ref_1;
|
|
207
|
+
}
|
|
208
|
+
var isPIPEnabled = (document.pictureInPictureElement === mediaElement);
|
|
209
|
+
var ref = createSharedReference({ isEnabled: isPIPEnabled,
|
|
210
|
+
pipWindow: null });
|
|
211
|
+
addEventListener(mediaElement, "enterpictureinpicture", function (evt) {
|
|
212
|
+
var _a;
|
|
213
|
+
ref.setValue({
|
|
214
|
+
isEnabled: true,
|
|
215
|
+
pipWindow: (_a = evt.pictureInPictureWindow) !== null && _a !== void 0 ? _a : null,
|
|
216
|
+
});
|
|
217
|
+
}, stopListening);
|
|
218
|
+
addEventListener(mediaElement, "leavepictureinpicture", function () {
|
|
219
|
+
ref.setValue({ isEnabled: false, pipWindow: null });
|
|
220
|
+
}, stopListening);
|
|
221
|
+
stopListening.register(function () {
|
|
222
|
+
ref.finish();
|
|
189
223
|
});
|
|
224
|
+
return ref;
|
|
190
225
|
}
|
|
191
226
|
/**
|
|
192
|
-
* Returns
|
|
193
|
-
*
|
|
194
|
-
*
|
|
227
|
+
* Returns a reference:
|
|
228
|
+
* - Set to `true` when video is considered as visible (the page is visible
|
|
229
|
+
* and/or the Picture-In-Picture is activated).
|
|
230
|
+
* - Set to `false` otherwise.
|
|
231
|
+
* @param {Object} pipStatus
|
|
232
|
+
* @param {Object} stopListening - `CancellationSignal` allowing to free the
|
|
233
|
+
* resources reserved to listen to video visibility change.
|
|
195
234
|
* @returns {Observable}
|
|
196
235
|
*/
|
|
197
|
-
function
|
|
198
|
-
var
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
236
|
+
function getVideoVisibilityRef(pipStatus, stopListening) {
|
|
237
|
+
var isDocVisibleRef = getDocumentVisibilityRef(stopListening);
|
|
238
|
+
var currentTimeout;
|
|
239
|
+
var ref = createSharedReference(true);
|
|
240
|
+
stopListening.register(function () {
|
|
241
|
+
clearTimeout(currentTimeout);
|
|
242
|
+
ref.finish();
|
|
243
|
+
});
|
|
244
|
+
isDocVisibleRef.onUpdate(checkCurrentVisibility, { clearSignal: stopListening });
|
|
245
|
+
pipStatus.onUpdate(checkCurrentVisibility, { clearSignal: stopListening });
|
|
246
|
+
checkCurrentVisibility();
|
|
247
|
+
return ref;
|
|
248
|
+
function checkCurrentVisibility() {
|
|
249
|
+
if (pipStatus.getValue().isEnabled || isDocVisibleRef.getValue()) {
|
|
250
|
+
ref.setValueIfChanged(true);
|
|
203
251
|
}
|
|
204
|
-
|
|
205
|
-
.
|
|
206
|
-
|
|
252
|
+
else {
|
|
253
|
+
var INACTIVITY_DELAY = config.getCurrent().INACTIVITY_DELAY;
|
|
254
|
+
currentTimeout = window.setTimeout(function () {
|
|
255
|
+
ref.setValueIfChanged(false);
|
|
256
|
+
}, INACTIVITY_DELAY);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
207
259
|
}
|
|
208
260
|
/**
|
|
209
261
|
* Get video width from HTML video element, or video estimated dimensions
|
|
210
262
|
* when Picture-in-Picture is activated.
|
|
211
263
|
* @param {HTMLMediaElement} mediaElement
|
|
212
|
-
* @param {
|
|
213
|
-
* @
|
|
264
|
+
* @param {Object} pipStatusRef
|
|
265
|
+
* @param {Object} stopListening
|
|
266
|
+
* @returns {Object}
|
|
214
267
|
*/
|
|
215
|
-
function
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
268
|
+
function getVideoWidthRef(mediaElement, pipStatusRef, stopListening) {
|
|
269
|
+
var ref = createSharedReference(mediaElement.clientWidth * pixelRatio);
|
|
270
|
+
var clearPreviousEventListener = noop;
|
|
271
|
+
pipStatusRef.onUpdate(checkVideoWidth, { clearSignal: stopListening });
|
|
272
|
+
addEventListener(window, "resize", checkVideoWidth, stopListening);
|
|
273
|
+
var interval = window.setInterval(checkVideoWidth, 20000);
|
|
274
|
+
checkVideoWidth();
|
|
275
|
+
stopListening.register(function stopUpdatingVideoWidthRef() {
|
|
276
|
+
clearPreviousEventListener();
|
|
277
|
+
clearInterval(interval);
|
|
278
|
+
ref.finish();
|
|
279
|
+
});
|
|
280
|
+
return ref;
|
|
281
|
+
function checkVideoWidth() {
|
|
282
|
+
clearPreviousEventListener();
|
|
283
|
+
var pipStatus = pipStatusRef.getValue();
|
|
284
|
+
if (!pipStatus.isEnabled) {
|
|
285
|
+
ref.setValueIfChanged(mediaElement.clientWidth * pixelRatio);
|
|
224
286
|
}
|
|
225
|
-
else if (
|
|
226
|
-
var pipWindow_1 =
|
|
287
|
+
else if (!isNullOrUndefined(pipStatus.pipWindow)) {
|
|
288
|
+
var pipWindow_1 = pipStatus.pipWindow;
|
|
227
289
|
var firstWidth = getVideoWidthFromPIPWindow(mediaElement, pipWindow_1);
|
|
228
|
-
|
|
290
|
+
var onPipResize_1 = function () {
|
|
291
|
+
ref.setValueIfChanged(getVideoWidthFromPIPWindow(mediaElement, pipWindow_1) * pixelRatio);
|
|
292
|
+
};
|
|
293
|
+
pipWindow_1.addEventListener("resize", onPipResize_1);
|
|
294
|
+
clearPreviousEventListener = function () {
|
|
295
|
+
pipWindow_1.removeEventListener("resize", onPipResize_1);
|
|
296
|
+
clearPreviousEventListener = noop;
|
|
297
|
+
};
|
|
298
|
+
ref.setValueIfChanged(firstWidth * pixelRatio);
|
|
229
299
|
}
|
|
230
300
|
else {
|
|
231
|
-
|
|
301
|
+
ref.setValueIfChanged(Infinity);
|
|
232
302
|
}
|
|
233
|
-
}
|
|
303
|
+
}
|
|
234
304
|
}
|
|
235
305
|
/**
|
|
236
306
|
* @param {HTMLMediaElement} mediaElement
|
|
@@ -264,13 +334,6 @@ var onTimeUpdate$ = compatibleListener(["timeupdate"]);
|
|
|
264
334
|
var onFullscreenChange$ = compatibleListener(["fullscreenchange", "FullscreenChange"],
|
|
265
335
|
// On IE11, fullscreen change events is called MSFullscreenChange
|
|
266
336
|
BROWSER_PREFIXES.concat("MS"));
|
|
267
|
-
/**
|
|
268
|
-
* @param {HTMLMediaElement} mediaElement
|
|
269
|
-
* @returns {Observable}
|
|
270
|
-
*/
|
|
271
|
-
var onPlayPause$ = function (mediaElement) {
|
|
272
|
-
return observableMerge(compatibleListener(["play"])(mediaElement), compatibleListener(["pause"])(mediaElement));
|
|
273
|
-
};
|
|
274
337
|
/**
|
|
275
338
|
* @param {HTMLMediaElement} mediaElement
|
|
276
339
|
* @returns {Observable}
|
|
@@ -329,4 +392,20 @@ var onKeyError$ = compatibleListener(["keyerror", "error"]);
|
|
|
329
392
|
* @returns {Observable}
|
|
330
393
|
*/
|
|
331
394
|
var onKeyStatusesChange$ = compatibleListener(["keystatuseschange"]);
|
|
332
|
-
|
|
395
|
+
/**
|
|
396
|
+
* Utilitary function allowing to add an event listener and remove it
|
|
397
|
+
* automatically once the given `CancellationSignal` emits.
|
|
398
|
+
* @param {EventTarget} elt - The element on which should be attached the event
|
|
399
|
+
* listener.
|
|
400
|
+
* @param {string} evt - The event you wish to listen to
|
|
401
|
+
* @param {Function} listener - The listener function
|
|
402
|
+
* @param {Object} stopListening - Removes the event listener once this signal
|
|
403
|
+
* emits
|
|
404
|
+
*/
|
|
405
|
+
function addEventListener(elt, evt, listener, stopListening) {
|
|
406
|
+
elt.addEventListener(evt, listener);
|
|
407
|
+
stopListening.register(function () {
|
|
408
|
+
elt.removeEventListener(evt, listener);
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
export { addEventListener, getPageActivityRef, getPictureOnPictureStateRef, getVideoVisibilityRef, getVideoWidthRef, onEncrypted$, onEnded$, onFullscreenChange$, onKeyAdded$, onKeyError$, onKeyMessage$, onKeyStatusesChange$, onLoadedMetadata$, onRemoveSourceBuffers$, onSeeked$, onSeeking$, onSourceClose$, onSourceEnded$, onSourceOpen$, onTextTrackChanges$, onTimeUpdate$, onUpdate$, };
|
|
@@ -38,5 +38,4 @@ import shouldUnsetMediaKeys from "./should_unset_media_keys";
|
|
|
38
38
|
import shouldValidateMetadata from "./should_validate_metadata";
|
|
39
39
|
import shouldWaitForDataBeforeLoaded from "./should_wait_for_data_before_loaded";
|
|
40
40
|
import whenLoadedMetadata$ from "./when_loaded_metadata";
|
|
41
|
-
|
|
42
|
-
export { addClassName, addTextTrack, canPatchISOBMFFSegment, clearElementSrc, closeSession, CustomMediaKeySystemAccess, events, exitFullscreen, generateKeyRequest, getInitData, getStartDate, hasEMEAPIs, ICompatTextTrack, ICompatVTTCue, ICustomMediaKeySession, ICustomMediaKeySystemAccess, ICustomMediaKeys, ICompatSourceBuffer, isCodecSupported, isFullscreen, isNode, isOffline, isVTTCue, loadSession, makeVTTCue, MediaSource_, onHeightWidthChange, play, requestFullscreen, requestMediaKeySystemAccess, setElementSrc$, setMediaKeys, shouldReloadMediaSourceOnDecipherabilityUpdate, shouldRenewMediaKeys, shouldUnsetMediaKeys, shouldValidateMetadata, shouldWaitForDataBeforeLoaded, tryToChangeSourceBufferType, whenLoadedMetadata$, whenMediaSourceOpen$, };
|
|
41
|
+
export { addClassName, addTextTrack, canPatchISOBMFFSegment, clearElementSrc, closeSession, CustomMediaKeySystemAccess, events, exitFullscreen, generateKeyRequest, getInitData, getStartDate, hasEMEAPIs, ICompatTextTrack, ICompatVTTCue, ICustomMediaKeySession, ICustomMediaKeySystemAccess, ICustomMediaKeys, ICompatSourceBuffer, isCodecSupported, isFullscreen, isNode, isOffline, isVTTCue, loadSession, makeVTTCue, MediaSource_, onHeightWidthChange, play, requestFullscreen, requestMediaKeySystemAccess, setElementSrc$, setMediaKeys, shouldReloadMediaSourceOnDecipherabilityUpdate, shouldRenewMediaKeys, shouldUnsetMediaKeys, shouldValidateMetadata, shouldWaitForDataBeforeLoaded, tryToChangeSourceBufferType, whenLoadedMetadata$, };
|
|
@@ -40,9 +40,8 @@ import shouldUnsetMediaKeys from "./should_unset_media_keys";
|
|
|
40
40
|
import shouldValidateMetadata from "./should_validate_metadata";
|
|
41
41
|
import shouldWaitForDataBeforeLoaded from "./should_wait_for_data_before_loaded";
|
|
42
42
|
import whenLoadedMetadata$ from "./when_loaded_metadata";
|
|
43
|
-
import whenMediaSourceOpen$ from "./when_media_source_open";
|
|
44
43
|
// TODO To remove. This seems to be the only side-effect done on import, which
|
|
45
44
|
// we would prefer to disallow (both for the understandability of the code and
|
|
46
45
|
// to better exploit tree shaking.
|
|
47
46
|
patchWebkitSourceBuffer();
|
|
48
|
-
export { addClassName, addTextTrack, canPatchISOBMFFSegment, clearElementSrc, closeSession, CustomMediaKeySystemAccess, events, exitFullscreen, generateKeyRequest, getInitData, getStartDate, hasEMEAPIs, isCodecSupported, isFullscreen, isNode, isOffline, isVTTCue, loadSession, makeVTTCue, MediaSource_, onHeightWidthChange, play, requestFullscreen, requestMediaKeySystemAccess, setElementSrc$, setMediaKeys, shouldReloadMediaSourceOnDecipherabilityUpdate, shouldRenewMediaKeys, shouldUnsetMediaKeys, shouldValidateMetadata, shouldWaitForDataBeforeLoaded, tryToChangeSourceBufferType, whenLoadedMetadata$,
|
|
47
|
+
export { addClassName, addTextTrack, canPatchISOBMFFSegment, clearElementSrc, closeSession, CustomMediaKeySystemAccess, events, exitFullscreen, generateKeyRequest, getInitData, getStartDate, hasEMEAPIs, isCodecSupported, isFullscreen, isNode, isOffline, isVTTCue, loadSession, makeVTTCue, MediaSource_, onHeightWidthChange, play, requestFullscreen, requestMediaKeySystemAccess, setElementSrc$, setMediaKeys, shouldReloadMediaSourceOnDecipherabilityUpdate, shouldRenewMediaKeys, shouldUnsetMediaKeys, shouldValidateMetadata, shouldWaitForDataBeforeLoaded, tryToChangeSourceBufferType, whenLoadedMetadata$, };
|