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
|
@@ -22,6 +22,7 @@ import { getFilenameIndexInUrl } from "../../../../utils/resolve_url";
|
|
|
22
22
|
import getClockOffset from "./get_clock_offset";
|
|
23
23
|
import getHTTPUTCTimingURL from "./get_http_utc-timing_url";
|
|
24
24
|
import getMinimumAndMaximumPositions from "./get_minimum_and_maximum_positions";
|
|
25
|
+
import ManifestBoundsCalculator from "./manifest_bounds_calculator";
|
|
25
26
|
import parseAvailabilityStartTime from "./parse_availability_start_time";
|
|
26
27
|
import parsePeriods from "./parse_periods";
|
|
27
28
|
import resolveBaseURLs from "./resolve_base_urls";
|
|
@@ -129,11 +130,19 @@ function parseCompleteIntermediateRepresentation(mpdIR, args, warnings, xlinkInf
|
|
|
129
130
|
const availabilityStartTime = parseAvailabilityStartTime(rootAttributes, args.referenceDateTime);
|
|
130
131
|
const timeShiftBufferDepth = rootAttributes.timeShiftBufferDepth;
|
|
131
132
|
const { externalClockOffset: clockOffset, unsafelyBaseOnPreviousManifest } = args;
|
|
133
|
+
const { externalClockOffset } = args;
|
|
134
|
+
const manifestBoundsCalculator = new ManifestBoundsCalculator({
|
|
135
|
+
availabilityStartTime,
|
|
136
|
+
isDynamic,
|
|
137
|
+
timeShiftBufferDepth,
|
|
138
|
+
serverTimestampOffset: externalClockOffset,
|
|
139
|
+
});
|
|
132
140
|
const manifestInfos = { availabilityStartTime,
|
|
133
141
|
baseURLs: mpdBaseUrls,
|
|
134
142
|
clockOffset,
|
|
135
143
|
duration: rootAttributes.duration,
|
|
136
144
|
isDynamic,
|
|
145
|
+
manifestBoundsCalculator,
|
|
137
146
|
manifestProfiles: mpdIR.attributes.profiles,
|
|
138
147
|
receivedTime: args.manifestReceivedTime,
|
|
139
148
|
timeShiftBufferDepth,
|
|
@@ -178,30 +187,33 @@ function parseCompleteIntermediateRepresentation(mpdIR, args, warnings, xlinkInf
|
|
|
178
187
|
time: now };
|
|
179
188
|
}
|
|
180
189
|
else {
|
|
181
|
-
|
|
182
|
-
timeshiftDepth = timeShiftBufferDepth !== null && timeShiftBufferDepth !== void 0 ? timeShiftBufferDepth : null;
|
|
190
|
+
// Determine the maximum seekable position
|
|
183
191
|
let finalMaximumSafePosition;
|
|
184
|
-
let livePosition;
|
|
185
|
-
if (maximumUnsafePosition !== undefined) {
|
|
186
|
-
livePosition = maximumUnsafePosition;
|
|
187
|
-
}
|
|
188
192
|
if (maximumSafePosition !== undefined) {
|
|
189
193
|
finalMaximumSafePosition = maximumSafePosition;
|
|
190
194
|
}
|
|
191
195
|
else {
|
|
192
|
-
const ast = availabilityStartTime !== null && availabilityStartTime !== void 0 ? availabilityStartTime : 0;
|
|
193
|
-
const { externalClockOffset } = args;
|
|
194
196
|
if (externalClockOffset === undefined) {
|
|
195
197
|
log.warn("DASH Parser: use system clock to define maximum position");
|
|
196
|
-
finalMaximumSafePosition = (Date.now() / 1000) -
|
|
198
|
+
finalMaximumSafePosition = (Date.now() / 1000) - availabilityStartTime;
|
|
197
199
|
}
|
|
198
200
|
else {
|
|
199
201
|
const serverTime = getMonotonicTimeStamp() + externalClockOffset;
|
|
200
|
-
finalMaximumSafePosition = (serverTime / 1000) -
|
|
202
|
+
finalMaximumSafePosition = (serverTime / 1000) - availabilityStartTime;
|
|
201
203
|
}
|
|
202
204
|
}
|
|
205
|
+
// Determine live edge (what position corresponds to live content, can be
|
|
206
|
+
// inferior or superior to the maximum anounced position in some specific
|
|
207
|
+
// scenarios). However, the `timeShiftBufferDepth` should be based on it.
|
|
208
|
+
let livePosition = manifestBoundsCalculator.getEstimatedLiveEdge();
|
|
203
209
|
if (livePosition === undefined) {
|
|
204
|
-
|
|
210
|
+
if (maximumUnsafePosition !== undefined) {
|
|
211
|
+
livePosition = maximumUnsafePosition;
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
livePosition = finalMaximumSafePosition;
|
|
215
|
+
}
|
|
216
|
+
// manifestBoundsCalculator.forceLiveEdge(livePosition);
|
|
205
217
|
}
|
|
206
218
|
maximumTimeData = { isLinear: true,
|
|
207
219
|
maximumSafePosition: finalMaximumSafePosition,
|
|
@@ -209,9 +221,11 @@ function parseCompleteIntermediateRepresentation(mpdIR, args, warnings, xlinkInf
|
|
|
209
221
|
time: now };
|
|
210
222
|
// if the minimum calculated time is even below the buffer depth, perhaps we
|
|
211
223
|
// can go even lower in terms of depth
|
|
224
|
+
minimumTime = minimumSafePosition;
|
|
225
|
+
timeshiftDepth = timeShiftBufferDepth !== null && timeShiftBufferDepth !== void 0 ? timeShiftBufferDepth : null;
|
|
212
226
|
if (timeshiftDepth !== null && minimumTime !== undefined &&
|
|
213
|
-
|
|
214
|
-
timeshiftDepth =
|
|
227
|
+
livePosition - minimumTime > timeshiftDepth) {
|
|
228
|
+
timeshiftDepth = livePosition - minimumTime;
|
|
215
229
|
}
|
|
216
230
|
}
|
|
217
231
|
// `isLastPeriodKnown` should be `true` in two cases for DASH contents:
|
|
@@ -63,5 +63,5 @@ export interface IPeriodContext extends IInheritedAdaptationContext {
|
|
|
63
63
|
value: string;
|
|
64
64
|
}> | undefined;
|
|
65
65
|
}
|
|
66
|
-
type IInheritedAdaptationContext = Omit<IAdaptationSetContext, "availabilityTimeComplete" | "availabilityTimeOffset" | "duration" | "isLastPeriod" | "
|
|
66
|
+
type IInheritedAdaptationContext = Omit<IAdaptationSetContext, "availabilityTimeComplete" | "availabilityTimeOffset" | "duration" | "isLastPeriod" | "start" | "unsafelyBaseOnPreviousPeriod">;
|
|
67
67
|
export {};
|
|
@@ -16,13 +16,13 @@
|
|
|
16
16
|
import log from "../../../../log";
|
|
17
17
|
import flatMap from "../../../../utils/flat_map";
|
|
18
18
|
import idGenerator from "../../../../utils/id_generator";
|
|
19
|
+
import isNullOrUndefined from "../../../../utils/is_null_or_undefined";
|
|
19
20
|
import getMonotonicTimeStamp from "../../../../utils/monotonic_timestamp";
|
|
20
21
|
import objectValues from "../../../../utils/object_values";
|
|
21
22
|
import { utf8ToStr } from "../../../../utils/string_parsing";
|
|
22
23
|
// eslint-disable-next-line max-len
|
|
23
24
|
import flattenOverlappingPeriods from "./flatten_overlapping_periods";
|
|
24
25
|
import getPeriodsTimeInformation from "./get_periods_time_infos";
|
|
25
|
-
import ManifestBoundsCalculator from "./manifest_bounds_calculator";
|
|
26
26
|
import parseAdaptationSets from "./parse_adaptation_sets";
|
|
27
27
|
import resolveBaseURLs from "./resolve_base_urls";
|
|
28
28
|
const generatePeriodID = idGenerator();
|
|
@@ -33,16 +33,14 @@ const generatePeriodID = idGenerator();
|
|
|
33
33
|
* @returns {Array.<Object>}
|
|
34
34
|
*/
|
|
35
35
|
export default function parsePeriods(periodsIR, context) {
|
|
36
|
-
var _a, _b, _c, _d
|
|
36
|
+
var _a, _b, _c, _d;
|
|
37
37
|
const parsedPeriods = [];
|
|
38
38
|
const periodsTimeInformation = getPeriodsTimeInformation(periodsIR, context);
|
|
39
39
|
if (periodsTimeInformation.length !== periodsIR.length) {
|
|
40
40
|
throw new Error("MPD parsing error: the time information are incoherent.");
|
|
41
41
|
}
|
|
42
|
-
const { isDynamic,
|
|
43
|
-
|
|
44
|
-
timeShiftBufferDepth });
|
|
45
|
-
if (!isDynamic && context.duration != null) {
|
|
42
|
+
const { isDynamic, manifestBoundsCalculator } = context;
|
|
43
|
+
if (!isDynamic && !isNullOrUndefined(context.duration)) {
|
|
46
44
|
manifestBoundsCalculator.setLastPosition(context.duration);
|
|
47
45
|
}
|
|
48
46
|
// We parse it in reverse because we might need to deduce the buffer depth from
|
|
@@ -54,7 +52,7 @@ export default function parsePeriods(periodsIR, context) {
|
|
|
54
52
|
const periodBaseURLs = resolveBaseURLs(context.baseURLs, periodIR.children.baseURLs);
|
|
55
53
|
const { periodStart, periodDuration, periodEnd } = periodsTimeInformation[i];
|
|
56
54
|
let periodID;
|
|
57
|
-
if (periodIR.attributes.id
|
|
55
|
+
if (isNullOrUndefined(periodIR.attributes.id)) {
|
|
58
56
|
log.warn("DASH: No usable id found in the Period. Generating one.");
|
|
59
57
|
periodID = "gen-dash-period-" + generatePeriodID();
|
|
60
58
|
}
|
|
@@ -69,8 +67,8 @@ export default function parsePeriods(periodsIR, context) {
|
|
|
69
67
|
context.receivedTime;
|
|
70
68
|
const unsafelyBaseOnPreviousPeriod = (_b = (_a = context
|
|
71
69
|
.unsafelyBaseOnPreviousManifest) === null || _a === void 0 ? void 0 : _a.getPeriod(periodID)) !== null && _b !== void 0 ? _b : null;
|
|
72
|
-
const availabilityTimeComplete =
|
|
73
|
-
const availabilityTimeOffset =
|
|
70
|
+
const availabilityTimeComplete = periodIR.attributes.availabilityTimeComplete;
|
|
71
|
+
const availabilityTimeOffset = periodIR.attributes.availabilityTimeOffset;
|
|
74
72
|
const { manifestProfiles } = context;
|
|
75
73
|
const { segmentTemplate } = periodIR.children;
|
|
76
74
|
const adapCtxt = { availabilityTimeComplete,
|
|
@@ -84,11 +82,10 @@ export default function parsePeriods(periodsIR, context) {
|
|
|
84
82
|
receivedTime,
|
|
85
83
|
segmentTemplate,
|
|
86
84
|
start: periodStart,
|
|
87
|
-
timeShiftBufferDepth,
|
|
88
85
|
unsafelyBaseOnPreviousPeriod };
|
|
89
86
|
const adaptations = parseAdaptationSets(periodIR.children.adaptations, adapCtxt);
|
|
90
|
-
const namespaces = ((
|
|
91
|
-
.concat((
|
|
87
|
+
const namespaces = ((_c = context.xmlNamespaces) !== null && _c !== void 0 ? _c : [])
|
|
88
|
+
.concat((_d = periodIR.attributes.namespaces) !== null && _d !== void 0 ? _d : []);
|
|
92
89
|
const streamEvents = generateStreamEvents(periodIR.children.eventStreams, periodStart, namespaces);
|
|
93
90
|
const parsedPeriod = { id: periodID,
|
|
94
91
|
start: periodStart,
|
|
@@ -158,7 +155,7 @@ export default function parsePeriods(periodsIR, context) {
|
|
|
158
155
|
* @returns {Array.<number|undefined>}
|
|
159
156
|
*/
|
|
160
157
|
function guessLastPositionFromClock(context, minimumTime) {
|
|
161
|
-
if (context.clockOffset
|
|
158
|
+
if (!isNullOrUndefined(context.clockOffset)) {
|
|
162
159
|
const lastPosition = context.clockOffset / 1000 -
|
|
163
160
|
context.availabilityStartTime;
|
|
164
161
|
const positionTime = getMonotonicTimeStamp() / 1000;
|
|
@@ -193,7 +190,7 @@ function getMaximumLastPosition(adaptationsPerType) {
|
|
|
193
190
|
let maxEncounteredPosition = null;
|
|
194
191
|
let allIndexAreEmpty = true;
|
|
195
192
|
const adaptationsVal = objectValues(adaptationsPerType)
|
|
196
|
-
.filter((ada) => ada
|
|
193
|
+
.filter((ada) => !isNullOrUndefined(ada));
|
|
197
194
|
const allAdaptations = flatMap(adaptationsVal, (adaptationsForType) => adaptationsForType);
|
|
198
195
|
for (const adaptation of allAdaptations) {
|
|
199
196
|
const representations = adaptation.representations;
|
|
@@ -203,13 +200,13 @@ function getMaximumLastPosition(adaptationsPerType) {
|
|
|
203
200
|
allIndexAreEmpty = false;
|
|
204
201
|
if (typeof position === "number") {
|
|
205
202
|
maxEncounteredPosition =
|
|
206
|
-
maxEncounteredPosition
|
|
203
|
+
isNullOrUndefined(maxEncounteredPosition) ? position :
|
|
207
204
|
Math.max(maxEncounteredPosition, position);
|
|
208
205
|
}
|
|
209
206
|
}
|
|
210
207
|
}
|
|
211
208
|
}
|
|
212
|
-
if (maxEncounteredPosition
|
|
209
|
+
if (!isNullOrUndefined(maxEncounteredPosition)) {
|
|
213
210
|
return maxEncounteredPosition;
|
|
214
211
|
}
|
|
215
212
|
else if (allIndexAreEmpty) {
|
|
@@ -29,10 +29,25 @@ export default function parseRepresentationIndex(representation: IRepresentation
|
|
|
29
29
|
export interface IRepresentationIndexContext {
|
|
30
30
|
/** Parsed AdaptationSet which contains the Representation. */
|
|
31
31
|
adaptation: IAdaptationSetIntermediateRepresentation;
|
|
32
|
-
/**
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
/**
|
|
33
|
+
* If `false`, declared segments in the MPD might still be not completely generated.
|
|
34
|
+
* If `true`, they are completely generated.
|
|
35
|
+
*
|
|
36
|
+
* If `undefined`, the corresponding property was not set in the MPD and it is
|
|
37
|
+
* thus assumed that they are all generated.
|
|
38
|
+
* It might however be semantically different than `true` in the RxPlayer as it
|
|
39
|
+
* means that the packager didn't include that information in the MPD.
|
|
40
|
+
*/
|
|
41
|
+
availabilityTimeComplete: boolean | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* availability time offset of the concerned Adaptation.
|
|
44
|
+
*
|
|
45
|
+
* If `undefined`, the corresponding property was not set in the MPD and it is
|
|
46
|
+
* thus assumed to be equal to `0`.
|
|
47
|
+
* It might however be semantically different than `0` in the RxPlayer as it
|
|
48
|
+
* means that the packager didn't include that information in the MPD.
|
|
49
|
+
*/
|
|
50
|
+
availabilityTimeOffset: number | undefined;
|
|
36
51
|
/** Eventual URLs from which every relative URL will be based on. */
|
|
37
52
|
baseURLs: IResolvedBaseUrl[];
|
|
38
53
|
/** End time of the current Period, in seconds. */
|
|
@@ -61,8 +76,6 @@ export interface IRepresentationIndexContext {
|
|
|
61
76
|
receivedTime?: number | undefined;
|
|
62
77
|
/** Start time of the current period, in seconds. */
|
|
63
78
|
start: number;
|
|
64
|
-
/** Depth of the buffer for the whole content, in seconds. */
|
|
65
|
-
timeShiftBufferDepth?: number | undefined;
|
|
66
79
|
/**
|
|
67
80
|
* The parser should take this Representation - which is the same as this one
|
|
68
81
|
* parsed at an earlier time - as a base to speed-up the parsing process.
|
|
@@ -24,7 +24,7 @@ import { BaseRepresentationIndex, ListRepresentationIndex, TemplateRepresentatio
|
|
|
24
24
|
*/
|
|
25
25
|
export default function parseRepresentationIndex(representation, context) {
|
|
26
26
|
var _a, _b;
|
|
27
|
-
const { availabilityTimeOffset, manifestBoundsCalculator, isDynamic, end: periodEnd, start: periodStart, receivedTime,
|
|
27
|
+
const { availabilityTimeOffset, manifestBoundsCalculator, isDynamic, end: periodEnd, start: periodStart, receivedTime, unsafelyBaseOnPreviousRepresentation, inbandEventStreams, isLastPeriod } = context;
|
|
28
28
|
const isEMSGWhitelisted = (inbandEvent) => {
|
|
29
29
|
if (inbandEventStreams === undefined) {
|
|
30
30
|
return false;
|
|
@@ -32,7 +32,8 @@ export default function parseRepresentationIndex(representation, context) {
|
|
|
32
32
|
return inbandEventStreams
|
|
33
33
|
.some(({ schemeIdUri }) => schemeIdUri === inbandEvent.schemeIdUri);
|
|
34
34
|
};
|
|
35
|
-
const reprIndexCtxt = {
|
|
35
|
+
const reprIndexCtxt = {
|
|
36
|
+
availabilityTimeComplete: undefined,
|
|
36
37
|
availabilityTimeOffset,
|
|
37
38
|
unsafelyBaseOnPreviousRepresentation,
|
|
38
39
|
isEMSGWhitelisted,
|
|
@@ -44,7 +45,7 @@ export default function parseRepresentationIndex(representation, context) {
|
|
|
44
45
|
receivedTime,
|
|
45
46
|
representationBitrate: representation.attributes.bitrate,
|
|
46
47
|
representationId: representation.attributes.id,
|
|
47
|
-
|
|
48
|
+
};
|
|
48
49
|
let representationIndex;
|
|
49
50
|
if (representation.children.segmentBase !== undefined) {
|
|
50
51
|
const { segmentBase } = representation.children;
|
|
@@ -62,11 +63,12 @@ export default function parseRepresentationIndex(representation, context) {
|
|
|
62
63
|
segmentTemplates.push(childSegmentTemplate);
|
|
63
64
|
}
|
|
64
65
|
const segmentTemplate = objectAssign({}, ...segmentTemplates /* Ugly TS Hack */);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
if (segmentTemplate.availabilityTimeOffset !== undefined ||
|
|
67
|
+
context.availabilityTimeOffset !== undefined) {
|
|
68
|
+
reprIndexCtxt.availabilityTimeOffset =
|
|
69
|
+
((_a = segmentTemplate.availabilityTimeOffset) !== null && _a !== void 0 ? _a : 0) +
|
|
70
|
+
((_b = context.availabilityTimeOffset) !== null && _b !== void 0 ? _b : 0);
|
|
71
|
+
}
|
|
70
72
|
representationIndex = TimelineRepresentationIndex
|
|
71
73
|
.isTimelineIndexArgument(segmentTemplate) ?
|
|
72
74
|
new TimelineRepresentationIndex(segmentTemplate, reprIndexCtxt) :
|
|
@@ -77,7 +77,7 @@ function getHDRInformation({ adaptationProfiles, essentialProperties, supplement
|
|
|
77
77
|
* @returns {Array.<Object>}
|
|
78
78
|
*/
|
|
79
79
|
export default function parseRepresentations(representationsIR, adaptation, context) {
|
|
80
|
-
var _a, _b, _c, _d;
|
|
80
|
+
var _a, _b, _c, _d, _e;
|
|
81
81
|
const parsedRepresentations = [];
|
|
82
82
|
for (const representation of representationsIR) {
|
|
83
83
|
// Compute Representation ID
|
|
@@ -105,8 +105,12 @@ export default function parseRepresentations(representationsIR, adaptation, cont
|
|
|
105
105
|
.unsafelyBaseOnPreviousAdaptation) === null || _a === void 0 ? void 0 : _a.getRepresentation(representationID)) !== null && _b !== void 0 ? _b : null;
|
|
106
106
|
const inbandEventStreams = combineInbandEventStreams(representation, adaptation);
|
|
107
107
|
const availabilityTimeComplete = (_c = representation.attributes.availabilityTimeComplete) !== null && _c !== void 0 ? _c : context.availabilityTimeComplete;
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
let availabilityTimeOffset;
|
|
109
|
+
if (representation.attributes.availabilityTimeOffset !== undefined ||
|
|
110
|
+
context.availabilityTimeOffset !== undefined) {
|
|
111
|
+
availabilityTimeOffset = ((_d = representation.attributes.availabilityTimeOffset) !== null && _d !== void 0 ? _d : 0) +
|
|
112
|
+
((_e = context.availabilityTimeOffset) !== null && _e !== void 0 ? _e : 0);
|
|
113
|
+
}
|
|
110
114
|
const reprIndexCtxt = objectAssign({}, context, { availabilityTimeOffset,
|
|
111
115
|
availabilityTimeComplete,
|
|
112
116
|
unsafelyBaseOnPreviousRepresentation,
|
|
@@ -130,7 +130,7 @@ export default class LocalRepresentationIndex {
|
|
|
130
130
|
* @returns {boolean|undefined}
|
|
131
131
|
*/
|
|
132
132
|
awaitSegmentBetween(start, end) {
|
|
133
|
-
if (this.
|
|
133
|
+
if (this.isStillAwaitingFutureSegments()) {
|
|
134
134
|
return false;
|
|
135
135
|
}
|
|
136
136
|
if (this._index.incomingRanges === undefined) {
|
|
@@ -150,8 +150,8 @@ export default class LocalRepresentationIndex {
|
|
|
150
150
|
isSegmentStillAvailable() {
|
|
151
151
|
return true;
|
|
152
152
|
}
|
|
153
|
-
|
|
154
|
-
return this._index.isFinished;
|
|
153
|
+
isStillAwaitingFutureSegments() {
|
|
154
|
+
return !this._index.isFinished;
|
|
155
155
|
}
|
|
156
156
|
/**
|
|
157
157
|
* @returns {Boolean}
|
|
@@ -162,8 +162,8 @@ export default class MetaRepresentationIndex {
|
|
|
162
162
|
/**
|
|
163
163
|
* @returns {Boolean}
|
|
164
164
|
*/
|
|
165
|
-
|
|
166
|
-
return this._wrappedIndex.
|
|
165
|
+
isStillAwaitingFutureSegments() {
|
|
166
|
+
return this._wrappedIndex.isStillAwaitingFutureSegments();
|
|
167
167
|
}
|
|
168
168
|
/**
|
|
169
169
|
* @returns {Boolean}
|
|
@@ -189,9 +189,9 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
|
|
|
189
189
|
*/
|
|
190
190
|
_update(newIndex: SmoothRepresentationIndex): void;
|
|
191
191
|
/**
|
|
192
|
-
* Returns `
|
|
192
|
+
* Returns `false` if the last segments in this index have already been
|
|
193
193
|
* generated.
|
|
194
|
-
* Returns `
|
|
194
|
+
* Returns `true` if the index is still waiting on future segments to be
|
|
195
195
|
* generated.
|
|
196
196
|
*
|
|
197
197
|
* For Smooth, it should only depend on whether the content is a live content
|
|
@@ -199,7 +199,7 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
|
|
|
199
199
|
* TODO What about Smooth live content that finishes at some point?
|
|
200
200
|
* @returns {boolean}
|
|
201
201
|
*/
|
|
202
|
-
|
|
202
|
+
isStillAwaitingFutureSegments(): boolean;
|
|
203
203
|
/**
|
|
204
204
|
* @returns {Boolean}
|
|
205
205
|
*/
|
|
@@ -209,8 +209,8 @@ export default class SmoothRepresentationIndex implements IRepresentationIndex {
|
|
|
209
209
|
* Add segments to a `SharedSmoothSegmentTimeline` that were predicted to come
|
|
210
210
|
* after `currentSegment`.
|
|
211
211
|
* @param {Array.<Object>} nextSegments - The segment information parsed.
|
|
212
|
-
* @param {Object}
|
|
213
|
-
* new segment information.
|
|
212
|
+
* @param {Object} currentSegment - Information on the segment which contained
|
|
213
|
+
* that new segment information.
|
|
214
214
|
*/
|
|
215
215
|
addPredictedSegments(nextSegments: Array<{
|
|
216
216
|
duration: number;
|
|
@@ -18,7 +18,6 @@ import log from "../../../log";
|
|
|
18
18
|
import assert from "../../../utils/assert";
|
|
19
19
|
import getMonotonicTimeStamp from "../../../utils/monotonic_timestamp";
|
|
20
20
|
import { checkDiscontinuity, getIndexSegmentEnd, } from "../utils/index_helpers";
|
|
21
|
-
import isSegmentStillAvailable from "../utils/is_segment_still_available";
|
|
22
21
|
import { replaceSegmentSmoothTokens } from "./utils/tokens";
|
|
23
22
|
/**
|
|
24
23
|
* @param {Number} start
|
|
@@ -271,7 +270,7 @@ export default class SmoothRepresentationIndex {
|
|
|
271
270
|
awaitSegmentBetween(start, end) {
|
|
272
271
|
var _a;
|
|
273
272
|
assert(start <= end);
|
|
274
|
-
if (this.
|
|
273
|
+
if (this.isStillAwaitingFutureSegments()) {
|
|
275
274
|
return false;
|
|
276
275
|
}
|
|
277
276
|
const lastAvailablePosition = this.getLastAvailablePosition();
|
|
@@ -308,7 +307,24 @@ export default class SmoothRepresentationIndex {
|
|
|
308
307
|
}
|
|
309
308
|
this._refreshTimeline();
|
|
310
309
|
const { timeline, timescale } = this._sharedSmoothTimeline;
|
|
311
|
-
|
|
310
|
+
for (let i = 0; i < timeline.length; i++) {
|
|
311
|
+
const tSegment = timeline[i];
|
|
312
|
+
const tSegmentTime = tSegment.start / timescale;
|
|
313
|
+
if (tSegmentTime > segment.time) {
|
|
314
|
+
return false; // We went over it without finding it
|
|
315
|
+
}
|
|
316
|
+
else if (tSegmentTime === segment.time) {
|
|
317
|
+
return true;
|
|
318
|
+
}
|
|
319
|
+
else { // tSegment.start < segment.time
|
|
320
|
+
if (tSegment.repeatCount >= 0 && tSegment.duration !== undefined) {
|
|
321
|
+
const timeDiff = tSegmentTime - tSegment.start;
|
|
322
|
+
const repeat = (timeDiff / tSegment.duration) - 1;
|
|
323
|
+
return repeat % 1 === 0 && repeat <= tSegment.repeatCount;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return false;
|
|
312
328
|
}
|
|
313
329
|
/**
|
|
314
330
|
* @param {Error} error
|
|
@@ -342,9 +358,9 @@ export default class SmoothRepresentationIndex {
|
|
|
342
358
|
this._sharedSmoothTimeline.update(newIndex._sharedSmoothTimeline);
|
|
343
359
|
}
|
|
344
360
|
/**
|
|
345
|
-
* Returns `
|
|
361
|
+
* Returns `false` if the last segments in this index have already been
|
|
346
362
|
* generated.
|
|
347
|
-
* Returns `
|
|
363
|
+
* Returns `true` if the index is still waiting on future segments to be
|
|
348
364
|
* generated.
|
|
349
365
|
*
|
|
350
366
|
* For Smooth, it should only depend on whether the content is a live content
|
|
@@ -352,8 +368,8 @@ export default class SmoothRepresentationIndex {
|
|
|
352
368
|
* TODO What about Smooth live content that finishes at some point?
|
|
353
369
|
* @returns {boolean}
|
|
354
370
|
*/
|
|
355
|
-
|
|
356
|
-
return
|
|
371
|
+
isStillAwaitingFutureSegments() {
|
|
372
|
+
return this._isLive;
|
|
357
373
|
}
|
|
358
374
|
/**
|
|
359
375
|
* @returns {Boolean}
|
|
@@ -368,8 +384,8 @@ export default class SmoothRepresentationIndex {
|
|
|
368
384
|
* Add segments to a `SharedSmoothSegmentTimeline` that were predicted to come
|
|
369
385
|
* after `currentSegment`.
|
|
370
386
|
* @param {Array.<Object>} nextSegments - The segment information parsed.
|
|
371
|
-
* @param {Object}
|
|
372
|
-
* new segment information.
|
|
387
|
+
* @param {Object} currentSegment - Information on the segment which contained
|
|
388
|
+
* that new segment information.
|
|
373
389
|
*/
|
|
374
390
|
addPredictedSegments(nextSegments, currentSegment) {
|
|
375
391
|
this._sharedSmoothTimeline.addPredictedSegments(nextSegments, currentSegment);
|
|
@@ -97,7 +97,7 @@ export function getTimescaledRange(start, duration, timescale) {
|
|
|
97
97
|
* timescaled time.
|
|
98
98
|
* Returns -1 if the given time is lower than the start of the first available
|
|
99
99
|
* segment.
|
|
100
|
-
* @param {Object}
|
|
100
|
+
* @param {Object} timeline
|
|
101
101
|
* @param {Number} timeTScaled
|
|
102
102
|
* @returns {Number}
|
|
103
103
|
*/
|
|
@@ -22,10 +22,11 @@ import { REGXP_LENGTH } from "../regexps";
|
|
|
22
22
|
*/
|
|
23
23
|
export default function applyLineHeight(element, lineHeight) {
|
|
24
24
|
const trimmedLineHeight = lineHeight.trim();
|
|
25
|
+
const splittedLineHeight = trimmedLineHeight.split(" ");
|
|
25
26
|
if (trimmedLineHeight === "auto") {
|
|
26
27
|
return;
|
|
27
28
|
}
|
|
28
|
-
const firstLineHeight = REGXP_LENGTH.exec(
|
|
29
|
+
const firstLineHeight = REGXP_LENGTH.exec(splittedLineHeight[0]);
|
|
29
30
|
if (firstLineHeight === null) {
|
|
30
31
|
return;
|
|
31
32
|
}
|