rx-player 4.0.0-dev.2023111400 → 4.0.0-dev.2023121900
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 +20 -60
- package/FILES.md +1 -1
- package/README.md +2 -33
- package/VERSION +1 -1
- package/dist/_esm5.processed/core/api/debug/buffer_graph.js +2 -6
- package/dist/_esm5.processed/core/api/debug/modules/general_info.js +20 -10
- package/dist/_esm5.processed/core/api/option_utils.d.ts +0 -2
- package/dist/_esm5.processed/core/api/option_utils.js +0 -6
- package/dist/_esm5.processed/core/api/public_api.d.ts +1 -2
- package/dist/_esm5.processed/core/api/public_api.js +9 -17
- package/dist/_esm5.processed/core/init/directfile_content_initializer.js +1 -1
- package/dist/_esm5.processed/core/init/media_source_content_initializer.js +3 -14
- package/dist/_esm5.processed/core/init/utils/rebuffering_controller.d.ts +2 -36
- package/dist/_esm5.processed/core/init/utils/rebuffering_controller.js +2 -82
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +9 -2
- package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
- package/dist/_esm5.processed/core/segment_buffers/inventory/index.d.ts +2 -2
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +25 -8
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +19 -10
- package/dist/_esm5.processed/core/stream/representation/utils/get_buffer_status.js +1 -1
- package/dist/_esm5.processed/core/stream/representation/utils/get_needed_segments.js +1 -1
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_extent.js +1 -8
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_line_height.js +2 -1
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_origin.js +1 -9
- package/dist/_esm5.processed/public_types.d.ts +2 -0
- package/dist/commonjs/compat/is_codec_supported.js +22 -1
- package/dist/commonjs/config.d.ts +2 -1
- package/dist/commonjs/core/adaptive/adaptive_representation_selector.d.ts +2 -19
- package/dist/commonjs/core/adaptive/adaptive_representation_selector.js +2 -2
- package/dist/commonjs/core/adaptive/network_analyzer.js +3 -3
- package/dist/commonjs/core/api/debug/buffer_graph.js +2 -6
- package/dist/commonjs/core/api/debug/modules/general_info.js +17 -10
- package/dist/commonjs/core/api/index.d.ts +1 -1
- package/dist/commonjs/core/api/option_utils.d.ts +2 -0
- package/dist/commonjs/core/api/option_utils.js +2 -3
- package/dist/commonjs/core/api/playback_observer.d.ts +128 -8
- package/dist/commonjs/core/api/playback_observer.js +217 -64
- package/dist/commonjs/core/api/public_api.d.ts +9 -0
- package/dist/commonjs/core/api/public_api.js +41 -16
- package/dist/commonjs/core/api/utils.js +1 -1
- package/dist/commonjs/core/decrypt/get_media_keys.js +2 -6
- package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.d.ts +6 -0
- package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.js +11 -3
- package/dist/commonjs/core/fetchers/segment/segment_fetcher.d.ts +8 -1
- package/dist/commonjs/core/fetchers/segment/segment_fetcher.js +8 -4
- package/dist/commonjs/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -0
- package/dist/commonjs/core/fetchers/utils/schedule_request.js +1 -1
- package/dist/commonjs/core/init/directfile_content_initializer.js +29 -8
- package/dist/commonjs/core/init/media_source_content_initializer.d.ts +6 -0
- package/dist/commonjs/core/init/media_source_content_initializer.js +32 -20
- package/dist/commonjs/core/init/utils/content_time_boundaries_observer.d.ts +13 -12
- package/dist/commonjs/core/init/utils/content_time_boundaries_observer.js +17 -19
- package/dist/commonjs/core/init/utils/create_stream_playback_observer.d.ts +1 -5
- package/dist/commonjs/core/init/utils/create_stream_playback_observer.js +16 -14
- package/dist/commonjs/core/init/utils/get_initial_time.d.ts +17 -3
- package/dist/commonjs/core/init/utils/get_initial_time.js +9 -7
- package/dist/commonjs/core/init/utils/initial_seek_and_play.d.ts +9 -11
- package/dist/commonjs/core/init/utils/initial_seek_and_play.js +121 -91
- package/dist/commonjs/core/init/utils/rebuffering_controller.js +27 -70
- package/dist/commonjs/core/init/utils/stream_events_emitter/stream_events_emitter.js +4 -2
- package/dist/commonjs/core/segment_buffers/garbage_collector.js +1 -2
- package/dist/commonjs/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +9 -2
- package/dist/commonjs/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +1 -1
- package/dist/commonjs/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +1 -1
- package/dist/commonjs/core/segment_buffers/index.d.ts +2 -2
- package/dist/commonjs/core/segment_buffers/inventory/index.d.ts +2 -2
- package/dist/commonjs/core/segment_buffers/inventory/segment_inventory.d.ts +25 -8
- package/dist/commonjs/core/segment_buffers/inventory/segment_inventory.js +19 -10
- package/dist/commonjs/core/stream/adaptation/get_representations_switch_strategy.d.ts +2 -2
- package/dist/commonjs/core/stream/adaptation/get_representations_switch_strategy.js +16 -9
- package/dist/commonjs/core/stream/orchestrator/stream_orchestrator.js +14 -18
- package/dist/commonjs/core/stream/period/period_stream.js +5 -8
- package/dist/commonjs/core/stream/period/types.d.ts +2 -3
- package/dist/commonjs/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +4 -5
- package/dist/commonjs/core/stream/period/utils/get_adaptation_switch_strategy.js +17 -13
- package/dist/commonjs/core/stream/representation/representation_stream.js +3 -4
- package/dist/commonjs/core/stream/representation/types.d.ts +2 -2
- package/dist/commonjs/core/stream/representation/utils/append_segment_to_buffer.js +11 -12
- package/dist/commonjs/core/stream/representation/utils/get_buffer_status.js +4 -4
- package/dist/commonjs/core/stream/representation/utils/get_needed_segments.js +1 -1
- package/dist/commonjs/default_config.d.ts +12 -16
- package/dist/commonjs/default_config.js +21 -16
- package/dist/commonjs/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -1
- package/dist/commonjs/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +2 -0
- package/dist/commonjs/manifest/adaptation.js +2 -1
- package/dist/commonjs/manifest/representation_index/static.d.ts +1 -1
- package/dist/commonjs/manifest/representation_index/static.js +2 -2
- package/dist/commonjs/manifest/representation_index/types.d.ts +4 -4
- package/dist/commonjs/parsers/manifest/dash/common/indexes/base.d.ts +6 -1
- package/dist/commonjs/parsers/manifest/dash/common/indexes/base.js +4 -3
- package/dist/commonjs/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +5 -2
- package/dist/commonjs/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +15 -4
- package/dist/commonjs/parsers/manifest/dash/common/indexes/index.d.ts +5 -5
- package/dist/commonjs/parsers/manifest/dash/common/indexes/list.d.ts +1 -1
- package/dist/commonjs/parsers/manifest/dash/common/indexes/list.js +2 -2
- package/dist/commonjs/parsers/manifest/dash/common/indexes/template.d.ts +12 -5
- package/dist/commonjs/parsers/manifest/dash/common/indexes/template.js +42 -29
- package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/index.d.ts +2 -1
- package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +99 -6
- package/dist/commonjs/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +250 -51
- package/dist/commonjs/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +40 -17
- package/dist/commonjs/parsers/manifest/dash/common/manifest_bounds_calculator.js +38 -18
- package/dist/commonjs/parsers/manifest/dash/common/parse_adaptation_sets.js +13 -10
- package/dist/commonjs/parsers/manifest/dash/common/parse_mpd.js +27 -14
- package/dist/commonjs/parsers/manifest/dash/common/parse_periods.d.ts +1 -1
- package/dist/commonjs/parsers/manifest/dash/common/parse_periods.js +17 -18
- package/dist/commonjs/parsers/manifest/dash/common/parse_representation_index.d.ts +19 -6
- package/dist/commonjs/parsers/manifest/dash/common/parse_representation_index.js +21 -8
- package/dist/commonjs/parsers/manifest/dash/common/parse_representations.js +7 -3
- package/dist/commonjs/parsers/manifest/local/representation_index.d.ts +1 -1
- package/dist/commonjs/parsers/manifest/local/representation_index.js +3 -3
- package/dist/commonjs/parsers/manifest/metaplaylist/representation_index.d.ts +1 -1
- package/dist/commonjs/parsers/manifest/metaplaylist/representation_index.js +2 -2
- package/dist/commonjs/parsers/manifest/smooth/representation_index.d.ts +5 -5
- package/dist/commonjs/parsers/manifest/smooth/representation_index.js +25 -9
- package/dist/commonjs/parsers/manifest/utils/index_helpers.js +1 -1
- package/dist/commonjs/parsers/texttracks/ttml/html/apply_line_height.js +2 -1
- package/dist/commonjs/public_types.d.ts +107 -36
- package/dist/commonjs/transports/dash/init_segment_loader.js +10 -5
- package/dist/commonjs/transports/dash/manifest_parser.js +5 -2
- package/dist/commonjs/transports/dash/segment_loader.js +2 -1
- package/dist/commonjs/transports/dash/text_loader.js +2 -0
- package/dist/commonjs/transports/metaplaylist/manifest_loader.js +2 -1
- package/dist/commonjs/transports/metaplaylist/pipelines.js +4 -1
- package/dist/commonjs/transports/smooth/pipelines.js +4 -2
- package/dist/commonjs/transports/smooth/segment_loader.js +2 -1
- package/dist/commonjs/transports/types.d.ts +12 -0
- package/dist/commonjs/transports/utils/generate_manifest_loader.js +6 -3
- package/dist/commonjs/utils/request/fetch.d.ts +6 -0
- package/dist/commonjs/utils/request/fetch.js +29 -8
- package/dist/commonjs/utils/request/xhr.d.ts +11 -5
- package/dist/commonjs/utils/request/xhr.js +29 -8
- package/dist/es2017/compat/is_codec_supported.js +22 -1
- package/dist/es2017/config.d.ts +2 -1
- package/dist/es2017/core/adaptive/adaptive_representation_selector.d.ts +2 -19
- package/dist/es2017/core/adaptive/adaptive_representation_selector.js +2 -2
- package/dist/es2017/core/adaptive/network_analyzer.js +3 -3
- package/dist/es2017/core/api/debug/buffer_graph.js +2 -6
- package/dist/es2017/core/api/debug/modules/general_info.js +17 -10
- package/dist/es2017/core/api/index.d.ts +1 -1
- package/dist/es2017/core/api/option_utils.d.ts +2 -0
- package/dist/es2017/core/api/option_utils.js +2 -3
- package/dist/es2017/core/api/playback_observer.d.ts +128 -8
- package/dist/es2017/core/api/playback_observer.js +217 -66
- package/dist/es2017/core/api/public_api.d.ts +9 -0
- package/dist/es2017/core/api/public_api.js +40 -15
- package/dist/es2017/core/api/utils.js +1 -1
- package/dist/es2017/core/decrypt/get_media_keys.js +2 -6
- package/dist/es2017/core/fetchers/manifest/manifest_fetcher.d.ts +6 -0
- package/dist/es2017/core/fetchers/manifest/manifest_fetcher.js +11 -3
- package/dist/es2017/core/fetchers/segment/segment_fetcher.d.ts +8 -1
- package/dist/es2017/core/fetchers/segment/segment_fetcher.js +8 -4
- package/dist/es2017/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -0
- package/dist/es2017/core/fetchers/utils/schedule_request.js +1 -1
- package/dist/es2017/core/init/directfile_content_initializer.js +31 -8
- package/dist/es2017/core/init/media_source_content_initializer.d.ts +6 -0
- package/dist/es2017/core/init/media_source_content_initializer.js +34 -22
- package/dist/es2017/core/init/utils/content_time_boundaries_observer.d.ts +13 -12
- package/dist/es2017/core/init/utils/content_time_boundaries_observer.js +17 -17
- package/dist/es2017/core/init/utils/create_stream_playback_observer.d.ts +1 -5
- package/dist/es2017/core/init/utils/create_stream_playback_observer.js +16 -14
- package/dist/es2017/core/init/utils/get_initial_time.d.ts +17 -3
- package/dist/es2017/core/init/utils/get_initial_time.js +9 -7
- package/dist/es2017/core/init/utils/initial_seek_and_play.d.ts +9 -11
- package/dist/es2017/core/init/utils/initial_seek_and_play.js +120 -91
- package/dist/es2017/core/init/utils/rebuffering_controller.js +27 -70
- package/dist/es2017/core/init/utils/stream_events_emitter/stream_events_emitter.js +4 -2
- package/dist/es2017/core/segment_buffers/garbage_collector.js +1 -2
- package/dist/es2017/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +9 -2
- package/dist/es2017/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +1 -1
- package/dist/es2017/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +1 -1
- package/dist/es2017/core/segment_buffers/index.d.ts +2 -2
- package/dist/es2017/core/segment_buffers/inventory/index.d.ts +2 -2
- package/dist/es2017/core/segment_buffers/inventory/segment_inventory.d.ts +25 -8
- package/dist/es2017/core/segment_buffers/inventory/segment_inventory.js +19 -10
- package/dist/es2017/core/stream/adaptation/get_representations_switch_strategy.d.ts +2 -2
- package/dist/es2017/core/stream/adaptation/get_representations_switch_strategy.js +16 -9
- package/dist/es2017/core/stream/orchestrator/stream_orchestrator.js +16 -18
- package/dist/es2017/core/stream/period/period_stream.js +4 -7
- package/dist/es2017/core/stream/period/types.d.ts +2 -3
- package/dist/es2017/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +4 -5
- package/dist/es2017/core/stream/period/utils/get_adaptation_switch_strategy.js +17 -13
- package/dist/es2017/core/stream/representation/representation_stream.js +3 -4
- package/dist/es2017/core/stream/representation/types.d.ts +2 -2
- package/dist/es2017/core/stream/representation/utils/append_segment_to_buffer.js +1 -2
- package/dist/es2017/core/stream/representation/utils/get_buffer_status.js +4 -4
- package/dist/es2017/core/stream/representation/utils/get_needed_segments.js +1 -1
- package/dist/es2017/default_config.d.ts +12 -16
- package/dist/es2017/default_config.js +21 -16
- package/dist/es2017/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -1
- package/dist/es2017/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +2 -0
- package/dist/es2017/manifest/adaptation.js +2 -1
- package/dist/es2017/manifest/representation_index/static.d.ts +1 -1
- package/dist/es2017/manifest/representation_index/static.js +2 -2
- package/dist/es2017/manifest/representation_index/types.d.ts +4 -4
- package/dist/es2017/parsers/manifest/dash/common/indexes/base.d.ts +6 -1
- package/dist/es2017/parsers/manifest/dash/common/indexes/base.js +4 -3
- package/dist/es2017/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +5 -2
- package/dist/es2017/parsers/manifest/dash/common/indexes/get_segments_from_timeline.js +15 -4
- package/dist/es2017/parsers/manifest/dash/common/indexes/index.d.ts +5 -5
- package/dist/es2017/parsers/manifest/dash/common/indexes/list.d.ts +1 -1
- package/dist/es2017/parsers/manifest/dash/common/indexes/list.js +2 -2
- package/dist/es2017/parsers/manifest/dash/common/indexes/template.d.ts +12 -5
- package/dist/es2017/parsers/manifest/dash/common/indexes/template.js +40 -27
- package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/index.d.ts +2 -1
- package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +99 -6
- package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +246 -51
- package/dist/es2017/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +40 -17
- package/dist/es2017/parsers/manifest/dash/common/manifest_bounds_calculator.js +38 -18
- package/dist/es2017/parsers/manifest/dash/common/parse_adaptation_sets.js +11 -8
- package/dist/es2017/parsers/manifest/dash/common/parse_mpd.js +27 -13
- package/dist/es2017/parsers/manifest/dash/common/parse_periods.d.ts +1 -1
- package/dist/es2017/parsers/manifest/dash/common/parse_periods.js +13 -16
- package/dist/es2017/parsers/manifest/dash/common/parse_representation_index.d.ts +19 -6
- package/dist/es2017/parsers/manifest/dash/common/parse_representation_index.js +10 -8
- package/dist/es2017/parsers/manifest/dash/common/parse_representations.js +7 -3
- package/dist/es2017/parsers/manifest/local/representation_index.d.ts +1 -1
- package/dist/es2017/parsers/manifest/local/representation_index.js +3 -3
- package/dist/es2017/parsers/manifest/metaplaylist/representation_index.d.ts +1 -1
- package/dist/es2017/parsers/manifest/metaplaylist/representation_index.js +2 -2
- package/dist/es2017/parsers/manifest/smooth/representation_index.d.ts +5 -5
- package/dist/es2017/parsers/manifest/smooth/representation_index.js +25 -9
- package/dist/es2017/parsers/manifest/utils/index_helpers.js +1 -1
- package/dist/es2017/parsers/texttracks/ttml/html/apply_line_height.js +2 -1
- package/dist/es2017/public_types.d.ts +107 -36
- package/dist/es2017/transports/dash/init_segment_loader.js +5 -0
- package/dist/es2017/transports/dash/manifest_parser.js +3 -0
- package/dist/es2017/transports/dash/segment_loader.js +1 -0
- package/dist/es2017/transports/dash/text_loader.js +2 -0
- package/dist/es2017/transports/metaplaylist/manifest_loader.js +1 -0
- package/dist/es2017/transports/metaplaylist/pipelines.js +4 -1
- package/dist/es2017/transports/smooth/pipelines.js +2 -0
- package/dist/es2017/transports/smooth/segment_loader.js +1 -0
- package/dist/es2017/transports/types.d.ts +12 -0
- package/dist/es2017/transports/utils/generate_manifest_loader.js +3 -0
- package/dist/es2017/utils/request/fetch.d.ts +6 -0
- package/dist/es2017/utils/request/fetch.js +29 -8
- package/dist/es2017/utils/request/xhr.d.ts +11 -5
- package/dist/es2017/utils/request/xhr.js +30 -9
- package/dist/mpd-parser.wasm +0 -0
- package/dist/rx-player.js +1335 -812
- package/dist/rx-player.min.js +1 -1
- package/package.json +7 -4
- package/scripts/canal-release.patch +78 -0
- package/scripts/make-dev-releases +65 -0
- package/scripts/update-version +7 -0
- package/sonar-project.properties +1 -1
- package/src/compat/is_codec_supported.ts +23 -1
- package/src/core/adaptive/adaptive_representation_selector.ts +4 -21
- package/src/core/adaptive/network_analyzer.ts +3 -3
- package/src/core/api/debug/buffer_graph.ts +2 -5
- package/src/core/api/debug/modules/general_info.ts +15 -10
- package/src/core/api/index.ts +1 -0
- package/src/core/api/option_utils.ts +3 -3
- package/src/core/api/playback_observer.ts +327 -107
- package/src/core/api/public_api.ts +42 -14
- package/src/core/api/utils.ts +3 -1
- package/src/core/decrypt/get_media_keys.ts +2 -8
- package/src/core/fetchers/manifest/manifest_fetcher.ts +21 -3
- package/src/core/fetchers/segment/segment_fetcher.ts +19 -5
- package/src/core/fetchers/segment/segment_fetcher_creator.ts +1 -0
- package/src/core/fetchers/utils/schedule_request.ts +1 -1
- package/src/core/init/directfile_content_initializer.ts +31 -15
- package/src/core/init/media_source_content_initializer.ts +40 -27
- package/src/core/init/utils/content_time_boundaries_observer.ts +24 -23
- package/src/core/init/utils/create_stream_playback_observer.ts +19 -20
- package/src/core/init/utils/get_initial_time.ts +25 -12
- package/src/core/init/utils/initial_seek_and_play.ts +140 -108
- package/src/core/init/utils/rebuffering_controller.ts +32 -77
- package/src/core/init/utils/stream_events_emitter/stream_events_emitter.ts +5 -2
- package/src/core/segment_buffers/garbage_collector.ts +1 -1
- package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +10 -2
- package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +1 -1
- package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +1 -1
- package/src/core/segment_buffers/index.ts +2 -0
- package/src/core/segment_buffers/inventory/index.ts +2 -0
- package/src/core/segment_buffers/inventory/segment_inventory.ts +49 -17
- package/src/core/stream/adaptation/get_representations_switch_strategy.ts +21 -12
- package/src/core/stream/orchestrator/stream_orchestrator.ts +14 -19
- package/src/core/stream/period/period_stream.ts +7 -8
- package/src/core/stream/period/types.ts +2 -3
- package/src/core/stream/period/utils/get_adaptation_switch_strategy.ts +21 -15
- package/src/core/stream/representation/representation_stream.ts +3 -5
- package/src/core/stream/representation/types.ts +2 -2
- package/src/core/stream/representation/utils/append_segment_to_buffer.ts +1 -1
- package/src/core/stream/representation/utils/get_buffer_status.ts +5 -4
- package/src/core/stream/representation/utils/get_needed_segments.ts +2 -2
- package/src/default_config.ts +22 -17
- package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +3 -1
- package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +2 -0
- package/src/manifest/adaptation.ts +2 -1
- package/src/manifest/representation_index/static.ts +2 -2
- package/src/manifest/representation_index/types.ts +4 -4
- package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +182 -36
- package/src/parsers/manifest/dash/common/indexes/base.ts +12 -4
- package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +19 -5
- package/src/parsers/manifest/dash/common/indexes/index.ts +16 -4
- package/src/parsers/manifest/dash/common/indexes/list.ts +2 -2
- package/src/parsers/manifest/dash/common/indexes/template.ts +52 -31
- package/src/parsers/manifest/dash/common/indexes/timeline/index.ts +4 -1
- package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +366 -60
- package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +63 -25
- package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +10 -4
- package/src/parsers/manifest/dash/common/parse_mpd.ts +28 -15
- package/src/parsers/manifest/dash/common/parse_periods.ts +12 -17
- package/src/parsers/manifest/dash/common/parse_representation_index.ts +50 -26
- package/src/parsers/manifest/dash/common/parse_representations.ts +9 -3
- package/src/parsers/manifest/local/representation_index.ts +3 -3
- package/src/parsers/manifest/metaplaylist/representation_index.ts +2 -2
- package/src/parsers/manifest/smooth/representation_index.ts +23 -9
- package/src/parsers/manifest/utils/__tests__/get_first_time_from_adaptations.test.ts +1 -1
- package/src/parsers/manifest/utils/__tests__/get_last_time_from_adaptation.test.ts +1 -1
- package/src/parsers/manifest/utils/index_helpers.ts +1 -1
- package/src/parsers/texttracks/ttml/html/apply_line_height.ts +3 -1
- package/src/public_types.ts +108 -36
- package/src/transports/dash/init_segment_loader.ts +5 -0
- package/src/transports/dash/manifest_parser.ts +6 -0
- package/src/transports/dash/segment_loader.ts +1 -0
- package/src/transports/dash/text_loader.ts +2 -0
- package/src/transports/metaplaylist/manifest_loader.ts +1 -0
- package/src/transports/metaplaylist/pipelines.ts +4 -1
- package/src/transports/smooth/pipelines.ts +2 -0
- package/src/transports/smooth/segment_loader.ts +1 -0
- package/src/transports/types.ts +12 -0
- package/src/transports/utils/generate_manifest_loader.ts +3 -0
- package/src/utils/request/fetch.ts +35 -8
- package/src/utils/request/xhr.ts +45 -14
- package/dist/commonjs/parsers/manifest/utils/is_segment_still_available.d.ts +0 -29
- package/dist/commonjs/parsers/manifest/utils/is_segment_still_available.js +0 -54
- package/dist/es2017/parsers/manifest/utils/is_segment_still_available.d.ts +0 -29
- package/dist/es2017/parsers/manifest/utils/is_segment_still_available.js +0 -51
- package/src/parsers/manifest/utils/is_segment_still_available.ts +0 -58
- package/src/typings/object-assign.d.ts +0 -48
|
@@ -116,7 +116,7 @@ var Player = /** @class */ (function (_super) {
|
|
|
116
116
|
// Workaround to support Firefox autoplay on FF 42.
|
|
117
117
|
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
|
|
118
118
|
videoElement.preload = "auto";
|
|
119
|
-
_this.version = /* PLAYER_VERSION */ "4.0.0-dev.
|
|
119
|
+
_this.version = /* PLAYER_VERSION */ "4.0.0-dev.2023121900";
|
|
120
120
|
_this.log = log_1.default;
|
|
121
121
|
_this.state = "STOPPED";
|
|
122
122
|
_this.videoElement = videoElement;
|
|
@@ -321,7 +321,7 @@ var Player = /** @class */ (function (_super) {
|
|
|
321
321
|
*/
|
|
322
322
|
Player.prototype._priv_initializeContentPlayback = function (options) {
|
|
323
323
|
var _this = this;
|
|
324
|
-
var _a, _b, _c, _d;
|
|
324
|
+
var _a, _b, _c, _d, _e, _f;
|
|
325
325
|
var autoPlay = options.autoPlay, defaultAudioTrackSwitchingMode = options.defaultAudioTrackSwitchingMode, enableFastSwitching = options.enableFastSwitching, initialManifest = options.initialManifest, keySystems = options.keySystems, lowLatencyMode = options.lowLatencyMode, minimumManifestUpdateInterval = options.minimumManifestUpdateInterval, requestConfig = options.requestConfig, onCodecSwitch = options.onCodecSwitch, startAt = options.startAt, transport = options.transport, checkMediaSegmentIntegrity = options.checkMediaSegmentIntegrity, manifestLoader = options.manifestLoader, referenceDateTime = options.referenceDateTime, representationFilter = options.representationFilter, segmentLoader = options.segmentLoader, serverSyncInfos = options.serverSyncInfos, __priv_manifestUpdateUrl = options.__priv_manifestUpdateUrl, __priv_patchLastSegmentInSidx = options.__priv_patchLastSegmentInSidx, url = options.url;
|
|
326
326
|
// Perform multiple checks on the given options
|
|
327
327
|
if (this.videoElement === null) {
|
|
@@ -347,7 +347,8 @@ var Player = /** @class */ (function (_super) {
|
|
|
347
347
|
var transportPipelines = transportFn({ lowLatencyMode: lowLatencyMode, checkMediaSegmentIntegrity: checkMediaSegmentIntegrity, manifestLoader: manifestLoader, referenceDateTime: referenceDateTime, representationFilter: representationFilter, segmentLoader: segmentLoader, serverSyncInfos: serverSyncInfos, __priv_manifestUpdateUrl: __priv_manifestUpdateUrl, __priv_patchLastSegmentInSidx: __priv_patchLastSegmentInSidx });
|
|
348
348
|
/** Interface used to load and refresh the Manifest. */
|
|
349
349
|
var manifestRequestSettings = { lowLatencyMode: lowLatencyMode, maxRetry: (_a = requestConfig.manifest) === null || _a === void 0 ? void 0 : _a.maxRetry,
|
|
350
|
-
requestTimeout: (_b = requestConfig.manifest) === null || _b === void 0 ? void 0 : _b.timeout,
|
|
350
|
+
requestTimeout: (_b = requestConfig.manifest) === null || _b === void 0 ? void 0 : _b.timeout,
|
|
351
|
+
connectionTimeout: (_c = requestConfig.manifest) === null || _c === void 0 ? void 0 : _c.connectionTimeout, minimumManifestUpdateInterval: minimumManifestUpdateInterval, initialManifest: initialManifest };
|
|
351
352
|
var relyOnVideoVisibilityAndSize = (0, can_rely_on_video_visibility_and_size_1.default)();
|
|
352
353
|
var throttlers = { throttleBitrate: {},
|
|
353
354
|
limitResolution: {} };
|
|
@@ -390,8 +391,9 @@ var Player = /** @class */ (function (_super) {
|
|
|
390
391
|
{ textTrackMode: "html",
|
|
391
392
|
textTrackElement: options.textTrackElement };
|
|
392
393
|
var bufferOptions = (0, object_assign_1.default)({ enableFastSwitching: enableFastSwitching, onCodecSwitch: onCodecSwitch }, this._priv_bufferOptions);
|
|
393
|
-
var segmentRequestOptions = { lowLatencyMode: lowLatencyMode, maxRetry: (
|
|
394
|
-
requestTimeout: (
|
|
394
|
+
var segmentRequestOptions = { lowLatencyMode: lowLatencyMode, maxRetry: (_d = requestConfig.segment) === null || _d === void 0 ? void 0 : _d.maxRetry,
|
|
395
|
+
requestTimeout: (_e = requestConfig.segment) === null || _e === void 0 ? void 0 : _e.timeout,
|
|
396
|
+
connectionTimeout: (_f = requestConfig.segment) === null || _f === void 0 ? void 0 : _f.connectionTimeout };
|
|
395
397
|
initializer = new features_1.default.mediaSourceInit({
|
|
396
398
|
adaptiveOptions: adaptiveOptions,
|
|
397
399
|
autoPlay: autoPlay,
|
|
@@ -531,12 +533,12 @@ var Player = /** @class */ (function (_super) {
|
|
|
531
533
|
case "ENDED":
|
|
532
534
|
_this._priv_reloadingMetadata.reloadInPause = true;
|
|
533
535
|
_this._priv_reloadingMetadata.reloadPosition =
|
|
534
|
-
playbackObserver.getReference().getValue().position;
|
|
536
|
+
playbackObserver.getReference().getValue().position.getPolled();
|
|
535
537
|
break;
|
|
536
538
|
default:
|
|
537
539
|
var o = playbackObserver.getReference().getValue();
|
|
538
540
|
_this._priv_reloadingMetadata.reloadInPause = o.paused;
|
|
539
|
-
_this._priv_reloadingMetadata.reloadPosition = o.position;
|
|
541
|
+
_this._priv_reloadingMetadata.reloadPosition = o.position.getWanted();
|
|
540
542
|
break;
|
|
541
543
|
}
|
|
542
544
|
};
|
|
@@ -1543,6 +1545,27 @@ var Player = /** @class */ (function (_super) {
|
|
|
1543
1545
|
}
|
|
1544
1546
|
return null;
|
|
1545
1547
|
};
|
|
1548
|
+
/**
|
|
1549
|
+
* Returns the current position for live contents.
|
|
1550
|
+
*
|
|
1551
|
+
* Returns `null` if no content is loaded or if the current loaded content is
|
|
1552
|
+
* not considered as a live content.
|
|
1553
|
+
* Returns `undefined` if that live position is currently unknown.
|
|
1554
|
+
* @returns {number}
|
|
1555
|
+
*/
|
|
1556
|
+
Player.prototype.getLivePosition = function () {
|
|
1557
|
+
if (this._priv_contentInfos === null) {
|
|
1558
|
+
return null;
|
|
1559
|
+
}
|
|
1560
|
+
var _a = this._priv_contentInfos, isDirectFile = _a.isDirectFile, manifest = _a.manifest;
|
|
1561
|
+
if (isDirectFile) {
|
|
1562
|
+
return undefined;
|
|
1563
|
+
}
|
|
1564
|
+
if ((manifest === null || manifest === void 0 ? void 0 : manifest.isLive) !== true) {
|
|
1565
|
+
return null;
|
|
1566
|
+
}
|
|
1567
|
+
return manifest.getLivePosition();
|
|
1568
|
+
};
|
|
1546
1569
|
/**
|
|
1547
1570
|
* Get maximum seek-able position.
|
|
1548
1571
|
* @returns {number}
|
|
@@ -1587,9 +1610,11 @@ var Player = /** @class */ (function (_super) {
|
|
|
1587
1610
|
}
|
|
1588
1611
|
var segmentBufferStatus = this._priv_contentInfos
|
|
1589
1612
|
.segmentBuffersStore.getStatus(bufferType);
|
|
1590
|
-
|
|
1591
|
-
segmentBufferStatus.value.
|
|
1592
|
-
|
|
1613
|
+
if (segmentBufferStatus.type === "initialized") {
|
|
1614
|
+
segmentBufferStatus.value.synchronizeInventory();
|
|
1615
|
+
return segmentBufferStatus.value.getInventory();
|
|
1616
|
+
}
|
|
1617
|
+
return null;
|
|
1593
1618
|
};
|
|
1594
1619
|
/**
|
|
1595
1620
|
* /!\ For tools use only! Do not touch!
|
|
@@ -2061,7 +2086,7 @@ var Player = /** @class */ (function (_super) {
|
|
|
2061
2086
|
var maximumPosition = manifest !== null ? manifest.getMaximumSafePosition() :
|
|
2062
2087
|
undefined;
|
|
2063
2088
|
var positionData = {
|
|
2064
|
-
position: observation.position,
|
|
2089
|
+
position: observation.position.getPolled(),
|
|
2065
2090
|
duration: observation.duration,
|
|
2066
2091
|
playbackRate: observation.playbackRate,
|
|
2067
2092
|
maximumPosition: maximumPosition,
|
|
@@ -2073,18 +2098,18 @@ var Player = /** @class */ (function (_super) {
|
|
|
2073
2098
|
};
|
|
2074
2099
|
if (manifest !== null &&
|
|
2075
2100
|
manifest.isLive &&
|
|
2076
|
-
observation.position > 0) {
|
|
2101
|
+
observation.position.getPolled() > 0) {
|
|
2077
2102
|
var ast = (_b = manifest.availabilityStartTime) !== null && _b !== void 0 ? _b : 0;
|
|
2078
|
-
positionData.wallClockTime = observation.position + ast;
|
|
2103
|
+
positionData.wallClockTime = observation.position.getPolled() + ast;
|
|
2079
2104
|
var livePosition = manifest.getLivePosition();
|
|
2080
2105
|
if (livePosition !== undefined) {
|
|
2081
|
-
positionData.liveGap = livePosition - observation.position;
|
|
2106
|
+
positionData.liveGap = livePosition - observation.position.getPolled();
|
|
2082
2107
|
}
|
|
2083
2108
|
}
|
|
2084
2109
|
else if (isDirectFile && this.videoElement !== null) {
|
|
2085
2110
|
var startDate = (0, compat_1.getStartDate)(this.videoElement);
|
|
2086
2111
|
if (startDate !== undefined) {
|
|
2087
|
-
positionData.wallClockTime = startDate + observation.position;
|
|
2112
|
+
positionData.wallClockTime = startDate + observation.position.getPolled();
|
|
2088
2113
|
}
|
|
2089
2114
|
}
|
|
2090
2115
|
this.trigger("positionUpdate", positionData);
|
|
@@ -2232,5 +2257,5 @@ var Player = /** @class */ (function (_super) {
|
|
|
2232
2257
|
};
|
|
2233
2258
|
return Player;
|
|
2234
2259
|
}(event_emitter_1.default));
|
|
2235
|
-
Player.version = /* PLAYER_VERSION */ "4.0.0-dev.
|
|
2260
|
+
Player.version = /* PLAYER_VERSION */ "4.0.0-dev.2023121900";
|
|
2236
2261
|
exports.default = Player;
|
|
@@ -34,7 +34,7 @@ function emitSeekEvents(mediaElement, playbackObserver, onSeeking, onSeeked, can
|
|
|
34
34
|
if (cancelSignal.isCancelled() || mediaElement === null) {
|
|
35
35
|
return;
|
|
36
36
|
}
|
|
37
|
-
var wasSeeking = playbackObserver.getReference().getValue().seeking
|
|
37
|
+
var wasSeeking = playbackObserver.getReference().getValue().seeking === 2 /* SeekingState.External */;
|
|
38
38
|
if (wasSeeking) {
|
|
39
39
|
onSeeking();
|
|
40
40
|
if (cancelSignal.isCancelled()) {
|
|
@@ -66,13 +66,9 @@ var server_certificate_store_1 = require("./utils/server_certificate_store");
|
|
|
66
66
|
* @returns {Object|null}
|
|
67
67
|
*/
|
|
68
68
|
function createPersistentSessionsStorage(keySystemOptions) {
|
|
69
|
-
if ((0, is_null_or_undefined_1.default)(keySystemOptions.persistentLicenseConfig)) {
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
69
|
var persistentLicenseConfig = keySystemOptions.persistentLicenseConfig;
|
|
73
|
-
if (
|
|
74
|
-
|
|
75
|
-
"persistent license.");
|
|
70
|
+
if ((0, is_null_or_undefined_1.default)(persistentLicenseConfig)) {
|
|
71
|
+
return null;
|
|
76
72
|
}
|
|
77
73
|
log_1.default.debug("DRM: Set the given license storage");
|
|
78
74
|
return new persistent_sessions_store_1.default(persistentLicenseConfig);
|
|
@@ -171,6 +171,12 @@ export interface IManifestFetcherSettings {
|
|
|
171
171
|
* `undefined` will lead to a default, large, timeout being used.
|
|
172
172
|
*/
|
|
173
173
|
requestTimeout: number | undefined;
|
|
174
|
+
/**
|
|
175
|
+
* Connection timeout, in milliseconds, after which the request is canceled
|
|
176
|
+
* if the responses headers has not being received.
|
|
177
|
+
* Do not set or set to "undefined" to disable it.
|
|
178
|
+
*/
|
|
179
|
+
connectionTimeout: number | undefined;
|
|
174
180
|
/** Limit the frequency of Manifest updates. */
|
|
175
181
|
minimumManifestUpdateInterval: number;
|
|
176
182
|
/**
|
|
@@ -82,7 +82,6 @@ var errors_1 = require("../../../errors");
|
|
|
82
82
|
var log_1 = require("../../../log");
|
|
83
83
|
var manifest_1 = require("../../../manifest");
|
|
84
84
|
var event_emitter_1 = require("../../../utils/event_emitter");
|
|
85
|
-
var is_null_or_undefined_1 = require("../../../utils/is_null_or_undefined");
|
|
86
85
|
var monotonic_timestamp_1 = require("../../../utils/monotonic_timestamp");
|
|
87
86
|
var noop_1 = require("../../../utils/noop");
|
|
88
87
|
var task_canceller_1 = require("../../../utils/task_canceller");
|
|
@@ -206,13 +205,22 @@ var ManifestFetcher = /** @class */ (function (_super) {
|
|
|
206
205
|
*/
|
|
207
206
|
function callLoaderWithRetries(manifestUrl) {
|
|
208
207
|
var loadManifest = pipelines.loadManifest;
|
|
209
|
-
var requestTimeout = (
|
|
208
|
+
var requestTimeout = (settings.requestTimeout === undefined) ?
|
|
210
209
|
config_1.default.getCurrent().DEFAULT_REQUEST_TIMEOUT :
|
|
211
210
|
settings.requestTimeout;
|
|
211
|
+
var connectionTimeout = (settings.connectionTimeout === undefined) ?
|
|
212
|
+
config_1.default.getCurrent().DEFAULT_CONNECTION_TIMEOUT :
|
|
213
|
+
settings.connectionTimeout;
|
|
212
214
|
if (requestTimeout < 0) {
|
|
213
215
|
requestTimeout = undefined;
|
|
214
216
|
}
|
|
215
|
-
|
|
217
|
+
if (connectionTimeout < 0) {
|
|
218
|
+
connectionTimeout = undefined;
|
|
219
|
+
}
|
|
220
|
+
var callLoader = function () { return loadManifest(manifestUrl, {
|
|
221
|
+
timeout: requestTimeout,
|
|
222
|
+
connectionTimeout: connectionTimeout,
|
|
223
|
+
}, cancelSignal); };
|
|
216
224
|
return (0, schedule_request_1.scheduleRequestPromise)(callLoader, backoffSettings, cancelSignal);
|
|
217
225
|
}
|
|
218
226
|
var cancelSignal, settings, pipelines, requestUrl, backoffSettings, response_1, err_1;
|
|
@@ -135,14 +135,21 @@ export interface ISegmentFetcherOptions {
|
|
|
135
135
|
* To set to `-1` for no timeout.
|
|
136
136
|
*/
|
|
137
137
|
requestTimeout: number;
|
|
138
|
+
/**
|
|
139
|
+
* Connection timeout, in milliseconds, after which the request is canceled
|
|
140
|
+
* if the responses headers has not being received.
|
|
141
|
+
* Do not set or set to "undefined" to disable it.
|
|
142
|
+
*/
|
|
143
|
+
connectionTimeout: number | undefined;
|
|
138
144
|
}
|
|
139
145
|
/**
|
|
140
146
|
* @param {string} bufferType
|
|
141
147
|
* @param {Object}
|
|
142
148
|
* @returns {Object}
|
|
143
149
|
*/
|
|
144
|
-
export declare function getSegmentFetcherOptions({ maxRetry, lowLatencyMode, requestTimeout }: {
|
|
150
|
+
export declare function getSegmentFetcherOptions({ maxRetry, lowLatencyMode, requestTimeout, connectionTimeout }: {
|
|
145
151
|
maxRetry?: number | undefined;
|
|
146
152
|
requestTimeout?: number | undefined;
|
|
153
|
+
connectionTimeout?: number | undefined;
|
|
147
154
|
lowLatencyMode: boolean;
|
|
148
155
|
}): ISegmentFetcherOptions;
|
|
@@ -95,6 +95,8 @@ function createSegmentFetcher(bufferType, pipeline, cdnPrioritizer, lifecycleCal
|
|
|
95
95
|
var requestOptions = {
|
|
96
96
|
timeout: options.requestTimeout < 0 ? undefined :
|
|
97
97
|
options.requestTimeout,
|
|
98
|
+
connectionTimeout: options.connectionTimeout === undefined ? undefined :
|
|
99
|
+
options.connectionTimeout < 0 ? undefined : options.connectionTimeout,
|
|
98
100
|
};
|
|
99
101
|
/**
|
|
100
102
|
* Cache audio and video initialization segments.
|
|
@@ -308,14 +310,16 @@ exports.default = createSegmentFetcher;
|
|
|
308
310
|
* @returns {Object}
|
|
309
311
|
*/
|
|
310
312
|
function getSegmentFetcherOptions(_a) {
|
|
311
|
-
var maxRetry = _a.maxRetry, lowLatencyMode = _a.lowLatencyMode, requestTimeout = _a.requestTimeout;
|
|
312
|
-
var _b = config_1.default.getCurrent(), DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR = _b.DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR, DEFAULT_REQUEST_TIMEOUT = _b.DEFAULT_REQUEST_TIMEOUT, INITIAL_BACKOFF_DELAY_BASE = _b.INITIAL_BACKOFF_DELAY_BASE, MAX_BACKOFF_DELAY_BASE = _b.MAX_BACKOFF_DELAY_BASE;
|
|
313
|
+
var maxRetry = _a.maxRetry, lowLatencyMode = _a.lowLatencyMode, requestTimeout = _a.requestTimeout, connectionTimeout = _a.connectionTimeout;
|
|
314
|
+
var _b = config_1.default.getCurrent(), DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR = _b.DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR, DEFAULT_REQUEST_TIMEOUT = _b.DEFAULT_REQUEST_TIMEOUT, DEFAULT_CONNECTION_TIMEOUT = _b.DEFAULT_CONNECTION_TIMEOUT, INITIAL_BACKOFF_DELAY_BASE = _b.INITIAL_BACKOFF_DELAY_BASE, MAX_BACKOFF_DELAY_BASE = _b.MAX_BACKOFF_DELAY_BASE;
|
|
313
315
|
return { maxRetry: maxRetry !== null && maxRetry !== void 0 ? maxRetry : DEFAULT_MAX_REQUESTS_RETRY_ON_ERROR,
|
|
314
316
|
baseDelay: lowLatencyMode ? INITIAL_BACKOFF_DELAY_BASE.LOW_LATENCY :
|
|
315
317
|
INITIAL_BACKOFF_DELAY_BASE.REGULAR,
|
|
316
318
|
maxDelay: lowLatencyMode ? MAX_BACKOFF_DELAY_BASE.LOW_LATENCY :
|
|
317
319
|
MAX_BACKOFF_DELAY_BASE.REGULAR,
|
|
318
|
-
requestTimeout: (
|
|
319
|
-
requestTimeout
|
|
320
|
+
requestTimeout: (requestTimeout === undefined) ? DEFAULT_REQUEST_TIMEOUT :
|
|
321
|
+
requestTimeout,
|
|
322
|
+
connectionTimeout: (connectionTimeout === undefined) ?
|
|
323
|
+
DEFAULT_CONNECTION_TIMEOUT : connectionTimeout, };
|
|
320
324
|
}
|
|
321
325
|
exports.getSegmentFetcherOptions = getSegmentFetcherOptions;
|
|
@@ -329,7 +329,7 @@ function scheduleRequestWithCdns(cdns, cdnPrioritizer, performRequest, options,
|
|
|
329
329
|
* attempts already done for that resource.
|
|
330
330
|
*
|
|
331
331
|
* Returns `undefined` if there's no Cdn left to request the resource.
|
|
332
|
-
* @param {Array.<Object>}
|
|
332
|
+
* @param {Array.<Object>} sortedCdns
|
|
333
333
|
* @returns {Object|undefined}
|
|
334
334
|
*/
|
|
335
335
|
function getPrioritaryRequestableCdnFromSortedList(sortedCdns) {
|
|
@@ -37,6 +37,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
37
37
|
var compat_1 = require("../../compat");
|
|
38
38
|
var log_1 = require("../../log");
|
|
39
39
|
var assert_1 = require("../../utils/assert");
|
|
40
|
+
var is_null_or_undefined_1 = require("../../utils/is_null_or_undefined");
|
|
40
41
|
var reference_1 = require("../../utils/reference");
|
|
41
42
|
var task_canceller_1 = require("../../utils/task_canceller");
|
|
42
43
|
var types_1 = require("./types");
|
|
@@ -179,7 +180,11 @@ var DirectFileContentInitializer = /** @class */ (function (_super) {
|
|
|
179
180
|
log_1.default.debug("Init: Initial time calculated:", initTime);
|
|
180
181
|
return initTime;
|
|
181
182
|
};
|
|
182
|
-
(0, initial_seek_and_play_1.default)(mediaElement, playbackObserver
|
|
183
|
+
(0, initial_seek_and_play_1.default)({ mediaElement: mediaElement, playbackObserver: playbackObserver, startTime: initialTime,
|
|
184
|
+
mustAutoPlay: autoPlay,
|
|
185
|
+
onWarning: function (err) { return _this.trigger("warning", err); },
|
|
186
|
+
isDirectfile: true }, cancelSignal)
|
|
187
|
+
.autoPlayResult
|
|
183
188
|
.then(function () {
|
|
184
189
|
return (0, get_loaded_reference_1.default)(playbackObserver, mediaElement, true, cancelSignal)
|
|
185
190
|
.onUpdate(function (isLoaded, stopListening) {
|
|
@@ -205,10 +210,10 @@ exports.default = DirectFileContentInitializer;
|
|
|
205
210
|
* @returns {number}
|
|
206
211
|
*/
|
|
207
212
|
function getDirectFileInitialTime(mediaElement, startAt) {
|
|
208
|
-
if (
|
|
213
|
+
if ((0, is_null_or_undefined_1.default)(startAt)) {
|
|
209
214
|
return 0;
|
|
210
215
|
}
|
|
211
|
-
if (startAt.position
|
|
216
|
+
if (!(0, is_null_or_undefined_1.default)(startAt.position)) {
|
|
212
217
|
return startAt.position;
|
|
213
218
|
}
|
|
214
219
|
else if (startAt.wallClockTime != null) {
|
|
@@ -218,15 +223,31 @@ function getDirectFileInitialTime(mediaElement, startAt) {
|
|
|
218
223
|
return startAt.fromFirstPosition;
|
|
219
224
|
}
|
|
220
225
|
var duration = mediaElement.duration;
|
|
221
|
-
if (duration == null || !isFinite(duration)) {
|
|
222
|
-
log_1.default.warn("startAt.fromLastPosition set but no known duration, " +
|
|
223
|
-
"beginning at 0.");
|
|
224
|
-
return 0;
|
|
225
|
-
}
|
|
226
226
|
if (typeof startAt.fromLastPosition === "number") {
|
|
227
|
+
if ((0, is_null_or_undefined_1.default)(duration) || !isFinite(duration)) {
|
|
228
|
+
log_1.default.warn("startAt.fromLastPosition set but no known duration, " +
|
|
229
|
+
"beginning at 0.");
|
|
230
|
+
return 0;
|
|
231
|
+
}
|
|
227
232
|
return Math.max(0, duration + startAt.fromLastPosition);
|
|
228
233
|
}
|
|
234
|
+
else if (typeof startAt.fromLivePosition === "number") {
|
|
235
|
+
var livePosition = mediaElement.seekable.length > 0 ?
|
|
236
|
+
mediaElement.seekable.end(0) :
|
|
237
|
+
duration;
|
|
238
|
+
if ((0, is_null_or_undefined_1.default)(livePosition)) {
|
|
239
|
+
log_1.default.warn("startAt.fromLivePosition set but no known live position, " +
|
|
240
|
+
"beginning at 0.");
|
|
241
|
+
return 0;
|
|
242
|
+
}
|
|
243
|
+
return Math.max(0, livePosition + startAt.fromLivePosition);
|
|
244
|
+
}
|
|
229
245
|
else if (startAt.percentage != null) {
|
|
246
|
+
if ((0, is_null_or_undefined_1.default)(duration) || !isFinite(duration)) {
|
|
247
|
+
log_1.default.warn("startAt.percentage set but no known duration, " +
|
|
248
|
+
"beginning at 0.");
|
|
249
|
+
return 0;
|
|
250
|
+
}
|
|
230
251
|
var percentage = startAt.percentage;
|
|
231
252
|
if (percentage >= 100) {
|
|
232
253
|
return duration;
|
|
@@ -160,6 +160,12 @@ export interface IInitializeArguments {
|
|
|
160
160
|
* `-1` indicates no timeout.
|
|
161
161
|
*/
|
|
162
162
|
requestTimeout: number | undefined;
|
|
163
|
+
/**
|
|
164
|
+
* Amount of time, in milliseconds, after which a request that hasn't receive
|
|
165
|
+
* the headers and status code should be aborted and optionnaly retried,
|
|
166
|
+
* depending on the maxRetry configuration.
|
|
167
|
+
*/
|
|
168
|
+
connectionTimeout: number | undefined;
|
|
163
169
|
/** Maximum number of time a request on error will be retried. */
|
|
164
170
|
maxRetry: number | undefined;
|
|
165
171
|
};
|
|
@@ -341,7 +341,10 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
341
341
|
cancelSignal.register(function () {
|
|
342
342
|
segmentBuffersStore.disposeAll();
|
|
343
343
|
});
|
|
344
|
-
var _b = (0, initial_seek_and_play_1.default)(
|
|
344
|
+
var _b = (0, initial_seek_and_play_1.default)({ mediaElement: mediaElement, playbackObserver: playbackObserver, startTime: initialTime,
|
|
345
|
+
mustAutoPlay: autoPlay,
|
|
346
|
+
onWarning: function (err) { _this.trigger("warning", err); },
|
|
347
|
+
isDirectfile: false }, cancelSignal), autoPlayResult = _b.autoPlayResult, initialPlayPerformed = _b.initialPlayPerformed;
|
|
345
348
|
if (cancelSignal.isCancelled()) {
|
|
346
349
|
return;
|
|
347
350
|
}
|
|
@@ -361,14 +364,19 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
361
364
|
});
|
|
362
365
|
}
|
|
363
366
|
}, { clearSignal: cancelSignal, emitCurrentValue: true });
|
|
364
|
-
var streamObserver = (0, create_stream_playback_observer_1.default)(playbackObserver, { autoPlay: autoPlay, manifest: manifest, initialPlayPerformed: initialPlayPerformed,
|
|
367
|
+
var streamObserver = (0, create_stream_playback_observer_1.default)(playbackObserver, { autoPlay: autoPlay, manifest: manifest, initialPlayPerformed: initialPlayPerformed, speed: speed }, cancelSignal);
|
|
365
368
|
var rebufferingController = this._createRebufferingController(playbackObserver, manifest, segmentBuffersStore, speed, cancelSignal);
|
|
366
369
|
rebufferingController.addEventListener("needsReload", function () {
|
|
370
|
+
var position;
|
|
371
|
+
var lastObservation = playbackObserver.getReference().getValue();
|
|
372
|
+
if (lastObservation.position.isAwaitingFuturePosition()) {
|
|
373
|
+
position = lastObservation.position.getWanted();
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
position = playbackObserver.getCurrentTime();
|
|
377
|
+
}
|
|
367
378
|
// NOTE couldn't both be always calculated at event destination?
|
|
368
379
|
// Maybe there are exceptions?
|
|
369
|
-
var position = initialSeekPerformed.getValue() ?
|
|
370
|
-
playbackObserver.getCurrentTime() :
|
|
371
|
-
initialTime;
|
|
372
380
|
var autoplay = initialPlayPerformed.getValue() ?
|
|
373
381
|
!playbackObserver.getIsPaused() :
|
|
374
382
|
autoPlay;
|
|
@@ -428,10 +436,10 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
428
436
|
if (
|
|
429
437
|
// Data is buffered around the current position
|
|
430
438
|
obs.currentRange !== null ||
|
|
431
|
-
// Or, for whatever reason,
|
|
432
|
-
obs.position > seekedTime + 0.1) {
|
|
439
|
+
// Or, for whatever reason, we have no buffer but we're already advancing
|
|
440
|
+
obs.position.getPolled() > seekedTime + 0.1) {
|
|
433
441
|
stopListening();
|
|
434
|
-
playbackObserver.setCurrentTime(obs.position + 0.001);
|
|
442
|
+
playbackObserver.setCurrentTime(obs.position.getWanted() + 0.001);
|
|
435
443
|
}
|
|
436
444
|
}, { includeLastObservation: false, clearSignal: cancelSignal });
|
|
437
445
|
},
|
|
@@ -507,10 +515,12 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
507
515
|
return self.trigger("bitrateEstimateChange", value);
|
|
508
516
|
},
|
|
509
517
|
needsMediaSourceReload: function (payload) {
|
|
510
|
-
var _a
|
|
518
|
+
var _a;
|
|
511
519
|
var lastObservation = streamObserver.getReference().getValue();
|
|
512
|
-
var currentPosition =
|
|
513
|
-
|
|
520
|
+
var currentPosition = lastObservation.position.isAwaitingFuturePosition() ?
|
|
521
|
+
lastObservation.position.getWanted() :
|
|
522
|
+
streamObserver.getCurrentTime();
|
|
523
|
+
var isPaused = (_a = lastObservation.paused.pending) !== null && _a !== void 0 ? _a : streamObserver.getIsPaused();
|
|
514
524
|
var position = currentPosition + payload.timeOffset;
|
|
515
525
|
if (payload.minimumPosition !== undefined) {
|
|
516
526
|
position = Math.max(payload.minimumPosition, position);
|
|
@@ -521,17 +531,21 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
521
531
|
onReloadOrder({ position: position, autoPlay: !isPaused });
|
|
522
532
|
},
|
|
523
533
|
needsDecipherabilityFlush: function () {
|
|
524
|
-
var _a
|
|
534
|
+
var _a;
|
|
525
535
|
var keySystem = (0, decrypt_1.getKeySystemConfiguration)(mediaElement);
|
|
526
536
|
if ((0, compat_1.shouldReloadMediaSourceOnDecipherabilityUpdate)(keySystem === null || keySystem === void 0 ? void 0 : keySystem[0])) {
|
|
527
537
|
var lastObservation = streamObserver.getReference().getValue();
|
|
528
|
-
var position =
|
|
529
|
-
|
|
538
|
+
var position = lastObservation.position.isAwaitingFuturePosition() ?
|
|
539
|
+
lastObservation.position.getWanted() :
|
|
540
|
+
streamObserver.getCurrentTime();
|
|
541
|
+
var isPaused = (_a = lastObservation.paused.pending) !== null && _a !== void 0 ? _a : streamObserver.getIsPaused();
|
|
530
542
|
onReloadOrder({ position: position, autoPlay: !isPaused });
|
|
531
543
|
}
|
|
532
544
|
else {
|
|
533
545
|
var lastObservation = streamObserver.getReference().getValue();
|
|
534
|
-
var position =
|
|
546
|
+
var position = lastObservation.position.isAwaitingFuturePosition() ?
|
|
547
|
+
lastObservation.position.getWanted() :
|
|
548
|
+
streamObserver.getCurrentTime();
|
|
535
549
|
// simple seek close to the current position
|
|
536
550
|
// to flush the buffers
|
|
537
551
|
if (position + 0.001 < lastObservation.duration) {
|
|
@@ -599,9 +613,7 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
599
613
|
contentTimeBoundariesObserver.addEventListener("periodChange", function (period) {
|
|
600
614
|
_this.trigger("activePeriodChanged", { period: period });
|
|
601
615
|
});
|
|
602
|
-
contentTimeBoundariesObserver.addEventListener("
|
|
603
|
-
mediaSourceDurationUpdater.updateDuration(newDuration.duration, newDuration.isEnd);
|
|
604
|
-
});
|
|
616
|
+
contentTimeBoundariesObserver.addEventListener("endingPositionChange", function (x) { return mediaSourceDurationUpdater.updateDuration(x.endingPosition, x.isEnd); });
|
|
605
617
|
contentTimeBoundariesObserver.addEventListener("endOfStream", function () {
|
|
606
618
|
if (endOfStreamCanceller === null) {
|
|
607
619
|
endOfStreamCanceller = new task_canceller_1.default();
|
|
@@ -617,8 +629,8 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
617
629
|
endOfStreamCanceller = null;
|
|
618
630
|
}
|
|
619
631
|
});
|
|
620
|
-
var
|
|
621
|
-
mediaSourceDurationUpdater.updateDuration(
|
|
632
|
+
var endInfo = contentTimeBoundariesObserver.getCurrentEndingTime();
|
|
633
|
+
mediaSourceDurationUpdater.updateDuration(endInfo.endingPosition, endInfo.isEnd);
|
|
622
634
|
return contentTimeBoundariesObserver;
|
|
623
635
|
};
|
|
624
636
|
/**
|
|
@@ -22,8 +22,8 @@ import { IStreamOrchestratorPlaybackObservation } from "../../stream";
|
|
|
22
22
|
/**
|
|
23
23
|
* Observes what's being played and take care of media events relating to time
|
|
24
24
|
* boundaries:
|
|
25
|
-
* - Emits a `
|
|
26
|
-
* known and every time it changes.
|
|
25
|
+
* - Emits a `endingPositionChange` when the known maximum playable position
|
|
26
|
+
* of the current content is known and every time it changes.
|
|
27
27
|
* - Emits `endOfStream` API once segments have been pushed until the end and
|
|
28
28
|
* `resumeStream` if downloads starts back.
|
|
29
29
|
* - Emits a `periodChange` event when the currently-playing Period seemed to
|
|
@@ -56,10 +56,11 @@ export default class ContentTimeBoundariesObserver extends EventEmitter<IContent
|
|
|
56
56
|
*/
|
|
57
57
|
constructor(manifest: Manifest, playbackObserver: IReadOnlyPlaybackObserver<IStreamOrchestratorPlaybackObservation>, bufferTypes: IBufferType[]);
|
|
58
58
|
/**
|
|
59
|
-
* Returns an estimate of the current
|
|
59
|
+
* Returns an estimate of the current last position which may be played in
|
|
60
|
+
* the content at the moment.
|
|
60
61
|
* @returns {Object}
|
|
61
62
|
*/
|
|
62
|
-
|
|
63
|
+
getCurrentEndingTime(): IEndingPositionInformation;
|
|
63
64
|
/**
|
|
64
65
|
* Method to call any time an Adaptation has been selected.
|
|
65
66
|
*
|
|
@@ -126,20 +127,20 @@ export default class ContentTimeBoundariesObserver extends EventEmitter<IContent
|
|
|
126
127
|
private _addActivelyLoadedPeriod;
|
|
127
128
|
private _removeActivelyLoadedPeriod;
|
|
128
129
|
private _checkCurrentPeriod;
|
|
129
|
-
private
|
|
130
|
+
private _getManifestEndTime;
|
|
130
131
|
private _lazilyCreateActiveStreamInfo;
|
|
131
132
|
private _checkEndOfStream;
|
|
132
133
|
}
|
|
133
|
-
export interface
|
|
134
|
+
export interface IEndingPositionInformation {
|
|
134
135
|
/**
|
|
135
136
|
* The new maximum known position (note that this is the ending position
|
|
136
137
|
* currently known of the current content, it might be superior to the last
|
|
137
138
|
* position at which segments are available and it might also evolve over
|
|
138
139
|
* time), in seconds.
|
|
139
140
|
*/
|
|
140
|
-
|
|
141
|
+
endingPosition: number;
|
|
141
142
|
/**
|
|
142
|
-
* If `true`, the communicated `
|
|
143
|
+
* If `true`, the communicated `endingPosition` is the actual end of the content.
|
|
143
144
|
* It may still be updated due to a track change or to add precision, but it
|
|
144
145
|
* is still a (rough) estimate of the maximum position that content should
|
|
145
146
|
* have.
|
|
@@ -147,7 +148,7 @@ export interface IDurationItem {
|
|
|
147
148
|
* If `false`, this is the currently known maximum position associated to
|
|
148
149
|
* the content, but the content is still evolving (typically, new media
|
|
149
150
|
* segments are still being generated) and as such it can still have a
|
|
150
|
-
* longer
|
|
151
|
+
* longer `endingPosition` in the future.
|
|
151
152
|
*/
|
|
152
153
|
isEnd: boolean;
|
|
153
154
|
}
|
|
@@ -161,10 +162,10 @@ export interface IContentTimeBoundariesObserverEvent {
|
|
|
161
162
|
/** Triggered when a new `Period` is currently playing. */
|
|
162
163
|
periodChange: Period;
|
|
163
164
|
/**
|
|
164
|
-
* Triggered when the
|
|
165
|
-
* or changed.
|
|
165
|
+
* Triggered when the ending position of the currently-playing content became
|
|
166
|
+
* known or changed.
|
|
166
167
|
*/
|
|
167
|
-
|
|
168
|
+
endingPositionChange: IEndingPositionInformation;
|
|
168
169
|
/**
|
|
169
170
|
* Triggered when the last possible chronological segment for all types of
|
|
170
171
|
* buffers has either been pushed or is being pushed to the corresponding
|