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
|
@@ -0,0 +1,932 @@
|
|
|
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
|
+
var __extends = (this && this.__extends) || (function () {
|
|
17
|
+
var extendStatics = function (d, b) {
|
|
18
|
+
extendStatics = Object.setPrototypeOf ||
|
|
19
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
20
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
21
|
+
return extendStatics(d, b);
|
|
22
|
+
};
|
|
23
|
+
return function (d, b) {
|
|
24
|
+
if (typeof b !== "function" && b !== null)
|
|
25
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
26
|
+
extendStatics(d, b);
|
|
27
|
+
function __() { this.constructor = d; }
|
|
28
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
29
|
+
};
|
|
30
|
+
})();
|
|
31
|
+
/**
|
|
32
|
+
* This file is used to abstract the notion of text, audio and video tracks
|
|
33
|
+
* switching for an easier API management.
|
|
34
|
+
*/
|
|
35
|
+
import config from "../../../config";
|
|
36
|
+
import log from "../../../log";
|
|
37
|
+
import arrayFind from "../../../utils/array_find";
|
|
38
|
+
import assert from "../../../utils/assert";
|
|
39
|
+
import EventEmitter from "../../../utils/event_emitter";
|
|
40
|
+
import objectAssign from "../../../utils/object_assign";
|
|
41
|
+
import SharedReference from "../../../utils/reference";
|
|
42
|
+
import TrackDispatcher from "./track_dispatcher";
|
|
43
|
+
/**
|
|
44
|
+
* Class helping with the management of the audio, video and text tracks and
|
|
45
|
+
* qualities.
|
|
46
|
+
*
|
|
47
|
+
* The `TracksStore` allows to choose a track and qualities for different types
|
|
48
|
+
* of media through a simpler API.
|
|
49
|
+
*
|
|
50
|
+
* @class TracksStore
|
|
51
|
+
*/
|
|
52
|
+
var TracksStore = /** @class */ (function (_super) {
|
|
53
|
+
__extends(TracksStore, _super);
|
|
54
|
+
function TracksStore(args) {
|
|
55
|
+
var _a;
|
|
56
|
+
var _this = _super.call(this) || this;
|
|
57
|
+
_this._storedPeriodInfo = [];
|
|
58
|
+
_this._isDisposed = false;
|
|
59
|
+
_this._cachedPeriodInfo = new WeakMap();
|
|
60
|
+
_this._isTrickModeTrackEnabled = args.preferTrickModeTracks;
|
|
61
|
+
_this._defaultAudioTrackSwitchingMode =
|
|
62
|
+
(_a = args.defaultAudioTrackSwitchingMode) !== null && _a !== void 0 ? _a : config.getCurrent().DEFAULT_AUDIO_TRACK_SWITCHING_MODE;
|
|
63
|
+
return _this;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Return Array of Period information, to allow an outside application to
|
|
67
|
+
* modify the track of any Period.
|
|
68
|
+
* @returns {Array.<Object>}
|
|
69
|
+
*/
|
|
70
|
+
TracksStore.prototype.getAvailablePeriods = function () {
|
|
71
|
+
// Note: We voluntarly do not include any Period from `_cachedPeriodInfo` here;
|
|
72
|
+
// because we do not want to allow the user switching tracks for older
|
|
73
|
+
// Periods.
|
|
74
|
+
return this._storedPeriodInfo.map(function (p) { return toExposedPeriod(p.period); });
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Update the list of Periods handled by the TracksStore and make a
|
|
78
|
+
* track choice decision for each of them.
|
|
79
|
+
* @param {Object} manifest - The new Manifest object
|
|
80
|
+
*/
|
|
81
|
+
TracksStore.prototype.updatePeriodList = function (manifest) {
|
|
82
|
+
var _a;
|
|
83
|
+
var _this = this;
|
|
84
|
+
var _b, _c, _d;
|
|
85
|
+
var DEFAULT_VIDEO_TRACK_SWITCHING_MODE = config.getCurrent().DEFAULT_VIDEO_TRACK_SWITCHING_MODE;
|
|
86
|
+
var periods = manifest.periods;
|
|
87
|
+
// We assume that they are always sorted chronologically
|
|
88
|
+
// In dev mode, perform a runtime check that this is the case
|
|
89
|
+
if (0 /* __ENVIRONMENT__.CURRENT_ENV */ === 1 /* __ENVIRONMENT__.DEV */) {
|
|
90
|
+
for (var i = 1; i < periods.length; i++) {
|
|
91
|
+
assert(periods[i - 1].start <= periods[i].start);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/** Periods which have just been added. */
|
|
95
|
+
var addedPeriods = [];
|
|
96
|
+
var newPListIdx = 0;
|
|
97
|
+
var _loop_1 = function (i) {
|
|
98
|
+
var oldPeriod = this_1._storedPeriodInfo[i].period;
|
|
99
|
+
var newPeriod = periods[newPListIdx];
|
|
100
|
+
if (newPeriod === undefined) {
|
|
101
|
+
// We reached the end of the new Periods, remove remaining old Periods
|
|
102
|
+
for (var j = this_1._storedPeriodInfo.length - 1; j >= i; j--) {
|
|
103
|
+
this_1._storedPeriodInfo[j].inManifest = false;
|
|
104
|
+
if (isPeriodItemRemovable(this_1._storedPeriodInfo[j])) {
|
|
105
|
+
this_1._removePeriodObject(j);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else if (oldPeriod === newPeriod) {
|
|
110
|
+
newPListIdx++;
|
|
111
|
+
var curWantedTextTrack_1 = this_1._storedPeriodInfo[i].text.storedSettings;
|
|
112
|
+
if (curWantedTextTrack_1 !== null) {
|
|
113
|
+
var textAdaptations = newPeriod.getSupportedAdaptations("text");
|
|
114
|
+
var stillHere = textAdaptations
|
|
115
|
+
.some(function (a) { return a.id === curWantedTextTrack_1.adaptation.id; });
|
|
116
|
+
if (!stillHere) {
|
|
117
|
+
log.warn("TracksStore: Chosen text Adaptation not available anymore");
|
|
118
|
+
var periodInfo = this_1._storedPeriodInfo[i];
|
|
119
|
+
periodInfo.text.storedSettings = null;
|
|
120
|
+
this_1.trigger("trackUpdate", { period: toExposedPeriod(newPeriod),
|
|
121
|
+
trackType: "text",
|
|
122
|
+
reason: "missing" });
|
|
123
|
+
// The previous event trigger could have had side-effects, so we
|
|
124
|
+
// re-check if we're still mostly in the same state
|
|
125
|
+
if (this_1._isDisposed) {
|
|
126
|
+
return { value: void 0 };
|
|
127
|
+
}
|
|
128
|
+
var periodItem = getPeriodItem(this_1._storedPeriodInfo, periodInfo.period.id);
|
|
129
|
+
if (periodItem !== undefined && periodItem.text.storedSettings === null) {
|
|
130
|
+
(_b = periodItem.text.dispatcher) === null || _b === void 0 ? void 0 : _b.updateTrack(null);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
var curWantedVideoTrack_1 = this_1._storedPeriodInfo[i].video.storedSettings;
|
|
135
|
+
if (curWantedVideoTrack_1 !== null) {
|
|
136
|
+
var videoAdaptations = newPeriod.getSupportedAdaptations("video");
|
|
137
|
+
var stillHere = videoAdaptations
|
|
138
|
+
.some(function (a) { return a.id === curWantedVideoTrack_1.adaptation.id; });
|
|
139
|
+
if (!stillHere) {
|
|
140
|
+
log.warn("TracksStore: Chosen video Adaptation not available anymore");
|
|
141
|
+
var periodItem = this_1._storedPeriodInfo[i];
|
|
142
|
+
var storedSettings = void 0;
|
|
143
|
+
if (videoAdaptations.length === 0) {
|
|
144
|
+
storedSettings = null;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
var adaptationBase = videoAdaptations[0];
|
|
148
|
+
var adaptation = getRightVideoTrack(adaptationBase, this_1._isTrickModeTrackEnabled);
|
|
149
|
+
var lockedRepresentations = new SharedReference(null);
|
|
150
|
+
storedSettings = { adaptationBase: adaptationBase, adaptation: adaptation, switchingMode: DEFAULT_VIDEO_TRACK_SWITCHING_MODE, lockedRepresentations: lockedRepresentations };
|
|
151
|
+
}
|
|
152
|
+
periodItem.video.storedSettings = storedSettings;
|
|
153
|
+
this_1.trigger("trackUpdate", { period: toExposedPeriod(newPeriod),
|
|
154
|
+
trackType: "video",
|
|
155
|
+
reason: "missing" });
|
|
156
|
+
// The previous event trigger could have had side-effects, so we
|
|
157
|
+
// re-check if we're still mostly in the same state
|
|
158
|
+
if (this_1._isDisposed) {
|
|
159
|
+
return { value: void 0 };
|
|
160
|
+
}
|
|
161
|
+
var newPeriodItem = getPeriodItem(this_1._storedPeriodInfo, periodItem.period.id);
|
|
162
|
+
if (newPeriodItem !== undefined &&
|
|
163
|
+
newPeriodItem.video.storedSettings === storedSettings) {
|
|
164
|
+
(_c = newPeriodItem.video.dispatcher) === null || _c === void 0 ? void 0 : _c.updateTrack(storedSettings);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
var curWantedAudioTrack_1 = this_1._storedPeriodInfo[i].audio.storedSettings;
|
|
169
|
+
if (curWantedAudioTrack_1 !== null) {
|
|
170
|
+
var audioAdaptations = newPeriod.getSupportedAdaptations("audio");
|
|
171
|
+
var stillHere = audioAdaptations
|
|
172
|
+
.some(function (a) { return a.id === curWantedAudioTrack_1.adaptation.id; });
|
|
173
|
+
if (!stillHere) {
|
|
174
|
+
log.warn("TracksStore: Chosen audio Adaptation not available anymore");
|
|
175
|
+
var periodItem = this_1._storedPeriodInfo[i];
|
|
176
|
+
var storedSettings = audioAdaptations.length === 0 ?
|
|
177
|
+
null :
|
|
178
|
+
{ adaptation: audioAdaptations[0],
|
|
179
|
+
switchingMode: this_1._defaultAudioTrackSwitchingMode,
|
|
180
|
+
lockedRepresentations: new SharedReference(null) };
|
|
181
|
+
periodItem.audio.storedSettings = storedSettings;
|
|
182
|
+
this_1.trigger("trackUpdate", { period: toExposedPeriod(newPeriod),
|
|
183
|
+
trackType: "audio",
|
|
184
|
+
reason: "missing" });
|
|
185
|
+
// The previous event trigger could have had side-effects, so we
|
|
186
|
+
// re-check if we're still mostly in the same state
|
|
187
|
+
if (this_1._isDisposed) {
|
|
188
|
+
return { value: void 0 };
|
|
189
|
+
}
|
|
190
|
+
var newPeriodItem = getPeriodItem(this_1._storedPeriodInfo, periodItem.period.id);
|
|
191
|
+
if (newPeriodItem !== undefined &&
|
|
192
|
+
newPeriodItem.audio.storedSettings === storedSettings) {
|
|
193
|
+
(_d = newPeriodItem.audio.dispatcher) === null || _d === void 0 ? void 0 : _d.updateTrack(storedSettings);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// (If not, what do?)
|
|
198
|
+
}
|
|
199
|
+
else if (oldPeriod.start <= newPeriod.start) {
|
|
200
|
+
// This old Period does not exist anymore.
|
|
201
|
+
this_1._storedPeriodInfo[i].inManifest = false;
|
|
202
|
+
if (isPeriodItemRemovable(this_1._storedPeriodInfo[i])) {
|
|
203
|
+
this_1._removePeriodObject(i);
|
|
204
|
+
i--;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
var newPeriodInfo = generatePeriodInfo(newPeriod, true, this_1._isTrickModeTrackEnabled, this_1._defaultAudioTrackSwitchingMode);
|
|
209
|
+
// oldPeriod.start > newPeriod.start: insert newPeriod before
|
|
210
|
+
this_1._storedPeriodInfo.splice(i, 0, newPeriodInfo);
|
|
211
|
+
addedPeriods.push(newPeriodInfo);
|
|
212
|
+
newPListIdx++;
|
|
213
|
+
// Note: we don't increment `i` on purpose here, as we want to check the
|
|
214
|
+
// same oldPeriod at the next loop iteration
|
|
215
|
+
}
|
|
216
|
+
out_i_1 = i;
|
|
217
|
+
};
|
|
218
|
+
var this_1 = this, out_i_1;
|
|
219
|
+
for (var i = 0; i < this._storedPeriodInfo.length; i++) {
|
|
220
|
+
var state_1 = _loop_1(i);
|
|
221
|
+
i = out_i_1;
|
|
222
|
+
if (typeof state_1 === "object")
|
|
223
|
+
return state_1.value;
|
|
224
|
+
}
|
|
225
|
+
if (newPListIdx < periods.length) {
|
|
226
|
+
// Add further new Period
|
|
227
|
+
var periodsToAdd = periods.slice(newPListIdx)
|
|
228
|
+
.map(function (p) { return generatePeriodInfo(p, true, _this._isTrickModeTrackEnabled, _this._defaultAudioTrackSwitchingMode); });
|
|
229
|
+
(_a = this._storedPeriodInfo).push.apply(_a, periodsToAdd);
|
|
230
|
+
addedPeriods.push.apply(addedPeriods, periodsToAdd);
|
|
231
|
+
}
|
|
232
|
+
var periodsAdded = addedPeriods.reduce(function (acc, p) {
|
|
233
|
+
if (!p.isRemoved) {
|
|
234
|
+
acc.push({ id: p.period.id, start: p.period.start, end: p.period.end });
|
|
235
|
+
}
|
|
236
|
+
return acc;
|
|
237
|
+
}, []);
|
|
238
|
+
if (periodsAdded.length > 0) {
|
|
239
|
+
this.trigger("newAvailablePeriods", periodsAdded);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
/**
|
|
243
|
+
* Add shared reference to choose Adaptation for new "audio", "video" or
|
|
244
|
+
* "text" Period.
|
|
245
|
+
*
|
|
246
|
+
* Note that such reference has to be removed through `removeTrackReference`
|
|
247
|
+
* so ressources can be freed.
|
|
248
|
+
* @param {string} bufferType - The concerned buffer type
|
|
249
|
+
* @param {Object} manifest
|
|
250
|
+
* @param {Period} period - The concerned Period.
|
|
251
|
+
* @param {Object} adaptationRef - A reference through which
|
|
252
|
+
* the choice will be given.
|
|
253
|
+
*/
|
|
254
|
+
TracksStore.prototype.addTrackReference = function (bufferType, manifest, period, adaptationRef) {
|
|
255
|
+
var _this = this;
|
|
256
|
+
var periodObj = getPeriodItem(this._storedPeriodInfo, period.id);
|
|
257
|
+
if (periodObj === undefined) { // The Period has not yet been added.
|
|
258
|
+
periodObj = this._addPeriod(period);
|
|
259
|
+
this.trigger("newAvailablePeriods", [{ id: period.id,
|
|
260
|
+
start: period.start,
|
|
261
|
+
end: period.end }]);
|
|
262
|
+
}
|
|
263
|
+
if (periodObj[bufferType].dispatcher !== null) {
|
|
264
|
+
log.error("TracksStore: Subject already added for ".concat(bufferType, " ") +
|
|
265
|
+
"and Period ".concat(period.start));
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
var trackSetting = periodObj[bufferType].storedSettings;
|
|
269
|
+
var dispatcher = new TrackDispatcher(manifest, adaptationRef, trackSetting);
|
|
270
|
+
periodObj[bufferType].dispatcher = dispatcher;
|
|
271
|
+
dispatcher.addEventListener("noPlayableLockedRepresentation", function () {
|
|
272
|
+
trackSetting === null || trackSetting === void 0 ? void 0 : trackSetting.lockedRepresentations.setValue(null);
|
|
273
|
+
_this.trigger("brokenRepresentationsLock", { period: { id: period.id,
|
|
274
|
+
start: period.start,
|
|
275
|
+
end: period.end },
|
|
276
|
+
trackType: bufferType });
|
|
277
|
+
});
|
|
278
|
+
};
|
|
279
|
+
/**
|
|
280
|
+
* Remove shared reference to choose an "audio", "video" or "text" Adaptation
|
|
281
|
+
* for a Period.
|
|
282
|
+
* @param {string} bufferType - The concerned buffer type
|
|
283
|
+
* @param {Period} period - The concerned Period.
|
|
284
|
+
*/
|
|
285
|
+
TracksStore.prototype.removeTrackReference = function (bufferType, period) {
|
|
286
|
+
var periodIndex = findPeriodIndex(this._storedPeriodInfo, period);
|
|
287
|
+
if (periodIndex === undefined) {
|
|
288
|
+
log.warn("TracksStore: ".concat(bufferType, " not found for period"), period.start);
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
var periodObj = this._storedPeriodInfo[periodIndex];
|
|
292
|
+
var choiceItem = periodObj[bufferType];
|
|
293
|
+
if ((choiceItem === null || choiceItem === void 0 ? void 0 : choiceItem.dispatcher) === null) {
|
|
294
|
+
log.warn("TracksStore: TrackDispatcher already removed for ".concat(bufferType, " ") +
|
|
295
|
+
"and Period ".concat(period.start));
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
choiceItem.dispatcher.dispose();
|
|
299
|
+
choiceItem.dispatcher = null;
|
|
300
|
+
if (isPeriodItemRemovable(periodObj)) {
|
|
301
|
+
this._removePeriodObject(periodIndex);
|
|
302
|
+
}
|
|
303
|
+
};
|
|
304
|
+
/**
|
|
305
|
+
* Allows to recuperate a "Period Object" - used in get/set methods of the
|
|
306
|
+
* `TracksStore` - by giving the Period itself.
|
|
307
|
+
*
|
|
308
|
+
* This method should be preferred when possible over `getPeriodObjectFromId`
|
|
309
|
+
* because it is able to fallback on an internal cache in case the
|
|
310
|
+
* corresponding Period is not stored anymore.
|
|
311
|
+
* This for example could happen when a Period has been removed from the
|
|
312
|
+
* Manifest yet may still be needed (e.g. because its linked segments might
|
|
313
|
+
* still live in the buffers).
|
|
314
|
+
*
|
|
315
|
+
* Note however that this cache-retrieval logic is based on a Map whose key
|
|
316
|
+
* is the Period's JavaScript reference. As such, the cache won't be used if
|
|
317
|
+
* `Period` corresponds to a copy of the original `Period` object.
|
|
318
|
+
*
|
|
319
|
+
* @param {Object} period
|
|
320
|
+
* @returns {Object}
|
|
321
|
+
*/
|
|
322
|
+
TracksStore.prototype.getPeriodObjectFromPeriod = function (period) {
|
|
323
|
+
var periodObj = getPeriodItem(this._storedPeriodInfo, period.id);
|
|
324
|
+
if (periodObj === undefined && period !== undefined) {
|
|
325
|
+
return this._cachedPeriodInfo.get(period);
|
|
326
|
+
}
|
|
327
|
+
return periodObj;
|
|
328
|
+
};
|
|
329
|
+
/**
|
|
330
|
+
* Allows to recuperate a "Period Object" - used in get/set methods of the
|
|
331
|
+
* `TracksStore` - by giving the Period's id.
|
|
332
|
+
*
|
|
333
|
+
* Note that unlike `getPeriodObjectFromPeriod` this method is only going to look
|
|
334
|
+
* into currently stored Period and as such old Periods not in the Manifest
|
|
335
|
+
* anymore might not be retrievable.
|
|
336
|
+
* If you want to retrieve Period objects linked to such Period, you might
|
|
337
|
+
* prefer to use `getPeriodObjectFromPeriod` (which necessitates the original
|
|
338
|
+
* Period object).
|
|
339
|
+
*
|
|
340
|
+
* @param {string} periodId - The concerned Period's id
|
|
341
|
+
* @returns {Object}
|
|
342
|
+
*/
|
|
343
|
+
TracksStore.prototype.getPeriodObjectFromId = function (periodId) {
|
|
344
|
+
return getPeriodItem(this._storedPeriodInfo, periodId);
|
|
345
|
+
};
|
|
346
|
+
TracksStore.prototype.disableVideoTrickModeTracks = function () {
|
|
347
|
+
if (!this._isTrickModeTrackEnabled) {
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
this._isTrickModeTrackEnabled = false;
|
|
351
|
+
this._resetVideoTrackChoices("trickmode-disabled");
|
|
352
|
+
};
|
|
353
|
+
TracksStore.prototype.enableVideoTrickModeTracks = function () {
|
|
354
|
+
if (this._isTrickModeTrackEnabled) {
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
this._isTrickModeTrackEnabled = true;
|
|
358
|
+
this._resetVideoTrackChoices("trickmode-enabled");
|
|
359
|
+
};
|
|
360
|
+
/**
|
|
361
|
+
* Reset the TracksStore's Period objects:
|
|
362
|
+
* - All Period which are not in the manifest currently will be removed.
|
|
363
|
+
* - All References used to communicate the wanted track will be removed.
|
|
364
|
+
*
|
|
365
|
+
* You might want to call this API when restarting playback.
|
|
366
|
+
*/
|
|
367
|
+
TracksStore.prototype.resetPeriodObjects = function () {
|
|
368
|
+
var _a, _b, _c;
|
|
369
|
+
for (var i = this._storedPeriodInfo.length - 1; i >= 0; i--) {
|
|
370
|
+
var storedObj = this._storedPeriodInfo[i];
|
|
371
|
+
(_a = storedObj.audio.dispatcher) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
372
|
+
storedObj.audio.dispatcher = null;
|
|
373
|
+
(_b = storedObj.video.dispatcher) === null || _b === void 0 ? void 0 : _b.dispose();
|
|
374
|
+
storedObj.video.dispatcher = null;
|
|
375
|
+
(_c = storedObj.text.dispatcher) === null || _c === void 0 ? void 0 : _c.dispose();
|
|
376
|
+
storedObj.text.dispatcher = null;
|
|
377
|
+
if (!storedObj.inManifest) {
|
|
378
|
+
this._removePeriodObject(i);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
};
|
|
382
|
+
/**
|
|
383
|
+
* @returns {boolean}
|
|
384
|
+
*/
|
|
385
|
+
TracksStore.prototype.isTrickModeEnabled = function () {
|
|
386
|
+
return this._isTrickModeTrackEnabled;
|
|
387
|
+
};
|
|
388
|
+
/**
|
|
389
|
+
* Set audio track based on the ID of its Adaptation for a given added Period.
|
|
390
|
+
* @param {Object} periodObj - The concerned Period's object.
|
|
391
|
+
* @param {string} wantedId - adaptation id of the wanted track.
|
|
392
|
+
* @param {string} switchingMode - Behavior when replacing the track by
|
|
393
|
+
* another.
|
|
394
|
+
* @param {Object|null} reprsToLock - Audio Representations that should be
|
|
395
|
+
* locked after switchingMode to that track.
|
|
396
|
+
* `null` if no Audio Representation should be locked.
|
|
397
|
+
*/
|
|
398
|
+
TracksStore.prototype.setAudioTrack = function (periodObj, wantedId, switchingMode, reprsToLock) {
|
|
399
|
+
return this._setAudioOrTextTrack("audio", periodObj, wantedId, switchingMode !== null && switchingMode !== void 0 ? switchingMode : this._defaultAudioTrackSwitchingMode, reprsToLock);
|
|
400
|
+
};
|
|
401
|
+
/**
|
|
402
|
+
* Set text track based on the ID of its Adaptation for a given added Period.
|
|
403
|
+
* @param {Object} periodObj - The concerned Period's object.
|
|
404
|
+
* @param {string} wantedId - adaptation id of the wanted track.
|
|
405
|
+
*/
|
|
406
|
+
TracksStore.prototype.setTextTrack = function (periodObj, wantedId) {
|
|
407
|
+
return this._setAudioOrTextTrack("text", periodObj, wantedId, "direct", null);
|
|
408
|
+
};
|
|
409
|
+
/**
|
|
410
|
+
* Set audio track based on the ID of its Adaptation for a given added Period.
|
|
411
|
+
* @param {Object} periodObj - The concerned Period's object.
|
|
412
|
+
* @param {string} wantedId - adaptation id of the wanted track.
|
|
413
|
+
* @param {string} switchingMode - Behavior when replacing the track by
|
|
414
|
+
* another.
|
|
415
|
+
* @param {Array.<string>|null} reprsToLock - Audio Representations that should be
|
|
416
|
+
* locked after switchingMode to that track.
|
|
417
|
+
* `null` if no Audio Representation should be locked.
|
|
418
|
+
*/
|
|
419
|
+
TracksStore.prototype._setAudioOrTextTrack = function (bufferType, periodObj, wantedId, switchingMode, reprsToLock) {
|
|
420
|
+
var _a;
|
|
421
|
+
var period = periodObj.period;
|
|
422
|
+
var wantedAdaptation = arrayFind(period.getSupportedAdaptations(bufferType), function (_a) {
|
|
423
|
+
var id = _a.id;
|
|
424
|
+
return id === wantedId;
|
|
425
|
+
});
|
|
426
|
+
if (wantedAdaptation === undefined) {
|
|
427
|
+
throw new Error("Wanted ".concat(bufferType, " track not found."));
|
|
428
|
+
}
|
|
429
|
+
var typeInfo = periodObj[bufferType];
|
|
430
|
+
var lockedRepresentations;
|
|
431
|
+
if (reprsToLock === null) {
|
|
432
|
+
lockedRepresentations = new SharedReference(null);
|
|
433
|
+
}
|
|
434
|
+
else {
|
|
435
|
+
var representationsToLock = this._getRepresentationsToLock(wantedAdaptation, reprsToLock);
|
|
436
|
+
var repSwitchingMode = bufferType === "audio" ?
|
|
437
|
+
this._defaultAudioTrackSwitchingMode :
|
|
438
|
+
"direct";
|
|
439
|
+
lockedRepresentations = new SharedReference({
|
|
440
|
+
representations: representationsToLock,
|
|
441
|
+
switchingMode: repSwitchingMode,
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
var storedSettings = { adaptation: wantedAdaptation, switchingMode: switchingMode, lockedRepresentations: lockedRepresentations };
|
|
445
|
+
typeInfo.storedSettings = storedSettings;
|
|
446
|
+
this.trigger("trackUpdate", { period: toExposedPeriod(period),
|
|
447
|
+
trackType: bufferType,
|
|
448
|
+
reason: "manual" });
|
|
449
|
+
// The previous event trigger could have had side-effects, so we
|
|
450
|
+
// re-check if we're still mostly in the same state
|
|
451
|
+
if (this._isDisposed) {
|
|
452
|
+
return; // Someone disposed the `TracksStore` on the previous side-effect
|
|
453
|
+
}
|
|
454
|
+
var newPeriodItem = getPeriodItem(this._storedPeriodInfo, period.id);
|
|
455
|
+
if (newPeriodItem !== undefined &&
|
|
456
|
+
newPeriodItem[bufferType].storedSettings === storedSettings) {
|
|
457
|
+
(_a = newPeriodItem[bufferType].dispatcher) === null || _a === void 0 ? void 0 : _a.updateTrack(storedSettings);
|
|
458
|
+
}
|
|
459
|
+
};
|
|
460
|
+
/**
|
|
461
|
+
* Set video track based on the ID of its Adaptation for a given added Period.
|
|
462
|
+
* @param {Object} periodObj - The concerned Period's object.
|
|
463
|
+
* @param {string} wantedId - adaptation id of the wanted track.
|
|
464
|
+
* @param {string} switchingMode - Behavior when replacing the track by
|
|
465
|
+
* another.
|
|
466
|
+
* @param {Array.<string>|null} reprsToLock - Video Representations that should be
|
|
467
|
+
* locked after switchingMode to that track.
|
|
468
|
+
* `null` if no Video Representation should be locked.
|
|
469
|
+
*/
|
|
470
|
+
TracksStore.prototype.setVideoTrack = function (periodObj, wantedId, switchingMode, reprsToLock) {
|
|
471
|
+
var _a;
|
|
472
|
+
var period = periodObj.period;
|
|
473
|
+
var wantedAdaptation = arrayFind(period.getSupportedAdaptations("video"), function (_a) {
|
|
474
|
+
var id = _a.id;
|
|
475
|
+
return id === wantedId;
|
|
476
|
+
});
|
|
477
|
+
if (wantedAdaptation === undefined) {
|
|
478
|
+
throw new Error("Wanted video track not found.");
|
|
479
|
+
}
|
|
480
|
+
var DEFAULT_VIDEO_TRACK_SWITCHING_MODE = config.getCurrent().DEFAULT_VIDEO_TRACK_SWITCHING_MODE;
|
|
481
|
+
var typeInfo = periodObj.video;
|
|
482
|
+
var newAdaptation = getRightVideoTrack(wantedAdaptation, this._isTrickModeTrackEnabled);
|
|
483
|
+
var lockedRepresentations;
|
|
484
|
+
if (reprsToLock === null) {
|
|
485
|
+
lockedRepresentations = new SharedReference(null);
|
|
486
|
+
}
|
|
487
|
+
else {
|
|
488
|
+
var representationsToLock = this._getRepresentationsToLock(wantedAdaptation, reprsToLock);
|
|
489
|
+
var repSwitchingMode = DEFAULT_VIDEO_TRACK_SWITCHING_MODE;
|
|
490
|
+
lockedRepresentations = new SharedReference({
|
|
491
|
+
representations: representationsToLock,
|
|
492
|
+
switchingMode: repSwitchingMode,
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
var storedSettings = { adaptationBase: wantedAdaptation,
|
|
496
|
+
switchingMode: switchingMode !== null && switchingMode !== void 0 ? switchingMode : DEFAULT_VIDEO_TRACK_SWITCHING_MODE,
|
|
497
|
+
adaptation: newAdaptation, lockedRepresentations: lockedRepresentations };
|
|
498
|
+
typeInfo.storedSettings = storedSettings;
|
|
499
|
+
this.trigger("trackUpdate", { period: toExposedPeriod(period),
|
|
500
|
+
trackType: "video",
|
|
501
|
+
reason: "manual" });
|
|
502
|
+
// The previous event trigger could have had side-effects, so we
|
|
503
|
+
// re-check if we're still mostly in the same state
|
|
504
|
+
if (this._isDisposed) {
|
|
505
|
+
return; // Someone disposed the `TracksStore` on the previous side-effect
|
|
506
|
+
}
|
|
507
|
+
var newPeriodItem = getPeriodItem(this._storedPeriodInfo, period.id);
|
|
508
|
+
if (newPeriodItem !== undefined &&
|
|
509
|
+
newPeriodItem.video.storedSettings === storedSettings) {
|
|
510
|
+
(_a = newPeriodItem.video.dispatcher) === null || _a === void 0 ? void 0 : _a.updateTrack(storedSettings);
|
|
511
|
+
}
|
|
512
|
+
};
|
|
513
|
+
/**
|
|
514
|
+
* Disable the current text track for a given period.
|
|
515
|
+
*
|
|
516
|
+
* @param {Object} periodObj - The concerned Period's object
|
|
517
|
+
* @param {string} bufferType - The type of track to disable.
|
|
518
|
+
* @throws Error - Throws if the period given has not been added
|
|
519
|
+
*/
|
|
520
|
+
TracksStore.prototype.disableTrack = function (periodObj, bufferType) {
|
|
521
|
+
var _a, _b;
|
|
522
|
+
var trackInfo = periodObj[bufferType];
|
|
523
|
+
if (trackInfo.storedSettings === null) {
|
|
524
|
+
return;
|
|
525
|
+
}
|
|
526
|
+
if (bufferType !== "text") {
|
|
527
|
+
// Potentially unneeded, but let's be clean
|
|
528
|
+
(_a = periodObj[bufferType].storedSettings) === null || _a === void 0 ? void 0 : _a.lockedRepresentations.finish();
|
|
529
|
+
}
|
|
530
|
+
trackInfo.storedSettings = null;
|
|
531
|
+
this.trigger("trackUpdate", { period: toExposedPeriod(periodObj.period),
|
|
532
|
+
trackType: bufferType,
|
|
533
|
+
reason: "manual" });
|
|
534
|
+
// The previous event trigger could have had side-effects, so we
|
|
535
|
+
// re-check if we're still mostly in the same state
|
|
536
|
+
if (this._isDisposed) {
|
|
537
|
+
return; // Someone disposed the `TracksStore` on the previous side-effect
|
|
538
|
+
}
|
|
539
|
+
var newPeriodItem = getPeriodItem(this._storedPeriodInfo, periodObj.period.id);
|
|
540
|
+
if (newPeriodItem !== undefined &&
|
|
541
|
+
newPeriodItem[bufferType].storedSettings === null) {
|
|
542
|
+
(_b = newPeriodItem[bufferType].dispatcher) === null || _b === void 0 ? void 0 : _b.updateTrack(null);
|
|
543
|
+
}
|
|
544
|
+
};
|
|
545
|
+
/**
|
|
546
|
+
* Returns an object describing the chosen audio track for the given audio
|
|
547
|
+
* Period.
|
|
548
|
+
*
|
|
549
|
+
* Returns `null` is the the current audio track is disabled or not
|
|
550
|
+
* set yet.a pas bcp de marge de manoeuvre j'ai l'impression
|
|
551
|
+
*
|
|
552
|
+
* Returns `undefined` if the given Period's id is not currently found in the
|
|
553
|
+
* `TracksStore`. The cause being most probably that the corresponding
|
|
554
|
+
* Period is not available anymore.
|
|
555
|
+
* If you're in that case and if still have the corresponding JavaScript
|
|
556
|
+
* reference to the wanted Period, you can call `getOldAudioTrack` with it. It
|
|
557
|
+
* will try retrieving the choice it made from its cache.
|
|
558
|
+
* @param {Object} periodObj - The concerned Period's object
|
|
559
|
+
* @returns {Object|null|undefined} - The audio track chosen for this Period.
|
|
560
|
+
* `null` if audio tracks were disabled and `undefined` if the Period is not
|
|
561
|
+
* known.
|
|
562
|
+
*/
|
|
563
|
+
TracksStore.prototype.getChosenAudioTrack = function (periodObj) {
|
|
564
|
+
return periodObj.audio.storedSettings === null ?
|
|
565
|
+
null :
|
|
566
|
+
periodObj.audio.storedSettings.adaptation.toAudioTrack(true);
|
|
567
|
+
};
|
|
568
|
+
/**
|
|
569
|
+
* Returns an object describing the chosen text track for the given text
|
|
570
|
+
* Period.
|
|
571
|
+
*
|
|
572
|
+
* Returns null is the the current text track is disabled or not
|
|
573
|
+
* set yet.
|
|
574
|
+
*
|
|
575
|
+
* @param {Object} periodObj - The concerned Period's object
|
|
576
|
+
* @returns {Object|null} - The text track chosen for this Period
|
|
577
|
+
*/
|
|
578
|
+
TracksStore.prototype.getChosenTextTrack = function (periodObj) {
|
|
579
|
+
return periodObj.text.storedSettings === null ?
|
|
580
|
+
null :
|
|
581
|
+
periodObj.text.storedSettings.adaptation.toTextTrack();
|
|
582
|
+
};
|
|
583
|
+
/**
|
|
584
|
+
* Returns an object describing the chosen video track for the given video
|
|
585
|
+
* Period.
|
|
586
|
+
*
|
|
587
|
+
* Returns null is the the current video track is disabled or not
|
|
588
|
+
* set yet.
|
|
589
|
+
*
|
|
590
|
+
* @param {Object} periodObj - The concerned Period's object
|
|
591
|
+
* @returns {Object|null} - The video track chosen for this Period
|
|
592
|
+
*/
|
|
593
|
+
TracksStore.prototype.getChosenVideoTrack = function (periodObj) {
|
|
594
|
+
if (periodObj.video.storedSettings === null) {
|
|
595
|
+
return null;
|
|
596
|
+
}
|
|
597
|
+
return periodObj.video.storedSettings.adaptation.toVideoTrack(true);
|
|
598
|
+
};
|
|
599
|
+
/**
|
|
600
|
+
* Returns all available audio tracks for a given Period, as an array of
|
|
601
|
+
* objects.
|
|
602
|
+
*
|
|
603
|
+
* Returns `undefined` if the given Period's id is not known.
|
|
604
|
+
*
|
|
605
|
+
* @param {Object} periodObj - The concerned Period's object
|
|
606
|
+
* @returns {Array.<Object>}
|
|
607
|
+
*/
|
|
608
|
+
TracksStore.prototype.getAvailableAudioTracks = function (periodObj) {
|
|
609
|
+
var storedSettings = periodObj.audio.storedSettings;
|
|
610
|
+
var currentId = storedSettings !== null ?
|
|
611
|
+
storedSettings.adaptation.id :
|
|
612
|
+
null;
|
|
613
|
+
return periodObj.period.getSupportedAdaptations("audio")
|
|
614
|
+
.map(function (adaptation) {
|
|
615
|
+
var active = currentId === null ? false :
|
|
616
|
+
currentId === adaptation.id;
|
|
617
|
+
return objectAssign(adaptation.toAudioTrack(true), { active: active });
|
|
618
|
+
});
|
|
619
|
+
};
|
|
620
|
+
/**
|
|
621
|
+
* Returns all available text tracks for a given Period, as an array of
|
|
622
|
+
* objects.
|
|
623
|
+
*
|
|
624
|
+
* Returns `undefined` if the given Period's id is not known.
|
|
625
|
+
*
|
|
626
|
+
* @param {Object} periodObj - The concerned Period's object
|
|
627
|
+
* @returns {Array.<Object>}
|
|
628
|
+
*/
|
|
629
|
+
TracksStore.prototype.getAvailableTextTracks = function (periodObj) {
|
|
630
|
+
var storedSettings = periodObj.text.storedSettings;
|
|
631
|
+
var currentId = storedSettings !== null ?
|
|
632
|
+
storedSettings.adaptation.id :
|
|
633
|
+
null;
|
|
634
|
+
return periodObj.period.getSupportedAdaptations("text")
|
|
635
|
+
.map(function (adaptation) {
|
|
636
|
+
var active = currentId === null ? false :
|
|
637
|
+
currentId === adaptation.id;
|
|
638
|
+
return objectAssign(adaptation.toTextTrack(), { active: active });
|
|
639
|
+
});
|
|
640
|
+
};
|
|
641
|
+
/**
|
|
642
|
+
* Returns all available video tracks for a given Period, as an array of
|
|
643
|
+
* objects.
|
|
644
|
+
*
|
|
645
|
+
* Returns `undefined` if the given Period's id is not known.
|
|
646
|
+
*
|
|
647
|
+
* @param {Object} periodObj - The concerned Period's object
|
|
648
|
+
* @returns {Array.<Object>}
|
|
649
|
+
*/
|
|
650
|
+
TracksStore.prototype.getAvailableVideoTracks = function (periodObj) {
|
|
651
|
+
var storedSettings = periodObj.video.storedSettings;
|
|
652
|
+
var currentId = storedSettings === null ?
|
|
653
|
+
undefined :
|
|
654
|
+
storedSettings.adaptation.id;
|
|
655
|
+
return periodObj.period.getSupportedAdaptations("video")
|
|
656
|
+
.map(function (adaptation) {
|
|
657
|
+
var active = currentId === null ? false :
|
|
658
|
+
currentId === adaptation.id;
|
|
659
|
+
var track = adaptation.toVideoTrack(true);
|
|
660
|
+
var trickModeTracks = track.trickModeTracks !== undefined ?
|
|
661
|
+
track.trickModeTracks.map(function (trickModeAdaptation) {
|
|
662
|
+
var isActive = currentId === null ? false :
|
|
663
|
+
currentId === trickModeAdaptation.id;
|
|
664
|
+
return objectAssign(trickModeAdaptation, { active: isActive });
|
|
665
|
+
}) :
|
|
666
|
+
[];
|
|
667
|
+
var availableTrack = objectAssign(track, { active: active });
|
|
668
|
+
if (trickModeTracks !== undefined) {
|
|
669
|
+
availableTrack.trickModeTracks = trickModeTracks;
|
|
670
|
+
}
|
|
671
|
+
return availableTrack;
|
|
672
|
+
});
|
|
673
|
+
};
|
|
674
|
+
TracksStore.prototype.getLockedAudioRepresentations = function (periodObj) {
|
|
675
|
+
var storedSettings = periodObj.audio.storedSettings;
|
|
676
|
+
if (storedSettings === null) {
|
|
677
|
+
return null;
|
|
678
|
+
}
|
|
679
|
+
var lastLockedSettings = storedSettings.lockedRepresentations.getValue();
|
|
680
|
+
return lastLockedSettings === null ?
|
|
681
|
+
null :
|
|
682
|
+
lastLockedSettings.representations.map(function (r) { return r.id; });
|
|
683
|
+
};
|
|
684
|
+
TracksStore.prototype.getLockedVideoRepresentations = function (periodObj) {
|
|
685
|
+
var storedSettings = periodObj.video.storedSettings;
|
|
686
|
+
if (storedSettings === null) {
|
|
687
|
+
return null;
|
|
688
|
+
}
|
|
689
|
+
var lastLockedSettings = storedSettings.lockedRepresentations.getValue();
|
|
690
|
+
return lastLockedSettings === null ?
|
|
691
|
+
null :
|
|
692
|
+
lastLockedSettings.representations.map(function (r) { return r.id; });
|
|
693
|
+
};
|
|
694
|
+
TracksStore.prototype.lockAudioRepresentations = function (periodObj, lockSettings) {
|
|
695
|
+
var _a;
|
|
696
|
+
var storedSettings = periodObj.audio.storedSettings;
|
|
697
|
+
if (storedSettings === null) {
|
|
698
|
+
return;
|
|
699
|
+
}
|
|
700
|
+
var DEFAULT_AUDIO_REPRESENTATIONS_SWITCHING_MODE = config.getCurrent().DEFAULT_AUDIO_REPRESENTATIONS_SWITCHING_MODE;
|
|
701
|
+
var filtered = this._getRepresentationsToLock(storedSettings.adaptation, lockSettings.representations);
|
|
702
|
+
var switchingMode = (_a = lockSettings.switchingMode) !== null && _a !== void 0 ? _a : DEFAULT_AUDIO_REPRESENTATIONS_SWITCHING_MODE;
|
|
703
|
+
storedSettings.lockedRepresentations.setValue({ representations: filtered, switchingMode: switchingMode });
|
|
704
|
+
};
|
|
705
|
+
TracksStore.prototype.lockVideoRepresentations = function (periodObj, lockSettings) {
|
|
706
|
+
var _a;
|
|
707
|
+
var storedSettings = periodObj.video.storedSettings;
|
|
708
|
+
if (storedSettings === null) {
|
|
709
|
+
return;
|
|
710
|
+
}
|
|
711
|
+
var DEFAULT_VIDEO_REPRESENTATIONS_SWITCHING_MODE = config.getCurrent().DEFAULT_VIDEO_REPRESENTATIONS_SWITCHING_MODE;
|
|
712
|
+
var filtered = this._getRepresentationsToLock(storedSettings.adaptation, lockSettings.representations);
|
|
713
|
+
var switchingMode = (_a = lockSettings.switchingMode) !== null && _a !== void 0 ? _a : DEFAULT_VIDEO_REPRESENTATIONS_SWITCHING_MODE;
|
|
714
|
+
storedSettings.lockedRepresentations.setValue({ representations: filtered, switchingMode: switchingMode });
|
|
715
|
+
};
|
|
716
|
+
TracksStore.prototype.unlockAudioRepresentations = function (periodObj) {
|
|
717
|
+
var storedSettings = periodObj.audio.storedSettings;
|
|
718
|
+
if (storedSettings === null ||
|
|
719
|
+
storedSettings.lockedRepresentations.getValue() === null) {
|
|
720
|
+
return;
|
|
721
|
+
}
|
|
722
|
+
storedSettings.lockedRepresentations.setValue(null);
|
|
723
|
+
};
|
|
724
|
+
TracksStore.prototype.unlockVideoRepresentations = function (periodObj) {
|
|
725
|
+
var storedSettings = periodObj.video.storedSettings;
|
|
726
|
+
if (storedSettings === null ||
|
|
727
|
+
storedSettings.lockedRepresentations.getValue() === null) {
|
|
728
|
+
return;
|
|
729
|
+
}
|
|
730
|
+
storedSettings.lockedRepresentations.setValue(null);
|
|
731
|
+
};
|
|
732
|
+
TracksStore.prototype.dispose = function () {
|
|
733
|
+
this._isDisposed = true;
|
|
734
|
+
while (true) {
|
|
735
|
+
var lastPeriod = this._storedPeriodInfo.pop();
|
|
736
|
+
if (lastPeriod === undefined) {
|
|
737
|
+
return;
|
|
738
|
+
}
|
|
739
|
+
lastPeriod.isRemoved = true;
|
|
740
|
+
}
|
|
741
|
+
};
|
|
742
|
+
/**
|
|
743
|
+
* @param {Period} period
|
|
744
|
+
* @returns {Object}
|
|
745
|
+
*/
|
|
746
|
+
TracksStore.prototype._addPeriod = function (period) {
|
|
747
|
+
var periodObj = generatePeriodInfo(period, false, this._isTrickModeTrackEnabled, this._defaultAudioTrackSwitchingMode);
|
|
748
|
+
for (var i = 0; i < this._storedPeriodInfo.length; i++) {
|
|
749
|
+
if (this._storedPeriodInfo[i].period.start > period.start) {
|
|
750
|
+
this._storedPeriodInfo.splice(i, 0, periodObj);
|
|
751
|
+
return periodObj;
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
this._storedPeriodInfo.push(periodObj);
|
|
755
|
+
return periodObj;
|
|
756
|
+
};
|
|
757
|
+
TracksStore.prototype._resetVideoTrackChoices = function (reason) {
|
|
758
|
+
var _a;
|
|
759
|
+
for (var i = 0; i < this._storedPeriodInfo.length; i++) {
|
|
760
|
+
var periodObj = this._storedPeriodInfo[i];
|
|
761
|
+
if (periodObj.video.storedSettings !== null) {
|
|
762
|
+
var chosenBaseTrack = periodObj.video.storedSettings.adaptationBase;
|
|
763
|
+
if (chosenBaseTrack !== null) {
|
|
764
|
+
var chosenTrack = getRightVideoTrack(chosenBaseTrack, this._isTrickModeTrackEnabled);
|
|
765
|
+
periodObj.video.storedSettings.adaptationBase = chosenBaseTrack;
|
|
766
|
+
periodObj.video.storedSettings.adaptation = chosenTrack;
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
// Clone the current Period list to not be influenced if Periods are removed
|
|
771
|
+
// or added while the loop is running.
|
|
772
|
+
var sliced = this._storedPeriodInfo.slice();
|
|
773
|
+
for (var i = 0; i < sliced.length; i++) {
|
|
774
|
+
var period = sliced[i].period;
|
|
775
|
+
var videoItem = sliced[i].video;
|
|
776
|
+
var storedSettings = videoItem.storedSettings;
|
|
777
|
+
this.trigger("trackUpdate", { period: toExposedPeriod(period),
|
|
778
|
+
trackType: "video", reason: reason });
|
|
779
|
+
// The previous event trigger could have had side-effects, so we
|
|
780
|
+
// re-check if we're still mostly in the same state
|
|
781
|
+
if (this._isDisposed) {
|
|
782
|
+
return; // Someone disposed the `TracksStore` on the previous side-effect
|
|
783
|
+
}
|
|
784
|
+
var newPeriodItem = getPeriodItem(this._storedPeriodInfo, period.id);
|
|
785
|
+
if (newPeriodItem !== undefined &&
|
|
786
|
+
newPeriodItem.video.storedSettings === storedSettings) {
|
|
787
|
+
(_a = newPeriodItem.video.dispatcher) === null || _a === void 0 ? void 0 : _a.updateTrack(storedSettings);
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
};
|
|
791
|
+
TracksStore.prototype._removePeriodObject = function (index) {
|
|
792
|
+
if (0 /* __ENVIRONMENT__.CURRENT_ENV */ === 1 /* __ENVIRONMENT__.DEV */) {
|
|
793
|
+
assert(index < this._storedPeriodInfo.length, "Invalid index for Period removal");
|
|
794
|
+
}
|
|
795
|
+
var oldPeriodItem = this._storedPeriodInfo[index];
|
|
796
|
+
this._storedPeriodInfo[index].isRemoved = true;
|
|
797
|
+
this._storedPeriodInfo.splice(index, 1);
|
|
798
|
+
this._cachedPeriodInfo.set(oldPeriodItem.period, oldPeriodItem);
|
|
799
|
+
};
|
|
800
|
+
TracksStore.prototype._getRepresentationsToLock = function (adaptation, representationIds) {
|
|
801
|
+
var filtered = representationIds.reduce(function (acc, repId) {
|
|
802
|
+
var foundRep = arrayFind(adaptation.representations, function (r) {
|
|
803
|
+
return r.id === repId;
|
|
804
|
+
});
|
|
805
|
+
if (foundRep === undefined) {
|
|
806
|
+
log.warn("API: Wanted locked Representation not found.");
|
|
807
|
+
}
|
|
808
|
+
else {
|
|
809
|
+
acc.push(foundRep);
|
|
810
|
+
}
|
|
811
|
+
return acc;
|
|
812
|
+
}, []);
|
|
813
|
+
if (filtered.length === 0) {
|
|
814
|
+
throw new Error("Cannot lock Representations: " +
|
|
815
|
+
"None of the given Representation id are found");
|
|
816
|
+
}
|
|
817
|
+
return filtered;
|
|
818
|
+
};
|
|
819
|
+
return TracksStore;
|
|
820
|
+
}(EventEmitter));
|
|
821
|
+
export default TracksStore;
|
|
822
|
+
/**
|
|
823
|
+
* Returns the index of the given `period` in the given `periods`
|
|
824
|
+
* Array.
|
|
825
|
+
* Returns `undefined` if that `period` is not found.
|
|
826
|
+
* @param {Object} periods
|
|
827
|
+
* @param {Object} period
|
|
828
|
+
* @returns {number|undefined}
|
|
829
|
+
*/
|
|
830
|
+
function findPeriodIndex(periods, period) {
|
|
831
|
+
for (var i = 0; i < periods.length; i++) {
|
|
832
|
+
var periodI = periods[i];
|
|
833
|
+
if (periodI.period.id === period.id) {
|
|
834
|
+
return i;
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
/**
|
|
839
|
+
* Returns element in the given `periods` Array that corresponds to the
|
|
840
|
+
* `period` given.
|
|
841
|
+
* Returns `undefined` if that `period` is not found.
|
|
842
|
+
* @param {Object} periods
|
|
843
|
+
* @param {string} periodId
|
|
844
|
+
* @returns {Object|undefined}
|
|
845
|
+
*/
|
|
846
|
+
function getPeriodItem(periods, periodId) {
|
|
847
|
+
for (var i = 0; i < periods.length; i++) {
|
|
848
|
+
var periodI = periods[i];
|
|
849
|
+
if (periodI.period.id === periodId) {
|
|
850
|
+
return periodI;
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
/**
|
|
855
|
+
* A `ITMPeriodObject` should only be removed once all References linked to it
|
|
856
|
+
* do not exist anymore, to keep the possibility of making track choices.
|
|
857
|
+
* @param {Object} periodObj
|
|
858
|
+
* @returns {boolean}
|
|
859
|
+
*/
|
|
860
|
+
function isPeriodItemRemovable(periodObj) {
|
|
861
|
+
var _a, _b, _c;
|
|
862
|
+
return !periodObj.inManifest &&
|
|
863
|
+
((_a = periodObj.text) === null || _a === void 0 ? void 0 : _a.dispatcher) === null &&
|
|
864
|
+
((_b = periodObj.audio) === null || _b === void 0 ? void 0 : _b.dispatcher) === null &&
|
|
865
|
+
((_c = periodObj.video) === null || _c === void 0 ? void 0 : _c.dispatcher) === null;
|
|
866
|
+
}
|
|
867
|
+
function getRightVideoTrack(adaptation, isTrickModeEnabled) {
|
|
868
|
+
var _a;
|
|
869
|
+
if (isTrickModeEnabled &&
|
|
870
|
+
((_a = adaptation.trickModeTracks) === null || _a === void 0 ? void 0 : _a[0]) !== undefined) {
|
|
871
|
+
return adaptation.trickModeTracks[0];
|
|
872
|
+
}
|
|
873
|
+
return adaptation;
|
|
874
|
+
}
|
|
875
|
+
/**
|
|
876
|
+
* Generate an `ITMPeriodObject` object for the given Period, selecting the
|
|
877
|
+
* default track for each type.
|
|
878
|
+
* @param {Object} period
|
|
879
|
+
* @param {boolean} inManifest
|
|
880
|
+
* @param {boolean} isTrickModeTrackEnabled
|
|
881
|
+
* @returns {object}
|
|
882
|
+
*/
|
|
883
|
+
function generatePeriodInfo(period, inManifest, isTrickModeTrackEnabled, defaultAudioTrackSwitchingMode) {
|
|
884
|
+
var _a;
|
|
885
|
+
var audioAdaptation = period.getSupportedAdaptations("audio")[0];
|
|
886
|
+
var baseVideoAdaptation = period.getSupportedAdaptations("video")[0];
|
|
887
|
+
var videoAdaptation = getRightVideoTrack(baseVideoAdaptation, isTrickModeTrackEnabled);
|
|
888
|
+
var DEFAULT_VIDEO_TRACK_SWITCHING_MODE = config.getCurrent().DEFAULT_VIDEO_TRACK_SWITCHING_MODE;
|
|
889
|
+
var audioSettings = audioAdaptation !== undefined ?
|
|
890
|
+
{ adaptation: audioAdaptation,
|
|
891
|
+
switchingMode: defaultAudioTrackSwitchingMode,
|
|
892
|
+
lockedRepresentations: new SharedReference(null) } :
|
|
893
|
+
null;
|
|
894
|
+
var videoSettings = videoAdaptation !== undefined ?
|
|
895
|
+
{ adaptation: videoAdaptation,
|
|
896
|
+
adaptationBase: baseVideoAdaptation,
|
|
897
|
+
switchingMode: DEFAULT_VIDEO_TRACK_SWITCHING_MODE,
|
|
898
|
+
lockedRepresentations: new SharedReference(null) } :
|
|
899
|
+
null;
|
|
900
|
+
var textAdaptation = null;
|
|
901
|
+
var forcedSubtitles = period.getAdaptationsForType("text")
|
|
902
|
+
.filter(function (ad) { return ad.isForcedSubtitles === true; });
|
|
903
|
+
if (forcedSubtitles.length > 0) {
|
|
904
|
+
if (audioAdaptation !== null && audioAdaptation !== undefined) {
|
|
905
|
+
var sameLanguage = arrayFind(forcedSubtitles, function (f) {
|
|
906
|
+
return f.normalizedLanguage === audioAdaptation.normalizedLanguage;
|
|
907
|
+
});
|
|
908
|
+
if (sameLanguage !== undefined) {
|
|
909
|
+
textAdaptation = sameLanguage;
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
if (textAdaptation === null) {
|
|
913
|
+
textAdaptation = (_a = arrayFind(forcedSubtitles, function (f) { return f.normalizedLanguage === undefined; })) !== null && _a !== void 0 ? _a : null;
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
var textSettings = null;
|
|
917
|
+
if (textAdaptation !== null) {
|
|
918
|
+
textSettings = { adaptation: textAdaptation,
|
|
919
|
+
switchingMode: "direct",
|
|
920
|
+
lockedRepresentations: new SharedReference(null) };
|
|
921
|
+
}
|
|
922
|
+
return { period: period, inManifest: inManifest, isRemoved: false,
|
|
923
|
+
audio: { storedSettings: audioSettings,
|
|
924
|
+
dispatcher: null },
|
|
925
|
+
video: { storedSettings: videoSettings,
|
|
926
|
+
dispatcher: null },
|
|
927
|
+
text: { storedSettings: textSettings,
|
|
928
|
+
dispatcher: null } };
|
|
929
|
+
}
|
|
930
|
+
function toExposedPeriod(p) {
|
|
931
|
+
return { start: p.start, end: p.end, id: p.id };
|
|
932
|
+
}
|