rx-player 4.0.0-dev.2023110700 → 4.0.0-dev.2023120600
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 +18 -226
- package/FILES.md +1 -1
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/add_text_track.d.ts +1 -3
- package/dist/_esm5.processed/compat/add_text_track.js +4 -7
- package/dist/_esm5.processed/compat/browser_compatibility_types.d.ts +0 -7
- package/dist/_esm5.processed/compat/event_listeners.d.ts +2 -15
- package/dist/_esm5.processed/compat/event_listeners.js +2 -37
- package/dist/_esm5.processed/compat/index.d.ts +1 -3
- package/dist/_esm5.processed/compat/index.js +1 -3
- package/dist/_esm5.processed/config.d.ts +9 -21
- package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.d.ts +0 -58
- package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +14 -54
- package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.d.ts +2 -8
- package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.js +2 -11
- package/dist/_esm5.processed/core/api/debug/buffer_graph.js +2 -6
- package/dist/_esm5.processed/core/api/debug/modules/general_info.js +13 -32
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +3 -3
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +1 -1
- package/dist/_esm5.processed/core/api/option_utils.d.ts +14 -35
- package/dist/_esm5.processed/core/api/option_utils.js +47 -230
- package/dist/_esm5.processed/core/api/public_api.d.ts +92 -266
- package/dist/_esm5.processed/core/api/public_api.js +451 -807
- package/dist/_esm5.processed/core/{segment_buffers/implementations/image → api/track_management}/index.d.ts +3 -2
- package/dist/_esm5.processed/core/{segment_buffers/implementations/image → api/track_management}/index.js +3 -2
- package/dist/_esm5.processed/core/api/{tracks_management/media_element_track_choice_manager.d.ts → track_management/media_element_tracks_store.d.ts} +15 -75
- package/dist/_esm5.processed/core/api/{tracks_management/media_element_track_choice_manager.js → track_management/media_element_tracks_store.js} +74 -193
- package/dist/_esm5.processed/core/api/track_management/track_dispatcher.d.ts +84 -0
- package/dist/_esm5.processed/core/api/track_management/track_dispatcher.js +158 -0
- package/dist/_esm5.processed/core/api/track_management/tracks_store.d.ts +406 -0
- package/dist/_esm5.processed/core/api/track_management/tracks_store.js +932 -0
- package/dist/_esm5.processed/core/api/utils.d.ts +1 -0
- package/dist/_esm5.processed/core/api/utils.js +28 -11
- package/dist/_esm5.processed/core/decrypt/content_decryptor.js +3 -3
- package/dist/_esm5.processed/core/decrypt/find_key_system.js +83 -71
- package/dist/_esm5.processed/core/decrypt/get_media_keys.js +6 -5
- package/dist/_esm5.processed/core/decrypt/session_events_listener.js +10 -72
- package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.d.ts +4 -4
- package/dist/_esm5.processed/core/decrypt/utils/persistent_sessions_store.js +6 -4
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +1 -3
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +7 -26
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +3 -9
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +16 -9
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +1 -3
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
- package/dist/_esm5.processed/core/fetchers/utils/schedule_request.d.ts +1 -6
- package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +4 -41
- package/dist/_esm5.processed/core/init/directfile_content_initializer.js +1 -1
- package/dist/_esm5.processed/core/init/media_source_content_initializer.d.ts +1 -8
- package/dist/_esm5.processed/core/init/media_source_content_initializer.js +5 -19
- package/dist/_esm5.processed/core/init/types.d.ts +5 -15
- 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/text/html/text_track_cues_store.js +54 -6
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/utils.d.ts +2 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/utils.js +19 -2
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +1 -2
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +2 -3
- package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +2 -2
- package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
- package/dist/_esm5.processed/core/segment_buffers/index.js +2 -1
- package/dist/_esm5.processed/core/segment_buffers/inventory/index.d.ts +1 -0
- package/dist/_esm5.processed/core/segment_buffers/inventory/index.js +1 -0
- package/dist/_esm5.processed/core/segment_buffers/inventory/utils.d.ts +33 -0
- package/dist/_esm5.processed/core/segment_buffers/inventory/utils.js +49 -0
- package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.d.ts +0 -1
- package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +2 -16
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +0 -15
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +183 -93
- package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.d.ts +39 -0
- package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.js +133 -0
- package/dist/_esm5.processed/core/stream/adaptation/types.d.ts +27 -13
- package/dist/_esm5.processed/core/stream/index.d.ts +2 -3
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +2 -0
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +5 -7
- package/dist/_esm5.processed/core/stream/period/period_stream.js +13 -12
- package/dist/_esm5.processed/core/stream/period/types.d.ts +5 -14
- package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +2 -4
- package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.js +10 -46
- package/dist/_esm5.processed/core/stream/representation/representation_stream.js +29 -23
- package/dist/_esm5.processed/core/stream/representation/types.d.ts +11 -1
- package/dist/_esm5.processed/default_config.d.ts +35 -98
- package/dist/_esm5.processed/default_config.js +36 -113
- package/dist/_esm5.processed/errors/custom_loader_error.d.ts +1 -3
- package/dist/_esm5.processed/errors/custom_loader_error.js +1 -3
- package/dist/_esm5.processed/errors/media_error.js +2 -2
- package/dist/_esm5.processed/errors/network_error.d.ts +0 -1
- package/dist/_esm5.processed/errors/network_error.js +0 -1
- package/dist/_esm5.processed/errors/request_error.d.ts +2 -3
- package/dist/_esm5.processed/errors/request_error.js +2 -5
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -3
- package/dist/_esm5.processed/features/features_object.js +0 -2
- package/dist/_esm5.processed/features/list/directfile.js +2 -5
- package/dist/_esm5.processed/features/list/index.d.ts +0 -2
- package/dist/_esm5.processed/features/list/index.js +0 -2
- package/dist/_esm5.processed/features/types.d.ts +3 -27
- package/dist/_esm5.processed/manifest/adaptation.d.ts +9 -11
- package/dist/_esm5.processed/manifest/adaptation.js +41 -30
- package/dist/_esm5.processed/manifest/index.d.ts +3 -4
- package/dist/_esm5.processed/manifest/manifest.d.ts +5 -54
- package/dist/_esm5.processed/manifest/manifest.js +5 -110
- package/dist/_esm5.processed/manifest/period.d.ts +4 -5
- package/dist/_esm5.processed/manifest/representation.d.ts +10 -5
- package/dist/_esm5.processed/manifest/representation.js +33 -10
- package/dist/_esm5.processed/manifest/representation_index/index.d.ts +2 -2
- package/dist/_esm5.processed/manifest/representation_index/static.d.ts +2 -0
- package/dist/_esm5.processed/manifest/representation_index/static.js +6 -0
- package/dist/_esm5.processed/manifest/representation_index/types.d.ts +42 -21
- package/dist/_esm5.processed/manifest/types.d.ts +0 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/convert_supplemental_codecs.d.ts +17 -0
- package/dist/_esm5.processed/parsers/manifest/dash/common/convert_supplemental_codecs.js +26 -0
- package/dist/_esm5.processed/parsers/manifest/dash/common/flatten_overlapping_periods.js +5 -0
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +17 -31
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +26 -19
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +2 -0
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +7 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +2 -6
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +11 -8
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +2 -0
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +6 -0
- package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.js +1 -6
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +3 -5
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +0 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +0 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +29 -17
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +13 -6
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +7 -2
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.d.ts +10 -1
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +18 -2
- package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +6 -4
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +7 -6
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +5 -2
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
- package/dist/_esm5.processed/parsers/manifest/local/representation_index.d.ts +2 -0
- package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +6 -0
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.js +6 -6
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.d.ts +12 -3
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.js +11 -2
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +0 -1
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +11 -17
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +21 -83
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +53 -125
- package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.d.ts +119 -0
- package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.js +159 -0
- package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.d.ts +3 -6
- package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.js +4 -4
- package/dist/_esm5.processed/parsers/manifest/types.d.ts +4 -3
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_extent.js +1 -8
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_origin.js +1 -9
- package/dist/_esm5.processed/public_types.d.ts +396 -308
- package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.d.ts +5 -4
- package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +5 -4
- package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +4 -4
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +2 -3
- package/dist/_esm5.processed/transports/dash/pipelines.js +1 -4
- package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
- package/dist/_esm5.processed/transports/dash/segment_loader.js +26 -20
- package/dist/_esm5.processed/transports/dash/segment_parser.js +19 -24
- package/dist/_esm5.processed/transports/dash/text_loader.js +5 -5
- package/dist/_esm5.processed/transports/dash/text_parser.js +28 -33
- package/dist/_esm5.processed/transports/local/pipelines.js +1 -10
- package/dist/_esm5.processed/transports/local/segment_loader.js +2 -2
- package/dist/_esm5.processed/transports/local/segment_parser.d.ts +1 -1
- package/dist/_esm5.processed/transports/local/segment_parser.js +10 -10
- package/dist/_esm5.processed/transports/local/text_parser.d.ts +2 -2
- package/dist/_esm5.processed/transports/local/text_parser.js +23 -23
- package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +34 -52
- package/dist/_esm5.processed/{utils/list_to_map.d.ts → transports/smooth/is_mp4_embedded_track.d.ts} +5 -5
- package/dist/_esm5.processed/{features/list/image_buffer.d.ts → transports/smooth/is_mp4_embedded_track.js} +7 -6
- package/dist/_esm5.processed/transports/smooth/pipelines.js +33 -190
- package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +1 -1
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +28 -22
- package/dist/_esm5.processed/transports/smooth/utils.d.ts +1 -26
- package/dist/_esm5.processed/transports/smooth/utils.js +1 -55
- package/dist/_esm5.processed/transports/types.d.ts +94 -89
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
- package/dist/_esm5.processed/transports/utils/infer_segment_container.d.ts +3 -3
- package/dist/_esm5.processed/transports/utils/infer_segment_container.js +5 -7
- package/dist/_esm5.processed/transports/utils/parse_text_track.d.ts +8 -12
- package/dist/_esm5.processed/transports/utils/parse_text_track.js +19 -21
- package/dist/_esm5.processed/utils/array_includes.d.ts +2 -1
- package/dist/_esm5.processed/utils/array_includes.js +30 -28
- package/dist/_esm5.processed/utils/request/xhr.js +5 -5
- package/dist/commonjs/compat/is_codec_supported.js +22 -1
- package/dist/commonjs/compat/patch_webkit_source_buffer.js +2 -2
- package/dist/commonjs/config.d.ts +1 -0
- 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/option_utils.d.ts +4 -0
- package/dist/commonjs/core/api/option_utils.js +8 -3
- package/dist/commonjs/core/api/public_api.d.ts +11 -1
- package/dist/commonjs/core/api/public_api.js +46 -11
- 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 +24 -7
- package/dist/commonjs/core/init/media_source_content_initializer.d.ts +6 -0
- package/dist/commonjs/core/init/media_source_content_initializer.js +4 -6
- 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 +16 -17
- 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/segment_buffers/implementations/text/html/text_track_cues_store.js +54 -6
- package/dist/commonjs/core/segment_buffers/implementations/text/html/utils.d.ts +2 -1
- package/dist/commonjs/core/segment_buffers/implementations/text/html/utils.js +19 -2
- package/dist/commonjs/core/stream/adaptation/adaptation_stream.js +2 -2
- package/dist/commonjs/core/stream/orchestrator/stream_orchestrator.js +3 -3
- package/dist/commonjs/core/stream/period/period_stream.js +2 -2
- package/dist/commonjs/core/stream/representation/utils/get_buffer_status.js +3 -3
- package/dist/commonjs/core/stream/representation/utils/get_needed_segments.js +1 -1
- package/dist/commonjs/default_config.d.ts +5 -0
- package/dist/commonjs/default_config.js +5 -0
- 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/representation.js +18 -5
- 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/convert_supplemental_codecs.d.ts +17 -0
- package/dist/commonjs/parsers/manifest/dash/common/convert_supplemental_codecs.js +30 -0
- package/dist/commonjs/parsers/manifest/dash/common/flatten_overlapping_periods.js +5 -0
- 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 +36 -20
- package/dist/commonjs/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +3 -0
- package/dist/commonjs/parsers/manifest/dash/js-parser/node_parsers/Representation.js +3 -0
- package/dist/commonjs/parsers/manifest/dash/node_parser_types.d.ts +2 -0
- package/dist/commonjs/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +4 -0
- package/dist/commonjs/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +4 -0
- package/dist/commonjs/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
- 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/types.d.ts +1 -0
- package/dist/commonjs/parsers/manifest/utils/index_helpers.js +1 -1
- package/dist/commonjs/public_types.d.ts +78 -34
- 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/queue_microtask.d.ts +2 -0
- package/dist/commonjs/utils/queue_microtask.js +7 -0
- 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/compat/patch_webkit_source_buffer.js +2 -2
- package/dist/es2017/config.d.ts +1 -0
- 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/option_utils.d.ts +4 -0
- package/dist/es2017/core/api/option_utils.js +8 -3
- package/dist/es2017/core/api/public_api.d.ts +11 -1
- package/dist/es2017/core/api/public_api.js +44 -9
- 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 +24 -7
- package/dist/es2017/core/init/media_source_content_initializer.d.ts +6 -0
- package/dist/es2017/core/init/media_source_content_initializer.js +4 -6
- 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 +16 -15
- 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/segment_buffers/implementations/text/html/text_track_cues_store.js +54 -6
- package/dist/es2017/core/segment_buffers/implementations/text/html/utils.d.ts +2 -1
- package/dist/es2017/core/segment_buffers/implementations/text/html/utils.js +18 -2
- package/dist/es2017/core/stream/adaptation/adaptation_stream.js +2 -2
- package/dist/es2017/core/stream/orchestrator/stream_orchestrator.js +3 -3
- package/dist/es2017/core/stream/period/period_stream.js +2 -2
- package/dist/es2017/core/stream/representation/utils/get_buffer_status.js +3 -3
- package/dist/es2017/core/stream/representation/utils/get_needed_segments.js +1 -1
- package/dist/es2017/default_config.d.ts +5 -0
- package/dist/es2017/default_config.js +5 -0
- 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/representation.js +18 -5
- 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/convert_supplemental_codecs.d.ts +17 -0
- package/dist/es2017/parsers/manifest/dash/common/convert_supplemental_codecs.js +26 -0
- package/dist/es2017/parsers/manifest/dash/common/flatten_overlapping_periods.js +5 -0
- 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 +36 -20
- package/dist/es2017/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +3 -0
- package/dist/es2017/parsers/manifest/dash/js-parser/node_parsers/Representation.js +3 -0
- package/dist/es2017/parsers/manifest/dash/node_parser_types.d.ts +2 -0
- package/dist/es2017/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +4 -0
- package/dist/es2017/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +4 -0
- package/dist/es2017/parsers/manifest/dash/wasm-parser/ts/types.d.ts +2 -1
- 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/types.d.ts +1 -0
- package/dist/es2017/parsers/manifest/utils/index_helpers.js +1 -1
- package/dist/es2017/public_types.d.ts +78 -34
- 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/queue_microtask.d.ts +2 -0
- package/dist/es2017/utils/queue_microtask.js +5 -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 +900 -492
- package/dist/rx-player.min.js +1 -1
- package/package.json +3 -7
- package/scripts/update-version +2 -0
- package/sonar-project.properties +1 -1
- package/src/compat/is_codec_supported.ts +23 -1
- package/src/compat/patch_webkit_source_buffer.ts +2 -2
- 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/option_utils.ts +11 -3
- package/src/core/api/public_api.ts +48 -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 +23 -7
- package/src/core/init/media_source_content_initializer.ts +13 -7
- package/src/core/init/utils/content_time_boundaries_observer.ts +23 -22
- package/src/core/init/utils/get_initial_time.ts +25 -12
- package/src/core/segment_buffers/implementations/text/html/__tests__/utils.test.ts +15 -0
- package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +57 -6
- package/src/core/segment_buffers/implementations/text/html/utils.ts +19 -2
- package/src/core/stream/adaptation/adaptation_stream.ts +2 -2
- package/src/core/stream/orchestrator/stream_orchestrator.ts +3 -3
- package/src/core/stream/period/period_stream.ts +2 -2
- package/src/core/stream/representation/utils/get_buffer_status.ts +3 -3
- package/src/core/stream/representation/utils/get_needed_segments.ts +2 -2
- package/src/default_config.ts +5 -0
- 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/representation.ts +19 -6
- 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__/convert_supplemental_codecs.test.ts +37 -0
- package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +20 -0
- package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +182 -36
- package/src/parsers/manifest/dash/common/convert_supplemental_codecs.ts +32 -0
- package/src/parsers/manifest/dash/common/flatten_overlapping_periods.ts +5 -0
- 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 +39 -20
- package/src/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.ts +4 -0
- package/src/parsers/manifest/dash/js-parser/node_parsers/Representation.ts +4 -0
- package/src/parsers/manifest/dash/node_parser_types.ts +2 -0
- package/src/parsers/manifest/dash/wasm-parser/rs/events.rs +2 -0
- package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +2 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.ts +4 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/Representation.ts +4 -0
- package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +2 -0
- 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/types.ts +2 -0
- 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/public_types.ts +79 -34
- 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/queue_microtask.ts +7 -0
- package/src/utils/request/fetch.ts +35 -8
- package/src/utils/request/xhr.ts +45 -14
- package/dist/_esm5.processed/compat/fullscreen.d.ts +0 -32
- package/dist/_esm5.processed/compat/fullscreen.js +0 -78
- package/dist/_esm5.processed/compat/is_offline.d.ts +0 -39
- package/dist/_esm5.processed/compat/is_offline.js +0 -43
- package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.d.ts +0 -258
- package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.js +0 -989
- package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.d.ts +0 -75
- package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.js +0 -133
- package/dist/_esm5.processed/features/list/bif_parser.d.ts +0 -23
- package/dist/_esm5.processed/features/list/bif_parser.js +0 -27
- package/dist/_esm5.processed/features/list/image_buffer.js +0 -25
- package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +0 -38
- package/dist/_esm5.processed/transports/dash/image_pipelines.js +0 -129
- package/dist/_esm5.processed/utils/list_to_map.js +0 -28
- package/dist/_esm5.processed/utils/simple_set.d.ts +0 -51
- package/dist/_esm5.processed/utils/simple_set.js +0 -57
- package/dist/_esm5.processed/utils/uniq.d.ts +0 -36
- package/dist/_esm5.processed/utils/uniq.js +0 -43
- 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/next-tick.d.ts +0 -23
- 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) :
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
import log from "../../../../log";
|
|
17
17
|
import arrayFind from "../../../../utils/array_find";
|
|
18
18
|
import objectAssign from "../../../../utils/object_assign";
|
|
19
|
+
import { convertSupplementalCodecsToRFC6381 } from "./convert_supplemental_codecs";
|
|
19
20
|
import { getWEBMHDRInformation } from "./get_hdr_information";
|
|
20
21
|
import parseRepresentationIndex from "./parse_representation_index";
|
|
21
22
|
import resolveBaseURLs from "./resolve_base_urls";
|
|
@@ -76,23 +77,23 @@ function getHDRInformation({ adaptationProfiles, essentialProperties, supplement
|
|
|
76
77
|
* @returns {Array.<Object>}
|
|
77
78
|
*/
|
|
78
79
|
export default function parseRepresentations(representationsIR, adaptation, context) {
|
|
79
|
-
var _a, _b, _c, _d;
|
|
80
|
+
var _a, _b, _c, _d, _e;
|
|
80
81
|
const parsedRepresentations = [];
|
|
81
82
|
for (const representation of representationsIR) {
|
|
82
83
|
// Compute Representation ID
|
|
83
|
-
let representationID = representation.attributes.id
|
|
84
|
+
let representationID = representation.attributes.id !== undefined ?
|
|
84
85
|
representation.attributes.id :
|
|
85
86
|
(String(representation.attributes.bitrate) +
|
|
86
|
-
(representation.attributes.height
|
|
87
|
+
(representation.attributes.height !== undefined ?
|
|
87
88
|
(`-${representation.attributes.height}`) :
|
|
88
89
|
"") +
|
|
89
|
-
(representation.attributes.width
|
|
90
|
+
(representation.attributes.width !== undefined ?
|
|
90
91
|
(`-${representation.attributes.width}`) :
|
|
91
92
|
"") +
|
|
92
|
-
(representation.attributes.mimeType
|
|
93
|
+
(representation.attributes.mimeType !== undefined ?
|
|
93
94
|
(`-${representation.attributes.mimeType}`) :
|
|
94
95
|
"") +
|
|
95
|
-
(representation.attributes.codecs
|
|
96
|
+
(representation.attributes.codecs !== undefined ?
|
|
96
97
|
(`-${representation.attributes.codecs}`) :
|
|
97
98
|
""));
|
|
98
99
|
// Avoid duplicate IDs
|
|
@@ -104,8 +105,12 @@ export default function parseRepresentations(representationsIR, adaptation, cont
|
|
|
104
105
|
.unsafelyBaseOnPreviousAdaptation) === null || _a === void 0 ? void 0 : _a.getRepresentation(representationID)) !== null && _b !== void 0 ? _b : null;
|
|
105
106
|
const inbandEventStreams = combineInbandEventStreams(representation, adaptation);
|
|
106
107
|
const availabilityTimeComplete = (_c = representation.attributes.availabilityTimeComplete) !== null && _c !== void 0 ? _c : context.availabilityTimeComplete;
|
|
107
|
-
|
|
108
|
-
|
|
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
|
+
}
|
|
109
114
|
const reprIndexCtxt = objectAssign({}, context, { availabilityTimeOffset,
|
|
110
115
|
availabilityTimeComplete,
|
|
111
116
|
unsafelyBaseOnPreviousRepresentation,
|
|
@@ -114,7 +119,7 @@ export default function parseRepresentations(representationsIR, adaptation, cont
|
|
|
114
119
|
const representationIndex = parseRepresentationIndex(representation, reprIndexCtxt);
|
|
115
120
|
// Find bitrate
|
|
116
121
|
let representationBitrate;
|
|
117
|
-
if (representation.attributes.bitrate
|
|
122
|
+
if (representation.attributes.bitrate === undefined) {
|
|
118
123
|
log.warn("DASH: No usable bitrate found in the Representation.");
|
|
119
124
|
representationBitrate = 0;
|
|
120
125
|
}
|
|
@@ -141,45 +146,56 @@ export default function parseRepresentations(representationsIR, adaptation, cont
|
|
|
141
146
|
}
|
|
142
147
|
// Add optional attributes
|
|
143
148
|
let codecs;
|
|
144
|
-
if (representation.attributes.codecs
|
|
149
|
+
if (representation.attributes.codecs !== undefined) {
|
|
145
150
|
codecs = representation.attributes.codecs;
|
|
146
151
|
}
|
|
147
|
-
else if (adaptation.attributes.codecs
|
|
152
|
+
else if (adaptation.attributes.codecs !== undefined) {
|
|
148
153
|
codecs = adaptation.attributes.codecs;
|
|
149
154
|
}
|
|
150
|
-
if (codecs
|
|
155
|
+
if (codecs !== undefined) {
|
|
151
156
|
codecs = codecs === "mp4a.40.02" ? "mp4a.40.2" : codecs;
|
|
152
157
|
parsedRepresentation.codecs = codecs;
|
|
153
158
|
}
|
|
154
|
-
|
|
159
|
+
let supplementalCodecs;
|
|
160
|
+
if (representation.attributes.supplementalCodecs !== undefined) {
|
|
161
|
+
supplementalCodecs = representation.attributes.supplementalCodecs;
|
|
162
|
+
}
|
|
163
|
+
else if (adaptation.attributes.supplementalCodecs !== undefined) {
|
|
164
|
+
supplementalCodecs = adaptation.attributes.supplementalCodecs;
|
|
165
|
+
}
|
|
166
|
+
if (supplementalCodecs !== undefined) {
|
|
167
|
+
parsedRepresentation.supplementalCodecs =
|
|
168
|
+
convertSupplementalCodecsToRFC6381(supplementalCodecs);
|
|
169
|
+
}
|
|
170
|
+
if (representation.attributes.frameRate !== undefined) {
|
|
155
171
|
parsedRepresentation.frameRate =
|
|
156
172
|
representation.attributes.frameRate;
|
|
157
173
|
}
|
|
158
|
-
else if (adaptation.attributes.frameRate
|
|
174
|
+
else if (adaptation.attributes.frameRate !== undefined) {
|
|
159
175
|
parsedRepresentation.frameRate =
|
|
160
176
|
adaptation.attributes.frameRate;
|
|
161
177
|
}
|
|
162
|
-
if (representation.attributes.height
|
|
178
|
+
if (representation.attributes.height !== undefined) {
|
|
163
179
|
parsedRepresentation.height =
|
|
164
180
|
representation.attributes.height;
|
|
165
181
|
}
|
|
166
|
-
else if (adaptation.attributes.height
|
|
182
|
+
else if (adaptation.attributes.height !== undefined) {
|
|
167
183
|
parsedRepresentation.height =
|
|
168
184
|
adaptation.attributes.height;
|
|
169
185
|
}
|
|
170
|
-
if (representation.attributes.mimeType
|
|
186
|
+
if (representation.attributes.mimeType !== undefined) {
|
|
171
187
|
parsedRepresentation.mimeType =
|
|
172
188
|
representation.attributes.mimeType;
|
|
173
189
|
}
|
|
174
|
-
else if (adaptation.attributes.mimeType
|
|
190
|
+
else if (adaptation.attributes.mimeType !== undefined) {
|
|
175
191
|
parsedRepresentation.mimeType =
|
|
176
192
|
adaptation.attributes.mimeType;
|
|
177
193
|
}
|
|
178
|
-
if (representation.attributes.width
|
|
194
|
+
if (representation.attributes.width !== undefined) {
|
|
179
195
|
parsedRepresentation.width =
|
|
180
196
|
representation.attributes.width;
|
|
181
197
|
}
|
|
182
|
-
else if (adaptation.attributes.width
|
|
198
|
+
else if (adaptation.attributes.width !== undefined) {
|
|
183
199
|
parsedRepresentation.width =
|
|
184
200
|
adaptation.attributes.width;
|
|
185
201
|
}
|
|
@@ -240,6 +240,9 @@ function parseAdaptationSetAttributes(root) {
|
|
|
240
240
|
case "codecs":
|
|
241
241
|
parsedAdaptation.codecs = attribute.value;
|
|
242
242
|
break;
|
|
243
|
+
case "scte214:supplementalCodecs":
|
|
244
|
+
parsedAdaptation.supplementalCodecs = attribute.value;
|
|
245
|
+
break;
|
|
243
246
|
case "codingDependency":
|
|
244
247
|
parseValue(attribute.value, { asKey: "codingDependency",
|
|
245
248
|
parser: parseBoolean,
|
|
@@ -149,6 +149,9 @@ function parseRepresentationAttributes(representationElement) {
|
|
|
149
149
|
parser: parseMPDInteger,
|
|
150
150
|
dashName: "qualityRanking" });
|
|
151
151
|
break;
|
|
152
|
+
case "scte214:supplementalCodecs":
|
|
153
|
+
attributes.supplementalCodecs = attr.value;
|
|
154
|
+
break;
|
|
152
155
|
case "segmentProfiles":
|
|
153
156
|
attributes.segmentProfiles = attr.value;
|
|
154
157
|
break;
|
|
@@ -217,6 +217,7 @@ export interface IAdaptationSetAttributes {
|
|
|
217
217
|
segmentAlignment?: number | boolean;
|
|
218
218
|
segmentProfiles?: string;
|
|
219
219
|
subsegmentAlignment?: number | boolean;
|
|
220
|
+
supplementalCodecs?: string;
|
|
220
221
|
width?: number;
|
|
221
222
|
availabilityTimeComplete?: boolean;
|
|
222
223
|
availabilityTimeOffset?: number;
|
|
@@ -249,6 +250,7 @@ export interface IRepresentationAttributes {
|
|
|
249
250
|
profiles?: string;
|
|
250
251
|
qualityRanking?: number;
|
|
251
252
|
segmentProfiles?: string;
|
|
253
|
+
supplementalCodecs?: string;
|
|
252
254
|
width?: number;
|
|
253
255
|
availabilityTimeComplete?: boolean;
|
|
254
256
|
availabilityTimeOffset?: number;
|
|
@@ -222,6 +222,10 @@ export function generateAdaptationSetAttrParser(adaptationAttrs, linearMemory) {
|
|
|
222
222
|
adaptationAttrs.codecs =
|
|
223
223
|
parseString(textDecoder, linearMemory.buffer, ptr, len);
|
|
224
224
|
break;
|
|
225
|
+
case 77 /* AttributeName.SupplementalCodecs */:
|
|
226
|
+
adaptationAttrs.supplementalCodecs =
|
|
227
|
+
parseString(textDecoder, linearMemory.buffer, ptr, len);
|
|
228
|
+
break;
|
|
225
229
|
case 2 /* AttributeName.Profiles */:
|
|
226
230
|
adaptationAttrs.profiles =
|
|
227
231
|
parseString(textDecoder, linearMemory.buffer, ptr, len);
|
|
@@ -122,6 +122,10 @@ export function generateRepresentationAttrParser(representationAttrs, linearMemo
|
|
|
122
122
|
representationAttrs.codecs =
|
|
123
123
|
parseString(textDecoder, linearMemory.buffer, ptr, len);
|
|
124
124
|
break;
|
|
125
|
+
case 77 /* AttributeName.SupplementalCodecs */:
|
|
126
|
+
representationAttrs.supplementalCodecs =
|
|
127
|
+
parseString(textDecoder, linearMemory.buffer, ptr, len);
|
|
128
|
+
break;
|
|
125
129
|
case 5 /* AttributeName.CodingDependency */:
|
|
126
130
|
representationAttrs.codingDependency =
|
|
127
131
|
new DataView(linearMemory.buffer).getUint8(0) === 0;
|
|
@@ -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);
|