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,8 +22,8 @@ import { IStreamOrchestratorPlaybackObservation } from "../../stream";
|
|
|
22
22
|
/**
|
|
23
23
|
* Observes what's being played and take care of media events relating to time
|
|
24
24
|
* boundaries:
|
|
25
|
-
* - Emits a `
|
|
26
|
-
* known and every time it changes.
|
|
25
|
+
* - Emits a `endingPositionChange` when the known maximum playable position
|
|
26
|
+
* of the current content is known and every time it changes.
|
|
27
27
|
* - Emits `endOfStream` API once segments have been pushed until the end and
|
|
28
28
|
* `resumeStream` if downloads starts back.
|
|
29
29
|
* - Emits a `periodChange` event when the currently-playing Period seemed to
|
|
@@ -56,10 +56,11 @@ export default class ContentTimeBoundariesObserver extends EventEmitter<IContent
|
|
|
56
56
|
*/
|
|
57
57
|
constructor(manifest: Manifest, playbackObserver: IReadOnlyPlaybackObserver<IStreamOrchestratorPlaybackObservation>, bufferTypes: IBufferType[]);
|
|
58
58
|
/**
|
|
59
|
-
* Returns an estimate of the current
|
|
59
|
+
* Returns an estimate of the current last position which may be played in
|
|
60
|
+
* the content at the moment.
|
|
60
61
|
* @returns {Object}
|
|
61
62
|
*/
|
|
62
|
-
|
|
63
|
+
getCurrentEndingTime(): IEndingPositionInformation;
|
|
63
64
|
/**
|
|
64
65
|
* Method to call any time an Adaptation has been selected.
|
|
65
66
|
*
|
|
@@ -126,20 +127,20 @@ export default class ContentTimeBoundariesObserver extends EventEmitter<IContent
|
|
|
126
127
|
private _addActivelyLoadedPeriod;
|
|
127
128
|
private _removeActivelyLoadedPeriod;
|
|
128
129
|
private _checkCurrentPeriod;
|
|
129
|
-
private
|
|
130
|
+
private _getManifestEndTime;
|
|
130
131
|
private _lazilyCreateActiveStreamInfo;
|
|
131
132
|
private _checkEndOfStream;
|
|
132
133
|
}
|
|
133
|
-
export interface
|
|
134
|
+
export interface IEndingPositionInformation {
|
|
134
135
|
/**
|
|
135
136
|
* The new maximum known position (note that this is the ending position
|
|
136
137
|
* currently known of the current content, it might be superior to the last
|
|
137
138
|
* position at which segments are available and it might also evolve over
|
|
138
139
|
* time), in seconds.
|
|
139
140
|
*/
|
|
140
|
-
|
|
141
|
+
endingPosition: number;
|
|
141
142
|
/**
|
|
142
|
-
* If `true`, the communicated `
|
|
143
|
+
* If `true`, the communicated `endingPosition` is the actual end of the content.
|
|
143
144
|
* It may still be updated due to a track change or to add precision, but it
|
|
144
145
|
* is still a (rough) estimate of the maximum position that content should
|
|
145
146
|
* have.
|
|
@@ -147,7 +148,7 @@ export interface IDurationItem {
|
|
|
147
148
|
* If `false`, this is the currently known maximum position associated to
|
|
148
149
|
* the content, but the content is still evolving (typically, new media
|
|
149
150
|
* segments are still being generated) and as such it can still have a
|
|
150
|
-
* longer
|
|
151
|
+
* longer `endingPosition` in the future.
|
|
151
152
|
*/
|
|
152
153
|
isEnd: boolean;
|
|
153
154
|
}
|
|
@@ -161,10 +162,10 @@ export interface IContentTimeBoundariesObserverEvent {
|
|
|
161
162
|
/** Triggered when a new `Period` is currently playing. */
|
|
162
163
|
periodChange: Period;
|
|
163
164
|
/**
|
|
164
|
-
* Triggered when the
|
|
165
|
-
* or changed.
|
|
165
|
+
* Triggered when the ending position of the currently-playing content became
|
|
166
|
+
* known or changed.
|
|
166
167
|
*/
|
|
167
|
-
|
|
168
|
+
endingPositionChange: IEndingPositionInformation;
|
|
168
169
|
/**
|
|
169
170
|
* Triggered when the last possible chronological segment for all types of
|
|
170
171
|
* buffers has either been pushed or is being pushed to the corresponding
|
|
@@ -21,8 +21,8 @@ import TaskCanceller from "../../../utils/task_canceller";
|
|
|
21
21
|
/**
|
|
22
22
|
* Observes what's being played and take care of media events relating to time
|
|
23
23
|
* boundaries:
|
|
24
|
-
* - Emits a `
|
|
25
|
-
* known and every time it changes.
|
|
24
|
+
* - Emits a `endingPositionChange` when the known maximum playable position
|
|
25
|
+
* of the current content is known and every time it changes.
|
|
26
26
|
* - Emits `endOfStream` API once segments have been pushed until the end and
|
|
27
27
|
* `resumeStream` if downloads starts back.
|
|
28
28
|
* - Emits a `periodChange` event when the currently-playing Period seemed to
|
|
@@ -65,7 +65,7 @@ export default class ContentTimeBoundariesObserver extends EventEmitter {
|
|
|
65
65
|
}
|
|
66
66
|
}, { includeLastObservation: true, clearSignal: cancelSignal });
|
|
67
67
|
manifest.addEventListener("manifestUpdate", () => {
|
|
68
|
-
this.trigger("
|
|
68
|
+
this.trigger("endingPositionChange", this._getManifestEndTime());
|
|
69
69
|
if (cancelSignal.isCancelled()) {
|
|
70
70
|
return;
|
|
71
71
|
}
|
|
@@ -73,11 +73,12 @@ export default class ContentTimeBoundariesObserver extends EventEmitter {
|
|
|
73
73
|
}, cancelSignal);
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
|
-
* Returns an estimate of the current
|
|
76
|
+
* Returns an estimate of the current last position which may be played in
|
|
77
|
+
* the content at the moment.
|
|
77
78
|
* @returns {Object}
|
|
78
79
|
*/
|
|
79
|
-
|
|
80
|
-
return this.
|
|
80
|
+
getCurrentEndingTime() {
|
|
81
|
+
return this._getManifestEndTime();
|
|
81
82
|
}
|
|
82
83
|
/**
|
|
83
84
|
* Method to call any time an Adaptation has been selected.
|
|
@@ -106,12 +107,13 @@ export default class ContentTimeBoundariesObserver extends EventEmitter {
|
|
|
106
107
|
.updateLastVideoAdaptation(adaptation);
|
|
107
108
|
}
|
|
108
109
|
const endingPosition = this._maximumPositionCalculator.getEndingPosition();
|
|
109
|
-
const
|
|
110
|
+
const newEndingPosition = endingPosition !== undefined ?
|
|
110
111
|
{ isEnd: true,
|
|
111
|
-
|
|
112
|
+
endingPosition } :
|
|
112
113
|
{ isEnd: false,
|
|
113
|
-
|
|
114
|
-
|
|
114
|
+
endingPosition: this._maximumPositionCalculator
|
|
115
|
+
.getMaximumAvailablePosition() };
|
|
116
|
+
this.trigger("endingPositionChange", newEndingPosition);
|
|
115
117
|
}
|
|
116
118
|
}
|
|
117
119
|
}
|
|
@@ -238,13 +240,13 @@ export default class ContentTimeBoundariesObserver extends EventEmitter {
|
|
|
238
240
|
}
|
|
239
241
|
}
|
|
240
242
|
}
|
|
241
|
-
|
|
243
|
+
_getManifestEndTime() {
|
|
242
244
|
const endingPosition = this._maximumPositionCalculator.getEndingPosition();
|
|
243
245
|
return endingPosition !== undefined ?
|
|
244
246
|
{ isEnd: true,
|
|
245
|
-
|
|
247
|
+
endingPosition } :
|
|
246
248
|
{ isEnd: false,
|
|
247
|
-
|
|
249
|
+
endingPosition: this._maximumPositionCalculator.getMaximumAvailablePosition() };
|
|
248
250
|
}
|
|
249
251
|
_lazilyCreateActiveStreamInfo(bufferType) {
|
|
250
252
|
let streamInfo = this._activeStreams.get(bufferType);
|
|
@@ -315,9 +317,8 @@ class MaximumPositionCalculator {
|
|
|
315
317
|
* @returns {number}
|
|
316
318
|
*/
|
|
317
319
|
getMaximumAvailablePosition() {
|
|
318
|
-
var _a;
|
|
319
320
|
if (this._manifest.isDynamic) {
|
|
320
|
-
return
|
|
321
|
+
return this._manifest.getMaximumSafePosition();
|
|
321
322
|
}
|
|
322
323
|
if (this._lastVideoAdaptation === undefined ||
|
|
323
324
|
this._lastAudioAdaptation === undefined) {
|
|
@@ -37,11 +37,25 @@ export interface IInitialTimeOptions {
|
|
|
37
37
|
*/
|
|
38
38
|
fromFirstPosition?: number | null | undefined;
|
|
39
39
|
/**
|
|
40
|
-
* If set, we should begin at this position relative to the content's
|
|
41
|
-
* in seconds.
|
|
40
|
+
* If set, we should begin at this position relative to the content's maximum
|
|
41
|
+
* seekable position, in seconds.
|
|
42
|
+
*
|
|
43
|
+
* It should consequently in most cases be a negative value.
|
|
42
44
|
*/
|
|
43
45
|
fromLastPosition?: number | null | undefined;
|
|
44
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* If set, we should begin at this position relative to the content's live
|
|
48
|
+
* edge if it makes sense, in seconds.
|
|
49
|
+
*
|
|
50
|
+
* It should consequently in most cases be a negative value.
|
|
51
|
+
*
|
|
52
|
+
* If the live edge is unknown or if it does not make sense for the current
|
|
53
|
+
* content, that position is relative to the content's maximum position
|
|
54
|
+
* instead.
|
|
55
|
+
*/
|
|
56
|
+
fromLivePosition?: number | null | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* If set, we should begin at this position relative to the whole duration of
|
|
45
59
|
* the content, in percentage.
|
|
46
60
|
*/
|
|
47
61
|
percentage?: number | null | undefined;
|
|
@@ -31,15 +31,10 @@ import getMonotonicTimeStamp from "../../../utils/monotonic_timestamp";
|
|
|
31
31
|
* @returns {Number}
|
|
32
32
|
*/
|
|
33
33
|
export default function getInitialTime(manifest, lowLatencyMode, startAt) {
|
|
34
|
+
var _a;
|
|
34
35
|
if (!isNullOrUndefined(startAt)) {
|
|
35
36
|
const min = manifest.getMinimumSafePosition();
|
|
36
|
-
|
|
37
|
-
if (manifest.isLive) {
|
|
38
|
-
max = manifest.getLivePosition();
|
|
39
|
-
}
|
|
40
|
-
if (max === undefined) {
|
|
41
|
-
max = manifest.getMaximumSafePosition();
|
|
42
|
-
}
|
|
37
|
+
const max = manifest.getMaximumSafePosition();
|
|
43
38
|
if (!isNullOrUndefined(startAt.position)) {
|
|
44
39
|
log.debug("Init: using startAt.minimumPosition");
|
|
45
40
|
return Math.max(Math.min(startAt.position, max), min);
|
|
@@ -64,6 +59,13 @@ export default function getInitialTime(manifest, lowLatencyMode, startAt) {
|
|
|
64
59
|
return fromLastPosition >= 0 ? max :
|
|
65
60
|
Math.max(min, max + fromLastPosition);
|
|
66
61
|
}
|
|
62
|
+
else if (!isNullOrUndefined(startAt.fromLivePosition)) {
|
|
63
|
+
log.debug("Init: using startAt.fromLivePosition");
|
|
64
|
+
const livePosition = (_a = manifest.getLivePosition()) !== null && _a !== void 0 ? _a : max;
|
|
65
|
+
const { fromLivePosition } = startAt;
|
|
66
|
+
return fromLivePosition >= 0 ? livePosition :
|
|
67
|
+
Math.max(min, livePosition + fromLivePosition);
|
|
68
|
+
}
|
|
67
69
|
else if (!isNullOrUndefined(startAt.percentage)) {
|
|
68
70
|
log.debug("Init: using startAt.percentage");
|
|
69
71
|
const { percentage } = startAt;
|
|
@@ -15,6 +15,22 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import assert from "../../../../../utils/assert";
|
|
17
17
|
import { areNearlyEqual, getCuesAfter, getCuesBefore, removeCuesInfosBetween, } from "./utils";
|
|
18
|
+
/**
|
|
19
|
+
* first or last IHTMLCue in a group can have a slighlty different start
|
|
20
|
+
* or end time than the start or end time of the ICuesGroup due to parsing
|
|
21
|
+
* approximation.
|
|
22
|
+
* DELTA_CUES_GROUP defines the tolerance level when comparing the start/end
|
|
23
|
+
* of a IHTMLCue to the start/end of a ICuesGroup.
|
|
24
|
+
* Having this value too high may lead to have unwanted subtitle displayed
|
|
25
|
+
* Having this value too low may lead to have subtitles not displayed
|
|
26
|
+
*/
|
|
27
|
+
const DELTA_CUES_GROUP = 1e-3;
|
|
28
|
+
/**
|
|
29
|
+
* segment_duration / RELATIVE_DELTA_RATIO = relative_delta
|
|
30
|
+
*
|
|
31
|
+
* relative_delta is the tolerance to determine if two segements are the same
|
|
32
|
+
*/
|
|
33
|
+
const RELATIVE_DELTA_RATIO = 5;
|
|
18
34
|
/**
|
|
19
35
|
* Manage the buffer of the HTMLTextSegmentBuffer.
|
|
20
36
|
* Allows to add, remove and recuperate cues at given times.
|
|
@@ -57,6 +73,18 @@ export default class TextTrackCuesStore {
|
|
|
57
73
|
ret.push(cues[j].element);
|
|
58
74
|
}
|
|
59
75
|
}
|
|
76
|
+
// first or last IHTMLCue in a group can have a slighlty different start
|
|
77
|
+
// or end time than the start or end time of the ICuesGroup due to parsing
|
|
78
|
+
// approximation.
|
|
79
|
+
// Add a tolerance of 1ms to fix this issue
|
|
80
|
+
if (ret.length === 0 && cues.length > 0) {
|
|
81
|
+
for (let j = 0; j < cues.length; j++) {
|
|
82
|
+
if (areNearlyEqual(time, cues[j].start, DELTA_CUES_GROUP)
|
|
83
|
+
|| areNearlyEqual(time, cues[j].end, DELTA_CUES_GROUP)) {
|
|
84
|
+
ret.push(cues[j].element);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
60
88
|
return ret;
|
|
61
89
|
}
|
|
62
90
|
}
|
|
@@ -143,6 +171,11 @@ export default class TextTrackCuesStore {
|
|
|
143
171
|
insert(cues, start, end) {
|
|
144
172
|
const cuesBuffer = this._cuesBuffer;
|
|
145
173
|
const cuesInfosToInsert = { start, end, cues };
|
|
174
|
+
// it's preferable to have a delta depending on the duration of the segment
|
|
175
|
+
// if the delta is one fifth of the length of the segment:
|
|
176
|
+
// a segment of [0, 2] is the "same" segment as [0, 2.1]
|
|
177
|
+
// but [0, 0.04] is not the "same" segement as [0,04, 0.08]
|
|
178
|
+
const relativeDelta = Math.abs(start - end) / RELATIVE_DELTA_RATIO;
|
|
146
179
|
/**
|
|
147
180
|
* Called when we found the index of the next cue relative to the cue we
|
|
148
181
|
* want to insert (that is a cue starting after its start or at the same
|
|
@@ -154,7 +187,7 @@ export default class TextTrackCuesStore {
|
|
|
154
187
|
function onIndexOfNextCueFound(indexOfNextCue) {
|
|
155
188
|
const nextCue = cuesBuffer[indexOfNextCue];
|
|
156
189
|
if (nextCue === undefined || // no cue
|
|
157
|
-
areNearlyEqual(cuesInfosToInsert.end, nextCue.end)) // samey end
|
|
190
|
+
areNearlyEqual(cuesInfosToInsert.end, nextCue.end, relativeDelta)) // samey end
|
|
158
191
|
{
|
|
159
192
|
// ours: |AAAAA|
|
|
160
193
|
// the current one: |BBBBB|
|
|
@@ -190,8 +223,8 @@ export default class TextTrackCuesStore {
|
|
|
190
223
|
for (let cueIdx = 0; cueIdx < cuesBuffer.length; cueIdx++) {
|
|
191
224
|
let cuesInfos = cuesBuffer[cueIdx];
|
|
192
225
|
if (start < cuesInfos.end) {
|
|
193
|
-
if (areNearlyEqual(start, cuesInfos.start)) {
|
|
194
|
-
if (areNearlyEqual(end, cuesInfos.end)) {
|
|
226
|
+
if (areNearlyEqual(start, cuesInfos.start, relativeDelta)) {
|
|
227
|
+
if (areNearlyEqual(end, cuesInfos.end, relativeDelta)) {
|
|
195
228
|
// exact same segment
|
|
196
229
|
// ours: |AAAAA|
|
|
197
230
|
// the current one: |BBBBB|
|
|
@@ -239,7 +272,7 @@ export default class TextTrackCuesStore {
|
|
|
239
272
|
cuesBuffer.splice(cueIdx, 0, cuesInfosToInsert);
|
|
240
273
|
return;
|
|
241
274
|
}
|
|
242
|
-
else if (areNearlyEqual(end, cuesInfos.start)) {
|
|
275
|
+
else if (areNearlyEqual(end, cuesInfos.start, relativeDelta)) {
|
|
243
276
|
// our cue goes just before the current one:
|
|
244
277
|
// ours: |AAAAAAA|
|
|
245
278
|
// the current one: |BBBB|
|
|
@@ -251,7 +284,7 @@ export default class TextTrackCuesStore {
|
|
|
251
284
|
cuesBuffer.splice(cueIdx, 0, cuesInfosToInsert);
|
|
252
285
|
return;
|
|
253
286
|
}
|
|
254
|
-
else if (areNearlyEqual(end, cuesInfos.end)) {
|
|
287
|
+
else if (areNearlyEqual(end, cuesInfos.end, relativeDelta)) {
|
|
255
288
|
// ours: |AAAAAAA|
|
|
256
289
|
// the current one: |BBBB|
|
|
257
290
|
// Result: |AAAAAAA|
|
|
@@ -279,7 +312,7 @@ export default class TextTrackCuesStore {
|
|
|
279
312
|
return;
|
|
280
313
|
}
|
|
281
314
|
// else -> start > cuesInfos.start
|
|
282
|
-
if (areNearlyEqual(cuesInfos.end, end)) {
|
|
315
|
+
if (areNearlyEqual(cuesInfos.end, end, relativeDelta)) {
|
|
283
316
|
// ours: |AAAAAA|
|
|
284
317
|
// the current one: |BBBBBBBB|
|
|
285
318
|
// Result: |BBAAAAAA|
|
|
@@ -315,6 +348,21 @@ export default class TextTrackCuesStore {
|
|
|
315
348
|
}
|
|
316
349
|
}
|
|
317
350
|
}
|
|
351
|
+
if (cuesBuffer.length) {
|
|
352
|
+
const lastCue = cuesBuffer[cuesBuffer.length - 1];
|
|
353
|
+
if (areNearlyEqual(lastCue.end, start, relativeDelta)) {
|
|
354
|
+
// Match the end of the previous cue to the start of the following one
|
|
355
|
+
// if they are close enough. If there is a small gap between two segments
|
|
356
|
+
// it can lead to having no subtitles for a short time, this is noticeable when
|
|
357
|
+
// two successive segments displays the same text, making it diseappear
|
|
358
|
+
// and reappear quickly, which gives the impression of blinking
|
|
359
|
+
//
|
|
360
|
+
// ours: |AAAAA|
|
|
361
|
+
// the current one: |BBBBB|...
|
|
362
|
+
// Result: |BBBBBBBAAAAA|
|
|
363
|
+
lastCue.end = start;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
318
366
|
// no cues group has the end after our current start.
|
|
319
367
|
// These cues should be the last one
|
|
320
368
|
cuesBuffer.push(cuesInfosToInsert);
|
|
@@ -18,9 +18,10 @@ import { ICuesGroup, IHTMLCue } from "./types";
|
|
|
18
18
|
* @see MAX_DELTA_BUFFER_TIME
|
|
19
19
|
* @param {Number} a
|
|
20
20
|
* @param {Number} b
|
|
21
|
+
* @param {Number} delta
|
|
21
22
|
* @returns {Boolean}
|
|
22
23
|
*/
|
|
23
|
-
export declare function areNearlyEqual(a: number, b: number): boolean;
|
|
24
|
+
export declare function areNearlyEqual(a: number, b: number, delta?: number): boolean;
|
|
24
25
|
/**
|
|
25
26
|
* Get all cues which have data before the given time.
|
|
26
27
|
* @param {Object} cues
|
|
@@ -44,6 +44,21 @@
|
|
|
44
44
|
* Setting a value too high might lead to two segments targeting different times
|
|
45
45
|
* to be wrongly believed to target the same time. In worst case scenarios, this
|
|
46
46
|
* could lead to wanted text tracks being removed.
|
|
47
|
+
*
|
|
48
|
+
* When comparing 2 segments s1 and s2, you may want to take into account the duration
|
|
49
|
+
* of the segments:
|
|
50
|
+
* - if s1 is [0, 2] and s2 is [0, 2.1] s1 and s2 can be considered as nearly equal as
|
|
51
|
+
* there is a relative difference of: (2.1-2) / 2 = 5%;
|
|
52
|
+
* Formula: (end_s1 - end_s2) / duration_s2 = relative_difference
|
|
53
|
+
* - if s1 is [0, 0.04] and s2 is [0.04, 0.08] s1 and s2 may not considered as nearly
|
|
54
|
+
* equal as there is a relative difference of: (0.04-0.08) / 0.04 = 100%
|
|
55
|
+
*
|
|
56
|
+
* To compare relatively to the duration of a segment you can provide and additional
|
|
57
|
+
* parameter "delta" that remplace MAX_DELTA_BUFFER_TIME.
|
|
58
|
+
* If parameter "delta" is higher than MAX_DELTA_BUFFER_TIME, MAX_DELTA_BUFFER_TIME
|
|
59
|
+
* is used instead of delta. This ensure that segments are nearly equal when comparing
|
|
60
|
+
* relatively AND absolutely.
|
|
61
|
+
*
|
|
47
62
|
* @type Number
|
|
48
63
|
*/
|
|
49
64
|
const MAX_DELTA_BUFFER_TIME = 0.2;
|
|
@@ -51,10 +66,11 @@ const MAX_DELTA_BUFFER_TIME = 0.2;
|
|
|
51
66
|
* @see MAX_DELTA_BUFFER_TIME
|
|
52
67
|
* @param {Number} a
|
|
53
68
|
* @param {Number} b
|
|
69
|
+
* @param {Number} delta
|
|
54
70
|
* @returns {Boolean}
|
|
55
71
|
*/
|
|
56
|
-
export function areNearlyEqual(a, b) {
|
|
57
|
-
return Math.abs(a - b) <= MAX_DELTA_BUFFER_TIME;
|
|
72
|
+
export function areNearlyEqual(a, b, delta = MAX_DELTA_BUFFER_TIME) {
|
|
73
|
+
return Math.abs(a - b) <= Math.min(delta, MAX_DELTA_BUFFER_TIME);
|
|
58
74
|
}
|
|
59
75
|
/**
|
|
60
76
|
* Get all cues which have data before the given time.
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import nextTick from "next-tick";
|
|
2
1
|
import config from "../../../config";
|
|
3
2
|
import { formatError } from "../../../errors";
|
|
4
3
|
import log from "../../../log";
|
|
@@ -6,6 +5,7 @@ import assertUnreachable from "../../../utils/assert_unreachable";
|
|
|
6
5
|
import cancellableSleep from "../../../utils/cancellable_sleep";
|
|
7
6
|
import noop from "../../../utils/noop";
|
|
8
7
|
import objectAssign from "../../../utils/object_assign";
|
|
8
|
+
import queueMicrotask from "../../../utils/queue_microtask";
|
|
9
9
|
import SharedReference, { createMappedReference, } from "../../../utils/reference";
|
|
10
10
|
import TaskCanceller from "../../../utils/task_canceller";
|
|
11
11
|
import RepresentationStream from "../representation";
|
|
@@ -133,7 +133,7 @@ export default function AdaptationStream({ playbackObserver, content, options, r
|
|
|
133
133
|
// conditions where the inner logic would be called synchronously before
|
|
134
134
|
// the next observation (which may reflect very different playback conditions)
|
|
135
135
|
// is actually received.
|
|
136
|
-
return
|
|
136
|
+
return queueMicrotask(() => {
|
|
137
137
|
playbackObserver.listen(() => {
|
|
138
138
|
if (fnCancelSignal.isCancelled()) {
|
|
139
139
|
return;
|
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import nextTick from "next-tick";
|
|
17
16
|
import config from "../../../config";
|
|
18
17
|
import { MediaError } from "../../../errors";
|
|
19
18
|
import log from "../../../log";
|
|
19
|
+
import queueMicrotask from "../../../utils/queue_microtask";
|
|
20
20
|
import { createMappedReference, } from "../../../utils/reference";
|
|
21
21
|
import SortedList from "../../../utils/sorted_list";
|
|
22
22
|
import TaskCanceller from "../../../utils/task_canceller";
|
|
@@ -265,7 +265,7 @@ export default function StreamOrchestrator(content, playbackObserver, representa
|
|
|
265
265
|
// Schedule micro task before checking the last playback observation
|
|
266
266
|
// to reduce the risk of race conditions where the next observation
|
|
267
267
|
// was going to be emitted synchronously.
|
|
268
|
-
|
|
268
|
+
queueMicrotask(() => {
|
|
269
269
|
var _a;
|
|
270
270
|
if (orchestratorCancelSignal.isCancelled()) {
|
|
271
271
|
return;
|
|
@@ -430,7 +430,7 @@ export default function StreamOrchestrator(content, playbackObserver, representa
|
|
|
430
430
|
// conditions where the inner logic would be called synchronously before
|
|
431
431
|
// the next observation (which may reflect very different playback
|
|
432
432
|
// conditions) is actually received.
|
|
433
|
-
return
|
|
433
|
+
return queueMicrotask(() => {
|
|
434
434
|
if (innerCancelSignal.isCancelled()) {
|
|
435
435
|
return;
|
|
436
436
|
}
|
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import nextTick from "next-tick";
|
|
17
16
|
import config from "../../../config";
|
|
18
17
|
import { formatError, MediaError, } from "../../../errors";
|
|
19
18
|
import log from "../../../log";
|
|
20
19
|
import objectAssign from "../../../utils/object_assign";
|
|
20
|
+
import queueMicrotask from "../../../utils/queue_microtask";
|
|
21
21
|
import { getLeftSizeOfBufferedTimeRange } from "../../../utils/ranges";
|
|
22
22
|
import SharedReference from "../../../utils/reference";
|
|
23
23
|
import TaskCanceller, { CancellationError, } from "../../../utils/task_canceller";
|
|
@@ -253,7 +253,7 @@ export default function PeriodStream({ bufferType, content, garbageCollectors, p
|
|
|
253
253
|
// is actually received.
|
|
254
254
|
// It can happen when `askForMediaSourceReload` is called as a side-effect of
|
|
255
255
|
// the same event that triggers the playback observation to be emitted.
|
|
256
|
-
|
|
256
|
+
queueMicrotask(() => {
|
|
257
257
|
playbackObserver.listen(() => {
|
|
258
258
|
if (cancelSignal.isCancelled()) {
|
|
259
259
|
return;
|
|
@@ -74,7 +74,7 @@ export default function getBufferStatus(content, initialWantedTime, playbackObse
|
|
|
74
74
|
* needed segments for this Representation until the end of the Period.
|
|
75
75
|
*/
|
|
76
76
|
const hasFinishedLoading = representation.index.isInitialized() &&
|
|
77
|
-
representation.index.
|
|
77
|
+
!representation.index.isStillAwaitingFutureSegments() &&
|
|
78
78
|
neededRange.hasReachedPeriodEnd &&
|
|
79
79
|
prioritizedNeededSegments.length === 0 &&
|
|
80
80
|
segmentsOnHold.length === 0;
|
|
@@ -128,7 +128,7 @@ function getRangeOfNeededSegments(content, initialWantedTime, bufferGoal) {
|
|
|
128
128
|
SegmentBuffersStore.isNative(content.adaptation.type) &&
|
|
129
129
|
initialWantedTime >= lastIndexPosition &&
|
|
130
130
|
representationIndex.isInitialized() &&
|
|
131
|
-
representationIndex.
|
|
131
|
+
!representationIndex.isStillAwaitingFutureSegments() &&
|
|
132
132
|
isPeriodTheCurrentAndLastOne(manifest, period, initialWantedTime)) {
|
|
133
133
|
wantedStartPosition = lastIndexPosition - 1;
|
|
134
134
|
}
|
|
@@ -138,7 +138,7 @@ function getRangeOfNeededSegments(content, initialWantedTime, bufferGoal) {
|
|
|
138
138
|
const wantedEndPosition = wantedStartPosition + bufferGoal;
|
|
139
139
|
let hasReachedPeriodEnd;
|
|
140
140
|
if (!representation.index.isInitialized() ||
|
|
141
|
-
|
|
141
|
+
representation.index.isStillAwaitingFutureSegments() ||
|
|
142
142
|
period.end === undefined) {
|
|
143
143
|
hasReachedPeriodEnd = false;
|
|
144
144
|
}
|
|
@@ -320,7 +320,7 @@ function doesEndSeemGarbageCollected(currentSeg, nextSeg, minimumEndTime) {
|
|
|
320
320
|
}
|
|
321
321
|
if (minimumEndTime > currentSeg.bufferedEnd &&
|
|
322
322
|
currentSeg.end - currentSeg.bufferedEnd > MAX_TIME_MISSING_FROM_COMPLETE_SEGMENT) {
|
|
323
|
-
log.info("Stream: The end of the wanted segment has been garbage collected", currentSeg.
|
|
323
|
+
log.info("Stream: The end of the wanted segment has been garbage collected", currentSeg.end, currentSeg.bufferedEnd);
|
|
324
324
|
return true;
|
|
325
325
|
}
|
|
326
326
|
return false;
|
|
@@ -21,6 +21,11 @@ declare const DEFAULT_CONFIG: {
|
|
|
21
21
|
* @type {Number}
|
|
22
22
|
*/
|
|
23
23
|
DEFAULT_REQUEST_TIMEOUT: number;
|
|
24
|
+
/**
|
|
25
|
+
* Default connection time after which a request will timeout, in ms.
|
|
26
|
+
* @type {Number}
|
|
27
|
+
*/
|
|
28
|
+
DEFAULT_CONNECTION_TIMEOUT: number;
|
|
24
29
|
/**
|
|
25
30
|
* Can be either:
|
|
26
31
|
* - "native": Subtitles are all displayed in a <track> element
|
|
@@ -21,6 +21,11 @@ const DEFAULT_CONFIG = {
|
|
|
21
21
|
* @type {Number}
|
|
22
22
|
*/
|
|
23
23
|
DEFAULT_REQUEST_TIMEOUT: 30 * 1000,
|
|
24
|
+
/**
|
|
25
|
+
* Default connection time after which a request will timeout, in ms.
|
|
26
|
+
* @type {Number}
|
|
27
|
+
*/
|
|
28
|
+
DEFAULT_CONNECTION_TIMEOUT: 15 * 1000,
|
|
24
29
|
/**
|
|
25
30
|
* Can be either:
|
|
26
31
|
* - "native": Subtitles are all displayed in a <track> element
|
|
@@ -128,7 +128,9 @@ export default class VideoThumbnailLoader {
|
|
|
128
128
|
{}, { baseDelay: 0,
|
|
129
129
|
maxDelay: 0,
|
|
130
130
|
maxRetry: 0,
|
|
131
|
-
requestTimeout: config.getCurrent().DEFAULT_REQUEST_TIMEOUT
|
|
131
|
+
requestTimeout: config.getCurrent().DEFAULT_REQUEST_TIMEOUT,
|
|
132
|
+
connectionTimeout: config.getCurrent().DEFAULT_CONNECTION_TIMEOUT,
|
|
133
|
+
});
|
|
132
134
|
const initSegment = content.representation.index.getInitSegment();
|
|
133
135
|
const initSegmentUniqueId = initSegment !== null ?
|
|
134
136
|
content.representation.uniqueId :
|
|
@@ -69,6 +69,7 @@ async function getDurationFromManifest(url, transport) {
|
|
|
69
69
|
url,
|
|
70
70
|
responseType: "document",
|
|
71
71
|
timeout: config.getCurrent().DEFAULT_REQUEST_TIMEOUT,
|
|
72
|
+
connectionTimeout: config.getCurrent().DEFAULT_CONNECTION_TIMEOUT,
|
|
72
73
|
// We won't cancel
|
|
73
74
|
cancelSignal: new TaskCanceller().signal,
|
|
74
75
|
});
|
|
@@ -106,6 +107,7 @@ async function getDurationFromManifest(url, transport) {
|
|
|
106
107
|
url,
|
|
107
108
|
responseType: "text",
|
|
108
109
|
timeout: config.getCurrent().DEFAULT_REQUEST_TIMEOUT,
|
|
110
|
+
connectionTimeout: config.getCurrent().DEFAULT_CONNECTION_TIMEOUT,
|
|
109
111
|
// We won't cancel
|
|
110
112
|
cancelSignal: new TaskCanceller().signal,
|
|
111
113
|
});
|
|
@@ -27,6 +27,7 @@ class Representation {
|
|
|
27
27
|
* @param {Object} args
|
|
28
28
|
*/
|
|
29
29
|
constructor(args, opts) {
|
|
30
|
+
var _a;
|
|
30
31
|
this.id = args.id;
|
|
31
32
|
this.uniqueId = generateRepresentationUniqueId();
|
|
32
33
|
this.bitrate = args.bitrate;
|
|
@@ -55,12 +56,24 @@ class Representation {
|
|
|
55
56
|
this.cdnMetadata = args.cdnMetadata;
|
|
56
57
|
this.index = args.index;
|
|
57
58
|
if (opts.type === "audio" || opts.type === "video") {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
this.isSupported = false;
|
|
60
|
+
// Supplemental codecs are defined as backwards-compatible codecs enhancing
|
|
61
|
+
// the experience of a base layer codec
|
|
62
|
+
if (args.supplementalCodecs !== undefined) {
|
|
63
|
+
const supplementalCodecMimeTypeStr = `${(_a = this.mimeType) !== null && _a !== void 0 ? _a : ""};codecs="${args.supplementalCodecs}"`;
|
|
64
|
+
if (isCodecSupported(supplementalCodecMimeTypeStr)) {
|
|
65
|
+
this.codec = args.supplementalCodecs;
|
|
66
|
+
this.isSupported = true;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (!this.isSupported) {
|
|
70
|
+
const mimeTypeStr = this.getMimeTypeString();
|
|
71
|
+
const isSupported = isCodecSupported(mimeTypeStr);
|
|
72
|
+
if (!isSupported) {
|
|
73
|
+
log.info("Unsupported Representation", mimeTypeStr, this.id, this.bitrate);
|
|
74
|
+
}
|
|
75
|
+
this.isSupported = isSupported;
|
|
62
76
|
}
|
|
63
|
-
this.isSupported = isSupported;
|
|
64
77
|
}
|
|
65
78
|
else {
|
|
66
79
|
this.isSupported = true; // TODO for other types
|
|
@@ -304,7 +304,7 @@ export interface IRepresentationIndex {
|
|
|
304
304
|
getLastAvailablePosition(): number | null | undefined;
|
|
305
305
|
/**
|
|
306
306
|
* Returns the ending time, in seconds, of the Representation once it is
|
|
307
|
-
* "finished" (@see
|
|
307
|
+
* "finished" (@see isStillAwaitingFutureSegments).
|
|
308
308
|
* Should thus be equivalent to `getLastAvailablePosition` once finished.
|
|
309
309
|
*
|
|
310
310
|
* Returns `null` if nothing is in the index
|
|
@@ -352,13 +352,13 @@ export interface IRepresentationIndex {
|
|
|
352
352
|
*/
|
|
353
353
|
checkDiscontinuity(time: number): number | null;
|
|
354
354
|
/**
|
|
355
|
-
* Returns `
|
|
355
|
+
* Returns `false` if the last segments in this index have already been
|
|
356
356
|
* generated so that we can freely go to the next period.
|
|
357
|
-
* Returns `
|
|
357
|
+
* Returns `true` if the index is still waiting on future segments to be
|
|
358
358
|
* generated.
|
|
359
359
|
* @returns {boolean}
|
|
360
360
|
*/
|
|
361
|
-
|
|
361
|
+
isStillAwaitingFutureSegments(): boolean;
|
|
362
362
|
/**
|
|
363
363
|
* Returns `true` if this index has all the data it needs to give the list
|
|
364
364
|
* of available segments.
|