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
|
@@ -1,29 +1,51 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
16
37
|
import nextTick from "next-tick";
|
|
17
38
|
import config from "../../../config";
|
|
18
39
|
import { formatError } from "../../../errors";
|
|
19
40
|
import log from "../../../log";
|
|
41
|
+
import assertUnreachable from "../../../utils/assert_unreachable";
|
|
20
42
|
import cancellableSleep from "../../../utils/cancellable_sleep";
|
|
21
43
|
import noop from "../../../utils/noop";
|
|
22
44
|
import objectAssign from "../../../utils/object_assign";
|
|
23
45
|
import SharedReference, { createMappedReference, } from "../../../utils/reference";
|
|
24
46
|
import TaskCanceller from "../../../utils/task_canceller";
|
|
25
47
|
import RepresentationStream from "../representation";
|
|
26
|
-
import
|
|
48
|
+
import getRepresentationsSwitchingStrategy from "./get_representations_switch_strategy";
|
|
27
49
|
/**
|
|
28
50
|
* Create new `AdaptationStream` whose task will be to download the media data
|
|
29
51
|
* for a given Adaptation (i.e. "track").
|
|
@@ -56,7 +78,6 @@ import createRepresentationEstimator from "./utils/create_representation_estimat
|
|
|
56
78
|
*/
|
|
57
79
|
export default function AdaptationStream(_a, callbacks, parentCancelSignal) {
|
|
58
80
|
var playbackObserver = _a.playbackObserver, content = _a.content, options = _a.options, representationEstimator = _a.representationEstimator, segmentBuffer = _a.segmentBuffer, segmentFetcherCreator = _a.segmentFetcherCreator, wantedBufferAhead = _a.wantedBufferAhead, maxVideoBufferSize = _a.maxVideoBufferSize;
|
|
59
|
-
var directManualBitrateSwitching = options.manualBitrateSwitchingMode === "direct";
|
|
60
81
|
var manifest = content.manifest, period = content.period, adaptation = content.adaptation;
|
|
61
82
|
/** Allows to cancel everything the `AdaptationStream` is doing. */
|
|
62
83
|
var adapStreamCanceller = new TaskCanceller();
|
|
@@ -75,80 +96,149 @@ export default function AdaptationStream(_a, callbacks, parentCancelSignal) {
|
|
|
75
96
|
* `null` if no Representation is chosen for now.
|
|
76
97
|
*/
|
|
77
98
|
var currentRepresentation = new SharedReference(null, adapStreamCanceller.signal);
|
|
78
|
-
var _b = createRepresentationEstimator(content, representationEstimator, currentRepresentation, playbackObserver, function (err) {
|
|
79
|
-
adapStreamCanceller.cancel();
|
|
80
|
-
callbacks.error(err);
|
|
81
|
-
}, adapStreamCanceller.signal), estimateRef = _b.estimateRef, abrCallbacks = _b.abrCallbacks;
|
|
82
|
-
/** Allows the `RepresentationStream` to easily fetch media segments. */
|
|
83
|
-
var segmentFetcher = segmentFetcherCreator
|
|
84
|
-
.createSegmentFetcher(adaptation.type,
|
|
85
|
-
/* eslint-disable @typescript-eslint/unbound-method */
|
|
86
|
-
{ onRequestBegin: abrCallbacks.requestBegin,
|
|
87
|
-
onRequestEnd: abrCallbacks.requestEnd,
|
|
88
|
-
onProgress: abrCallbacks.requestProgress,
|
|
89
|
-
onMetrics: abrCallbacks.metrics });
|
|
90
|
-
/* eslint-enable @typescript-eslint/unbound-method */
|
|
91
99
|
/** Stores the last emitted bitrate. */
|
|
92
|
-
var
|
|
93
|
-
/**
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
100
|
+
var previouslyEmittedBitrate;
|
|
101
|
+
/** When triggered, cancel all `RepresentationStream`s currently created. */
|
|
102
|
+
var cancelCurrentStreams;
|
|
103
|
+
// Each time the list of wanted Representations changes, we restart the logic
|
|
104
|
+
content.representations.onUpdate(function (val) {
|
|
105
|
+
cancelCurrentStreams === null || cancelCurrentStreams === void 0 ? void 0 : cancelCurrentStreams.cancel();
|
|
106
|
+
cancelCurrentStreams = new TaskCanceller();
|
|
107
|
+
cancelCurrentStreams.linkToSignal(adapStreamCanceller.signal);
|
|
108
|
+
onRepresentationsChoiceChange(val, cancelCurrentStreams.signal).catch(function (err) {
|
|
109
|
+
if ((cancelCurrentStreams === null || cancelCurrentStreams === void 0 ? void 0 : cancelCurrentStreams.isUsed()) === true &&
|
|
110
|
+
TaskCanceller.isCancellationError(err)) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
adapStreamCanceller.cancel();
|
|
114
|
+
callbacks.error(err);
|
|
115
|
+
});
|
|
116
|
+
}, { clearSignal: adapStreamCanceller.signal, emitCurrentValue: true });
|
|
117
|
+
return;
|
|
118
|
+
/**
|
|
119
|
+
* Function called each time the list of wanted Representations is updated.
|
|
120
|
+
*
|
|
121
|
+
* Returns a Promise to profit from async/await syntax. The Promise resolution
|
|
122
|
+
* does not indicate anything. The Promise may reject however, either on some
|
|
123
|
+
* error or on some cancellation.
|
|
124
|
+
* @param {Object} choice - The last Representations choice that has been
|
|
125
|
+
* made.
|
|
126
|
+
* @param {Object} fnCancelSignal - `CancellationSignal` allowing to cancel
|
|
127
|
+
* everything this function is doing and free all related resources.
|
|
128
|
+
*/
|
|
129
|
+
function onRepresentationsChoiceChange(choice, fnCancelSignal) {
|
|
130
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
131
|
+
var switchStrat, _a, _i, _b, range, representationsList, _c, estimateRef, abrCallbacks;
|
|
132
|
+
return __generator(this, function (_d) {
|
|
133
|
+
switch (_d.label) {
|
|
134
|
+
case 0:
|
|
135
|
+
switchStrat = getRepresentationsSwitchingStrategy(period, adaptation, choice, segmentBuffer, playbackObserver);
|
|
136
|
+
_a = switchStrat.type;
|
|
137
|
+
switch (_a) {
|
|
138
|
+
case "continue": return [3 /*break*/, 1];
|
|
139
|
+
case "needs-reload": return [3 /*break*/, 2];
|
|
140
|
+
case "flush-buffer": return [3 /*break*/, 3];
|
|
141
|
+
case "clean-buffer": return [3 /*break*/, 3];
|
|
142
|
+
}
|
|
143
|
+
return [3 /*break*/, 8];
|
|
144
|
+
case 1: return [3 /*break*/, 9]; // nothing to do
|
|
145
|
+
case 2: // Just ask to reload
|
|
146
|
+
// We begin by scheduling a micro-task to reduce the possibility of race
|
|
147
|
+
// conditions where the inner logic would be called synchronously before
|
|
148
|
+
// the next observation (which may reflect very different playback conditions)
|
|
149
|
+
// is actually received.
|
|
150
|
+
return [2 /*return*/, nextTick(function () {
|
|
151
|
+
if (fnCancelSignal.isCancelled()) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
var DELTA_POSITION_AFTER_RELOAD = config.getCurrent().DELTA_POSITION_AFTER_RELOAD;
|
|
155
|
+
var timeOffset = DELTA_POSITION_AFTER_RELOAD.bitrateSwitch;
|
|
156
|
+
return callbacks.waitingMediaSourceReload({ bufferType: adaptation.type, period: period, timeOffset: timeOffset, stayInPeriod: true });
|
|
157
|
+
})];
|
|
158
|
+
case 3:
|
|
159
|
+
_i = 0, _b = switchStrat.value;
|
|
160
|
+
_d.label = 4;
|
|
161
|
+
case 4:
|
|
162
|
+
if (!(_i < _b.length)) return [3 /*break*/, 7];
|
|
163
|
+
range = _b[_i];
|
|
164
|
+
return [4 /*yield*/, segmentBuffer.removeBuffer(range.start, range.end, fnCancelSignal)];
|
|
165
|
+
case 5:
|
|
166
|
+
_d.sent();
|
|
167
|
+
if (fnCancelSignal.isCancelled()) {
|
|
168
|
+
return [2 /*return*/];
|
|
169
|
+
}
|
|
170
|
+
_d.label = 6;
|
|
171
|
+
case 6:
|
|
172
|
+
_i++;
|
|
173
|
+
return [3 /*break*/, 4];
|
|
174
|
+
case 7:
|
|
175
|
+
if (switchStrat.type === "flush-buffer") {
|
|
176
|
+
callbacks.needsBufferFlush();
|
|
177
|
+
if (fnCancelSignal.isCancelled()) {
|
|
178
|
+
return [2 /*return*/];
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return [3 /*break*/, 9];
|
|
182
|
+
case 8:
|
|
183
|
+
assertUnreachable(switchStrat);
|
|
184
|
+
_d.label = 9;
|
|
185
|
+
case 9:
|
|
186
|
+
representationsList = new SharedReference(choice.representations);
|
|
187
|
+
representationsList.finish();
|
|
188
|
+
_c = representationEstimator({ manifest: manifest, period: period, adaptation: adaptation }, currentRepresentation, representationsList, playbackObserver, fnCancelSignal), estimateRef = _c.estimates, abrCallbacks = _c.callbacks;
|
|
189
|
+
/** Emit at each bitrate estimate done by the IRepresentationEstimator. */
|
|
190
|
+
estimateRef.onUpdate(function (_a) {
|
|
191
|
+
var bitrate = _a.bitrate;
|
|
192
|
+
if (bitrate === undefined || bitrate === previouslyEmittedBitrate) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
previouslyEmittedBitrate = bitrate;
|
|
196
|
+
log.debug("Stream: new ".concat(adaptation.type, " bitrate estimate"), bitrate);
|
|
197
|
+
callbacks.bitrateEstimateChange({ type: adaptation.type, bitrate: bitrate });
|
|
198
|
+
}, { emitCurrentValue: true, clearSignal: fnCancelSignal });
|
|
199
|
+
recursivelyCreateRepresentationStreams(estimateRef, abrCallbacks, fnCancelSignal);
|
|
200
|
+
return [2 /*return*/];
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
}
|
|
107
205
|
/**
|
|
108
206
|
* Create `RepresentationStream`s starting with the Representation of the last
|
|
109
207
|
* estimate performed.
|
|
110
208
|
* Each time a new estimate is made, this function will create a new
|
|
111
209
|
* `RepresentationStream` corresponding to that new estimate.
|
|
112
|
-
* @param {
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
210
|
+
* @param {Object} estimateRef - Reference through which ABR estimates are
|
|
211
|
+
* set. May be updated at any time.
|
|
212
|
+
* @param {Object} abrCallbacks - Callbacks defined by the ABR logic that have
|
|
213
|
+
* to be called at the right time.
|
|
214
|
+
* @param {Object} fnCancelSignal - `CancellationSignal` which will abort
|
|
215
|
+
* anything this function is doing and free allocated resources.
|
|
116
216
|
*/
|
|
117
|
-
function recursivelyCreateRepresentationStreams(
|
|
217
|
+
function recursivelyCreateRepresentationStreams(estimateRef, abrCallbacks, fnCancelSignal) {
|
|
218
|
+
/** Allows a `RepresentationStream` to easily fetch media segments. */
|
|
219
|
+
var segmentFetcher = segmentFetcherCreator
|
|
220
|
+
.createSegmentFetcher(adaptation.type,
|
|
221
|
+
/* eslint-disable @typescript-eslint/unbound-method */
|
|
222
|
+
{ onRequestBegin: abrCallbacks.requestBegin,
|
|
223
|
+
onRequestEnd: abrCallbacks.requestEnd,
|
|
224
|
+
onProgress: abrCallbacks.requestProgress,
|
|
225
|
+
onMetrics: abrCallbacks.metrics });
|
|
226
|
+
/* eslint-enable @typescript-eslint/unbound-method */
|
|
118
227
|
/**
|
|
119
228
|
* `TaskCanceller` triggered when the current `RepresentationStream` is
|
|
120
229
|
* terminating and as such the next one might be immediately created
|
|
121
230
|
* recursively.
|
|
122
231
|
*/
|
|
123
232
|
var repStreamTerminatingCanceller = new TaskCanceller();
|
|
124
|
-
repStreamTerminatingCanceller.linkToSignal(
|
|
125
|
-
var
|
|
233
|
+
repStreamTerminatingCanceller.linkToSignal(fnCancelSignal);
|
|
234
|
+
var representation = estimateRef.getValue().representation;
|
|
126
235
|
if (representation === null) {
|
|
127
236
|
return;
|
|
128
237
|
}
|
|
129
|
-
// A manual bitrate switch might need an immediate feedback.
|
|
130
|
-
// To do that properly, we need to reload the MediaSource
|
|
131
|
-
if (directManualBitrateSwitching && manual && !isFirstEstimate) {
|
|
132
|
-
var DELTA_POSITION_AFTER_RELOAD_1 = config.getCurrent().DELTA_POSITION_AFTER_RELOAD;
|
|
133
|
-
// We begin by scheduling a micro-task to reduce the possibility of race
|
|
134
|
-
// conditions where the inner logic would be called synchronously before
|
|
135
|
-
// the next observation (which may reflect very different playback conditions)
|
|
136
|
-
// is actually received.
|
|
137
|
-
return nextTick(function () {
|
|
138
|
-
if (repStreamTerminatingCanceller.isUsed()) {
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
var newManual = estimateRef.getValue().manual;
|
|
142
|
-
if (!newManual) {
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
var timeOffset = DELTA_POSITION_AFTER_RELOAD_1.bitrateSwitch;
|
|
146
|
-
return callbacks.waitingMediaSourceReload({ bufferType: adaptation.type, period: period, timeOffset: timeOffset, stayInPeriod: true });
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
238
|
/**
|
|
150
|
-
*
|
|
151
|
-
*
|
|
239
|
+
* Stores the last estimate emitted, starting with `null`.
|
|
240
|
+
* This allows to easily rely on that value in inner Observables which might also
|
|
241
|
+
* need the last already-considered value.
|
|
152
242
|
*/
|
|
153
243
|
var terminateCurrentStream = new SharedReference(null, repStreamTerminatingCanceller.signal);
|
|
154
244
|
/** Allows to stop listening to estimateRef on the following line. */
|
|
@@ -167,15 +257,8 @@ export default function AdaptationStream(_a, callbacks, parentCancelSignal) {
|
|
|
167
257
|
}
|
|
168
258
|
}, { clearSignal: repStreamTerminatingCanceller.signal, emitCurrentValue: true });
|
|
169
259
|
/**
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
* the buffer.
|
|
173
|
-
* This threshold defines a bitrate from which "fast-switching" is disabled.
|
|
174
|
-
* For example with a fastSwitchThreshold set to `100`, segments with a
|
|
175
|
-
* bitrate of `90` can be replaced. But segments with a bitrate of `100`
|
|
176
|
-
* onward won't be replaced by higher quality segments.
|
|
177
|
-
* Set to `undefined` to indicate that there's no threshold (anything can be
|
|
178
|
-
* replaced by higher-quality segments).
|
|
260
|
+
* Recursively create `RepresentationStream`s according to the last
|
|
261
|
+
* Representation estimate.
|
|
179
262
|
*/
|
|
180
263
|
var fastSwitchThreshold = new SharedReference(0);
|
|
181
264
|
if (options.enableFastSwitching) {
|
|
@@ -215,26 +298,33 @@ export default function AdaptationStream(_a, callbacks, parentCancelSignal) {
|
|
|
215
298
|
return; // Already handled
|
|
216
299
|
}
|
|
217
300
|
repStreamTerminatingCanceller.cancel();
|
|
218
|
-
return recursivelyCreateRepresentationStreams(
|
|
301
|
+
return recursivelyCreateRepresentationStreams(estimateRef, abrCallbacks, fnCancelSignal);
|
|
219
302
|
},
|
|
220
303
|
};
|
|
221
|
-
createRepresentationStream(representation, terminateCurrentStream, fastSwitchThreshold, representationStreamCallbacks);
|
|
304
|
+
createRepresentationStream(representation, segmentFetcher, terminateCurrentStream, fastSwitchThreshold, representationStreamCallbacks, fnCancelSignal);
|
|
222
305
|
}
|
|
223
306
|
/**
|
|
224
307
|
* Create and returns a new `RepresentationStream`, linked to the
|
|
225
308
|
* given Representation.
|
|
226
|
-
* @param {Object} representation
|
|
227
|
-
*
|
|
228
|
-
* @param {Object}
|
|
229
|
-
* @param {Object}
|
|
309
|
+
* @param {Object} representation - The Representation the
|
|
310
|
+
* `RepresentationStream` has to be created for.
|
|
311
|
+
* @param {Object} segmentFetcher - Allows to easily fetch segments.
|
|
312
|
+
* @param {Object} terminateCurrentStream - Gives termination orders,
|
|
313
|
+
* indicating that the `RepresentationStream` should stop what it's doing.
|
|
314
|
+
* @param {Object} fastSwitchThreshold - Used to determine when
|
|
315
|
+
* "fast-switching" is possible.
|
|
316
|
+
* @param {Object} representationStreamCallbacks - Callbacks to call on
|
|
317
|
+
* various `RepresentationStream` events.
|
|
318
|
+
* @param {Object} fnCancelSignal - `CancellationSignal` which will abort
|
|
319
|
+
* anything this function is doing and free allocated resources.
|
|
230
320
|
*/
|
|
231
|
-
function createRepresentationStream(representation, terminateCurrentStream, fastSwitchThreshold, representationStreamCallbacks) {
|
|
321
|
+
function createRepresentationStream(representation, segmentFetcher, terminateCurrentStream, fastSwitchThreshold, representationStreamCallbacks, fnCancelSignal) {
|
|
232
322
|
/**
|
|
233
323
|
* `TaskCanceller` triggered when the `RepresentationStream` calls its
|
|
234
324
|
* `terminating` callback.
|
|
235
325
|
*/
|
|
236
326
|
var terminatingRepStreamCanceller = new TaskCanceller();
|
|
237
|
-
terminatingRepStreamCanceller.linkToSignal(
|
|
327
|
+
terminatingRepStreamCanceller.linkToSignal(fnCancelSignal);
|
|
238
328
|
var bufferGoal = createMappedReference(wantedBufferAhead, function (prev) {
|
|
239
329
|
return prev * getBufferGoalRatio(representation);
|
|
240
330
|
}, terminatingRepStreamCanceller.signal);
|
|
@@ -264,7 +354,7 @@ export default function AdaptationStream(_a, callbacks, parentCancelSignal) {
|
|
|
264
354
|
// We wait 4 seconds to let the situation evolve by itself before
|
|
265
355
|
// retrying loading segments with a lower buffer goal
|
|
266
356
|
cancellableSleep(4000, adapStreamCanceller.signal).then(function () {
|
|
267
|
-
return createRepresentationStream(representation, terminateCurrentStream, fastSwitchThreshold, representationStreamCallbacks);
|
|
357
|
+
return createRepresentationStream(representation, segmentFetcher, terminateCurrentStream, fastSwitchThreshold, representationStreamCallbacks, fnCancelSignal);
|
|
268
358
|
}).catch(noop);
|
|
269
359
|
}
|
|
270
360
|
},
|
|
@@ -274,7 +364,7 @@ export default function AdaptationStream(_a, callbacks, parentCancelSignal) {
|
|
|
274
364
|
},
|
|
275
365
|
});
|
|
276
366
|
RepresentationStream({ playbackObserver: playbackObserver, content: { representation: representation, adaptation: adaptation, period: period, manifest: manifest }, segmentBuffer: segmentBuffer, segmentFetcher: segmentFetcher, terminate: terminateCurrentStream,
|
|
277
|
-
options: { bufferGoal: bufferGoal, maxBufferSize: maxBufferSize, drmSystemId: options.drmSystemId, fastSwitchThreshold: fastSwitchThreshold } }, updatedCallbacks,
|
|
367
|
+
options: { bufferGoal: bufferGoal, maxBufferSize: maxBufferSize, drmSystemId: options.drmSystemId, fastSwitchThreshold: fastSwitchThreshold } }, updatedCallbacks, fnCancelSignal);
|
|
278
368
|
}
|
|
279
369
|
/**
|
|
280
370
|
* @param {Object} representation
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2015 CANAL+ Group
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { Adaptation, Period } from "../../../manifest";
|
|
17
|
+
import { IReadOnlyPlaybackObserver } from "../../api";
|
|
18
|
+
import { SegmentBuffer } from "../../segment_buffers";
|
|
19
|
+
import { IRepresentationsChoice } from "../representation";
|
|
20
|
+
export default function getRepresentationsSwitchingStrategy(period: Period, adaptation: Adaptation, settings: IRepresentationsChoice, segmentBuffer: SegmentBuffer, playbackObserver: IReadOnlyPlaybackObserver<unknown>): IRepresentationSwitchStrategy;
|
|
21
|
+
export type IRepresentationSwitchStrategy = {
|
|
22
|
+
type: "continue";
|
|
23
|
+
value: undefined;
|
|
24
|
+
} | {
|
|
25
|
+
type: "clean-buffer";
|
|
26
|
+
value: Array<{
|
|
27
|
+
start: number;
|
|
28
|
+
end: number;
|
|
29
|
+
}>;
|
|
30
|
+
} | {
|
|
31
|
+
type: "flush-buffer";
|
|
32
|
+
value: Array<{
|
|
33
|
+
start: number;
|
|
34
|
+
end: number;
|
|
35
|
+
}>;
|
|
36
|
+
} | {
|
|
37
|
+
type: "needs-reload";
|
|
38
|
+
value: undefined;
|
|
39
|
+
};
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2015 CANAL+ Group
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import config from "../../../config";
|
|
17
|
+
import { convertToRanges, excludeFromRanges, isTimeInRange, isTimeInRanges, keepRangeIntersection, } from "../../../utils/ranges";
|
|
18
|
+
import { getFirstSegmentAfterPeriod, getLastSegmentBeforePeriod, } from "../../segment_buffers";
|
|
19
|
+
export default function getRepresentationsSwitchingStrategy(period, adaptation, settings, segmentBuffer, playbackObserver) {
|
|
20
|
+
if (settings.switchingMode === "lazy") {
|
|
21
|
+
return { type: "continue", value: undefined };
|
|
22
|
+
}
|
|
23
|
+
var buffered = segmentBuffer.getBufferedRanges();
|
|
24
|
+
if (buffered.length === 0) {
|
|
25
|
+
return { type: "continue", value: undefined };
|
|
26
|
+
}
|
|
27
|
+
var bufferedRanges = convertToRanges(buffered);
|
|
28
|
+
var start = period.start;
|
|
29
|
+
var end = period.end == null ? Infinity :
|
|
30
|
+
period.end;
|
|
31
|
+
var intersection = keepRangeIntersection(bufferedRanges, [{ start: start, end: end }]);
|
|
32
|
+
if (intersection.length === 0) {
|
|
33
|
+
return { type: "continue", value: undefined };
|
|
34
|
+
}
|
|
35
|
+
segmentBuffer.synchronizeInventory();
|
|
36
|
+
var inventory = segmentBuffer.getInventory();
|
|
37
|
+
/** Data already in the right Adaptation */
|
|
38
|
+
var rangesWithReps = getBufferedRangesFromRepresentations(inventory, period, adaptation, settings.representations);
|
|
39
|
+
/**
|
|
40
|
+
* Data different from the wanted Adaptation in the Period's range.
|
|
41
|
+
* /!\ Could contain some data at the end of the previous Period or at the
|
|
42
|
+
* beginning of the next one.
|
|
43
|
+
*/
|
|
44
|
+
var unwantedRange = excludeFromRanges(intersection, rangesWithReps);
|
|
45
|
+
if (unwantedRange.length === 0) {
|
|
46
|
+
return { type: "continue", value: undefined };
|
|
47
|
+
}
|
|
48
|
+
var currentTime = playbackObserver.getCurrentTime();
|
|
49
|
+
var readyState = playbackObserver.getReadyState();
|
|
50
|
+
if (settings.switchingMode === "reload" &&
|
|
51
|
+
// We're playing the current Period
|
|
52
|
+
isTimeInRange({ start: start, end: end }, currentTime) &&
|
|
53
|
+
// There is data for the current position
|
|
54
|
+
readyState > 1 &&
|
|
55
|
+
// We're not playing the current wanted video Adaptation
|
|
56
|
+
!isTimeInRanges(rangesWithReps, currentTime)) {
|
|
57
|
+
return { type: "needs-reload", value: undefined };
|
|
58
|
+
}
|
|
59
|
+
// From here, clean-up data from the previous Adaptation, if one
|
|
60
|
+
var shouldFlush = settings.switchingMode === "direct";
|
|
61
|
+
var rangesToExclude = [];
|
|
62
|
+
// First, we don't want to accidentally remove some segments from the previous
|
|
63
|
+
// Period (which overlap a little with this one)
|
|
64
|
+
/** Last segment before one for the current period. */
|
|
65
|
+
var lastSegmentBefore = getLastSegmentBeforePeriod(inventory, period);
|
|
66
|
+
if (lastSegmentBefore !== null &&
|
|
67
|
+
(lastSegmentBefore.bufferedEnd === undefined ||
|
|
68
|
+
period.start - lastSegmentBefore.bufferedEnd < 1)) // Close to Period's start
|
|
69
|
+
{
|
|
70
|
+
// Exclude data close to the period's start to avoid cleaning
|
|
71
|
+
// to much
|
|
72
|
+
rangesToExclude.push({ start: 0,
|
|
73
|
+
end: period.start + 1 });
|
|
74
|
+
}
|
|
75
|
+
if (!shouldFlush) {
|
|
76
|
+
// exclude data around current position to avoid decoding issues
|
|
77
|
+
var ADAP_REP_SWITCH_BUFFER_PADDINGS = config.getCurrent().ADAP_REP_SWITCH_BUFFER_PADDINGS;
|
|
78
|
+
var bufferType = adaptation.type;
|
|
79
|
+
/** Ranges that won't be cleaned from the current buffer. */
|
|
80
|
+
var paddingBefore = ADAP_REP_SWITCH_BUFFER_PADDINGS[bufferType].before;
|
|
81
|
+
if (paddingBefore == null) {
|
|
82
|
+
paddingBefore = 0;
|
|
83
|
+
}
|
|
84
|
+
var paddingAfter = ADAP_REP_SWITCH_BUFFER_PADDINGS[bufferType].after;
|
|
85
|
+
if (paddingAfter == null) {
|
|
86
|
+
paddingAfter = 0;
|
|
87
|
+
}
|
|
88
|
+
rangesToExclude.push({ start: currentTime - paddingBefore,
|
|
89
|
+
end: currentTime + paddingAfter });
|
|
90
|
+
}
|
|
91
|
+
// Now remove possible small range from the end if there is a segment from the
|
|
92
|
+
// next Period
|
|
93
|
+
if (period.end !== undefined) {
|
|
94
|
+
/** first segment after for the current period. */
|
|
95
|
+
var firstSegmentAfter = getFirstSegmentAfterPeriod(inventory, period);
|
|
96
|
+
if (firstSegmentAfter !== null &&
|
|
97
|
+
(firstSegmentAfter.bufferedStart === undefined ||
|
|
98
|
+
// Close to Period's end
|
|
99
|
+
(firstSegmentAfter.bufferedStart - period.end) < 1)) {
|
|
100
|
+
rangesToExclude.push({ start: period.end - 1,
|
|
101
|
+
end: Number.MAX_VALUE });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
var toRemove = excludeFromRanges(unwantedRange, rangesToExclude);
|
|
105
|
+
if (toRemove.length === 0) {
|
|
106
|
+
return { type: "continue", value: undefined };
|
|
107
|
+
}
|
|
108
|
+
return shouldFlush ? { type: "flush-buffer", value: toRemove } :
|
|
109
|
+
{ type: "clean-buffer", value: toRemove };
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Returns buffered ranges of what we know correspond to the given `adaptation`
|
|
113
|
+
* in the SegmentBuffer.
|
|
114
|
+
* @param {Array.<Object>} inventory
|
|
115
|
+
* @param {Object} period
|
|
116
|
+
* @param {Object} adaptation
|
|
117
|
+
* @returns {Array.<Object>}
|
|
118
|
+
*/
|
|
119
|
+
function getBufferedRangesFromRepresentations(inventory, period, adaptation, representations) {
|
|
120
|
+
return inventory.reduce(function (acc, chunk) {
|
|
121
|
+
if (chunk.infos.period.id !== period.id ||
|
|
122
|
+
chunk.infos.adaptation.id !== adaptation.id ||
|
|
123
|
+
!representations.some(function (rep) { return rep.id === chunk.infos.representation.id; })) {
|
|
124
|
+
return acc;
|
|
125
|
+
}
|
|
126
|
+
var bufferedStart = chunk.bufferedStart, bufferedEnd = chunk.bufferedEnd;
|
|
127
|
+
if (bufferedStart === undefined || bufferedEnd === undefined) {
|
|
128
|
+
return acc;
|
|
129
|
+
}
|
|
130
|
+
acc.push({ start: bufferedStart, end: bufferedEnd });
|
|
131
|
+
return acc;
|
|
132
|
+
}, []);
|
|
133
|
+
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import Manifest, { Adaptation, Period, Representation } from "../../../manifest";
|
|
2
|
+
import { IAudioTrackSwitchingMode, IVideoTrackSwitchingMode } from "../../../public_types";
|
|
2
3
|
import { IReadOnlySharedReference } from "../../../utils/reference";
|
|
3
4
|
import { IRepresentationEstimator } from "../../adaptive";
|
|
4
5
|
import { IReadOnlyPlaybackObserver } from "../../api";
|
|
5
6
|
import { SegmentFetcherCreator } from "../../fetchers";
|
|
6
7
|
import { IBufferType, SegmentBuffer } from "../../segment_buffers";
|
|
7
|
-
import { IRepresentationStreamCallbacks, IRepresentationStreamPlaybackObservation } from "../representation";
|
|
8
|
+
import { IRepresentationsChoice, IRepresentationStreamCallbacks, IRepresentationStreamPlaybackObservation } from "../representation";
|
|
8
9
|
/** Callbacks called by the `AdaptationStream` on various events. */
|
|
9
10
|
export interface IAdaptationStreamCallbacks<T> extends Omit<IRepresentationStreamCallbacks<T>, "terminating"> {
|
|
10
11
|
/** Called as new bitrate estimates are done. */
|
|
11
|
-
|
|
12
|
+
bitrateEstimateChange(payload: IBitrateEstimateChangePayload): void;
|
|
12
13
|
/**
|
|
13
14
|
* Called when a new `RepresentationStream` is created to load segments from a
|
|
14
15
|
* `Representation`.
|
|
@@ -19,9 +20,17 @@ export interface IAdaptationStreamCallbacks<T> extends Omit<IRepresentationStrea
|
|
|
19
20
|
* needs the `MediaSource` to be reloaded first.
|
|
20
21
|
*/
|
|
21
22
|
waitingMediaSourceReload(payload: IWaitingMediaSourceReloadPayload): void;
|
|
23
|
+
/**
|
|
24
|
+
* Some situations might require the browser's buffers to be refreshed.
|
|
25
|
+
* This callback is called when such situation arised.
|
|
26
|
+
*
|
|
27
|
+
* Generally flushing/refreshing low-level buffers can be performed simply by
|
|
28
|
+
* performing a very small seek.
|
|
29
|
+
*/
|
|
30
|
+
needsBufferFlush(): void;
|
|
22
31
|
}
|
|
23
|
-
/** Payload for the `
|
|
24
|
-
export interface
|
|
32
|
+
/** Payload for the `bitrateEstimateChange` callback. */
|
|
33
|
+
export interface IBitrateEstimateChangePayload {
|
|
25
34
|
/** The type of buffer for which the estimation is done. */
|
|
26
35
|
type: IBufferType;
|
|
27
36
|
/**
|
|
@@ -113,6 +122,7 @@ export interface IAdaptationStreamArguments {
|
|
|
113
122
|
manifest: Manifest;
|
|
114
123
|
period: Period;
|
|
115
124
|
adaptation: Adaptation;
|
|
125
|
+
representations: IReadOnlySharedReference<IRepresentationsChoice>;
|
|
116
126
|
};
|
|
117
127
|
options: IAdaptationStreamOptions;
|
|
118
128
|
/** Estimate the right Representation to play. */
|
|
@@ -152,15 +162,6 @@ export interface IAdaptationStreamOptions {
|
|
|
152
162
|
* - We don't know which DRM system is currently used.
|
|
153
163
|
*/
|
|
154
164
|
drmSystemId: string | undefined;
|
|
155
|
-
/**
|
|
156
|
-
* Strategy taken when the user switch manually the current Representation:
|
|
157
|
-
* - "seamless": the switch will happen smoothly, with the Representation
|
|
158
|
-
* with the new bitrate progressively being pushed alongside the old
|
|
159
|
-
* Representation.
|
|
160
|
-
* - "direct": hard switch. The Representation switch will be directly
|
|
161
|
-
* visible but may necessitate the current MediaSource to be reloaded.
|
|
162
|
-
*/
|
|
163
|
-
manualBitrateSwitchingMode: "seamless" | "direct";
|
|
164
165
|
/**
|
|
165
166
|
* If `true`, the AdaptationStream might replace segments of a lower-quality
|
|
166
167
|
* (with a lower bitrate) with segments of a higher quality (with a higher
|
|
@@ -176,3 +177,16 @@ export interface IAdaptationStreamOptions {
|
|
|
176
177
|
*/
|
|
177
178
|
enableFastSwitching: boolean;
|
|
178
179
|
}
|
|
180
|
+
/** Object indicating a choice of Adaptation made by the user. */
|
|
181
|
+
export interface IAdaptationChoice {
|
|
182
|
+
/** The Adaptation choosen. */
|
|
183
|
+
adaptation: Adaptation;
|
|
184
|
+
/** "Switching mode" in which the track switch should happen. */
|
|
185
|
+
switchingMode: ITrackSwitchingMode;
|
|
186
|
+
/**
|
|
187
|
+
* Shared reference allowing to indicate which Representations from
|
|
188
|
+
* that Adaptation are allowed.
|
|
189
|
+
*/
|
|
190
|
+
representations: IReadOnlySharedReference<IRepresentationsChoice>;
|
|
191
|
+
}
|
|
192
|
+
export type ITrackSwitchingMode = IAudioTrackSwitchingMode | IVideoTrackSwitchingMode;
|
|
@@ -14,8 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import StreamOrchestrator, { INeedsMediaSourceReloadPayload, IStreamOrchestratorOptions, IStreamOrchestratorPlaybackObservation, IStreamOrchestratorCallbacks } from "./orchestrator";
|
|
17
|
-
export {
|
|
18
|
-
export {
|
|
19
|
-
export { IWaitingMediaSourceReloadPayload, } from "./adaptation";
|
|
17
|
+
export { IRepresentationsChoice, IInbandEvent, IStreamStatusPayload, } from "./representation";
|
|
18
|
+
export { IAdaptationChoice, ITrackSwitchingMode, IWaitingMediaSourceReloadPayload, } from "./adaptation";
|
|
20
19
|
export default StreamOrchestrator;
|
|
21
20
|
export { INeedsMediaSourceReloadPayload, IStreamOrchestratorPlaybackObservation, IStreamOrchestratorOptions, IStreamOrchestratorCallbacks, };
|
|
@@ -134,6 +134,8 @@ export interface IPeriodStreamClearedPayload {
|
|
|
134
134
|
* about which `PeriodStream` has been removed.
|
|
135
135
|
*/
|
|
136
136
|
type: IBufferType;
|
|
137
|
+
/** The `Manifest` linked to the `PeriodStream` we just cleared. */
|
|
138
|
+
manifest: Manifest;
|
|
137
139
|
/**
|
|
138
140
|
* The `Period` linked to the `PeriodStream` we just removed.
|
|
139
141
|
*
|