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
|
@@ -304,7 +304,7 @@ export interface IRepresentationIndex {
|
|
|
304
304
|
getLastAvailablePosition(): number | null | undefined;
|
|
305
305
|
/**
|
|
306
306
|
* Returns the ending time, in seconds, of the Representation once it is
|
|
307
|
-
* "finished" (@see
|
|
307
|
+
* "finished" (@see isStillAwaitingFutureSegments).
|
|
308
308
|
* Should thus be equivalent to `getLastAvailablePosition` once finished.
|
|
309
309
|
*
|
|
310
310
|
* Returns `null` if nothing is in the index
|
|
@@ -352,13 +352,13 @@ export interface IRepresentationIndex {
|
|
|
352
352
|
*/
|
|
353
353
|
checkDiscontinuity(time: number): number | null;
|
|
354
354
|
/**
|
|
355
|
-
* Returns `
|
|
355
|
+
* Returns `false` if the last segments in this index have already been
|
|
356
356
|
* generated so that we can freely go to the next period.
|
|
357
|
-
* Returns `
|
|
357
|
+
* Returns `true` if the index is still waiting on future segments to be
|
|
358
358
|
* generated.
|
|
359
359
|
* @returns {boolean}
|
|
360
360
|
*/
|
|
361
|
-
|
|
361
|
+
isStillAwaitingFutureSegments(): boolean;
|
|
362
362
|
/**
|
|
363
363
|
* Returns `true` if this index has all the data it needs to give the list
|
|
364
364
|
* of available segments.
|
|
@@ -17,6 +17,7 @@ import { IRepresentationIndex, ISegment } from "../../../../../manifest";
|
|
|
17
17
|
import { ISegmentInformation } from "../../../../../transports";
|
|
18
18
|
import { IEMSG } from "../../../../containers/isobmff";
|
|
19
19
|
import { IIndexSegment } from "../../../utils/index_helpers";
|
|
20
|
+
import ManifestBoundsCalculator from "../manifest_bounds_calculator";
|
|
20
21
|
/**
|
|
21
22
|
* Index property defined for a SegmentBase RepresentationIndex
|
|
22
23
|
* This object contains every property needed to generate an ISegment for a
|
|
@@ -108,6 +109,8 @@ export interface IBaseIndexContextArgument {
|
|
|
108
109
|
representationId?: string | undefined;
|
|
109
110
|
/** Bitrate of the Representation concerned. */
|
|
110
111
|
representationBitrate?: number | undefined;
|
|
112
|
+
/** Allows to obtain the minimum and maximum positions of a content. */
|
|
113
|
+
manifestBoundsCalculator: ManifestBoundsCalculator;
|
|
111
114
|
isEMSGWhitelisted: (inbandEvent: IEMSG) => boolean;
|
|
112
115
|
}
|
|
113
116
|
export default class BaseRepresentationIndex implements IRepresentationIndex {
|
|
@@ -124,6 +127,8 @@ export default class BaseRepresentationIndex implements IRepresentationIndex {
|
|
|
124
127
|
private _scaledPeriodStart;
|
|
125
128
|
/** Absolute end of the period, timescaled and converted to index time. */
|
|
126
129
|
private _scaledPeriodEnd;
|
|
130
|
+
/** Allows to obtain the minimum and maximum positions of a content. */
|
|
131
|
+
private _manifestBoundsCalculator;
|
|
127
132
|
private _isEMSGWhitelisted;
|
|
128
133
|
/**
|
|
129
134
|
* @param {Object} index
|
|
@@ -205,7 +210,7 @@ export default class BaseRepresentationIndex implements IRepresentationIndex {
|
|
|
205
210
|
* should become available in the future.
|
|
206
211
|
* @returns {Boolean}
|
|
207
212
|
*/
|
|
208
|
-
|
|
213
|
+
isStillAwaitingFutureSegments(): false;
|
|
209
214
|
/**
|
|
210
215
|
* No segment in a `BaseRepresentationIndex` are known initially.
|
|
211
216
|
* It is only defined generally in an "index segment" that will thus need to
|
|
@@ -83,6 +83,7 @@ export default class BaseRepresentationIndex {
|
|
|
83
83
|
endNumber: index.endNumber,
|
|
84
84
|
timeline: (_c = index.timeline) !== null && _c !== void 0 ? _c : [],
|
|
85
85
|
timescale };
|
|
86
|
+
this._manifestBoundsCalculator = context.manifestBoundsCalculator;
|
|
86
87
|
this._scaledPeriodStart = toIndexTime(periodStart, this._index);
|
|
87
88
|
this._scaledPeriodEnd = periodEnd == null ? undefined :
|
|
88
89
|
toIndexTime(periodEnd, this._index);
|
|
@@ -111,7 +112,7 @@ export default class BaseRepresentationIndex {
|
|
|
111
112
|
* @returns {Array.<Object>}
|
|
112
113
|
*/
|
|
113
114
|
getSegments(from, dur) {
|
|
114
|
-
return getSegmentsFromTimeline(this._index, from, dur, this.
|
|
115
|
+
return getSegmentsFromTimeline(this._index, from, dur, this._manifestBoundsCalculator, this._scaledPeriodEnd, this._isEMSGWhitelisted);
|
|
115
116
|
}
|
|
116
117
|
/**
|
|
117
118
|
* Returns false as no Segment-Base based index should need to be refreshed.
|
|
@@ -195,8 +196,8 @@ export default class BaseRepresentationIndex {
|
|
|
195
196
|
* should become available in the future.
|
|
196
197
|
* @returns {Boolean}
|
|
197
198
|
*/
|
|
198
|
-
|
|
199
|
-
return
|
|
199
|
+
isStillAwaitingFutureSegments() {
|
|
200
|
+
return false;
|
|
200
201
|
}
|
|
201
202
|
/**
|
|
202
203
|
* No segment in a `BaseRepresentationIndex` are known initially.
|
|
@@ -16,21 +16,24 @@
|
|
|
16
16
|
import { ISegment } from "../../../../../manifest";
|
|
17
17
|
import { IEMSG } from "../../../../containers/isobmff";
|
|
18
18
|
import { IIndexSegment } from "../../../utils/index_helpers";
|
|
19
|
+
import ManifestBoundsCalculator from "../manifest_bounds_calculator";
|
|
19
20
|
/**
|
|
20
21
|
* Get a list of Segments for the time range wanted.
|
|
21
22
|
* @param {Object} index - index object, constructed by parsing the manifest.
|
|
22
23
|
* @param {number} from - starting timestamp wanted, in seconds
|
|
23
24
|
* @param {number} durationWanted - duration wanted, in seconds
|
|
25
|
+
* @param {Object} manifestBoundsCalculator
|
|
26
|
+
* @param {number|undefined} scaledPeriodEnd
|
|
24
27
|
* @param {function} isEMSGWhitelisted
|
|
25
|
-
* @param {number|undefined} maximumTime
|
|
26
28
|
* @returns {Array.<Object>}
|
|
27
29
|
*/
|
|
28
30
|
export default function getSegmentsFromTimeline(index: {
|
|
29
31
|
availabilityTimeComplete?: boolean | undefined;
|
|
32
|
+
availabilityTimeOffset?: number | undefined;
|
|
30
33
|
segmentUrlTemplate: string | null;
|
|
31
34
|
startNumber?: number | undefined;
|
|
32
35
|
endNumber?: number | undefined;
|
|
33
36
|
timeline: IIndexSegment[];
|
|
34
37
|
timescale: number;
|
|
35
38
|
indexTimeOffset: number;
|
|
36
|
-
}, from: number, durationWanted: number, isEMSGWhitelisted: (inbandEvent: IEMSG) => boolean
|
|
39
|
+
}, from: number, durationWanted: number, manifestBoundsCalculator: ManifestBoundsCalculator, scaledPeriodEnd: number | undefined, isEMSGWhitelisted: (inbandEvent: IEMSG) => boolean): ISegment[];
|
|
@@ -34,13 +34,17 @@ function getWantedRepeatIndex(segmentStartTime, segmentDuration, wantedTime) {
|
|
|
34
34
|
* @param {Object} index - index object, constructed by parsing the manifest.
|
|
35
35
|
* @param {number} from - starting timestamp wanted, in seconds
|
|
36
36
|
* @param {number} durationWanted - duration wanted, in seconds
|
|
37
|
+
* @param {Object} manifestBoundsCalculator
|
|
38
|
+
* @param {number|undefined} scaledPeriodEnd
|
|
37
39
|
* @param {function} isEMSGWhitelisted
|
|
38
|
-
* @param {number|undefined} maximumTime
|
|
39
40
|
* @returns {Array.<Object>}
|
|
40
41
|
*/
|
|
41
|
-
export default function getSegmentsFromTimeline(index, from, durationWanted,
|
|
42
|
+
export default function getSegmentsFromTimeline(index, from, durationWanted, manifestBoundsCalculator, scaledPeriodEnd, isEMSGWhitelisted) {
|
|
43
|
+
var _a;
|
|
44
|
+
const maximumTime = manifestBoundsCalculator.getEstimatedMaximumPosition((_a = index.availabilityTimeOffset) !== null && _a !== void 0 ? _a : 0);
|
|
45
|
+
const wantedMaximum = Math.min(from + durationWanted, maximumTime !== null && maximumTime !== void 0 ? maximumTime : Infinity);
|
|
42
46
|
const scaledUp = toIndexTime(from, index);
|
|
43
|
-
const scaledTo = toIndexTime(
|
|
47
|
+
const scaledTo = toIndexTime(wantedMaximum, index);
|
|
44
48
|
const { timeline, timescale, segmentUrlTemplate, startNumber, endNumber } = index;
|
|
45
49
|
let currentNumber = startNumber !== null && startNumber !== void 0 ? startNumber : 1;
|
|
46
50
|
const segments = [];
|
|
@@ -48,7 +52,14 @@ export default function getSegmentsFromTimeline(index, from, durationWanted, isE
|
|
|
48
52
|
for (let i = 0; i < timelineLength; i++) {
|
|
49
53
|
const timelineItem = timeline[i];
|
|
50
54
|
const { duration, start, range } = timelineItem;
|
|
51
|
-
|
|
55
|
+
let maxRepeatTime;
|
|
56
|
+
if (maximumTime === undefined) {
|
|
57
|
+
maxRepeatTime = scaledPeriodEnd;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
maxRepeatTime = Math.min(maximumTime * timescale, scaledPeriodEnd !== null && scaledPeriodEnd !== void 0 ? scaledPeriodEnd : Infinity);
|
|
61
|
+
}
|
|
62
|
+
const repeat = calculateRepeat(timelineItem, timeline[i + 1], maxRepeatTime);
|
|
52
63
|
const complete = index.availabilityTimeComplete !== false ||
|
|
53
64
|
i !== timelineLength - 1 &&
|
|
54
65
|
repeat !== 0;
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import BaseRepresentationIndex from "./base";
|
|
17
|
-
import ListRepresentationIndex from "./list";
|
|
18
|
-
import TemplateRepresentationIndex from "./template";
|
|
19
|
-
import TimelineRepresentationIndex from "./timeline";
|
|
20
|
-
export { BaseRepresentationIndex, ListRepresentationIndex, TemplateRepresentationIndex, TimelineRepresentationIndex, };
|
|
16
|
+
import BaseRepresentationIndex, { IBaseIndexContextArgument } from "./base";
|
|
17
|
+
import ListRepresentationIndex, { IListIndexContextArgument } from "./list";
|
|
18
|
+
import TemplateRepresentationIndex, { ITemplateIndexContextArgument } from "./template";
|
|
19
|
+
import TimelineRepresentationIndex, { ITimelineIndexContextArgument } from "./timeline";
|
|
20
|
+
export { BaseRepresentationIndex, ListRepresentationIndex, TemplateRepresentationIndex, TimelineRepresentationIndex, IBaseIndexContextArgument, IListIndexContextArgument, ITemplateIndexContextArgument, ITimelineIndexContextArgument, };
|
|
@@ -102,8 +102,15 @@ export interface ITemplateIndexIndexArgument {
|
|
|
102
102
|
}
|
|
103
103
|
/** Aditional context needed by a SegmentTemplate RepresentationIndex. */
|
|
104
104
|
export interface ITemplateIndexContextArgument {
|
|
105
|
-
/**
|
|
106
|
-
|
|
105
|
+
/**
|
|
106
|
+
* availability time offset of the concerned Adaptation.
|
|
107
|
+
*
|
|
108
|
+
* If `undefined`, the corresponding property was not set in the MPD and it is
|
|
109
|
+
* thus assumed to be equal to `0`.
|
|
110
|
+
* It might however be semantically different than `0` in the RxPlayer as it
|
|
111
|
+
* means that the packager didn't include that information in the MPD.
|
|
112
|
+
*/
|
|
113
|
+
availabilityTimeOffset: number | undefined;
|
|
107
114
|
/** Allows to obtain the minimum and maximum positions of a content. */
|
|
108
115
|
manifestBoundsCalculator: ManifestBoundsCalculator;
|
|
109
116
|
/** Start of the period concerned by this RepresentationIndex, in seconds. */
|
|
@@ -208,13 +215,13 @@ export default class TemplateRepresentationIndex implements IRepresentationIndex
|
|
|
208
215
|
*/
|
|
209
216
|
canBeOutOfSyncError(): false;
|
|
210
217
|
/**
|
|
211
|
-
* Returns `
|
|
218
|
+
* Returns `false` if the last segments in this index have already been
|
|
212
219
|
* generated so that we can freely go to the next period.
|
|
213
|
-
* Returns `
|
|
220
|
+
* Returns `true` if the index is still waiting on future segments to be
|
|
214
221
|
* generated.
|
|
215
222
|
* @returns {Boolean}
|
|
216
223
|
*/
|
|
217
|
-
|
|
224
|
+
isStillAwaitingFutureSegments(): boolean;
|
|
218
225
|
/**
|
|
219
226
|
* @returns {Boolean}
|
|
220
227
|
*/
|
|
@@ -205,13 +205,24 @@ export default class TemplateRepresentationIndex {
|
|
|
205
205
|
const { timescale } = this._index;
|
|
206
206
|
const segmentTimeRounding = getSegmentTimeRoundingError(timescale);
|
|
207
207
|
const scaledPeriodStart = this._periodStart * timescale;
|
|
208
|
-
const
|
|
208
|
+
const scaledRelativeStart = (start * timescale) - scaledPeriodStart;
|
|
209
|
+
const scaledRelativeEnd = (end * timescale) - scaledPeriodStart;
|
|
210
|
+
const lastSegmentStart = this._getLastSegmentStart();
|
|
211
|
+
if (isNullOrUndefined(lastSegmentStart)) {
|
|
212
|
+
const relativeScaledIndexEnd = this._estimateRelativeScaledEnd();
|
|
213
|
+
if (relativeScaledIndexEnd === undefined) {
|
|
214
|
+
return scaledRelativeEnd + segmentTimeRounding >= 0;
|
|
215
|
+
}
|
|
216
|
+
return scaledRelativeEnd + segmentTimeRounding >= 0 &&
|
|
217
|
+
scaledRelativeStart < relativeScaledIndexEnd - segmentTimeRounding;
|
|
218
|
+
}
|
|
219
|
+
const lastSegmentEnd = lastSegmentStart + this._index.duration;
|
|
209
220
|
const relativeScaledIndexEnd = this._estimateRelativeScaledEnd();
|
|
210
221
|
if (relativeScaledIndexEnd === undefined) {
|
|
211
|
-
return
|
|
222
|
+
return scaledRelativeEnd > lastSegmentEnd - segmentTimeRounding;
|
|
212
223
|
}
|
|
213
|
-
|
|
214
|
-
|
|
224
|
+
return scaledRelativeEnd > lastSegmentEnd - segmentTimeRounding &&
|
|
225
|
+
scaledRelativeStart < relativeScaledIndexEnd - segmentTimeRounding;
|
|
215
226
|
}
|
|
216
227
|
/**
|
|
217
228
|
* Returns true if, based on the arguments, the index should be refreshed.
|
|
@@ -256,30 +267,30 @@ export default class TemplateRepresentationIndex {
|
|
|
256
267
|
return false;
|
|
257
268
|
}
|
|
258
269
|
/**
|
|
259
|
-
* Returns `
|
|
270
|
+
* Returns `false` if the last segments in this index have already been
|
|
260
271
|
* generated so that we can freely go to the next period.
|
|
261
|
-
* Returns `
|
|
272
|
+
* Returns `true` if the index is still waiting on future segments to be
|
|
262
273
|
* generated.
|
|
263
274
|
* @returns {Boolean}
|
|
264
275
|
*/
|
|
265
|
-
|
|
276
|
+
isStillAwaitingFutureSegments() {
|
|
266
277
|
if (!this._isDynamic) {
|
|
267
|
-
return
|
|
278
|
+
return false;
|
|
268
279
|
}
|
|
269
280
|
const scaledRelativeIndexEnd = this._estimateRelativeScaledEnd();
|
|
270
281
|
if (scaledRelativeIndexEnd === undefined) {
|
|
271
|
-
return
|
|
282
|
+
return true;
|
|
272
283
|
}
|
|
273
284
|
const { timescale } = this._index;
|
|
274
285
|
const lastSegmentStart = this._getLastSegmentStart();
|
|
275
286
|
// As last segment start is null if live time is before
|
|
276
287
|
// current period, consider the index not to be finished.
|
|
277
288
|
if (isNullOrUndefined(lastSegmentStart)) {
|
|
278
|
-
return
|
|
289
|
+
return true;
|
|
279
290
|
}
|
|
280
291
|
const lastSegmentEnd = lastSegmentStart + this._index.duration;
|
|
281
292
|
const segmentTimeRounding = getSegmentTimeRoundingError(timescale);
|
|
282
|
-
return (lastSegmentEnd + segmentTimeRounding)
|
|
293
|
+
return (lastSegmentEnd + segmentTimeRounding) < scaledRelativeIndexEnd;
|
|
283
294
|
}
|
|
284
295
|
/**
|
|
285
296
|
* @returns {Boolean}
|
|
@@ -317,6 +328,7 @@ export default class TemplateRepresentationIndex {
|
|
|
317
328
|
* @returns {number | null | undefined}
|
|
318
329
|
*/
|
|
319
330
|
_getFirstSegmentStart() {
|
|
331
|
+
var _a;
|
|
320
332
|
if (!this._isDynamic) {
|
|
321
333
|
return 0; // it is the start of the Period
|
|
322
334
|
}
|
|
@@ -326,15 +338,15 @@ export default class TemplateRepresentationIndex {
|
|
|
326
338
|
// /!\ The scaled max position augments continuously and might not
|
|
327
339
|
// reflect exactly the real server-side value. As segments are
|
|
328
340
|
// generated discretely.
|
|
329
|
-
const
|
|
330
|
-
if (
|
|
341
|
+
const maximumSegmentTime = this._manifestBoundsCalculator.getEstimatedMaximumPosition((_a = this._availabilityTimeOffset) !== null && _a !== void 0 ? _a : 0);
|
|
342
|
+
if (maximumSegmentTime !== undefined && maximumSegmentTime < this._periodStart) {
|
|
331
343
|
// Maximum position is before this period.
|
|
332
344
|
// No segment is yet available here
|
|
333
345
|
return null;
|
|
334
346
|
}
|
|
335
347
|
}
|
|
336
348
|
const { duration, timescale } = this._index;
|
|
337
|
-
const firstPosition = this._manifestBoundsCalculator.
|
|
349
|
+
const firstPosition = this._manifestBoundsCalculator.getEstimatedMinimumSegmentTime();
|
|
338
350
|
if (firstPosition === undefined) {
|
|
339
351
|
return undefined;
|
|
340
352
|
}
|
|
@@ -351,34 +363,35 @@ export default class TemplateRepresentationIndex {
|
|
|
351
363
|
* @returns {number|null|undefined}
|
|
352
364
|
*/
|
|
353
365
|
_getLastSegmentStart() {
|
|
354
|
-
var _a;
|
|
366
|
+
var _a, _b;
|
|
355
367
|
const { duration, timescale, endNumber, startNumber = 1 } = this._index;
|
|
356
368
|
if (this._isDynamic) {
|
|
357
|
-
const
|
|
358
|
-
if (
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
this._scaledRelativePeriodEnd <
|
|
363
|
-
(lastPos - this._periodStart) * this._index.timescale) {
|
|
369
|
+
const liveEdge = this._manifestBoundsCalculator.getEstimatedLiveEdge();
|
|
370
|
+
if (liveEdge !== undefined &&
|
|
371
|
+
this._scaledRelativePeriodEnd !== undefined &&
|
|
372
|
+
this._scaledRelativePeriodEnd < liveEdge - (this._periodStart *
|
|
373
|
+
this._index.timescale)) {
|
|
364
374
|
let numberOfSegments = Math.ceil(this._scaledRelativePeriodEnd / duration);
|
|
365
375
|
if (endNumber !== undefined && (endNumber - startNumber + 1) < numberOfSegments) {
|
|
366
376
|
numberOfSegments = endNumber - startNumber + 1;
|
|
367
377
|
}
|
|
368
378
|
return (numberOfSegments - 1) * duration;
|
|
369
379
|
}
|
|
380
|
+
const lastPosition = this._manifestBoundsCalculator
|
|
381
|
+
.getEstimatedMaximumPosition((_a = this._availabilityTimeOffset) !== null && _a !== void 0 ? _a : 0);
|
|
382
|
+
if (lastPosition === undefined) {
|
|
383
|
+
return undefined;
|
|
384
|
+
}
|
|
370
385
|
// /!\ The scaled last position augments continuously and might not
|
|
371
386
|
// reflect exactly the real server-side value. As segments are
|
|
372
387
|
// generated discretely.
|
|
373
|
-
const scaledLastPosition = (
|
|
388
|
+
const scaledLastPosition = (lastPosition - this._periodStart) * timescale;
|
|
374
389
|
// Maximum position is before this period.
|
|
375
390
|
// No segment is yet available here
|
|
376
391
|
if (scaledLastPosition < 0) {
|
|
377
392
|
return null;
|
|
378
393
|
}
|
|
379
|
-
|
|
380
|
-
* timescale;
|
|
381
|
-
let numberOfSegmentsAvailable = Math.floor((scaledLastPosition + availabilityTimeOffset) / duration);
|
|
394
|
+
let numberOfSegmentsAvailable = Math.floor(scaledLastPosition / duration);
|
|
382
395
|
if (endNumber !== undefined &&
|
|
383
396
|
(endNumber - startNumber + 1) < numberOfSegmentsAvailable) {
|
|
384
397
|
numberOfSegmentsAvailable = endNumber - startNumber + 1;
|
|
@@ -388,7 +401,7 @@ export default class TemplateRepresentationIndex {
|
|
|
388
401
|
(numberOfSegmentsAvailable - 1) * duration;
|
|
389
402
|
}
|
|
390
403
|
else {
|
|
391
|
-
const maximumTime = (
|
|
404
|
+
const maximumTime = (_b = this._scaledRelativePeriodEnd) !== null && _b !== void 0 ? _b : 0;
|
|
392
405
|
let numberOfSegments = Math.ceil(maximumTime / duration);
|
|
393
406
|
if (endNumber !== undefined && (endNumber - startNumber + 1) < numberOfSegments) {
|
|
394
407
|
numberOfSegments = endNumber - startNumber + 1;
|
|
@@ -13,5 +13,6 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import TimelineRepresentationIndex from "./timeline_representation_index";
|
|
16
|
+
import TimelineRepresentationIndex, { ITimelineIndexContextArgument } from "./timeline_representation_index";
|
|
17
17
|
export default TimelineRepresentationIndex;
|
|
18
|
+
export { ITimelineIndexContextArgument };
|
package/dist/es2017/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts
CHANGED
|
@@ -27,6 +27,8 @@ import ManifestBoundsCalculator from "../../manifest_bounds_calculator";
|
|
|
27
27
|
export interface ITimelineIndex {
|
|
28
28
|
/** If `false`, the last segment anounced might be still incomplete. */
|
|
29
29
|
availabilityTimeComplete: boolean;
|
|
30
|
+
/** Minimum availabilityTimeOffset concerning the segments of this Representation. */
|
|
31
|
+
availabilityTimeOffset: number;
|
|
30
32
|
/** Byte range for a possible index of segments in the server. */
|
|
31
33
|
indexRange?: [number, number] | undefined;
|
|
32
34
|
/**
|
|
@@ -123,8 +125,25 @@ export interface ITimelineIndexIndexArgument {
|
|
|
123
125
|
}
|
|
124
126
|
/** Aditional context needed by a SegmentTimeline RepresentationIndex. */
|
|
125
127
|
export interface ITimelineIndexContextArgument {
|
|
126
|
-
/**
|
|
127
|
-
|
|
128
|
+
/**
|
|
129
|
+
* If `false`, declared segments in the MPD might still be not completely generated.
|
|
130
|
+
* If `true`, they are completely generated.
|
|
131
|
+
*
|
|
132
|
+
* If `undefined`, the corresponding property was not set in the MPD and it is
|
|
133
|
+
* thus assumed that they are all generated.
|
|
134
|
+
* It might however be semantically different than `true` in the RxPlayer as it
|
|
135
|
+
* means that the packager didn't include that information in the MPD.
|
|
136
|
+
*/
|
|
137
|
+
availabilityTimeComplete: boolean | undefined;
|
|
138
|
+
/**
|
|
139
|
+
* availability time offset of the concerned Adaptation.
|
|
140
|
+
*
|
|
141
|
+
* If `undefined`, the corresponding property was not set in the MPD and it is
|
|
142
|
+
* thus assumed to be equal to `0`.
|
|
143
|
+
* It might however be semantically different than `0` in the RxPlayer as it
|
|
144
|
+
* means that the packager didn't include that information in the MPD.
|
|
145
|
+
*/
|
|
146
|
+
availabilityTimeOffset: number | undefined;
|
|
128
147
|
/** Allows to obtain the minimum and maximum positions of a content. */
|
|
129
148
|
manifestBoundsCalculator: ManifestBoundsCalculator;
|
|
130
149
|
/** Start of the period linked to this RepresentationIndex, in seconds. */
|
|
@@ -164,6 +183,11 @@ export interface ILastSegmentInformation {
|
|
|
164
183
|
/** Defines the time at which `lastPosition` was last calculated. */
|
|
165
184
|
time: number;
|
|
166
185
|
}
|
|
186
|
+
/**
|
|
187
|
+
* `IRepresentationIndex` implementation for a DASH `SegmentTimeline` segment
|
|
188
|
+
* indexing scheme.
|
|
189
|
+
* @class TimelineRepresentationIndex
|
|
190
|
+
*/
|
|
167
191
|
export default class TimelineRepresentationIndex implements IRepresentationIndex {
|
|
168
192
|
/** Underlying structure to retrieve segment information. */
|
|
169
193
|
protected _index: ITimelineIndex;
|
|
@@ -287,12 +311,12 @@ export default class TimelineRepresentationIndex implements IRepresentationIndex
|
|
|
287
311
|
*/
|
|
288
312
|
_update(newIndex: TimelineRepresentationIndex): void;
|
|
289
313
|
/**
|
|
290
|
-
* Returns `
|
|
314
|
+
* Returns `false` if this RepresentationIndex currently contains its last
|
|
291
315
|
* segment.
|
|
292
|
-
* Returns `
|
|
316
|
+
* Returns `true` if it's still pending.
|
|
293
317
|
* @returns {Boolean}
|
|
294
318
|
*/
|
|
295
|
-
|
|
319
|
+
isStillAwaitingFutureSegments(): boolean;
|
|
296
320
|
/**
|
|
297
321
|
* @returns {Boolean}
|
|
298
322
|
*/
|
|
@@ -311,7 +335,6 @@ export default class TimelineRepresentationIndex implements IRepresentationIndex
|
|
|
311
335
|
* available due to timeshifting.
|
|
312
336
|
*/
|
|
313
337
|
private _refreshTimeline;
|
|
314
|
-
static getIndexEnd(timeline: IIndexSegment[], scaledPeriodEnd: number | undefined): number | null;
|
|
315
338
|
/**
|
|
316
339
|
* Allows to generate the "timeline" for this RepresentationIndex.
|
|
317
340
|
* Call this function when the timeline is unknown.
|
|
@@ -336,3 +359,73 @@ export default class TimelineRepresentationIndex implements IRepresentationIndex
|
|
|
336
359
|
*/
|
|
337
360
|
private _getTimeline;
|
|
338
361
|
}
|
|
362
|
+
/**
|
|
363
|
+
* Returns true if a Segment returned by the corresponding index is still
|
|
364
|
+
* considered available.
|
|
365
|
+
* Returns false if it is not available anymore.
|
|
366
|
+
* Returns undefined if we cannot know whether it is still available or not.
|
|
367
|
+
* /!\ We do not check the mediaURLs of the segment.
|
|
368
|
+
* @param {Object} segment
|
|
369
|
+
* @param {Object} index
|
|
370
|
+
* @param {Object} manifestBoundsCalculator
|
|
371
|
+
* @param {number|undefined} scaledPeriodEnd
|
|
372
|
+
* @returns {Boolean|undefined}
|
|
373
|
+
*/
|
|
374
|
+
export declare function isSegmentStillAvailable(segment: ISegment, index: {
|
|
375
|
+
availabilityTimeOffset: number;
|
|
376
|
+
timeline: IIndexSegment[];
|
|
377
|
+
indexTimeOffset: number;
|
|
378
|
+
timescale: number;
|
|
379
|
+
}, manifestBoundsCalculator: ManifestBoundsCalculator, scaledPeriodEnd: number | undefined): boolean | undefined;
|
|
380
|
+
/**
|
|
381
|
+
* Returns from the given RepresentationIndex information on the last segment
|
|
382
|
+
* that may be requested currently.
|
|
383
|
+
*
|
|
384
|
+
* Returns `null` if there's no such segment.
|
|
385
|
+
* @param {Object} index
|
|
386
|
+
* @param {Object} manifestBoundsCalculator
|
|
387
|
+
* @param {number|undefined} scaledPeriodEnd
|
|
388
|
+
* @returns {number|null}
|
|
389
|
+
*/
|
|
390
|
+
export declare function getLastRequestableSegmentInfo(index: {
|
|
391
|
+
availabilityTimeOffset: number;
|
|
392
|
+
timeline: IIndexSegment[];
|
|
393
|
+
timescale: number;
|
|
394
|
+
}, manifestBoundsCalculator: ManifestBoundsCalculator, scaledPeriodEnd: number | undefined): ILastRequestableSegmentInfo | null;
|
|
395
|
+
/**
|
|
396
|
+
* Information on the last requestable segment deduced from a timeline array of
|
|
397
|
+
* segment information.
|
|
398
|
+
*/
|
|
399
|
+
export interface ILastRequestableSegmentInfo {
|
|
400
|
+
/**
|
|
401
|
+
* If `true`, we know that the last requestable segment is equal to the last
|
|
402
|
+
* segment that can be deduced from the corresponding given timeline.
|
|
403
|
+
* Written another way, there seem to be no segment announced in the timeline
|
|
404
|
+
* that are not yet requestable.
|
|
405
|
+
*
|
|
406
|
+
* If `false`, we know that the last requestable segment is not the last
|
|
407
|
+
* segment that can be deduced from the corresponding timeline.
|
|
408
|
+
* Written another way, there are supplementary segments in the timeline which
|
|
409
|
+
* are not yet requestable.
|
|
410
|
+
*
|
|
411
|
+
* Note that if the last requestable segment has its information from the last
|
|
412
|
+
* element from the timeline but it's not the last segment that would be
|
|
413
|
+
* deduced from the `repeatCount` property, then this value is set to `false`.
|
|
414
|
+
*/
|
|
415
|
+
isLastOfTimeline: boolean;
|
|
416
|
+
/**
|
|
417
|
+
* End time at which the last requestable segment ends, in the corresponding
|
|
418
|
+
* index timescale (__NOT__ in seconds).
|
|
419
|
+
*/
|
|
420
|
+
end: number;
|
|
421
|
+
/**
|
|
422
|
+
* The index in `timeline` of the last requestable segment.
|
|
423
|
+
* Note that its `repeatCount` may be updated and put as `newRepeatCount`.
|
|
424
|
+
*/
|
|
425
|
+
timelineIdx: number;
|
|
426
|
+
/**
|
|
427
|
+
* The new `repeatCount` value for that last segment. May be equal or
|
|
428
|
+
* different from the timeline element found at `timelineIdx`.
|
|
429
|
+
*/
|
|
430
|
+
newRepeatCount: number;
|
|
431
|
+
}
|