rx-player 4.0.0-dev.2023120600 → 4.0.0-dev.2023121900
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +178 -2
- package/README.md +2 -33
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/add_text_track.d.ts +3 -1
- package/dist/_esm5.processed/compat/add_text_track.js +7 -4
- package/dist/_esm5.processed/compat/browser_compatibility_types.d.ts +7 -0
- package/dist/_esm5.processed/compat/event_listeners.d.ts +15 -2
- package/dist/_esm5.processed/compat/event_listeners.js +37 -2
- package/dist/_esm5.processed/compat/fullscreen.d.ts +32 -0
- package/dist/_esm5.processed/compat/fullscreen.js +78 -0
- package/dist/_esm5.processed/compat/index.d.ts +3 -1
- package/dist/_esm5.processed/compat/index.js +3 -1
- package/dist/_esm5.processed/compat/is_offline.d.ts +39 -0
- package/dist/_esm5.processed/compat/is_offline.js +43 -0
- package/dist/_esm5.processed/config.d.ts +21 -9
- package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.d.ts +58 -0
- package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +54 -14
- package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.d.ts +8 -2
- package/dist/_esm5.processed/core/adaptive/utils/select_optimal_representation.js +11 -2
- package/dist/_esm5.processed/core/api/debug/modules/general_info.js +46 -17
- 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 +35 -14
- package/dist/_esm5.processed/core/api/option_utils.js +230 -47
- package/dist/_esm5.processed/core/api/public_api.d.ts +266 -92
- package/dist/_esm5.processed/core/api/public_api.js +802 -444
- package/dist/_esm5.processed/core/api/{track_management/media_element_tracks_store.d.ts → tracks_management/media_element_track_choice_manager.d.ts} +75 -15
- package/dist/_esm5.processed/core/api/{track_management/media_element_tracks_store.js → tracks_management/media_element_track_choice_manager.js} +193 -74
- package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.d.ts +258 -0
- package/dist/_esm5.processed/core/api/tracks_management/track_choice_manager.js +989 -0
- package/dist/_esm5.processed/core/api/utils.d.ts +0 -1
- package/dist/_esm5.processed/core/api/utils.js +11 -28
- package/dist/_esm5.processed/core/decrypt/content_decryptor.js +3 -3
- package/dist/_esm5.processed/core/decrypt/find_key_system.js +71 -83
- package/dist/_esm5.processed/core/decrypt/get_media_keys.js +5 -6
- package/dist/_esm5.processed/core/decrypt/session_events_listener.js +72 -10
- 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 +4 -6
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +3 -1
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +26 -7
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +9 -3
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +9 -16
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +3 -1
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.js +1 -1
- package/dist/_esm5.processed/core/fetchers/utils/schedule_request.d.ts +6 -1
- package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +41 -4
- package/dist/_esm5.processed/core/init/media_source_content_initializer.d.ts +8 -1
- package/dist/_esm5.processed/core/init/media_source_content_initializer.js +5 -2
- package/dist/_esm5.processed/core/init/types.d.ts +15 -5
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +9 -2
- package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.d.ts +75 -0
- package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.js +133 -0
- package/dist/_esm5.processed/core/{api/track_management → segment_buffers/implementations/image}/index.d.ts +2 -3
- package/dist/_esm5.processed/core/{api/track_management → segment_buffers/implementations/image}/index.js +2 -3
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +2 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +4 -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 +1 -2
- package/dist/_esm5.processed/core/segment_buffers/inventory/index.d.ts +2 -3
- package/dist/_esm5.processed/core/segment_buffers/inventory/index.js +0 -1
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.d.ts +25 -8
- package/dist/_esm5.processed/core/segment_buffers/inventory/segment_inventory.js +19 -10
- package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.d.ts +1 -0
- package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +16 -2
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.d.ts +15 -0
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +93 -183
- package/dist/_esm5.processed/core/stream/adaptation/types.d.ts +13 -27
- package/dist/_esm5.processed/core/stream/index.d.ts +3 -2
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.d.ts +0 -2
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +7 -5
- package/dist/_esm5.processed/core/stream/period/period_stream.js +12 -13
- package/dist/_esm5.processed/core/stream/period/types.d.ts +14 -5
- package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +4 -2
- package/dist/_esm5.processed/core/stream/period/utils/get_adaptation_switch_strategy.js +46 -10
- package/dist/_esm5.processed/core/stream/representation/representation_stream.js +23 -29
- package/dist/_esm5.processed/core/stream/representation/types.d.ts +1 -11
- package/dist/_esm5.processed/core/stream/representation/utils/get_buffer_status.js +1 -1
- package/dist/_esm5.processed/core/stream/representation/utils/get_needed_segments.js +1 -1
- package/dist/_esm5.processed/default_config.d.ts +98 -35
- package/dist/_esm5.processed/default_config.js +113 -36
- package/dist/_esm5.processed/errors/custom_loader_error.d.ts +3 -1
- package/dist/_esm5.processed/errors/custom_loader_error.js +3 -1
- package/dist/_esm5.processed/errors/media_error.js +2 -2
- package/dist/_esm5.processed/errors/network_error.d.ts +1 -0
- package/dist/_esm5.processed/errors/network_error.js +1 -0
- package/dist/_esm5.processed/errors/request_error.d.ts +3 -2
- package/dist/_esm5.processed/errors/request_error.js +5 -2
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +3 -3
- package/dist/_esm5.processed/features/features_object.js +2 -0
- package/dist/_esm5.processed/{transports/smooth/is_mp4_embedded_track.js → features/list/bif_parser.d.ts} +6 -7
- package/dist/_esm5.processed/features/list/bif_parser.js +27 -0
- package/dist/_esm5.processed/features/list/directfile.js +5 -2
- package/dist/_esm5.processed/features/list/image_buffer.d.ts +23 -0
- package/dist/_esm5.processed/features/list/image_buffer.js +25 -0
- package/dist/_esm5.processed/features/list/index.d.ts +2 -0
- package/dist/_esm5.processed/features/list/index.js +2 -0
- package/dist/_esm5.processed/features/types.d.ts +27 -3
- package/dist/_esm5.processed/manifest/adaptation.d.ts +11 -9
- package/dist/_esm5.processed/manifest/adaptation.js +30 -41
- package/dist/_esm5.processed/manifest/index.d.ts +4 -3
- package/dist/_esm5.processed/manifest/manifest.d.ts +54 -5
- package/dist/_esm5.processed/manifest/manifest.js +110 -5
- package/dist/_esm5.processed/manifest/period.d.ts +5 -4
- package/dist/_esm5.processed/manifest/representation.d.ts +5 -10
- package/dist/_esm5.processed/manifest/representation.js +5 -15
- package/dist/_esm5.processed/manifest/representation_index/index.d.ts +2 -2
- package/dist/_esm5.processed/manifest/representation_index/static.d.ts +0 -2
- package/dist/_esm5.processed/manifest/representation_index/static.js +0 -6
- package/dist/_esm5.processed/manifest/representation_index/types.d.ts +21 -42
- package/dist/_esm5.processed/manifest/types.d.ts +2 -0
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +31 -17
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +19 -26
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +0 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +1 -7
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +6 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +8 -11
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +0 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +0 -6
- 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 +6 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +5 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +2 -0
- 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 +2 -0
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.js +6 -10
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/Representation.js +2 -4
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.d.ts +1 -10
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/node_parsers/utils.js +2 -18
- package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +4 -4
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.js +6 -3
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/generators/Representation.js +2 -1
- package/dist/_esm5.processed/parsers/manifest/local/representation_index.d.ts +0 -2
- package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +0 -6
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.js +6 -6
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.d.ts +3 -12
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.js +2 -11
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +1 -0
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +17 -11
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +83 -21
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +125 -53
- package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.d.ts +6 -3
- package/dist/_esm5.processed/parsers/manifest/smooth/utils/add_segment_infos.js +4 -4
- package/dist/_esm5.processed/parsers/manifest/types.d.ts +3 -3
- package/dist/_esm5.processed/parsers/texttracks/ttml/html/apply_line_height.js +2 -1
- package/dist/_esm5.processed/public_types.d.ts +310 -396
- package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.d.ts +4 -5
- package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +4 -5
- package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +4 -4
- package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +38 -0
- package/dist/_esm5.processed/transports/dash/image_pipelines.js +129 -0
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +3 -2
- package/dist/_esm5.processed/transports/dash/pipelines.js +4 -1
- package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
- package/dist/_esm5.processed/transports/dash/segment_loader.js +20 -26
- package/dist/_esm5.processed/transports/dash/segment_parser.js +24 -19
- package/dist/_esm5.processed/transports/dash/text_loader.js +5 -5
- package/dist/_esm5.processed/transports/dash/text_parser.js +33 -28
- package/dist/_esm5.processed/transports/local/pipelines.js +10 -1
- 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 +52 -34
- package/dist/_esm5.processed/transports/smooth/pipelines.js +190 -33
- package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +1 -1
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +22 -28
- package/dist/_esm5.processed/transports/smooth/utils.d.ts +26 -1
- package/dist/_esm5.processed/transports/smooth/utils.js +55 -1
- package/dist/_esm5.processed/transports/types.d.ts +89 -94
- 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 +7 -5
- package/dist/_esm5.processed/transports/utils/parse_text_track.d.ts +12 -8
- package/dist/_esm5.processed/transports/utils/parse_text_track.js +21 -19
- package/dist/_esm5.processed/utils/array_includes.d.ts +1 -2
- package/dist/_esm5.processed/utils/array_includes.js +28 -30
- package/dist/_esm5.processed/{transports/smooth/is_mp4_embedded_track.d.ts → utils/list_to_map.d.ts} +5 -5
- package/dist/_esm5.processed/utils/list_to_map.js +28 -0
- package/dist/_esm5.processed/utils/request/xhr.js +5 -5
- package/dist/_esm5.processed/utils/simple_set.d.ts +51 -0
- package/dist/_esm5.processed/utils/simple_set.js +57 -0
- package/dist/_esm5.processed/utils/uniq.d.ts +36 -0
- package/dist/_esm5.processed/utils/uniq.js +43 -0
- package/dist/commonjs/config.d.ts +1 -1
- package/dist/commonjs/core/adaptive/adaptive_representation_selector.d.ts +2 -19
- package/dist/commonjs/core/adaptive/adaptive_representation_selector.js +2 -2
- package/dist/commonjs/core/adaptive/network_analyzer.js +3 -3
- package/dist/commonjs/core/api/index.d.ts +1 -1
- package/dist/commonjs/core/api/playback_observer.d.ts +128 -8
- package/dist/commonjs/core/api/playback_observer.js +217 -64
- package/dist/commonjs/core/api/public_api.js +9 -9
- package/dist/commonjs/core/api/utils.js +1 -1
- package/dist/commonjs/core/decrypt/get_media_keys.js +2 -6
- package/dist/commonjs/core/init/directfile_content_initializer.js +5 -1
- package/dist/commonjs/core/init/media_source_content_initializer.js +28 -14
- package/dist/commonjs/core/init/utils/content_time_boundaries_observer.js +1 -2
- package/dist/commonjs/core/init/utils/create_stream_playback_observer.d.ts +1 -5
- package/dist/commonjs/core/init/utils/create_stream_playback_observer.js +16 -14
- package/dist/commonjs/core/init/utils/initial_seek_and_play.d.ts +9 -11
- package/dist/commonjs/core/init/utils/initial_seek_and_play.js +121 -91
- package/dist/commonjs/core/init/utils/rebuffering_controller.js +27 -70
- package/dist/commonjs/core/init/utils/stream_events_emitter/stream_events_emitter.js +4 -2
- package/dist/commonjs/core/segment_buffers/garbage_collector.js +1 -2
- package/dist/commonjs/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +9 -2
- package/dist/commonjs/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +1 -1
- package/dist/commonjs/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +1 -1
- package/dist/commonjs/core/segment_buffers/index.d.ts +2 -2
- package/dist/commonjs/core/segment_buffers/inventory/index.d.ts +2 -2
- package/dist/commonjs/core/segment_buffers/inventory/segment_inventory.d.ts +25 -8
- package/dist/commonjs/core/segment_buffers/inventory/segment_inventory.js +19 -10
- package/dist/commonjs/core/stream/adaptation/get_representations_switch_strategy.d.ts +2 -2
- package/dist/commonjs/core/stream/adaptation/get_representations_switch_strategy.js +16 -9
- package/dist/commonjs/core/stream/orchestrator/stream_orchestrator.js +14 -18
- package/dist/commonjs/core/stream/period/period_stream.js +5 -8
- package/dist/commonjs/core/stream/period/types.d.ts +2 -3
- package/dist/commonjs/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +4 -5
- package/dist/commonjs/core/stream/period/utils/get_adaptation_switch_strategy.js +17 -13
- package/dist/commonjs/core/stream/representation/representation_stream.js +3 -4
- package/dist/commonjs/core/stream/representation/types.d.ts +2 -2
- package/dist/commonjs/core/stream/representation/utils/append_segment_to_buffer.js +11 -12
- package/dist/commonjs/core/stream/representation/utils/get_buffer_status.js +1 -1
- package/dist/commonjs/default_config.d.ts +7 -16
- package/dist/commonjs/default_config.js +16 -16
- package/dist/commonjs/manifest/adaptation.js +2 -1
- package/dist/commonjs/parsers/texttracks/ttml/html/apply_line_height.js +2 -1
- package/dist/commonjs/public_types.d.ts +29 -2
- package/dist/es2017/config.d.ts +1 -1
- package/dist/es2017/core/adaptive/adaptive_representation_selector.d.ts +2 -19
- package/dist/es2017/core/adaptive/adaptive_representation_selector.js +2 -2
- package/dist/es2017/core/adaptive/network_analyzer.js +3 -3
- package/dist/es2017/core/api/index.d.ts +1 -1
- package/dist/es2017/core/api/playback_observer.d.ts +128 -8
- package/dist/es2017/core/api/playback_observer.js +217 -66
- package/dist/es2017/core/api/public_api.js +9 -9
- package/dist/es2017/core/api/utils.js +1 -1
- package/dist/es2017/core/decrypt/get_media_keys.js +2 -6
- package/dist/es2017/core/init/directfile_content_initializer.js +7 -1
- package/dist/es2017/core/init/media_source_content_initializer.js +30 -16
- package/dist/es2017/core/init/utils/content_time_boundaries_observer.js +1 -2
- package/dist/es2017/core/init/utils/create_stream_playback_observer.d.ts +1 -5
- package/dist/es2017/core/init/utils/create_stream_playback_observer.js +16 -14
- package/dist/es2017/core/init/utils/initial_seek_and_play.d.ts +9 -11
- package/dist/es2017/core/init/utils/initial_seek_and_play.js +120 -91
- package/dist/es2017/core/init/utils/rebuffering_controller.js +27 -70
- package/dist/es2017/core/init/utils/stream_events_emitter/stream_events_emitter.js +4 -2
- package/dist/es2017/core/segment_buffers/garbage_collector.js +1 -2
- package/dist/es2017/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +9 -2
- package/dist/es2017/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +1 -1
- package/dist/es2017/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +1 -1
- package/dist/es2017/core/segment_buffers/index.d.ts +2 -2
- package/dist/es2017/core/segment_buffers/inventory/index.d.ts +2 -2
- package/dist/es2017/core/segment_buffers/inventory/segment_inventory.d.ts +25 -8
- package/dist/es2017/core/segment_buffers/inventory/segment_inventory.js +19 -10
- package/dist/es2017/core/stream/adaptation/get_representations_switch_strategy.d.ts +2 -2
- package/dist/es2017/core/stream/adaptation/get_representations_switch_strategy.js +16 -9
- package/dist/es2017/core/stream/orchestrator/stream_orchestrator.js +16 -18
- package/dist/es2017/core/stream/period/period_stream.js +4 -7
- package/dist/es2017/core/stream/period/types.d.ts +2 -3
- package/dist/es2017/core/stream/period/utils/get_adaptation_switch_strategy.d.ts +4 -5
- package/dist/es2017/core/stream/period/utils/get_adaptation_switch_strategy.js +17 -13
- package/dist/es2017/core/stream/representation/representation_stream.js +3 -4
- package/dist/es2017/core/stream/representation/types.d.ts +2 -2
- package/dist/es2017/core/stream/representation/utils/append_segment_to_buffer.js +1 -2
- package/dist/es2017/core/stream/representation/utils/get_buffer_status.js +1 -1
- package/dist/es2017/default_config.d.ts +7 -16
- package/dist/es2017/default_config.js +16 -16
- package/dist/es2017/manifest/adaptation.js +2 -1
- package/dist/es2017/parsers/texttracks/ttml/html/apply_line_height.js +2 -1
- package/dist/es2017/public_types.d.ts +29 -2
- package/dist/mpd-parser.wasm +0 -0
- package/dist/rx-player.js +614 -438
- package/dist/rx-player.min.js +1 -1
- package/package.json +5 -1
- package/scripts/canal-release.patch +78 -0
- package/scripts/make-dev-releases +65 -0
- package/scripts/update-version +5 -0
- package/sonar-project.properties +1 -1
- package/src/core/adaptive/adaptive_representation_selector.ts +4 -21
- package/src/core/adaptive/network_analyzer.ts +3 -3
- package/src/core/api/index.ts +1 -0
- package/src/core/api/playback_observer.ts +327 -107
- package/src/core/api/public_api.ts +9 -9
- package/src/core/api/utils.ts +3 -1
- package/src/core/decrypt/get_media_keys.ts +2 -8
- package/src/core/init/directfile_content_initializer.ts +8 -8
- package/src/core/init/media_source_content_initializer.ts +27 -20
- package/src/core/init/utils/content_time_boundaries_observer.ts +1 -1
- package/src/core/init/utils/create_stream_playback_observer.ts +19 -20
- package/src/core/init/utils/initial_seek_and_play.ts +140 -108
- package/src/core/init/utils/rebuffering_controller.ts +32 -77
- package/src/core/init/utils/stream_events_emitter/stream_events_emitter.ts +5 -2
- package/src/core/segment_buffers/garbage_collector.ts +1 -1
- package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +10 -2
- package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +1 -1
- package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +1 -1
- package/src/core/segment_buffers/index.ts +2 -0
- package/src/core/segment_buffers/inventory/index.ts +2 -0
- package/src/core/segment_buffers/inventory/segment_inventory.ts +49 -17
- package/src/core/stream/adaptation/get_representations_switch_strategy.ts +21 -12
- package/src/core/stream/orchestrator/stream_orchestrator.ts +14 -19
- package/src/core/stream/period/period_stream.ts +7 -8
- package/src/core/stream/period/types.ts +2 -3
- package/src/core/stream/period/utils/get_adaptation_switch_strategy.ts +21 -15
- package/src/core/stream/representation/representation_stream.ts +3 -5
- package/src/core/stream/representation/types.ts +2 -2
- package/src/core/stream/representation/utils/append_segment_to_buffer.ts +1 -1
- package/src/core/stream/representation/utils/get_buffer_status.ts +2 -1
- package/src/default_config.ts +17 -17
- package/src/manifest/adaptation.ts +2 -1
- package/src/parsers/texttracks/ttml/html/apply_line_height.ts +3 -1
- package/src/public_types.ts +29 -2
- package/dist/_esm5.processed/core/api/track_management/track_dispatcher.d.ts +0 -84
- package/dist/_esm5.processed/core/api/track_management/track_dispatcher.js +0 -158
- package/dist/_esm5.processed/core/api/track_management/tracks_store.d.ts +0 -406
- package/dist/_esm5.processed/core/api/track_management/tracks_store.js +0 -932
- package/dist/_esm5.processed/core/segment_buffers/inventory/utils.d.ts +0 -33
- package/dist/_esm5.processed/core/segment_buffers/inventory/utils.js +0 -49
- package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.d.ts +0 -39
- package/dist/_esm5.processed/core/stream/adaptation/get_representations_switch_strategy.js +0 -133
- package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.d.ts +0 -119
- package/dist/_esm5.processed/parsers/manifest/smooth/shared_smooth_segment_timeline.js +0 -159
|
@@ -43,32 +43,32 @@ var __assign = (this && this.__assign) || function () {
|
|
|
43
43
|
* This file defines the public API for the RxPlayer.
|
|
44
44
|
* It also starts the different sub-parts of the player on various API calls.
|
|
45
45
|
*/
|
|
46
|
-
import { events, getStartDate, } from "../../compat";
|
|
46
|
+
import { events, exitFullscreen, getStartDate, isFullscreen, requestFullscreen, } from "../../compat";
|
|
47
47
|
/* eslint-disable-next-line max-len */
|
|
48
48
|
import canRelyOnVideoVisibilityAndSize from "../../compat/can_rely_on_video_visibility_and_size";
|
|
49
49
|
import config from "../../config";
|
|
50
50
|
import { ErrorCodes, ErrorTypes, formatError, MediaError, } from "../../errors";
|
|
51
51
|
import features, { addFeatures, } from "../../features";
|
|
52
52
|
import log from "../../log";
|
|
53
|
+
import areArraysOfNumbersEqual from "../../utils/are_arrays_of_numbers_equal";
|
|
53
54
|
import arrayIncludes from "../../utils/array_includes";
|
|
54
55
|
import assert from "../../utils/assert";
|
|
55
|
-
import assertUnreachable from "../../utils/assert_unreachable";
|
|
56
56
|
import EventEmitter from "../../utils/event_emitter";
|
|
57
57
|
import idGenerator from "../../utils/id_generator";
|
|
58
58
|
import isNullOrUndefined from "../../utils/is_null_or_undefined";
|
|
59
59
|
import objectAssign from "../../utils/object_assign";
|
|
60
|
-
import { getLeftSizeOfRange } from "../../utils/ranges";
|
|
60
|
+
import { getLeftSizeOfRange, getPlayedSizeOfRange, getSizeOfRange, } from "../../utils/ranges";
|
|
61
61
|
import SharedReference, { createMappedReference, } from "../../utils/reference";
|
|
62
62
|
import TaskCanceller from "../../utils/task_canceller";
|
|
63
63
|
import warnOnce from "../../utils/warn_once";
|
|
64
64
|
import { clearOnStop, disposeDecryptionResources, getKeySystemConfiguration, getCurrentKeySystem, } from "../decrypt";
|
|
65
65
|
import { checkReloadOptions, parseConstructorOptions, parseLoadVideoOptions, } from "./option_utils";
|
|
66
66
|
import PlaybackObserver from "./playback_observer";
|
|
67
|
-
import
|
|
67
|
+
import TrackChoiceManager from "./tracks_management/track_choice_manager";
|
|
68
68
|
import { constructPlayerStateReference, emitPlayPauseEvents, emitSeekEvents, isLoadedState, } from "./utils";
|
|
69
69
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
70
70
|
var generateContentId = idGenerator();
|
|
71
|
-
var getPictureOnPictureStateRef = events.getPictureOnPictureStateRef, getVideoVisibilityRef = events.getVideoVisibilityRef, getVideoWidthRef = events.getVideoWidthRef;
|
|
71
|
+
var getPageActivityRef = events.getPageActivityRef, getPictureOnPictureStateRef = events.getPictureOnPictureStateRef, getVideoVisibilityRef = events.getVideoVisibilityRef, getVideoWidthRef = events.getVideoWidthRef, onFullscreenChange = events.onFullscreenChange, onTextTrackAdded = events.onTextTrackAdded, onTextTrackRemoved = events.onTextTrackRemoved;
|
|
72
72
|
/**
|
|
73
73
|
* @class Player
|
|
74
74
|
* @extends EventEmitter
|
|
@@ -81,8 +81,9 @@ var Player = /** @class */ (function (_super) {
|
|
|
81
81
|
*/
|
|
82
82
|
function Player(options) {
|
|
83
83
|
if (options === void 0) { options = {}; }
|
|
84
|
+
var _a, _b;
|
|
84
85
|
var _this = _super.call(this) || this;
|
|
85
|
-
var
|
|
86
|
+
var _c = parseConstructorOptions(options), initialAudioBitrate = _c.initialAudioBitrate, initialVideoBitrate = _c.initialVideoBitrate, limitVideoWidth = _c.limitVideoWidth, minAudioBitrate = _c.minAudioBitrate, minVideoBitrate = _c.minVideoBitrate, maxAudioBitrate = _c.maxAudioBitrate, maxBufferAhead = _c.maxBufferAhead, maxBufferBehind = _c.maxBufferBehind, maxVideoBitrate = _c.maxVideoBitrate, preferredAudioTracks = _c.preferredAudioTracks, preferredTextTracks = _c.preferredTextTracks, preferredVideoTracks = _c.preferredVideoTracks, throttleWhenHidden = _c.throttleWhenHidden, throttleVideoBitrateWhenHidden = _c.throttleVideoBitrateWhenHidden, videoElement = _c.videoElement, wantedBufferAhead = _c.wantedBufferAhead, maxVideoBufferSize = _c.maxVideoBufferSize, stopAtEnd = _c.stopAtEnd;
|
|
86
87
|
var DEFAULT_UNMUTED_VOLUME = config.getCurrent().DEFAULT_UNMUTED_VOLUME;
|
|
87
88
|
// Workaround to support Firefox autoplay on FF 42.
|
|
88
89
|
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
|
|
@@ -94,6 +95,50 @@ var Player = /** @class */ (function (_super) {
|
|
|
94
95
|
var destroyCanceller = new TaskCanceller();
|
|
95
96
|
_this._destroyCanceller = destroyCanceller;
|
|
96
97
|
_this._priv_pictureInPictureRef = getPictureOnPictureStateRef(videoElement, destroyCanceller.signal);
|
|
98
|
+
/** @deprecated */
|
|
99
|
+
onFullscreenChange(videoElement, function () {
|
|
100
|
+
/* eslint-disable import/no-deprecated */
|
|
101
|
+
_this.trigger("fullscreenChange", _this.isFullscreen());
|
|
102
|
+
/* eslint-enable import/no-deprecated */
|
|
103
|
+
}, destroyCanceller.signal);
|
|
104
|
+
/** Store last known TextTrack array linked to the media element. */
|
|
105
|
+
var prevTextTracks = [];
|
|
106
|
+
for (var i = 0; i < ((_a = videoElement.textTracks) === null || _a === void 0 ? void 0 : _a.length); i++) {
|
|
107
|
+
var textTrack = (_b = videoElement.textTracks) === null || _b === void 0 ? void 0 : _b[i];
|
|
108
|
+
if (!isNullOrUndefined(textTrack)) {
|
|
109
|
+
prevTextTracks.push(textTrack);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/** Callback called when a TextTrack element is added or removed. */
|
|
113
|
+
var onTextTrackChanges = function (_evt) {
|
|
114
|
+
var evt = _evt;
|
|
115
|
+
var target = evt.target;
|
|
116
|
+
var textTrackArr = [];
|
|
117
|
+
for (var i = 0; i < target.length; i++) {
|
|
118
|
+
var textTrack = target[i];
|
|
119
|
+
textTrackArr.push(textTrack);
|
|
120
|
+
}
|
|
121
|
+
var oldTextTracks = prevTextTracks;
|
|
122
|
+
prevTextTracks = textTrackArr;
|
|
123
|
+
// We can have two consecutive textTrackChanges with the exact same
|
|
124
|
+
// payload when we perform multiple texttrack operations before the event
|
|
125
|
+
// loop is freed.
|
|
126
|
+
if (oldTextTracks.length !== textTrackArr.length) {
|
|
127
|
+
_this._priv_onNativeTextTracksNext(textTrackArr);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
for (var i = 0; i < oldTextTracks.length; i++) {
|
|
131
|
+
if (oldTextTracks[i] !== textTrackArr[i]) {
|
|
132
|
+
_this._priv_onNativeTextTracksNext(textTrackArr);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return;
|
|
137
|
+
};
|
|
138
|
+
if (!isNullOrUndefined(videoElement.textTracks)) {
|
|
139
|
+
onTextTrackAdded(videoElement.textTracks, onTextTrackChanges, destroyCanceller.signal);
|
|
140
|
+
onTextTrackRemoved(videoElement.textTracks, onTextTrackChanges, destroyCanceller.signal);
|
|
141
|
+
}
|
|
97
142
|
_this._priv_speed = new SharedReference(videoElement.playbackRate, _this._destroyCanceller.signal);
|
|
98
143
|
_this._priv_preferTrickModeTracks = false;
|
|
99
144
|
_this._priv_contentLock = new SharedReference(false, _this._destroyCanceller.signal);
|
|
@@ -104,16 +149,27 @@ var Player = /** @class */ (function (_super) {
|
|
|
104
149
|
maxVideoBufferSize: new SharedReference(maxVideoBufferSize, _this._destroyCanceller.signal),
|
|
105
150
|
};
|
|
106
151
|
_this._priv_bitrateInfos = {
|
|
107
|
-
lastBitrates: { audio:
|
|
108
|
-
video:
|
|
152
|
+
lastBitrates: { audio: initialAudioBitrate,
|
|
153
|
+
video: initialVideoBitrate },
|
|
154
|
+
minAutoBitrates: { audio: new SharedReference(minAudioBitrate, _this._destroyCanceller.signal),
|
|
155
|
+
video: new SharedReference(minVideoBitrate, _this._destroyCanceller.signal) },
|
|
156
|
+
maxAutoBitrates: { audio: new SharedReference(maxAudioBitrate, _this._destroyCanceller.signal),
|
|
157
|
+
video: new SharedReference(maxVideoBitrate, _this._destroyCanceller.signal) },
|
|
158
|
+
manualBitrates: { audio: new SharedReference(-1, _this._destroyCanceller.signal),
|
|
159
|
+
video: new SharedReference(-1, _this._destroyCanceller.signal) },
|
|
109
160
|
};
|
|
161
|
+
_this._priv_throttleWhenHidden = throttleWhenHidden;
|
|
110
162
|
_this._priv_throttleVideoBitrateWhenHidden = throttleVideoBitrateWhenHidden;
|
|
111
163
|
_this._priv_limitVideoWidth = limitVideoWidth;
|
|
112
164
|
_this._priv_mutedMemory = DEFAULT_UNMUTED_VOLUME;
|
|
113
165
|
_this._priv_currentError = null;
|
|
114
166
|
_this._priv_contentInfos = null;
|
|
115
167
|
_this._priv_contentEventsMemory = {};
|
|
168
|
+
_this._priv_stopAtEnd = stopAtEnd;
|
|
116
169
|
_this._priv_setPlayerState("STOPPED" /* PLAYER_STATES.STOPPED */);
|
|
170
|
+
_this._priv_preferredAudioTracks = preferredAudioTracks;
|
|
171
|
+
_this._priv_preferredTextTracks = preferredTextTracks;
|
|
172
|
+
_this._priv_preferredVideoTracks = preferredVideoTracks;
|
|
117
173
|
_this._priv_reloadingMetadata = {};
|
|
118
174
|
_this._priv_lastAutoPlay = false;
|
|
119
175
|
return _this;
|
|
@@ -227,8 +283,8 @@ var Player = /** @class */ (function (_super) {
|
|
|
227
283
|
* @param {Object} reloadOpts
|
|
228
284
|
*/
|
|
229
285
|
Player.prototype.reload = function (reloadOpts) {
|
|
230
|
-
var _a, _b
|
|
231
|
-
var
|
|
286
|
+
var _a, _b;
|
|
287
|
+
var _c = this._priv_reloadingMetadata, options = _c.options, manifest = _c.manifest, reloadPosition = _c.reloadPosition, reloadInPause = _c.reloadInPause;
|
|
232
288
|
if (options === undefined) {
|
|
233
289
|
throw new Error("API: Can't reload without having previously loaded a content.");
|
|
234
290
|
}
|
|
@@ -255,13 +311,6 @@ var Player = /** @class */ (function (_super) {
|
|
|
255
311
|
else if (reloadInPause !== undefined) {
|
|
256
312
|
autoPlay = !reloadInPause;
|
|
257
313
|
}
|
|
258
|
-
var keySystems;
|
|
259
|
-
if ((reloadOpts === null || reloadOpts === void 0 ? void 0 : reloadOpts.keySystems) !== undefined) {
|
|
260
|
-
keySystems = reloadOpts.keySystems;
|
|
261
|
-
}
|
|
262
|
-
else if (((_c = this._priv_reloadingMetadata.options) === null || _c === void 0 ? void 0 : _c.keySystems) !== undefined) {
|
|
263
|
-
keySystems = this._priv_reloadingMetadata.options.keySystems;
|
|
264
|
-
}
|
|
265
314
|
var newOptions = __assign(__assign({}, options), { initialManifest: manifest });
|
|
266
315
|
if (startAt !== undefined) {
|
|
267
316
|
newOptions.startAt = startAt;
|
|
@@ -269,9 +318,6 @@ var Player = /** @class */ (function (_super) {
|
|
|
269
318
|
if (autoPlay !== undefined) {
|
|
270
319
|
newOptions.autoPlay = autoPlay;
|
|
271
320
|
}
|
|
272
|
-
if (keySystems !== undefined) {
|
|
273
|
-
newOptions.keySystems = keySystems;
|
|
274
|
-
}
|
|
275
321
|
this._priv_initializeContentPlayback(newOptions);
|
|
276
322
|
};
|
|
277
323
|
Player.prototype.createDebugElement = function (element) {
|
|
@@ -292,8 +338,7 @@ var Player = /** @class */ (function (_super) {
|
|
|
292
338
|
*/
|
|
293
339
|
Player.prototype._priv_initializeContentPlayback = function (options) {
|
|
294
340
|
var _this = this;
|
|
295
|
-
var
|
|
296
|
-
var autoPlay = options.autoPlay, defaultAudioTrackSwitchingMode = options.defaultAudioTrackSwitchingMode, enableFastSwitching = options.enableFastSwitching, initialManifest = options.initialManifest, keySystems = options.keySystems, lowLatencyMode = options.lowLatencyMode, minimumManifestUpdateInterval = options.minimumManifestUpdateInterval, requestConfig = options.requestConfig, onCodecSwitch = options.onCodecSwitch, startAt = options.startAt, transport = options.transport, checkMediaSegmentIntegrity = options.checkMediaSegmentIntegrity, manifestLoader = options.manifestLoader, manifestUpdateUrl = options.manifestUpdateUrl, referenceDateTime = options.referenceDateTime, representationFilter = options.representationFilter, segmentLoader = options.segmentLoader, serverSyncInfos = options.serverSyncInfos, __priv_patchLastSegmentInSidx = options.__priv_patchLastSegmentInSidx, url = options.url;
|
|
341
|
+
var autoPlay = options.autoPlay, audioTrackSwitchingMode = options.audioTrackSwitchingMode, defaultAudioTrack = options.defaultAudioTrack, defaultTextTrack = options.defaultTextTrack, enableFastSwitching = options.enableFastSwitching, initialManifest = options.initialManifest, keySystems = options.keySystems, lowLatencyMode = options.lowLatencyMode, manualBitrateSwitchingMode = options.manualBitrateSwitchingMode, minimumManifestUpdateInterval = options.minimumManifestUpdateInterval, networkConfig = options.networkConfig, onCodecSwitch = options.onCodecSwitch, startAt = options.startAt, transport = options.transport, transportOptions = options.transportOptions, url = options.url;
|
|
297
342
|
// Perform multiple checks on the given options
|
|
298
343
|
if (this.videoElement === null) {
|
|
299
344
|
throw new Error("the attached video element is disposed");
|
|
@@ -303,7 +348,7 @@ var Player = /** @class */ (function (_super) {
|
|
|
303
348
|
var currentContentCanceller = new TaskCanceller();
|
|
304
349
|
var videoElement = this.videoElement;
|
|
305
350
|
var initializer;
|
|
306
|
-
var
|
|
351
|
+
var mediaElementTrackChoiceManager = null;
|
|
307
352
|
if (!isDirectFile) {
|
|
308
353
|
var transportFn = features.transports[transport];
|
|
309
354
|
if (typeof transportFn !== "function") {
|
|
@@ -315,13 +360,27 @@ var Player = /** @class */ (function (_super) {
|
|
|
315
360
|
if (features.mediaSourceInit === null) {
|
|
316
361
|
throw new Error("MediaSource streaming not supported");
|
|
317
362
|
}
|
|
318
|
-
var transportPipelines = transportFn(
|
|
363
|
+
var transportPipelines = transportFn(transportOptions);
|
|
364
|
+
var offlineRetry = networkConfig.offlineRetry, segmentRetry = networkConfig.segmentRetry, manifestRetry = networkConfig.manifestRetry, manifestRequestTimeout = networkConfig.manifestRequestTimeout, segmentRequestTimeout = networkConfig.segmentRequestTimeout;
|
|
319
365
|
/** Interface used to load and refresh the Manifest. */
|
|
320
|
-
var manifestRequestSettings = { lowLatencyMode: lowLatencyMode,
|
|
321
|
-
|
|
366
|
+
var manifestRequestSettings = { lowLatencyMode: lowLatencyMode, maxRetryRegular: manifestRetry,
|
|
367
|
+
maxRetryOffline: offlineRetry,
|
|
368
|
+
requestTimeout: manifestRequestTimeout, minimumManifestUpdateInterval: minimumManifestUpdateInterval, initialManifest: initialManifest };
|
|
322
369
|
var relyOnVideoVisibilityAndSize = canRelyOnVideoVisibilityAndSize();
|
|
323
|
-
var throttlers = {
|
|
370
|
+
var throttlers = { throttle: {},
|
|
371
|
+
throttleBitrate: {},
|
|
324
372
|
limitWidth: {} };
|
|
373
|
+
if (this._priv_throttleWhenHidden) {
|
|
374
|
+
if (!relyOnVideoVisibilityAndSize) {
|
|
375
|
+
log.warn("API: Can't apply throttleWhenHidden because " +
|
|
376
|
+
"browser can't be trusted for visibility.");
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
throttlers.throttle = {
|
|
380
|
+
video: createMappedReference(getPageActivityRef(currentContentCanceller.signal), function (isActive) { return isActive ? Infinity : 0; }, currentContentCanceller.signal),
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
}
|
|
325
384
|
if (this._priv_throttleVideoBitrateWhenHidden) {
|
|
326
385
|
if (!relyOnVideoVisibilityAndSize) {
|
|
327
386
|
log.warn("API: Can't apply throttleVideoBitrateWhenHidden because " +
|
|
@@ -348,16 +407,21 @@ var Player = /** @class */ (function (_super) {
|
|
|
348
407
|
var adaptiveOptions = {
|
|
349
408
|
initialBitrates: this._priv_bitrateInfos.lastBitrates,
|
|
350
409
|
lowLatencyMode: lowLatencyMode,
|
|
410
|
+
manualBitrates: this._priv_bitrateInfos.manualBitrates,
|
|
411
|
+
minAutoBitrates: this._priv_bitrateInfos.minAutoBitrates,
|
|
412
|
+
maxAutoBitrates: this._priv_bitrateInfos.maxAutoBitrates,
|
|
351
413
|
throttlers: throttlers,
|
|
352
414
|
};
|
|
353
415
|
/** Options used by the TextTrack SegmentBuffer. */
|
|
354
416
|
var textTrackOptions = options.textTrackMode === "native" ?
|
|
355
|
-
{ textTrackMode: "native"
|
|
417
|
+
{ textTrackMode: "native",
|
|
418
|
+
hideNativeSubtitle: options.hideNativeSubtitle } :
|
|
356
419
|
{ textTrackMode: "html",
|
|
357
420
|
textTrackElement: options.textTrackElement };
|
|
358
|
-
var bufferOptions = objectAssign({ enableFastSwitching: enableFastSwitching, onCodecSwitch: onCodecSwitch }, this._priv_bufferOptions);
|
|
359
|
-
var segmentRequestOptions = { lowLatencyMode: lowLatencyMode,
|
|
360
|
-
requestTimeout:
|
|
421
|
+
var bufferOptions = objectAssign({ audioTrackSwitchingMode: audioTrackSwitchingMode, enableFastSwitching: enableFastSwitching, manualBitrateSwitchingMode: manualBitrateSwitchingMode, onCodecSwitch: onCodecSwitch }, this._priv_bufferOptions);
|
|
422
|
+
var segmentRequestOptions = { lowLatencyMode: lowLatencyMode, maxRetryRegular: segmentRetry,
|
|
423
|
+
requestTimeout: segmentRequestTimeout,
|
|
424
|
+
maxRetryOffline: offlineRetry };
|
|
361
425
|
initializer = new features.mediaSourceInit({
|
|
362
426
|
adaptiveOptions: adaptiveOptions,
|
|
363
427
|
autoPlay: autoPlay,
|
|
@@ -382,8 +446,8 @@ var Player = /** @class */ (function (_super) {
|
|
|
382
446
|
else if (isNullOrUndefined(url)) {
|
|
383
447
|
throw new Error("No URL for a DirectFile content");
|
|
384
448
|
}
|
|
385
|
-
|
|
386
|
-
this.
|
|
449
|
+
mediaElementTrackChoiceManager =
|
|
450
|
+
this._priv_initializeMediaElementTrackChoiceManager(defaultAudioTrack, defaultTextTrack, currentContentCanceller.signal);
|
|
387
451
|
if (currentContentCanceller.isUsed()) {
|
|
388
452
|
return;
|
|
389
453
|
}
|
|
@@ -394,16 +458,18 @@ var Player = /** @class */ (function (_super) {
|
|
|
394
458
|
contentId: generateContentId(),
|
|
395
459
|
originalUrl: url,
|
|
396
460
|
currentContentCanceller: currentContentCanceller,
|
|
397
|
-
defaultAudioTrackSwitchingMode: defaultAudioTrackSwitchingMode,
|
|
398
461
|
initializer: initializer,
|
|
399
462
|
isDirectFile: isDirectFile,
|
|
400
463
|
segmentBuffersStore: null,
|
|
464
|
+
thumbnails: null,
|
|
401
465
|
manifest: null,
|
|
402
466
|
currentPeriod: null,
|
|
403
467
|
activeAdaptations: null,
|
|
404
468
|
activeRepresentations: null,
|
|
405
|
-
|
|
406
|
-
|
|
469
|
+
initialAudioTrack: defaultAudioTrack,
|
|
470
|
+
initialTextTrack: defaultTextTrack,
|
|
471
|
+
trackChoiceManager: null,
|
|
472
|
+
mediaElementTrackChoiceManager: mediaElementTrackChoiceManager,
|
|
407
473
|
};
|
|
408
474
|
// Bind events
|
|
409
475
|
initializer.addEventListener("error", function (error) {
|
|
@@ -435,8 +501,8 @@ var Player = /** @class */ (function (_super) {
|
|
|
435
501
|
});
|
|
436
502
|
initializer.addEventListener("reloadingMediaSource", function (payload) {
|
|
437
503
|
contentInfos.segmentBuffersStore = null;
|
|
438
|
-
if (contentInfos.
|
|
439
|
-
contentInfos.
|
|
504
|
+
if (contentInfos.trackChoiceManager !== null) {
|
|
505
|
+
contentInfos.trackChoiceManager.resetPeriods();
|
|
440
506
|
}
|
|
441
507
|
_this._priv_lastAutoPlay = payload.autoPlay;
|
|
442
508
|
});
|
|
@@ -449,6 +515,9 @@ var Player = /** @class */ (function (_super) {
|
|
|
449
515
|
initializer.addEventListener("streamEventSkip", function (streamEventSkip) {
|
|
450
516
|
return _this.trigger("streamEventSkip", streamEventSkip);
|
|
451
517
|
});
|
|
518
|
+
initializer.addEventListener("decipherabilityUpdate", function (decipherabilityUpdate) {
|
|
519
|
+
return _this.trigger("decipherabilityUpdate", decipherabilityUpdate);
|
|
520
|
+
});
|
|
452
521
|
initializer.addEventListener("activePeriodChanged", function (periodInfo) {
|
|
453
522
|
return _this._priv_onActivePeriodChanged(contentInfos, periodInfo);
|
|
454
523
|
});
|
|
@@ -464,8 +533,8 @@ var Player = /** @class */ (function (_super) {
|
|
|
464
533
|
initializer.addEventListener("adaptationChange", function (adaptationInfo) {
|
|
465
534
|
return _this._priv_onAdaptationChange(contentInfos, adaptationInfo);
|
|
466
535
|
});
|
|
467
|
-
initializer.addEventListener("
|
|
468
|
-
return _this.
|
|
536
|
+
initializer.addEventListener("bitrateEstimationChange", function (bitrateEstimationInfo) {
|
|
537
|
+
return _this._priv_onBitrateEstimationChange(bitrateEstimationInfo);
|
|
469
538
|
});
|
|
470
539
|
initializer.addEventListener("manifestReady", function (manifest) {
|
|
471
540
|
return _this._priv_onManifestReady(contentInfos, manifest);
|
|
@@ -473,6 +542,21 @@ var Player = /** @class */ (function (_super) {
|
|
|
473
542
|
initializer.addEventListener("loaded", function (evt) {
|
|
474
543
|
contentInfos.segmentBuffersStore = evt.segmentBuffersStore;
|
|
475
544
|
});
|
|
545
|
+
initializer.addEventListener("addedSegment", function (evt) {
|
|
546
|
+
// Manage image tracks
|
|
547
|
+
// @deprecated
|
|
548
|
+
var content = evt.content, segmentData = evt.segmentData;
|
|
549
|
+
if (content.adaptation.type === "image") {
|
|
550
|
+
if (!isNullOrUndefined(segmentData) &&
|
|
551
|
+
segmentData.type === "bif") {
|
|
552
|
+
var imageData = segmentData.data;
|
|
553
|
+
/* eslint-disable import/no-deprecated */
|
|
554
|
+
contentInfos.thumbnails = imageData;
|
|
555
|
+
_this.trigger("imageTrackUpdate", { data: contentInfos.thumbnails });
|
|
556
|
+
/* eslint-enable import/no-deprecated */
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
});
|
|
476
560
|
// Now, that most events are linked, prepare the next content.
|
|
477
561
|
initializer.prepare();
|
|
478
562
|
// Now that the content is prepared, stop previous content and reset state
|
|
@@ -588,6 +672,11 @@ var Player = /** @class */ (function (_super) {
|
|
|
588
672
|
seekEventsCanceller.linkToSignal(currentContentCanceller.signal);
|
|
589
673
|
emitSeekEvents(videoElement, playbackObserver, function () { return _this.trigger("seeking", null); }, function () { return _this.trigger("seeked", null); }, seekEventsCanceller.signal);
|
|
590
674
|
}
|
|
675
|
+
// Previous call could have performed all kind of side-effects, thus,
|
|
676
|
+
// we re-check the current state associated to the RxPlayer
|
|
677
|
+
if (_this.state === "ENDED" /* PLAYER_STATES.ENDED */ && _this._priv_stopAtEnd) {
|
|
678
|
+
_this.stop();
|
|
679
|
+
}
|
|
591
680
|
}, { emitCurrentValue: true, clearSignal: currentContentCanceller.signal });
|
|
592
681
|
// React to playback conditions change
|
|
593
682
|
playbackObserver.listen(function (observation) {
|
|
@@ -616,6 +705,53 @@ var Player = /** @class */ (function (_super) {
|
|
|
616
705
|
Player.prototype.getError = function () {
|
|
617
706
|
return this._priv_currentError;
|
|
618
707
|
};
|
|
708
|
+
/**
|
|
709
|
+
* Returns manifest/playlist object.
|
|
710
|
+
* null if the player is STOPPED.
|
|
711
|
+
* @deprecated
|
|
712
|
+
* @returns {Manifest|null} - The current Manifest (`null` when not known).
|
|
713
|
+
*/
|
|
714
|
+
Player.prototype.getManifest = function () {
|
|
715
|
+
warnOnce("getManifest is deprecated." +
|
|
716
|
+
" Please open an issue if you used this API.");
|
|
717
|
+
if (this._priv_contentInfos === null) {
|
|
718
|
+
return null;
|
|
719
|
+
}
|
|
720
|
+
return this._priv_contentInfos.manifest;
|
|
721
|
+
};
|
|
722
|
+
/**
|
|
723
|
+
* Returns Adaptations (tracks) for every currently playing type
|
|
724
|
+
* (audio/video/text...).
|
|
725
|
+
* @deprecated
|
|
726
|
+
* @returns {Object|null} - The current Adaptation objects, per type (`null`
|
|
727
|
+
* when none is known for now.
|
|
728
|
+
*/
|
|
729
|
+
Player.prototype.getCurrentAdaptations = function () {
|
|
730
|
+
warnOnce("getCurrentAdaptations is deprecated." +
|
|
731
|
+
" Please open an issue if you used this API.");
|
|
732
|
+
if (this._priv_contentInfos === null) {
|
|
733
|
+
return null;
|
|
734
|
+
}
|
|
735
|
+
var _a = this._priv_contentInfos, currentPeriod = _a.currentPeriod, activeAdaptations = _a.activeAdaptations;
|
|
736
|
+
if (currentPeriod === null ||
|
|
737
|
+
activeAdaptations === null ||
|
|
738
|
+
isNullOrUndefined(activeAdaptations[currentPeriod.id])) {
|
|
739
|
+
return null;
|
|
740
|
+
}
|
|
741
|
+
return activeAdaptations[currentPeriod.id];
|
|
742
|
+
};
|
|
743
|
+
/**
|
|
744
|
+
* Returns representations (qualities) for every currently playing type
|
|
745
|
+
* (audio/video/text...).
|
|
746
|
+
* @deprecated
|
|
747
|
+
* @returns {Object|null} - The current Representation objects, per type
|
|
748
|
+
* (`null` when none is known for now.
|
|
749
|
+
*/
|
|
750
|
+
Player.prototype.getCurrentRepresentations = function () {
|
|
751
|
+
warnOnce("getCurrentRepresentations is deprecated." +
|
|
752
|
+
" Please open an issue if you used this API.");
|
|
753
|
+
return this._priv_getCurrentRepresentations();
|
|
754
|
+
};
|
|
619
755
|
/**
|
|
620
756
|
* Returns the media DOM element used by the player.
|
|
621
757
|
* You should not its HTML5 API directly and use the player's method instead,
|
|
@@ -626,6 +762,26 @@ var Player = /** @class */ (function (_super) {
|
|
|
626
762
|
Player.prototype.getVideoElement = function () {
|
|
627
763
|
return this.videoElement;
|
|
628
764
|
};
|
|
765
|
+
/**
|
|
766
|
+
* If one returns the first native text-track element attached to the media element.
|
|
767
|
+
* @deprecated
|
|
768
|
+
* @returns {TextTrack} - The native TextTrack attached (`null` when none)
|
|
769
|
+
*/
|
|
770
|
+
Player.prototype.getNativeTextTrack = function () {
|
|
771
|
+
warnOnce("getNativeTextTrack is deprecated." +
|
|
772
|
+
" Please open an issue if you used this API.");
|
|
773
|
+
if (this.videoElement === null) {
|
|
774
|
+
throw new Error("Disposed player");
|
|
775
|
+
}
|
|
776
|
+
var videoElement = this.videoElement;
|
|
777
|
+
var textTracks = videoElement.textTracks;
|
|
778
|
+
if (textTracks.length > 0) {
|
|
779
|
+
return videoElement.textTracks[0];
|
|
780
|
+
}
|
|
781
|
+
else {
|
|
782
|
+
return null;
|
|
783
|
+
}
|
|
784
|
+
};
|
|
629
785
|
/**
|
|
630
786
|
* Returns the player's current state.
|
|
631
787
|
* @returns {string} - The current Player's state
|
|
@@ -693,22 +849,21 @@ var Player = /** @class */ (function (_super) {
|
|
|
693
849
|
return this._priv_preferTrickModeTracks;
|
|
694
850
|
};
|
|
695
851
|
/**
|
|
696
|
-
* Returns the
|
|
852
|
+
* Returns the url of the currently considered Manifest, or of the content for
|
|
697
853
|
* directfile content.
|
|
698
|
-
* @returns {
|
|
699
|
-
*
|
|
854
|
+
* @returns {string|undefined} - Current URL. `undefined` if not known or no
|
|
855
|
+
* URL yet.
|
|
700
856
|
*/
|
|
701
|
-
Player.prototype.
|
|
857
|
+
Player.prototype.getUrl = function () {
|
|
702
858
|
if (this._priv_contentInfos === null) {
|
|
703
859
|
return undefined;
|
|
704
860
|
}
|
|
705
861
|
var _a = this._priv_contentInfos, isDirectFile = _a.isDirectFile, manifest = _a.manifest, originalUrl = _a.originalUrl;
|
|
706
862
|
if (isDirectFile) {
|
|
707
|
-
return originalUrl
|
|
708
|
-
[originalUrl];
|
|
863
|
+
return originalUrl;
|
|
709
864
|
}
|
|
710
865
|
if (manifest !== null) {
|
|
711
|
-
return manifest.
|
|
866
|
+
return manifest.getUrl();
|
|
712
867
|
}
|
|
713
868
|
return undefined;
|
|
714
869
|
};
|
|
@@ -732,7 +887,7 @@ var Player = /** @class */ (function (_super) {
|
|
|
732
887
|
* NaN if no video is playing.
|
|
733
888
|
* @returns {Number}
|
|
734
889
|
*/
|
|
735
|
-
Player.prototype.
|
|
890
|
+
Player.prototype.getVideoDuration = function () {
|
|
736
891
|
if (this.videoElement === null) {
|
|
737
892
|
throw new Error("Disposed player");
|
|
738
893
|
}
|
|
@@ -744,13 +899,43 @@ var Player = /** @class */ (function (_super) {
|
|
|
744
899
|
* - the current time
|
|
745
900
|
* @returns {Number}
|
|
746
901
|
*/
|
|
747
|
-
Player.prototype.
|
|
902
|
+
Player.prototype.getVideoBufferGap = function () {
|
|
748
903
|
if (this.videoElement === null) {
|
|
749
904
|
throw new Error("Disposed player");
|
|
750
905
|
}
|
|
751
906
|
var videoElement = this.videoElement;
|
|
752
907
|
return getLeftSizeOfRange(videoElement.buffered, videoElement.currentTime);
|
|
753
908
|
};
|
|
909
|
+
/**
|
|
910
|
+
* Returns in seconds the difference between:
|
|
911
|
+
* - the end of the current contiguous loaded range.
|
|
912
|
+
* - the start of the current contiguous loaded range.
|
|
913
|
+
* @returns {Number}
|
|
914
|
+
*/
|
|
915
|
+
Player.prototype.getVideoLoadedTime = function () {
|
|
916
|
+
warnOnce("`getVideoLoadedTime` is deprecated and won't be present in the " +
|
|
917
|
+
"next major version");
|
|
918
|
+
if (this.videoElement === null) {
|
|
919
|
+
throw new Error("Disposed player");
|
|
920
|
+
}
|
|
921
|
+
var videoElement = this.videoElement;
|
|
922
|
+
return getSizeOfRange(videoElement.buffered, videoElement.currentTime);
|
|
923
|
+
};
|
|
924
|
+
/**
|
|
925
|
+
* Returns in seconds the difference between:
|
|
926
|
+
* - the current time.
|
|
927
|
+
* - the start of the current contiguous loaded range.
|
|
928
|
+
* @returns {Number}
|
|
929
|
+
*/
|
|
930
|
+
Player.prototype.getVideoPlayedTime = function () {
|
|
931
|
+
warnOnce("`getVideoPlayedTime` is deprecated and won't be present in the " +
|
|
932
|
+
"next major version");
|
|
933
|
+
if (this.videoElement === null) {
|
|
934
|
+
throw new Error("Disposed player");
|
|
935
|
+
}
|
|
936
|
+
var videoElement = this.videoElement;
|
|
937
|
+
return getPlayedSizeOfRange(videoElement.buffered, videoElement.currentTime);
|
|
938
|
+
};
|
|
754
939
|
/**
|
|
755
940
|
* Get the current position, in s, in wall-clock time.
|
|
756
941
|
* That is:
|
|
@@ -884,47 +1069,115 @@ var Player = /** @class */ (function (_super) {
|
|
|
884
1069
|
return;
|
|
885
1070
|
}
|
|
886
1071
|
this._priv_preferTrickModeTracks = preferTrickModeTracks;
|
|
887
|
-
var
|
|
888
|
-
if (!isNullOrUndefined(
|
|
889
|
-
if (preferTrickModeTracks && !
|
|
890
|
-
|
|
1072
|
+
var trackChoiceManager = (_a = this._priv_contentInfos) === null || _a === void 0 ? void 0 : _a.trackChoiceManager;
|
|
1073
|
+
if (!isNullOrUndefined(trackChoiceManager)) {
|
|
1074
|
+
if (preferTrickModeTracks && !trackChoiceManager.isTrickModeEnabled()) {
|
|
1075
|
+
trackChoiceManager.enableVideoTrickModeTracks();
|
|
891
1076
|
}
|
|
892
|
-
else if (!preferTrickModeTracks &&
|
|
893
|
-
|
|
1077
|
+
else if (!preferTrickModeTracks && trackChoiceManager.isTrickModeEnabled()) {
|
|
1078
|
+
trackChoiceManager.disableVideoTrickModeTracks();
|
|
894
1079
|
}
|
|
895
1080
|
}
|
|
896
1081
|
};
|
|
897
1082
|
/**
|
|
898
|
-
* Returns
|
|
899
|
-
*
|
|
900
|
-
* Returns `null` if no video track is playing for the current Period.
|
|
901
|
-
*
|
|
902
|
-
* Returns `undefined` either when are not currently playing any Period or
|
|
903
|
-
* when we don't know which Representation is playing.
|
|
904
|
-
* @returns {Object|null|undefined}
|
|
1083
|
+
* Returns all available bitrates for the current video Adaptation.
|
|
1084
|
+
* @returns {Array.<Number>}
|
|
905
1085
|
*/
|
|
906
|
-
Player.prototype.
|
|
907
|
-
|
|
908
|
-
|
|
1086
|
+
Player.prototype.getAvailableVideoBitrates = function () {
|
|
1087
|
+
if (this._priv_contentInfos === null) {
|
|
1088
|
+
return [];
|
|
1089
|
+
}
|
|
1090
|
+
var _a = this._priv_contentInfos, currentPeriod = _a.currentPeriod, activeAdaptations = _a.activeAdaptations;
|
|
1091
|
+
if (currentPeriod === null || activeAdaptations === null) {
|
|
1092
|
+
return [];
|
|
1093
|
+
}
|
|
1094
|
+
var adaptations = activeAdaptations[currentPeriod.id];
|
|
1095
|
+
if (adaptations === undefined || isNullOrUndefined(adaptations.video)) {
|
|
1096
|
+
return [];
|
|
1097
|
+
}
|
|
1098
|
+
return adaptations.video.getAvailableBitrates();
|
|
1099
|
+
};
|
|
1100
|
+
/**
|
|
1101
|
+
* Returns all available bitrates for the current audio Adaptation.
|
|
1102
|
+
* @returns {Array.<Number>}
|
|
1103
|
+
*/
|
|
1104
|
+
Player.prototype.getAvailableAudioBitrates = function () {
|
|
1105
|
+
if (this._priv_contentInfos === null) {
|
|
1106
|
+
return [];
|
|
1107
|
+
}
|
|
1108
|
+
var _a = this._priv_contentInfos, currentPeriod = _a.currentPeriod, activeAdaptations = _a.activeAdaptations;
|
|
1109
|
+
if (currentPeriod === null || activeAdaptations === null) {
|
|
1110
|
+
return [];
|
|
1111
|
+
}
|
|
1112
|
+
var adaptations = activeAdaptations[currentPeriod.id];
|
|
1113
|
+
if (adaptations === undefined || isNullOrUndefined(adaptations.audio)) {
|
|
1114
|
+
return [];
|
|
1115
|
+
}
|
|
1116
|
+
return adaptations.audio.getAvailableBitrates();
|
|
1117
|
+
};
|
|
1118
|
+
/**
|
|
1119
|
+
* Returns the manual audio bitrate set. -1 if in AUTO mode.
|
|
1120
|
+
* @returns {Number}
|
|
1121
|
+
*/
|
|
1122
|
+
Player.prototype.getManualAudioBitrate = function () {
|
|
1123
|
+
return this._priv_bitrateInfos.manualBitrates.audio.getValue();
|
|
1124
|
+
};
|
|
1125
|
+
/**
|
|
1126
|
+
* Returns the manual video bitrate set. -1 if in AUTO mode.
|
|
1127
|
+
* @returns {Number}
|
|
1128
|
+
*/
|
|
1129
|
+
Player.prototype.getManualVideoBitrate = function () {
|
|
1130
|
+
return this._priv_bitrateInfos.manualBitrates.video.getValue();
|
|
1131
|
+
};
|
|
1132
|
+
/**
|
|
1133
|
+
* Returns currently considered bitrate for video segments.
|
|
1134
|
+
* @returns {Number|undefined}
|
|
1135
|
+
*/
|
|
1136
|
+
Player.prototype.getVideoBitrate = function () {
|
|
1137
|
+
var representations = this._priv_getCurrentRepresentations();
|
|
1138
|
+
if (representations === null || isNullOrUndefined(representations.video)) {
|
|
909
1139
|
return undefined;
|
|
910
1140
|
}
|
|
911
|
-
return representations.video;
|
|
1141
|
+
return representations.video.bitrate;
|
|
912
1142
|
};
|
|
913
1143
|
/**
|
|
914
|
-
* Returns
|
|
915
|
-
*
|
|
916
|
-
* Returns `null` if no audio track is playing for the current Period.
|
|
917
|
-
*
|
|
918
|
-
* Returns `undefined` either when are not currently playing any Period or
|
|
919
|
-
* when we don't know which Representation is playing.
|
|
920
|
-
* @returns {Object|null|undefined}
|
|
1144
|
+
* Returns currently considered bitrate for audio segments.
|
|
1145
|
+
* @returns {Number|undefined}
|
|
921
1146
|
*/
|
|
922
|
-
Player.prototype.
|
|
923
|
-
var representations = this.
|
|
924
|
-
if (representations === null) {
|
|
1147
|
+
Player.prototype.getAudioBitrate = function () {
|
|
1148
|
+
var representations = this._priv_getCurrentRepresentations();
|
|
1149
|
+
if (representations === null || isNullOrUndefined(representations.audio)) {
|
|
925
1150
|
return undefined;
|
|
926
1151
|
}
|
|
927
|
-
return representations.audio;
|
|
1152
|
+
return representations.audio.bitrate;
|
|
1153
|
+
};
|
|
1154
|
+
/**
|
|
1155
|
+
* Returns minimum wanted video bitrate currently set.
|
|
1156
|
+
* @returns {Number}
|
|
1157
|
+
*/
|
|
1158
|
+
Player.prototype.getMinVideoBitrate = function () {
|
|
1159
|
+
return this._priv_bitrateInfos.minAutoBitrates.video.getValue();
|
|
1160
|
+
};
|
|
1161
|
+
/**
|
|
1162
|
+
* Returns minimum wanted audio bitrate currently set.
|
|
1163
|
+
* @returns {Number}
|
|
1164
|
+
*/
|
|
1165
|
+
Player.prototype.getMinAudioBitrate = function () {
|
|
1166
|
+
return this._priv_bitrateInfos.minAutoBitrates.audio.getValue();
|
|
1167
|
+
};
|
|
1168
|
+
/**
|
|
1169
|
+
* Returns maximum wanted video bitrate currently set.
|
|
1170
|
+
* @returns {Number}
|
|
1171
|
+
*/
|
|
1172
|
+
Player.prototype.getMaxVideoBitrate = function () {
|
|
1173
|
+
return this._priv_bitrateInfos.maxAutoBitrates.video.getValue();
|
|
1174
|
+
};
|
|
1175
|
+
/**
|
|
1176
|
+
* Returns maximum wanted audio bitrate currently set.
|
|
1177
|
+
* @returns {Number}
|
|
1178
|
+
*/
|
|
1179
|
+
Player.prototype.getMaxAudioBitrate = function () {
|
|
1180
|
+
return this._priv_bitrateInfos.maxAutoBitrates.audio.getValue();
|
|
928
1181
|
};
|
|
929
1182
|
/**
|
|
930
1183
|
* Play/Resume the current video.
|
|
@@ -1015,6 +1268,44 @@ var Player = /** @class */ (function (_super) {
|
|
|
1015
1268
|
this.videoElement.currentTime = positionWanted;
|
|
1016
1269
|
return positionWanted;
|
|
1017
1270
|
};
|
|
1271
|
+
/**
|
|
1272
|
+
* Returns true if the media element is full screen.
|
|
1273
|
+
* @deprecated
|
|
1274
|
+
* @returns {Boolean}
|
|
1275
|
+
*/
|
|
1276
|
+
Player.prototype.isFullscreen = function () {
|
|
1277
|
+
warnOnce("isFullscreen is deprecated." +
|
|
1278
|
+
" Fullscreen management should now be managed by the application");
|
|
1279
|
+
return isFullscreen();
|
|
1280
|
+
};
|
|
1281
|
+
/**
|
|
1282
|
+
* Set/exit fullScreen.
|
|
1283
|
+
* @deprecated
|
|
1284
|
+
* @param {Boolean} [goFull=true] - if false, exit full screen.
|
|
1285
|
+
*/
|
|
1286
|
+
Player.prototype.setFullscreen = function (goFull) {
|
|
1287
|
+
if (goFull === void 0) { goFull = true; }
|
|
1288
|
+
warnOnce("setFullscreen is deprecated." +
|
|
1289
|
+
" Fullscreen management should now be managed by the application");
|
|
1290
|
+
if (this.videoElement === null) {
|
|
1291
|
+
throw new Error("Disposed player");
|
|
1292
|
+
}
|
|
1293
|
+
if (goFull) {
|
|
1294
|
+
requestFullscreen(this.videoElement);
|
|
1295
|
+
}
|
|
1296
|
+
else {
|
|
1297
|
+
exitFullscreen();
|
|
1298
|
+
}
|
|
1299
|
+
};
|
|
1300
|
+
/**
|
|
1301
|
+
* Exit from full screen mode.
|
|
1302
|
+
* @deprecated
|
|
1303
|
+
*/
|
|
1304
|
+
Player.prototype.exitFullscreen = function () {
|
|
1305
|
+
warnOnce("exitFullscreen is deprecated." +
|
|
1306
|
+
" Fullscreen management should now be managed by the application");
|
|
1307
|
+
exitFullscreen();
|
|
1308
|
+
};
|
|
1018
1309
|
/**
|
|
1019
1310
|
* Returns the current player's audio volume on the media element.
|
|
1020
1311
|
* From 0 (no audio) to 1 (maximum volume).
|
|
@@ -1066,6 +1357,74 @@ var Player = /** @class */ (function (_super) {
|
|
|
1066
1357
|
this._priv_mutedMemory);
|
|
1067
1358
|
}
|
|
1068
1359
|
};
|
|
1360
|
+
/**
|
|
1361
|
+
* Force the video bitrate to a given value. Act as a ceil.
|
|
1362
|
+
* -1 to set it on AUTO Mode
|
|
1363
|
+
* @param {Number} btr
|
|
1364
|
+
*/
|
|
1365
|
+
Player.prototype.setVideoBitrate = function (btr) {
|
|
1366
|
+
this._priv_bitrateInfos.manualBitrates.video.setValue(btr);
|
|
1367
|
+
};
|
|
1368
|
+
/**
|
|
1369
|
+
* Force the audio bitrate to a given value. Act as a ceil.
|
|
1370
|
+
* -1 to set it on AUTO Mode
|
|
1371
|
+
* @param {Number} btr
|
|
1372
|
+
*/
|
|
1373
|
+
Player.prototype.setAudioBitrate = function (btr) {
|
|
1374
|
+
this._priv_bitrateInfos.manualBitrates.audio.setValue(btr);
|
|
1375
|
+
};
|
|
1376
|
+
/**
|
|
1377
|
+
* Update the minimum video bitrate the user can switch to.
|
|
1378
|
+
* @param {Number} btr
|
|
1379
|
+
*/
|
|
1380
|
+
Player.prototype.setMinVideoBitrate = function (btr) {
|
|
1381
|
+
var maxVideoBitrate = this._priv_bitrateInfos.maxAutoBitrates.video.getValue();
|
|
1382
|
+
if (btr > maxVideoBitrate) {
|
|
1383
|
+
throw new Error("Invalid minimum video bitrate given. " +
|
|
1384
|
+
"Its value, \"".concat(btr, "\" is superior the current maximum ") +
|
|
1385
|
+
"video birate, \"".concat(maxVideoBitrate, "\"."));
|
|
1386
|
+
}
|
|
1387
|
+
this._priv_bitrateInfos.minAutoBitrates.video.setValue(btr);
|
|
1388
|
+
};
|
|
1389
|
+
/**
|
|
1390
|
+
* Update the minimum audio bitrate the user can switch to.
|
|
1391
|
+
* @param {Number} btr
|
|
1392
|
+
*/
|
|
1393
|
+
Player.prototype.setMinAudioBitrate = function (btr) {
|
|
1394
|
+
var maxAudioBitrate = this._priv_bitrateInfos.maxAutoBitrates.audio.getValue();
|
|
1395
|
+
if (btr > maxAudioBitrate) {
|
|
1396
|
+
throw new Error("Invalid minimum audio bitrate given. " +
|
|
1397
|
+
"Its value, \"".concat(btr, "\" is superior the current maximum ") +
|
|
1398
|
+
"audio birate, \"".concat(maxAudioBitrate, "\"."));
|
|
1399
|
+
}
|
|
1400
|
+
this._priv_bitrateInfos.minAutoBitrates.audio.setValue(btr);
|
|
1401
|
+
};
|
|
1402
|
+
/**
|
|
1403
|
+
* Update the maximum video bitrate the user can switch to.
|
|
1404
|
+
* @param {Number} btr
|
|
1405
|
+
*/
|
|
1406
|
+
Player.prototype.setMaxVideoBitrate = function (btr) {
|
|
1407
|
+
var minVideoBitrate = this._priv_bitrateInfos.minAutoBitrates.video.getValue();
|
|
1408
|
+
if (btr < minVideoBitrate) {
|
|
1409
|
+
throw new Error("Invalid maximum video bitrate given. " +
|
|
1410
|
+
"Its value, \"".concat(btr, "\" is inferior the current minimum ") +
|
|
1411
|
+
"video birate, \"".concat(minVideoBitrate, "\"."));
|
|
1412
|
+
}
|
|
1413
|
+
this._priv_bitrateInfos.maxAutoBitrates.video.setValue(btr);
|
|
1414
|
+
};
|
|
1415
|
+
/**
|
|
1416
|
+
* Update the maximum audio bitrate the user can switch to.
|
|
1417
|
+
* @param {Number} btr
|
|
1418
|
+
*/
|
|
1419
|
+
Player.prototype.setMaxAudioBitrate = function (btr) {
|
|
1420
|
+
var minAudioBitrate = this._priv_bitrateInfos.minAutoBitrates.audio.getValue();
|
|
1421
|
+
if (btr < minAudioBitrate) {
|
|
1422
|
+
throw new Error("Invalid maximum audio bitrate given. " +
|
|
1423
|
+
"Its value, \"".concat(btr, "\" is inferior the current minimum ") +
|
|
1424
|
+
"audio birate, \"".concat(minAudioBitrate, "\"."));
|
|
1425
|
+
}
|
|
1426
|
+
this._priv_bitrateInfos.maxAutoBitrates.audio.setValue(btr);
|
|
1427
|
+
};
|
|
1069
1428
|
/**
|
|
1070
1429
|
* Set the max buffer size for the buffer behind the current position.
|
|
1071
1430
|
* Every buffer data before will be removed.
|
|
@@ -1140,14 +1499,6 @@ var Player = /** @class */ (function (_super) {
|
|
|
1140
1499
|
}
|
|
1141
1500
|
return getCurrentKeySystem(this.videoElement);
|
|
1142
1501
|
};
|
|
1143
|
-
Player.prototype.getCurrentPeriod = function () {
|
|
1144
|
-
var _a;
|
|
1145
|
-
var currentPeriod = (_a = this._priv_contentInfos) === null || _a === void 0 ? void 0 : _a.currentPeriod;
|
|
1146
|
-
if (isNullOrUndefined(currentPeriod)) {
|
|
1147
|
-
return null;
|
|
1148
|
-
}
|
|
1149
|
-
return { id: currentPeriod.id, start: currentPeriod.start, end: currentPeriod.end };
|
|
1150
|
-
};
|
|
1151
1502
|
/**
|
|
1152
1503
|
* Returns both the name of the key system (e.g. `"com.widevine.alpha"`) and
|
|
1153
1504
|
* the `MediaKeySystemConfiguration` currently associated to the
|
|
@@ -1167,356 +1518,342 @@ var Player = /** @class */ (function (_super) {
|
|
|
1167
1518
|
return { keySystem: values[0], configuration: values[1] };
|
|
1168
1519
|
};
|
|
1169
1520
|
/**
|
|
1170
|
-
* Returns
|
|
1171
|
-
*
|
|
1172
|
-
* @returns {Array.<Object>}
|
|
1521
|
+
* Returns every available audio tracks for the current Period.
|
|
1522
|
+
* @returns {Array.<Object>|null}
|
|
1173
1523
|
*/
|
|
1174
|
-
Player.prototype.
|
|
1524
|
+
Player.prototype.getAvailableAudioTracks = function () {
|
|
1525
|
+
var _a;
|
|
1175
1526
|
if (this._priv_contentInfos === null) {
|
|
1176
1527
|
return [];
|
|
1177
1528
|
}
|
|
1178
|
-
var
|
|
1529
|
+
var _b = this._priv_contentInfos, currentPeriod = _b.currentPeriod, isDirectFile = _b.isDirectFile, trackChoiceManager = _b.trackChoiceManager, mediaElementTrackChoiceManager = _b.mediaElementTrackChoiceManager;
|
|
1179
1530
|
if (isDirectFile) {
|
|
1180
|
-
return [];
|
|
1531
|
+
return (_a = mediaElementTrackChoiceManager === null || mediaElementTrackChoiceManager === void 0 ? void 0 : mediaElementTrackChoiceManager.getAvailableAudioTracks()) !== null && _a !== void 0 ? _a : [];
|
|
1181
1532
|
}
|
|
1182
|
-
if (
|
|
1533
|
+
if (trackChoiceManager === null || currentPeriod === null) {
|
|
1183
1534
|
return [];
|
|
1184
1535
|
}
|
|
1185
|
-
return
|
|
1536
|
+
return trackChoiceManager.getAvailableAudioTracks(currentPeriod);
|
|
1186
1537
|
};
|
|
1187
1538
|
/**
|
|
1188
|
-
* Returns every available
|
|
1189
|
-
*
|
|
1190
|
-
* @param {string|undefined} [periodId]
|
|
1191
|
-
* @returns {Array.<Object>}
|
|
1539
|
+
* Returns every available text tracks for the current Period.
|
|
1540
|
+
* @returns {Array.<Object>|null}
|
|
1192
1541
|
*/
|
|
1193
|
-
Player.prototype.
|
|
1542
|
+
Player.prototype.getAvailableTextTracks = function () {
|
|
1194
1543
|
var _a;
|
|
1195
1544
|
if (this._priv_contentInfos === null) {
|
|
1196
1545
|
return [];
|
|
1197
1546
|
}
|
|
1198
|
-
var _b = this._priv_contentInfos, isDirectFile = _b.isDirectFile,
|
|
1547
|
+
var _b = this._priv_contentInfos, currentPeriod = _b.currentPeriod, isDirectFile = _b.isDirectFile, trackChoiceManager = _b.trackChoiceManager, mediaElementTrackChoiceManager = _b.mediaElementTrackChoiceManager;
|
|
1199
1548
|
if (isDirectFile) {
|
|
1200
|
-
return (_a =
|
|
1549
|
+
return (_a = mediaElementTrackChoiceManager === null || mediaElementTrackChoiceManager === void 0 ? void 0 : mediaElementTrackChoiceManager.getAvailableTextTracks()) !== null && _a !== void 0 ? _a : [];
|
|
1201
1550
|
}
|
|
1202
|
-
|
|
1203
|
-
};
|
|
1204
|
-
/**
|
|
1205
|
-
* Returns every available text tracks for a given Period - or the current
|
|
1206
|
-
* one if no `periodId` is given.
|
|
1207
|
-
* @param {string|undefined} [periodId]
|
|
1208
|
-
* @returns {Array.<Object>}
|
|
1209
|
-
*/
|
|
1210
|
-
Player.prototype.getAvailableTextTracks = function (periodId) {
|
|
1211
|
-
var _a;
|
|
1212
|
-
if (this._priv_contentInfos === null) {
|
|
1551
|
+
if (trackChoiceManager === null || currentPeriod === null) {
|
|
1213
1552
|
return [];
|
|
1214
1553
|
}
|
|
1215
|
-
|
|
1216
|
-
if (isDirectFile) {
|
|
1217
|
-
return (_a = mediaElementTracksStore === null || mediaElementTracksStore === void 0 ? void 0 : mediaElementTracksStore.getAvailableTextTracks()) !== null && _a !== void 0 ? _a : [];
|
|
1218
|
-
}
|
|
1219
|
-
return this._priv_callTracksStoreGetterSetter(periodId, [], function (tcm, periodRef) { var _a; return (_a = tcm.getAvailableTextTracks(periodRef)) !== null && _a !== void 0 ? _a : []; });
|
|
1554
|
+
return trackChoiceManager.getAvailableTextTracks(currentPeriod);
|
|
1220
1555
|
};
|
|
1221
1556
|
/**
|
|
1222
1557
|
* Returns every available video tracks for the current Period.
|
|
1223
|
-
* @
|
|
1224
|
-
* @returns {Array.<Object>}
|
|
1558
|
+
* @returns {Array.<Object>|null}
|
|
1225
1559
|
*/
|
|
1226
|
-
Player.prototype.getAvailableVideoTracks = function (
|
|
1560
|
+
Player.prototype.getAvailableVideoTracks = function () {
|
|
1227
1561
|
var _a;
|
|
1228
1562
|
if (this._priv_contentInfos === null) {
|
|
1229
1563
|
return [];
|
|
1230
1564
|
}
|
|
1231
|
-
var _b = this._priv_contentInfos, isDirectFile = _b.isDirectFile,
|
|
1565
|
+
var _b = this._priv_contentInfos, currentPeriod = _b.currentPeriod, isDirectFile = _b.isDirectFile, trackChoiceManager = _b.trackChoiceManager, mediaElementTrackChoiceManager = _b.mediaElementTrackChoiceManager;
|
|
1232
1566
|
if (isDirectFile) {
|
|
1233
|
-
return (_a =
|
|
1567
|
+
return (_a = mediaElementTrackChoiceManager === null || mediaElementTrackChoiceManager === void 0 ? void 0 : mediaElementTrackChoiceManager.getAvailableVideoTracks()) !== null && _a !== void 0 ? _a : [];
|
|
1568
|
+
}
|
|
1569
|
+
if (trackChoiceManager === null || currentPeriod === null) {
|
|
1570
|
+
return [];
|
|
1234
1571
|
}
|
|
1235
|
-
return
|
|
1572
|
+
return trackChoiceManager.getAvailableVideoTracks(currentPeriod);
|
|
1236
1573
|
};
|
|
1237
1574
|
/**
|
|
1238
1575
|
* Returns currently chosen audio language for the current Period.
|
|
1239
|
-
* @
|
|
1240
|
-
* @returns {Object|null|undefined}
|
|
1576
|
+
* @returns {string}
|
|
1241
1577
|
*/
|
|
1242
|
-
Player.prototype.getAudioTrack = function (
|
|
1578
|
+
Player.prototype.getAudioTrack = function () {
|
|
1243
1579
|
if (this._priv_contentInfos === null) {
|
|
1244
1580
|
return undefined;
|
|
1245
1581
|
}
|
|
1246
|
-
var _a = this._priv_contentInfos, isDirectFile = _a.isDirectFile,
|
|
1582
|
+
var _a = this._priv_contentInfos, currentPeriod = _a.currentPeriod, isDirectFile = _a.isDirectFile, trackChoiceManager = _a.trackChoiceManager, mediaElementTrackChoiceManager = _a.mediaElementTrackChoiceManager;
|
|
1247
1583
|
if (isDirectFile) {
|
|
1248
|
-
if (
|
|
1584
|
+
if (mediaElementTrackChoiceManager === null) {
|
|
1249
1585
|
return undefined;
|
|
1250
1586
|
}
|
|
1251
|
-
return
|
|
1587
|
+
return mediaElementTrackChoiceManager.getChosenAudioTrack();
|
|
1588
|
+
}
|
|
1589
|
+
if (trackChoiceManager === null || currentPeriod === null) {
|
|
1590
|
+
return undefined;
|
|
1252
1591
|
}
|
|
1253
|
-
return
|
|
1592
|
+
return trackChoiceManager.getChosenAudioTrack(currentPeriod);
|
|
1254
1593
|
};
|
|
1255
1594
|
/**
|
|
1256
1595
|
* Returns currently chosen subtitle for the current Period.
|
|
1257
|
-
* @
|
|
1258
|
-
* @returns {Object|null|undefined}
|
|
1596
|
+
* @returns {string}
|
|
1259
1597
|
*/
|
|
1260
|
-
Player.prototype.getTextTrack = function (
|
|
1598
|
+
Player.prototype.getTextTrack = function () {
|
|
1261
1599
|
if (this._priv_contentInfos === null) {
|
|
1262
1600
|
return undefined;
|
|
1263
1601
|
}
|
|
1264
|
-
var _a = this._priv_contentInfos, isDirectFile = _a.isDirectFile,
|
|
1602
|
+
var _a = this._priv_contentInfos, currentPeriod = _a.currentPeriod, isDirectFile = _a.isDirectFile, trackChoiceManager = _a.trackChoiceManager, mediaElementTrackChoiceManager = _a.mediaElementTrackChoiceManager;
|
|
1265
1603
|
if (isDirectFile) {
|
|
1266
|
-
if (
|
|
1604
|
+
if (mediaElementTrackChoiceManager === null) {
|
|
1267
1605
|
return undefined;
|
|
1268
1606
|
}
|
|
1269
|
-
return
|
|
1607
|
+
return mediaElementTrackChoiceManager.getChosenTextTrack();
|
|
1270
1608
|
}
|
|
1271
|
-
|
|
1609
|
+
if (trackChoiceManager === null || currentPeriod === null) {
|
|
1610
|
+
return undefined;
|
|
1611
|
+
}
|
|
1612
|
+
return trackChoiceManager.getChosenTextTrack(currentPeriod);
|
|
1272
1613
|
};
|
|
1273
1614
|
/**
|
|
1274
1615
|
* Returns currently chosen video track for the current Period.
|
|
1275
|
-
* @
|
|
1276
|
-
* @returns {Object|null|undefined}
|
|
1616
|
+
* @returns {string}
|
|
1277
1617
|
*/
|
|
1278
|
-
Player.prototype.getVideoTrack = function (
|
|
1618
|
+
Player.prototype.getVideoTrack = function () {
|
|
1279
1619
|
if (this._priv_contentInfos === null) {
|
|
1280
1620
|
return undefined;
|
|
1281
1621
|
}
|
|
1282
|
-
var _a = this._priv_contentInfos, isDirectFile = _a.isDirectFile,
|
|
1622
|
+
var _a = this._priv_contentInfos, currentPeriod = _a.currentPeriod, isDirectFile = _a.isDirectFile, trackChoiceManager = _a.trackChoiceManager, mediaElementTrackChoiceManager = _a.mediaElementTrackChoiceManager;
|
|
1283
1623
|
if (isDirectFile) {
|
|
1284
|
-
if (
|
|
1624
|
+
if (mediaElementTrackChoiceManager === null) {
|
|
1285
1625
|
return undefined;
|
|
1286
1626
|
}
|
|
1287
|
-
return
|
|
1627
|
+
return mediaElementTrackChoiceManager.getChosenVideoTrack();
|
|
1288
1628
|
}
|
|
1289
|
-
|
|
1629
|
+
if (trackChoiceManager === null || currentPeriod === null) {
|
|
1630
|
+
return undefined;
|
|
1631
|
+
}
|
|
1632
|
+
return trackChoiceManager.getChosenVideoTrack(currentPeriod);
|
|
1290
1633
|
};
|
|
1291
1634
|
/**
|
|
1292
1635
|
* Update the audio language for the current Period.
|
|
1293
|
-
* @param {string
|
|
1294
|
-
* @throws Error - the current content has no
|
|
1636
|
+
* @param {string} audioId
|
|
1637
|
+
* @throws Error - the current content has no TrackChoiceManager.
|
|
1295
1638
|
* @throws Error - the given id is linked to no audio track.
|
|
1296
1639
|
*/
|
|
1297
|
-
Player.prototype.setAudioTrack = function (
|
|
1298
|
-
var _a;
|
|
1640
|
+
Player.prototype.setAudioTrack = function (audioId) {
|
|
1299
1641
|
if (this._priv_contentInfos === null) {
|
|
1300
1642
|
throw new Error("No content loaded");
|
|
1301
1643
|
}
|
|
1302
|
-
var
|
|
1644
|
+
var _a = this._priv_contentInfos, currentPeriod = _a.currentPeriod, isDirectFile = _a.isDirectFile, trackChoiceManager = _a.trackChoiceManager, mediaElementTrackChoiceManager = _a.mediaElementTrackChoiceManager;
|
|
1303
1645
|
if (isDirectFile) {
|
|
1304
1646
|
try {
|
|
1305
|
-
|
|
1306
|
-
arg.trackId;
|
|
1307
|
-
mediaElementTracksStore === null || mediaElementTracksStore === void 0 ? void 0 : mediaElementTracksStore.setAudioTrackById(audioId);
|
|
1647
|
+
mediaElementTrackChoiceManager === null || mediaElementTrackChoiceManager === void 0 ? void 0 : mediaElementTrackChoiceManager.setAudioTrackById(audioId);
|
|
1308
1648
|
return;
|
|
1309
1649
|
}
|
|
1310
1650
|
catch (e) {
|
|
1311
1651
|
throw new Error("player: unknown audio track");
|
|
1312
1652
|
}
|
|
1313
1653
|
}
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
var switchingMode;
|
|
1317
|
-
var reprsToLock = null;
|
|
1318
|
-
if (typeof arg === "string") {
|
|
1319
|
-
trackId = arg;
|
|
1654
|
+
if (trackChoiceManager === null || currentPeriod === null) {
|
|
1655
|
+
throw new Error("No compatible content launched.");
|
|
1320
1656
|
}
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1657
|
+
try {
|
|
1658
|
+
trackChoiceManager.setAudioTrackByID(currentPeriod, audioId);
|
|
1659
|
+
}
|
|
1660
|
+
catch (e) {
|
|
1661
|
+
throw new Error("player: unknown audio track");
|
|
1326
1662
|
}
|
|
1327
|
-
return this._priv_callTracksStoreGetterSetter(periodId, undefined, function (tcm, periodRef) {
|
|
1328
|
-
return tcm.setAudioTrack(periodRef, trackId, switchingMode, reprsToLock);
|
|
1329
|
-
});
|
|
1330
1663
|
};
|
|
1331
1664
|
/**
|
|
1332
1665
|
* Update the text language for the current Period.
|
|
1333
|
-
* @param {string
|
|
1334
|
-
* @throws Error - the current content has no
|
|
1666
|
+
* @param {string} sub
|
|
1667
|
+
* @throws Error - the current content has no TrackChoiceManager.
|
|
1335
1668
|
* @throws Error - the given id is linked to no text track.
|
|
1336
1669
|
*/
|
|
1337
|
-
Player.prototype.setTextTrack = function (
|
|
1670
|
+
Player.prototype.setTextTrack = function (textId) {
|
|
1338
1671
|
if (this._priv_contentInfos === null) {
|
|
1339
1672
|
throw new Error("No content loaded");
|
|
1340
1673
|
}
|
|
1341
|
-
var _a = this._priv_contentInfos, isDirectFile = _a.isDirectFile,
|
|
1674
|
+
var _a = this._priv_contentInfos, currentPeriod = _a.currentPeriod, isDirectFile = _a.isDirectFile, trackChoiceManager = _a.trackChoiceManager, mediaElementTrackChoiceManager = _a.mediaElementTrackChoiceManager;
|
|
1342
1675
|
if (isDirectFile) {
|
|
1343
1676
|
try {
|
|
1344
|
-
|
|
1345
|
-
arg.trackId;
|
|
1346
|
-
mediaElementTracksStore === null || mediaElementTracksStore === void 0 ? void 0 : mediaElementTracksStore.setTextTrackById(textId);
|
|
1677
|
+
mediaElementTrackChoiceManager === null || mediaElementTrackChoiceManager === void 0 ? void 0 : mediaElementTrackChoiceManager.setTextTrackById(textId);
|
|
1347
1678
|
return;
|
|
1348
1679
|
}
|
|
1349
1680
|
catch (e) {
|
|
1350
1681
|
throw new Error("player: unknown text track");
|
|
1351
1682
|
}
|
|
1352
1683
|
}
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
if (typeof arg === "string") {
|
|
1356
|
-
trackId = arg;
|
|
1684
|
+
if (trackChoiceManager === null || currentPeriod === null) {
|
|
1685
|
+
throw new Error("No compatible content launched.");
|
|
1357
1686
|
}
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1687
|
+
try {
|
|
1688
|
+
trackChoiceManager.setTextTrackByID(currentPeriod, textId);
|
|
1689
|
+
}
|
|
1690
|
+
catch (e) {
|
|
1691
|
+
throw new Error("player: unknown text track");
|
|
1361
1692
|
}
|
|
1362
|
-
return this._priv_callTracksStoreGetterSetter(periodId, undefined, function (tcm, periodRef) { return tcm.setTextTrack(periodRef, trackId); });
|
|
1363
1693
|
};
|
|
1364
1694
|
/**
|
|
1365
1695
|
* Disable subtitles for the current content.
|
|
1366
|
-
* @param {string|undefined} [periodId]
|
|
1367
1696
|
*/
|
|
1368
|
-
Player.prototype.disableTextTrack = function (
|
|
1697
|
+
Player.prototype.disableTextTrack = function () {
|
|
1369
1698
|
if (this._priv_contentInfos === null) {
|
|
1370
1699
|
return;
|
|
1371
1700
|
}
|
|
1372
|
-
var _a = this._priv_contentInfos, isDirectFile = _a.isDirectFile,
|
|
1701
|
+
var _a = this._priv_contentInfos, currentPeriod = _a.currentPeriod, isDirectFile = _a.isDirectFile, trackChoiceManager = _a.trackChoiceManager, mediaElementTrackChoiceManager = _a.mediaElementTrackChoiceManager;
|
|
1373
1702
|
if (isDirectFile) {
|
|
1374
|
-
|
|
1703
|
+
mediaElementTrackChoiceManager === null || mediaElementTrackChoiceManager === void 0 ? void 0 : mediaElementTrackChoiceManager.disableTextTrack();
|
|
1704
|
+
return;
|
|
1705
|
+
}
|
|
1706
|
+
if (trackChoiceManager === null || currentPeriod === null) {
|
|
1375
1707
|
return;
|
|
1376
1708
|
}
|
|
1377
|
-
return
|
|
1709
|
+
return trackChoiceManager.disableTextTrack(currentPeriod);
|
|
1378
1710
|
};
|
|
1379
1711
|
/**
|
|
1380
1712
|
* Update the video track for the current Period.
|
|
1381
|
-
* @param {string
|
|
1382
|
-
* @throws Error - the current content has no
|
|
1713
|
+
* @param {string} videoId
|
|
1714
|
+
* @throws Error - the current content has no TrackChoiceManager.
|
|
1383
1715
|
* @throws Error - the given id is linked to no video track.
|
|
1384
1716
|
*/
|
|
1385
|
-
Player.prototype.setVideoTrack = function (
|
|
1386
|
-
var _a;
|
|
1717
|
+
Player.prototype.setVideoTrack = function (videoId) {
|
|
1387
1718
|
if (this._priv_contentInfos === null) {
|
|
1388
1719
|
throw new Error("No content loaded");
|
|
1389
1720
|
}
|
|
1390
|
-
var
|
|
1721
|
+
var _a = this._priv_contentInfos, currentPeriod = _a.currentPeriod, isDirectFile = _a.isDirectFile, trackChoiceManager = _a.trackChoiceManager, mediaElementTrackChoiceManager = _a.mediaElementTrackChoiceManager;
|
|
1391
1722
|
if (isDirectFile) {
|
|
1392
1723
|
try {
|
|
1393
|
-
|
|
1394
|
-
arg.trackId;
|
|
1395
|
-
mediaElementTracksStore === null || mediaElementTracksStore === void 0 ? void 0 : mediaElementTracksStore.setVideoTrackById(videoId);
|
|
1724
|
+
mediaElementTrackChoiceManager === null || mediaElementTrackChoiceManager === void 0 ? void 0 : mediaElementTrackChoiceManager.setVideoTrackById(videoId);
|
|
1396
1725
|
return;
|
|
1397
1726
|
}
|
|
1398
1727
|
catch (e) {
|
|
1399
1728
|
throw new Error("player: unknown video track");
|
|
1400
1729
|
}
|
|
1401
1730
|
}
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
var switchingMode;
|
|
1405
|
-
var reprsToLock = null;
|
|
1406
|
-
if (typeof arg === "string") {
|
|
1407
|
-
trackId = arg;
|
|
1731
|
+
if (trackChoiceManager === null || currentPeriod === null) {
|
|
1732
|
+
throw new Error("No compatible content launched.");
|
|
1408
1733
|
}
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1734
|
+
try {
|
|
1735
|
+
trackChoiceManager.setVideoTrackByID(currentPeriod, videoId);
|
|
1736
|
+
}
|
|
1737
|
+
catch (e) {
|
|
1738
|
+
throw new Error("player: unknown video track");
|
|
1414
1739
|
}
|
|
1415
|
-
return this._priv_callTracksStoreGetterSetter(periodId, undefined, function (tcm, periodRef) {
|
|
1416
|
-
return tcm.setVideoTrack(periodRef, trackId, switchingMode, reprsToLock);
|
|
1417
|
-
});
|
|
1418
1740
|
};
|
|
1419
1741
|
/**
|
|
1420
1742
|
* Disable video track for the current content.
|
|
1421
|
-
* @param {string|undefined} [periodId]
|
|
1422
1743
|
*/
|
|
1423
|
-
Player.prototype.disableVideoTrack = function (
|
|
1744
|
+
Player.prototype.disableVideoTrack = function () {
|
|
1424
1745
|
if (this._priv_contentInfos === null) {
|
|
1425
1746
|
return;
|
|
1426
1747
|
}
|
|
1427
|
-
var _a = this._priv_contentInfos, isDirectFile = _a.isDirectFile,
|
|
1428
|
-
if (isDirectFile &&
|
|
1429
|
-
return
|
|
1748
|
+
var _a = this._priv_contentInfos, currentPeriod = _a.currentPeriod, isDirectFile = _a.isDirectFile, trackChoiceManager = _a.trackChoiceManager, mediaElementTrackChoiceManager = _a.mediaElementTrackChoiceManager;
|
|
1749
|
+
if (isDirectFile && mediaElementTrackChoiceManager !== null) {
|
|
1750
|
+
return mediaElementTrackChoiceManager.disableVideoTrack();
|
|
1430
1751
|
}
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
Player.prototype.lockVideoRepresentations = function (arg) {
|
|
1434
|
-
if (this._priv_contentInfos === null) {
|
|
1435
|
-
throw new Error("No content loaded");
|
|
1436
|
-
}
|
|
1437
|
-
var isDirectFile = this._priv_contentInfos.isDirectFile;
|
|
1438
|
-
if (isDirectFile) {
|
|
1439
|
-
throw new Error("Cannot lock video Representations in directfile mode.");
|
|
1440
|
-
}
|
|
1441
|
-
var repsId;
|
|
1442
|
-
var periodId;
|
|
1443
|
-
var switchingMode;
|
|
1444
|
-
if (Array.isArray(arg)) {
|
|
1445
|
-
repsId = arg;
|
|
1446
|
-
periodId = undefined;
|
|
1447
|
-
}
|
|
1448
|
-
else {
|
|
1449
|
-
repsId = arg.representations;
|
|
1450
|
-
periodId = arg.periodId;
|
|
1451
|
-
switchingMode = arg.switchingMode;
|
|
1752
|
+
if (trackChoiceManager === null || currentPeriod === null) {
|
|
1753
|
+
return;
|
|
1452
1754
|
}
|
|
1453
|
-
return
|
|
1454
|
-
return tcm.lockVideoRepresentations(periodRef, { representations: repsId, switchingMode: switchingMode });
|
|
1455
|
-
});
|
|
1755
|
+
return trackChoiceManager.disableVideoTrack(currentPeriod);
|
|
1456
1756
|
};
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1757
|
+
/**
|
|
1758
|
+
* Returns the current list of preferred audio tracks, in preference order.
|
|
1759
|
+
* @returns {Array.<Object>}
|
|
1760
|
+
*/
|
|
1761
|
+
Player.prototype.getPreferredAudioTracks = function () {
|
|
1762
|
+
return this._priv_preferredAudioTracks;
|
|
1763
|
+
};
|
|
1764
|
+
/**
|
|
1765
|
+
* Returns the current list of preferred text tracks, in preference order.
|
|
1766
|
+
* @returns {Array.<Object>}
|
|
1767
|
+
*/
|
|
1768
|
+
Player.prototype.getPreferredTextTracks = function () {
|
|
1769
|
+
return this._priv_preferredTextTracks;
|
|
1770
|
+
};
|
|
1771
|
+
/**
|
|
1772
|
+
* Returns the current list of preferred text tracks, in preference order.
|
|
1773
|
+
* @returns {Array.<Object>}
|
|
1774
|
+
*/
|
|
1775
|
+
Player.prototype.getPreferredVideoTracks = function () {
|
|
1776
|
+
return this._priv_preferredVideoTracks;
|
|
1777
|
+
};
|
|
1778
|
+
/**
|
|
1779
|
+
* Set the list of preferred audio tracks, in preference order.
|
|
1780
|
+
* @param {Array.<Object>} tracks
|
|
1781
|
+
* @param {boolean} shouldApply - `true` if those preferences should be
|
|
1782
|
+
* applied on the currently loaded Period. `false` if it should only
|
|
1783
|
+
* be applied to new content.
|
|
1784
|
+
*/
|
|
1785
|
+
Player.prototype.setPreferredAudioTracks = function (tracks, shouldApply) {
|
|
1786
|
+
if (shouldApply === void 0) { shouldApply = false; }
|
|
1787
|
+
if (!Array.isArray(tracks)) {
|
|
1788
|
+
throw new Error("Invalid `setPreferredAudioTracks` argument. " +
|
|
1789
|
+
"Should have been an Array.");
|
|
1464
1790
|
}
|
|
1465
|
-
|
|
1466
|
-
var
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
repsId = arg;
|
|
1470
|
-
periodId = undefined;
|
|
1791
|
+
this._priv_preferredAudioTracks = tracks;
|
|
1792
|
+
var contentInfos = this._priv_contentInfos;
|
|
1793
|
+
if (!isNullOrUndefined(contentInfos === null || contentInfos === void 0 ? void 0 : contentInfos.trackChoiceManager)) {
|
|
1794
|
+
contentInfos === null || contentInfos === void 0 ? void 0 : contentInfos.trackChoiceManager.setPreferredAudioTracks(tracks, shouldApply);
|
|
1471
1795
|
}
|
|
1472
|
-
else {
|
|
1473
|
-
|
|
1474
|
-
periodId = arg.periodId;
|
|
1475
|
-
switchingMode = arg.switchingMode;
|
|
1796
|
+
else if (!isNullOrUndefined(contentInfos === null || contentInfos === void 0 ? void 0 : contentInfos.mediaElementTrackChoiceManager)) {
|
|
1797
|
+
contentInfos === null || contentInfos === void 0 ? void 0 : contentInfos.mediaElementTrackChoiceManager.setPreferredAudioTracks(tracks, shouldApply);
|
|
1476
1798
|
}
|
|
1477
|
-
return this._priv_callTracksStoreGetterSetter(periodId, undefined, function (tcm, periodRef) {
|
|
1478
|
-
return tcm.lockAudioRepresentations(periodRef, { representations: repsId, switchingMode: switchingMode });
|
|
1479
|
-
});
|
|
1480
1799
|
};
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1800
|
+
/**
|
|
1801
|
+
* Set the list of preferred text tracks, in preference order.
|
|
1802
|
+
* @param {Array.<Object>} tracks
|
|
1803
|
+
* @param {boolean} shouldApply - `true` if those preferences should be
|
|
1804
|
+
* applied on the currently loaded Periods. `false` if it should only
|
|
1805
|
+
* be applied to new content.
|
|
1806
|
+
*/
|
|
1807
|
+
Player.prototype.setPreferredTextTracks = function (tracks, shouldApply) {
|
|
1808
|
+
if (shouldApply === void 0) { shouldApply = false; }
|
|
1809
|
+
if (!Array.isArray(tracks)) {
|
|
1810
|
+
throw new Error("Invalid `setPreferredTextTracks` argument. " +
|
|
1811
|
+
"Should have been an Array.");
|
|
1488
1812
|
}
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
return null;
|
|
1813
|
+
this._priv_preferredTextTracks = tracks;
|
|
1814
|
+
var contentInfos = this._priv_contentInfos;
|
|
1815
|
+
if (!isNullOrUndefined(contentInfos === null || contentInfos === void 0 ? void 0 : contentInfos.trackChoiceManager)) {
|
|
1816
|
+
contentInfos === null || contentInfos === void 0 ? void 0 : contentInfos.trackChoiceManager.setPreferredTextTracks(tracks, shouldApply);
|
|
1494
1817
|
}
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
return null;
|
|
1818
|
+
else if (!isNullOrUndefined(contentInfos === null || contentInfos === void 0 ? void 0 : contentInfos.mediaElementTrackChoiceManager)) {
|
|
1819
|
+
contentInfos === null || contentInfos === void 0 ? void 0 : contentInfos.mediaElementTrackChoiceManager.setPreferredTextTracks(tracks, shouldApply);
|
|
1498
1820
|
}
|
|
1499
|
-
return this._priv_callTracksStoreGetterSetter(periodId, null, function (tcm, periodRef) { return tcm.getLockedAudioRepresentations(periodRef); });
|
|
1500
1821
|
};
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1822
|
+
/**
|
|
1823
|
+
* Set the list of preferred text tracks, in preference order.
|
|
1824
|
+
* @param {Array.<Object>} tracks
|
|
1825
|
+
* @param {boolean} shouldApply - `true` if those preferences should be
|
|
1826
|
+
* applied on the currently loaded Period. `false` if it should only
|
|
1827
|
+
* be applied to new content.
|
|
1828
|
+
*/
|
|
1829
|
+
Player.prototype.setPreferredVideoTracks = function (tracks, shouldApply) {
|
|
1830
|
+
if (shouldApply === void 0) { shouldApply = false; }
|
|
1831
|
+
if (!Array.isArray(tracks)) {
|
|
1832
|
+
throw new Error("Invalid `setPreferredVideoTracks` argument. " +
|
|
1833
|
+
"Should have been an Array.");
|
|
1504
1834
|
}
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1835
|
+
this._priv_preferredVideoTracks = tracks;
|
|
1836
|
+
var contentInfos = this._priv_contentInfos;
|
|
1837
|
+
if (!isNullOrUndefined(contentInfos === null || contentInfos === void 0 ? void 0 : contentInfos.trackChoiceManager)) {
|
|
1838
|
+
contentInfos === null || contentInfos === void 0 ? void 0 : contentInfos.trackChoiceManager.setPreferredVideoTracks(tracks, shouldApply);
|
|
1839
|
+
}
|
|
1840
|
+
else if (!isNullOrUndefined(contentInfos === null || contentInfos === void 0 ? void 0 : contentInfos.mediaElementTrackChoiceManager)) {
|
|
1841
|
+
contentInfos === null || contentInfos === void 0 ? void 0 : contentInfos.mediaElementTrackChoiceManager.setPreferredVideoTracks(tracks, shouldApply);
|
|
1508
1842
|
}
|
|
1509
|
-
return this._priv_callTracksStoreGetterSetter(periodId, undefined, function (tcm, periodRef) { return tcm.unlockVideoRepresentations(periodRef); });
|
|
1510
1843
|
};
|
|
1511
|
-
|
|
1844
|
+
/**
|
|
1845
|
+
* @returns {Array.<Object>|null}
|
|
1846
|
+
* @deprecated
|
|
1847
|
+
*/
|
|
1848
|
+
Player.prototype.getImageTrackData = function () {
|
|
1849
|
+
warnOnce("`getImageTrackData` is deprecated." +
|
|
1850
|
+
"Please use the `parseBifThumbnails` tool instead.");
|
|
1512
1851
|
if (this._priv_contentInfos === null) {
|
|
1513
|
-
return;
|
|
1514
|
-
}
|
|
1515
|
-
var isDirectFile = this._priv_contentInfos.isDirectFile;
|
|
1516
|
-
if (isDirectFile) {
|
|
1517
|
-
return;
|
|
1852
|
+
return null;
|
|
1518
1853
|
}
|
|
1519
|
-
|
|
1854
|
+
/* eslint-disable import/no-deprecated */
|
|
1855
|
+
return this._priv_contentInfos.thumbnails;
|
|
1856
|
+
/* eslint-enable import/no-deprecated */
|
|
1520
1857
|
};
|
|
1521
1858
|
/**
|
|
1522
1859
|
* Get minimum seek-able position.
|
|
@@ -1558,12 +1895,6 @@ var Player = /** @class */ (function (_super) {
|
|
|
1558
1895
|
}
|
|
1559
1896
|
return null;
|
|
1560
1897
|
};
|
|
1561
|
-
// ---- Undocumented Private methods. ----
|
|
1562
|
-
//
|
|
1563
|
-
// Those methods are just here either to allow some tools relying on the
|
|
1564
|
-
// RxPlayer instance to work or to improve the RxPlayer's demo.
|
|
1565
|
-
//
|
|
1566
|
-
// They should not be used by any external code.
|
|
1567
1898
|
/**
|
|
1568
1899
|
* /!\ For demo use only! Do not touch!
|
|
1569
1900
|
*
|
|
@@ -1585,58 +1916,16 @@ var Player = /** @class */ (function (_super) {
|
|
|
1585
1916
|
}
|
|
1586
1917
|
return null;
|
|
1587
1918
|
};
|
|
1588
|
-
/**
|
|
1589
|
-
* /!\ For tools use only! Do not touch!
|
|
1590
|
-
*
|
|
1591
|
-
* Returns manifest/playlist object.
|
|
1592
|
-
* null if the player is STOPPED.
|
|
1593
|
-
* @returns {Manifest|null} - The current Manifest (`null` when not known).
|
|
1594
|
-
*/
|
|
1595
|
-
// TODO remove the need for that public method
|
|
1596
|
-
Player.prototype.__priv_getManifest = function () {
|
|
1597
|
-
if (this._priv_contentInfos === null) {
|
|
1598
|
-
return null;
|
|
1599
|
-
}
|
|
1600
|
-
return this._priv_contentInfos.manifest;
|
|
1601
|
-
};
|
|
1602
|
-
// TODO remove the need for that public method
|
|
1603
|
-
Player.prototype.__priv_getCurrentAdaptation = function () {
|
|
1604
|
-
if (this._priv_contentInfos === null) {
|
|
1605
|
-
return null;
|
|
1606
|
-
}
|
|
1607
|
-
var _a = this._priv_contentInfos, currentPeriod = _a.currentPeriod, activeAdaptations = _a.activeAdaptations;
|
|
1608
|
-
if (currentPeriod === null ||
|
|
1609
|
-
activeAdaptations === null ||
|
|
1610
|
-
isNullOrUndefined(activeAdaptations[currentPeriod.id])) {
|
|
1611
|
-
return null;
|
|
1612
|
-
}
|
|
1613
|
-
return activeAdaptations[currentPeriod.id];
|
|
1614
|
-
};
|
|
1615
|
-
// TODO remove the need for that public method
|
|
1616
|
-
Player.prototype.__priv_getCurrentRepresentations = function () {
|
|
1617
|
-
if (this._priv_contentInfos === null) {
|
|
1618
|
-
return null;
|
|
1619
|
-
}
|
|
1620
|
-
var _a = this._priv_contentInfos, currentPeriod = _a.currentPeriod, activeRepresentations = _a.activeRepresentations;
|
|
1621
|
-
if (currentPeriod === null ||
|
|
1622
|
-
activeRepresentations === null ||
|
|
1623
|
-
isNullOrUndefined(activeRepresentations[currentPeriod.id])) {
|
|
1624
|
-
return null;
|
|
1625
|
-
}
|
|
1626
|
-
return activeRepresentations[currentPeriod.id];
|
|
1627
|
-
};
|
|
1628
|
-
// ---- Private methods ----
|
|
1629
1919
|
/**
|
|
1630
1920
|
* Reset all state properties relative to a playing content.
|
|
1631
1921
|
*/
|
|
1632
1922
|
Player.prototype._priv_cleanUpCurrentContentState = function () {
|
|
1633
1923
|
var _this = this;
|
|
1634
|
-
var _a, _b
|
|
1924
|
+
var _a, _b;
|
|
1635
1925
|
log.debug("Locking `contentLock` to clean-up the current content.");
|
|
1636
1926
|
// lock playback of new contents while cleaning up is pending
|
|
1637
1927
|
this._priv_contentLock.setValue(true);
|
|
1638
|
-
(_b = (_a = this._priv_contentInfos) === null || _a === void 0 ? void 0 : _a.
|
|
1639
|
-
(_d = (_c = this._priv_contentInfos) === null || _c === void 0 ? void 0 : _c.mediaElementTracksStore) === null || _d === void 0 ? void 0 : _d.dispose();
|
|
1928
|
+
(_b = (_a = this._priv_contentInfos) === null || _a === void 0 ? void 0 : _a.mediaElementTrackChoiceManager) === null || _b === void 0 ? void 0 : _b.dispose();
|
|
1640
1929
|
this._priv_contentInfos = null;
|
|
1641
1930
|
this._priv_contentEventsMemory = {};
|
|
1642
1931
|
// DRM-related clean-up
|
|
@@ -1676,29 +1965,29 @@ var Player = /** @class */ (function (_super) {
|
|
|
1676
1965
|
contentInfos.manifest = manifest;
|
|
1677
1966
|
var cancelSignal = contentInfos.currentContentCanceller.signal;
|
|
1678
1967
|
this._priv_reloadingMetadata.manifest = manifest;
|
|
1679
|
-
contentInfos.
|
|
1968
|
+
var initialAudioTrack = contentInfos.initialAudioTrack, initialTextTrack = contentInfos.initialTextTrack;
|
|
1969
|
+
contentInfos.trackChoiceManager = new TrackChoiceManager({
|
|
1680
1970
|
preferTrickModeTracks: this._priv_preferTrickModeTracks,
|
|
1681
|
-
defaultAudioTrackSwitchingMode: contentInfos.defaultAudioTrackSwitchingMode,
|
|
1682
|
-
});
|
|
1683
|
-
contentInfos.tracksStore.addEventListener("newAvailablePeriods", function (p) {
|
|
1684
|
-
_this.trigger("newAvailablePeriods", p);
|
|
1685
1971
|
});
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
contentInfos.
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1972
|
+
var preferredAudioTracks = initialAudioTrack === undefined ?
|
|
1973
|
+
this._priv_preferredAudioTracks :
|
|
1974
|
+
[initialAudioTrack];
|
|
1975
|
+
contentInfos.trackChoiceManager.setPreferredAudioTracks(preferredAudioTracks, true);
|
|
1976
|
+
var preferredTextTracks = initialTextTrack === undefined ?
|
|
1977
|
+
this._priv_preferredTextTracks :
|
|
1978
|
+
[initialTextTrack];
|
|
1979
|
+
contentInfos.trackChoiceManager.setPreferredTextTracks(preferredTextTracks, true);
|
|
1980
|
+
contentInfos.trackChoiceManager
|
|
1981
|
+
.setPreferredVideoTracks(this._priv_preferredVideoTracks, true);
|
|
1693
1982
|
manifest.addEventListener("manifestUpdate", function (updates) {
|
|
1694
1983
|
var _a, _b, _c;
|
|
1695
1984
|
// Update the tracks chosen if it changed
|
|
1696
|
-
if (
|
|
1697
|
-
contentInfos.
|
|
1985
|
+
if (contentInfos.trackChoiceManager !== null) {
|
|
1986
|
+
contentInfos.trackChoiceManager.update();
|
|
1698
1987
|
}
|
|
1699
1988
|
var currentPeriod = (_b = (_a = _this._priv_contentInfos) === null || _a === void 0 ? void 0 : _a.currentPeriod) !== null && _b !== void 0 ? _b : undefined;
|
|
1700
|
-
var
|
|
1701
|
-
if (currentPeriod === undefined || isNullOrUndefined(
|
|
1989
|
+
var trackChoiceManager = (_c = _this._priv_contentInfos) === null || _c === void 0 ? void 0 : _c.trackChoiceManager;
|
|
1990
|
+
if (currentPeriod === undefined || isNullOrUndefined(trackChoiceManager)) {
|
|
1702
1991
|
return;
|
|
1703
1992
|
}
|
|
1704
1993
|
for (var _i = 0, _d = updates.updatedPeriods; _i < _d.length; _i++) {
|
|
@@ -1707,15 +1996,11 @@ var Player = /** @class */ (function (_super) {
|
|
|
1707
1996
|
if (update.result.addedAdaptations.length > 0 ||
|
|
1708
1997
|
update.result.removedAdaptations.length > 0) {
|
|
1709
1998
|
// We might have new (or less) tracks, send events just to be sure
|
|
1710
|
-
var
|
|
1711
|
-
if (periodRef === undefined) {
|
|
1712
|
-
return;
|
|
1713
|
-
}
|
|
1714
|
-
var audioTracks = tracksStore.getAvailableAudioTracks(periodRef);
|
|
1999
|
+
var audioTracks = trackChoiceManager.getAvailableAudioTracks(currentPeriod);
|
|
1715
2000
|
_this._priv_triggerEventIfNotStopped("availableAudioTracksChange", audioTracks !== null && audioTracks !== void 0 ? audioTracks : [], cancelSignal);
|
|
1716
|
-
var textTracks =
|
|
2001
|
+
var textTracks = trackChoiceManager.getAvailableTextTracks(currentPeriod);
|
|
1717
2002
|
_this._priv_triggerEventIfNotStopped("availableTextTracksChange", textTracks !== null && textTracks !== void 0 ? textTracks : [], cancelSignal);
|
|
1718
|
-
var videoTracks =
|
|
2003
|
+
var videoTracks = trackChoiceManager.getAvailableVideoTracks(currentPeriod);
|
|
1719
2004
|
_this._priv_triggerEventIfNotStopped("availableVideoTracksChange", videoTracks !== null && videoTracks !== void 0 ? videoTracks : [], cancelSignal);
|
|
1720
2005
|
}
|
|
1721
2006
|
}
|
|
@@ -1731,7 +2016,7 @@ var Player = /** @class */ (function (_super) {
|
|
|
1731
2016
|
* @param {Object} periodInfo
|
|
1732
2017
|
*/
|
|
1733
2018
|
Player.prototype._priv_onActivePeriodChanged = function (contentInfos, _a) {
|
|
1734
|
-
var _b, _c, _d, _e, _f, _g;
|
|
2019
|
+
var _b, _c, _d, _e, _f, _g, _h, _j;
|
|
1735
2020
|
var period = _a.period;
|
|
1736
2021
|
if (contentInfos.contentId !== ((_b = this._priv_contentInfos) === null || _b === void 0 ? void 0 : _b.contentId)) {
|
|
1737
2022
|
return; // Event for another content
|
|
@@ -1740,35 +2025,41 @@ var Player = /** @class */ (function (_super) {
|
|
|
1740
2025
|
var cancelSignal = contentInfos.currentContentCanceller.signal;
|
|
1741
2026
|
if (this._priv_contentEventsMemory.periodChange !== period) {
|
|
1742
2027
|
this._priv_contentEventsMemory.periodChange = period;
|
|
1743
|
-
this._priv_triggerEventIfNotStopped("periodChange",
|
|
1744
|
-
end: period.end,
|
|
1745
|
-
id: period.id }, cancelSignal);
|
|
2028
|
+
this._priv_triggerEventIfNotStopped("periodChange", period, cancelSignal);
|
|
1746
2029
|
}
|
|
1747
2030
|
this._priv_triggerEventIfNotStopped("availableAudioTracksChange", this.getAvailableAudioTracks(), cancelSignal);
|
|
1748
2031
|
this._priv_triggerEventIfNotStopped("availableTextTracksChange", this.getAvailableTextTracks(), cancelSignal);
|
|
1749
2032
|
this._priv_triggerEventIfNotStopped("availableVideoTracksChange", this.getAvailableVideoTracks(), cancelSignal);
|
|
1750
|
-
var
|
|
1751
|
-
// Emit
|
|
1752
|
-
if (!isNullOrUndefined(
|
|
1753
|
-
var
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
var videoTrack = tracksStore.getChosenVideoTrack(periodRef);
|
|
1760
|
-
this._priv_triggerEventIfNotStopped("videoTrackChange", videoTrack, cancelSignal);
|
|
1761
|
-
}
|
|
2033
|
+
var trackChoiceManager = (_c = this._priv_contentInfos) === null || _c === void 0 ? void 0 : _c.trackChoiceManager;
|
|
2034
|
+
// Emit intial events for the Period
|
|
2035
|
+
if (!isNullOrUndefined(trackChoiceManager)) {
|
|
2036
|
+
var audioTrack = trackChoiceManager.getChosenAudioTrack(period);
|
|
2037
|
+
this._priv_triggerEventIfNotStopped("audioTrackChange", audioTrack, cancelSignal);
|
|
2038
|
+
var textTrack = trackChoiceManager.getChosenTextTrack(period);
|
|
2039
|
+
this._priv_triggerEventIfNotStopped("textTrackChange", textTrack, cancelSignal);
|
|
2040
|
+
var videoTrack = trackChoiceManager.getChosenVideoTrack(period);
|
|
2041
|
+
this._priv_triggerEventIfNotStopped("videoTrackChange", videoTrack, cancelSignal);
|
|
1762
2042
|
}
|
|
1763
2043
|
else {
|
|
1764
2044
|
this._priv_triggerEventIfNotStopped("audioTrackChange", null, cancelSignal);
|
|
1765
2045
|
this._priv_triggerEventIfNotStopped("textTrackChange", null, cancelSignal);
|
|
1766
2046
|
this._priv_triggerEventIfNotStopped("videoTrackChange", null, cancelSignal);
|
|
1767
2047
|
}
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
2048
|
+
this._priv_triggerAvailableBitratesChangeEvent("availableAudioBitratesChange", this.getAvailableAudioBitrates(), cancelSignal);
|
|
2049
|
+
if (contentInfos.currentContentCanceller.isUsed()) {
|
|
2050
|
+
return;
|
|
2051
|
+
}
|
|
2052
|
+
this._priv_triggerAvailableBitratesChangeEvent("availableVideoBitratesChange", this.getAvailableVideoBitrates(), cancelSignal);
|
|
2053
|
+
if (contentInfos.currentContentCanceller.isUsed()) {
|
|
2054
|
+
return;
|
|
2055
|
+
}
|
|
2056
|
+
var audioBitrate = (_f = (_e = (_d = this._priv_getCurrentRepresentations()) === null || _d === void 0 ? void 0 : _d.audio) === null || _e === void 0 ? void 0 : _e.bitrate) !== null && _f !== void 0 ? _f : -1;
|
|
2057
|
+
this._priv_triggerCurrentBitrateChangeEvent("audioBitrateChange", audioBitrate, cancelSignal);
|
|
2058
|
+
if (contentInfos.currentContentCanceller.isUsed()) {
|
|
2059
|
+
return;
|
|
2060
|
+
}
|
|
2061
|
+
var videoBitrate = (_j = (_h = (_g = this._priv_getCurrentRepresentations()) === null || _g === void 0 ? void 0 : _g.video) === null || _h === void 0 ? void 0 : _h.bitrate) !== null && _j !== void 0 ? _j : -1;
|
|
2062
|
+
this._priv_triggerCurrentBitrateChangeEvent("videoBitrateChange", videoBitrate, cancelSignal);
|
|
1772
2063
|
};
|
|
1773
2064
|
/**
|
|
1774
2065
|
* Triggered each times a new "PeriodStream" is ready.
|
|
@@ -1781,22 +2072,48 @@ var Player = /** @class */ (function (_super) {
|
|
|
1781
2072
|
if (contentInfos.contentId !== ((_a = this._priv_contentInfos) === null || _a === void 0 ? void 0 : _a.contentId)) {
|
|
1782
2073
|
return; // Event for another content
|
|
1783
2074
|
}
|
|
1784
|
-
var type = value.type,
|
|
1785
|
-
var
|
|
2075
|
+
var type = value.type, period = value.period, adaptationRef = value.adaptationRef;
|
|
2076
|
+
var trackChoiceManager = contentInfos.trackChoiceManager;
|
|
1786
2077
|
switch (type) {
|
|
1787
2078
|
case "video":
|
|
2079
|
+
if (isNullOrUndefined(trackChoiceManager)) {
|
|
2080
|
+
log.error("API: TrackChoiceManager not instanciated for a new video period");
|
|
2081
|
+
adaptationRef.setValue(null);
|
|
2082
|
+
}
|
|
2083
|
+
else {
|
|
2084
|
+
trackChoiceManager.addPeriod(type, period, adaptationRef);
|
|
2085
|
+
trackChoiceManager.setInitialVideoTrack(period);
|
|
2086
|
+
}
|
|
2087
|
+
break;
|
|
1788
2088
|
case "audio":
|
|
2089
|
+
if (isNullOrUndefined(trackChoiceManager)) {
|
|
2090
|
+
log.error("API: TrackChoiceManager not instanciated for a new ".concat(type, " period"));
|
|
2091
|
+
adaptationRef.setValue(null);
|
|
2092
|
+
}
|
|
2093
|
+
else {
|
|
2094
|
+
trackChoiceManager.addPeriod(type, period, adaptationRef);
|
|
2095
|
+
trackChoiceManager.setInitialAudioTrack(period);
|
|
2096
|
+
}
|
|
2097
|
+
break;
|
|
1789
2098
|
case "text":
|
|
1790
|
-
if (isNullOrUndefined(
|
|
1791
|
-
log.error("API:
|
|
2099
|
+
if (isNullOrUndefined(trackChoiceManager)) {
|
|
2100
|
+
log.error("API: TrackChoiceManager not instanciated for a new ".concat(type, " period"));
|
|
1792
2101
|
adaptationRef.setValue(null);
|
|
1793
2102
|
}
|
|
1794
2103
|
else {
|
|
1795
|
-
|
|
2104
|
+
trackChoiceManager.addPeriod(type, period, adaptationRef);
|
|
2105
|
+
trackChoiceManager.setInitialTextTrack(period);
|
|
1796
2106
|
}
|
|
1797
2107
|
break;
|
|
1798
2108
|
default:
|
|
1799
|
-
|
|
2109
|
+
var adaptations = period.adaptations[type];
|
|
2110
|
+
if (!isNullOrUndefined(adaptations) && adaptations.length > 0) {
|
|
2111
|
+
adaptationRef.setValue(adaptations[0]);
|
|
2112
|
+
}
|
|
2113
|
+
else {
|
|
2114
|
+
adaptationRef.setValue(null);
|
|
2115
|
+
}
|
|
2116
|
+
break;
|
|
1800
2117
|
}
|
|
1801
2118
|
};
|
|
1802
2119
|
/**
|
|
@@ -1810,14 +2127,14 @@ var Player = /** @class */ (function (_super) {
|
|
|
1810
2127
|
return; // Event for another content
|
|
1811
2128
|
}
|
|
1812
2129
|
var type = value.type, period = value.period;
|
|
1813
|
-
var
|
|
1814
|
-
// Clean-up track
|
|
2130
|
+
var trackChoiceManager = contentInfos.trackChoiceManager;
|
|
2131
|
+
// Clean-up track choice from TrackChoiceManager
|
|
1815
2132
|
switch (type) {
|
|
1816
2133
|
case "audio":
|
|
1817
2134
|
case "text":
|
|
1818
2135
|
case "video":
|
|
1819
|
-
if (!isNullOrUndefined(
|
|
1820
|
-
|
|
2136
|
+
if (!isNullOrUndefined(trackChoiceManager)) {
|
|
2137
|
+
trackChoiceManager.removePeriod(type, period);
|
|
1821
2138
|
}
|
|
1822
2139
|
break;
|
|
1823
2140
|
}
|
|
@@ -1866,27 +2183,27 @@ var Player = /** @class */ (function (_super) {
|
|
|
1866
2183
|
else {
|
|
1867
2184
|
activePeriodAdaptations[type] = adaptation;
|
|
1868
2185
|
}
|
|
1869
|
-
var
|
|
2186
|
+
var trackChoiceManager = contentInfos.trackChoiceManager;
|
|
1870
2187
|
var cancelSignal = contentInfos.currentContentCanceller.signal;
|
|
1871
|
-
if (
|
|
2188
|
+
if (trackChoiceManager !== null &&
|
|
1872
2189
|
currentPeriod !== null && !isNullOrUndefined(period) &&
|
|
1873
2190
|
period.id === currentPeriod.id) {
|
|
1874
|
-
var periodRef = tracksStore.getPeriodObjectFromPeriod(period);
|
|
1875
|
-
if (periodRef === undefined) {
|
|
1876
|
-
return;
|
|
1877
|
-
}
|
|
1878
2191
|
switch (type) {
|
|
1879
2192
|
case "audio":
|
|
1880
|
-
var audioTrack =
|
|
2193
|
+
var audioTrack = trackChoiceManager.getChosenAudioTrack(currentPeriod);
|
|
1881
2194
|
this._priv_triggerEventIfNotStopped("audioTrackChange", audioTrack, cancelSignal);
|
|
2195
|
+
var availableAudioBitrates = this.getAvailableAudioBitrates();
|
|
2196
|
+
this._priv_triggerAvailableBitratesChangeEvent("availableAudioBitratesChange", availableAudioBitrates, cancelSignal);
|
|
1882
2197
|
break;
|
|
1883
2198
|
case "text":
|
|
1884
|
-
var textTrack =
|
|
2199
|
+
var textTrack = trackChoiceManager.getChosenTextTrack(currentPeriod);
|
|
1885
2200
|
this._priv_triggerEventIfNotStopped("textTrackChange", textTrack, cancelSignal);
|
|
1886
2201
|
break;
|
|
1887
2202
|
case "video":
|
|
1888
|
-
var videoTrack =
|
|
2203
|
+
var videoTrack = trackChoiceManager.getChosenVideoTrack(currentPeriod);
|
|
1889
2204
|
this._priv_triggerEventIfNotStopped("videoTrackChange", videoTrack, cancelSignal);
|
|
2205
|
+
var availableVideoBitrates = this.getAvailableVideoBitrates();
|
|
2206
|
+
this._priv_triggerAvailableBitratesChangeEvent("availableVideoBitratesChange", availableVideoBitrates, cancelSignal);
|
|
1890
2207
|
break;
|
|
1891
2208
|
}
|
|
1892
2209
|
}
|
|
@@ -1901,7 +2218,7 @@ var Player = /** @class */ (function (_super) {
|
|
|
1901
2218
|
*/
|
|
1902
2219
|
Player.prototype._priv_onRepresentationChange = function (contentInfos, _a) {
|
|
1903
2220
|
var _b;
|
|
1904
|
-
var _c;
|
|
2221
|
+
var _c, _d;
|
|
1905
2222
|
var type = _a.type, period = _a.period, representation = _a.representation;
|
|
1906
2223
|
if (contentInfos.contentId !== ((_c = this._priv_contentInfos) === null || _c === void 0 ? void 0 : _c.contentId)) {
|
|
1907
2224
|
return; // Event for another content
|
|
@@ -1918,15 +2235,16 @@ var Player = /** @class */ (function (_super) {
|
|
|
1918
2235
|
else {
|
|
1919
2236
|
activePeriodRepresentations[type] = representation;
|
|
1920
2237
|
}
|
|
2238
|
+
var bitrate = (_d = representation === null || representation === void 0 ? void 0 : representation.bitrate) !== null && _d !== void 0 ? _d : -1;
|
|
1921
2239
|
if (!isNullOrUndefined(period) &&
|
|
1922
2240
|
currentPeriod !== null &&
|
|
1923
2241
|
currentPeriod.id === period.id) {
|
|
1924
2242
|
var cancelSignal = this._priv_contentInfos.currentContentCanceller.signal;
|
|
1925
2243
|
if (type === "video") {
|
|
1926
|
-
this.
|
|
2244
|
+
this._priv_triggerCurrentBitrateChangeEvent("videoBitrateChange", bitrate, cancelSignal);
|
|
1927
2245
|
}
|
|
1928
2246
|
else if (type === "audio") {
|
|
1929
|
-
this.
|
|
2247
|
+
this._priv_triggerCurrentBitrateChangeEvent("audioBitrateChange", bitrate, cancelSignal);
|
|
1930
2248
|
}
|
|
1931
2249
|
}
|
|
1932
2250
|
};
|
|
@@ -1937,14 +2255,22 @@ var Player = /** @class */ (function (_super) {
|
|
|
1937
2255
|
*
|
|
1938
2256
|
* @param {Object} value
|
|
1939
2257
|
*/
|
|
1940
|
-
Player.prototype.
|
|
2258
|
+
Player.prototype._priv_onBitrateEstimationChange = function (_a) {
|
|
1941
2259
|
var type = _a.type, bitrate = _a.bitrate;
|
|
1942
2260
|
if (bitrate !== undefined) {
|
|
1943
2261
|
this._priv_bitrateInfos.lastBitrates[type] = bitrate;
|
|
1944
2262
|
}
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
2263
|
+
this.trigger("bitrateEstimationChange", { type: type, bitrate: bitrate });
|
|
2264
|
+
};
|
|
2265
|
+
/**
|
|
2266
|
+
* Triggered each time a textTrack is added to the video DOM Element.
|
|
2267
|
+
*
|
|
2268
|
+
* Trigger the right Player Event.
|
|
2269
|
+
*
|
|
2270
|
+
* @param {Array.<TextTrackElement>} tracks
|
|
2271
|
+
*/
|
|
2272
|
+
Player.prototype._priv_onNativeTextTracksNext = function (tracks) {
|
|
2273
|
+
this.trigger("nativeTextTracksChange", tracks);
|
|
1948
2274
|
};
|
|
1949
2275
|
/**
|
|
1950
2276
|
* Triggered each time the player state updates.
|
|
@@ -1983,7 +2309,7 @@ var Player = /** @class */ (function (_super) {
|
|
|
1983
2309
|
position: observation.position,
|
|
1984
2310
|
duration: observation.duration,
|
|
1985
2311
|
playbackRate: observation.playbackRate,
|
|
1986
|
-
|
|
2312
|
+
maximumBufferTime: maximumPosition,
|
|
1987
2313
|
// TODO bufferGap may be undefined
|
|
1988
2314
|
bufferGap: observation.bufferGap === undefined ||
|
|
1989
2315
|
!isFinite(observation.bufferGap) ?
|
|
@@ -2008,6 +2334,47 @@ var Player = /** @class */ (function (_super) {
|
|
|
2008
2334
|
}
|
|
2009
2335
|
this.trigger("positionUpdate", positionData);
|
|
2010
2336
|
};
|
|
2337
|
+
/**
|
|
2338
|
+
* Trigger one of the "availableBitratesChange" event only if it changed from
|
|
2339
|
+
* the previously stored value.
|
|
2340
|
+
* @param {string} event
|
|
2341
|
+
* @param {Array.<number>} newVal
|
|
2342
|
+
* @param {Object} currentContentCancelSignal
|
|
2343
|
+
*/
|
|
2344
|
+
Player.prototype._priv_triggerAvailableBitratesChangeEvent = function (event, newVal, currentContentCancelSignal) {
|
|
2345
|
+
var prevVal = this._priv_contentEventsMemory[event];
|
|
2346
|
+
if (!currentContentCancelSignal.isCancelled() &&
|
|
2347
|
+
(prevVal === undefined || !areArraysOfNumbersEqual(newVal, prevVal))) {
|
|
2348
|
+
this._priv_contentEventsMemory[event] = newVal;
|
|
2349
|
+
this.trigger(event, newVal);
|
|
2350
|
+
}
|
|
2351
|
+
};
|
|
2352
|
+
/**
|
|
2353
|
+
* Trigger one of the "bitrateChange" event only if it changed from the
|
|
2354
|
+
* previously stored value.
|
|
2355
|
+
* @param {string} event
|
|
2356
|
+
* @param {number} newVal
|
|
2357
|
+
* @param {Object} currentContentCancelSignal
|
|
2358
|
+
*/
|
|
2359
|
+
Player.prototype._priv_triggerCurrentBitrateChangeEvent = function (event, newVal, currentContentCancelSignal) {
|
|
2360
|
+
if (!currentContentCancelSignal.isCancelled() &&
|
|
2361
|
+
newVal !== this._priv_contentEventsMemory[event]) {
|
|
2362
|
+
this._priv_contentEventsMemory[event] = newVal;
|
|
2363
|
+
this.trigger(event, newVal);
|
|
2364
|
+
}
|
|
2365
|
+
};
|
|
2366
|
+
Player.prototype._priv_getCurrentRepresentations = function () {
|
|
2367
|
+
if (this._priv_contentInfos === null) {
|
|
2368
|
+
return null;
|
|
2369
|
+
}
|
|
2370
|
+
var _a = this._priv_contentInfos, currentPeriod = _a.currentPeriod, activeRepresentations = _a.activeRepresentations;
|
|
2371
|
+
if (currentPeriod === null ||
|
|
2372
|
+
activeRepresentations === null ||
|
|
2373
|
+
isNullOrUndefined(activeRepresentations[currentPeriod.id])) {
|
|
2374
|
+
return null;
|
|
2375
|
+
}
|
|
2376
|
+
return activeRepresentations[currentPeriod.id];
|
|
2377
|
+
};
|
|
2011
2378
|
/**
|
|
2012
2379
|
* @param {string} evt
|
|
2013
2380
|
* @param {*} arg
|
|
@@ -2019,67 +2386,58 @@ var Player = /** @class */ (function (_super) {
|
|
|
2019
2386
|
}
|
|
2020
2387
|
};
|
|
2021
2388
|
/**
|
|
2389
|
+
* @param {Object} defaultAudioTrack
|
|
2390
|
+
* @param {Object} defaultTextTrack
|
|
2022
2391
|
* @param {Object} cancelSignal
|
|
2023
2392
|
* @returns {Object}
|
|
2024
2393
|
*/
|
|
2025
|
-
Player.prototype.
|
|
2394
|
+
Player.prototype._priv_initializeMediaElementTrackChoiceManager = function (defaultAudioTrack, defaultTextTrack, cancelSignal) {
|
|
2026
2395
|
var _this = this;
|
|
2027
2396
|
var _a, _b, _c;
|
|
2028
|
-
assert(features.directfile !== null, "Initializing `
|
|
2029
|
-
assert(this.videoElement !== null, "Initializing `
|
|
2030
|
-
var
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2397
|
+
assert(features.directfile !== null, "Initializing `MediaElementTrackChoiceManager` without Directfile feature");
|
|
2398
|
+
assert(this.videoElement !== null, "Initializing `MediaElementTrackChoiceManager` on a disposed RxPlayer");
|
|
2399
|
+
var mediaElementTrackChoiceManager = new features.directfile.mediaElementTrackChoiceManager(this.videoElement);
|
|
2400
|
+
var preferredAudioTracks = defaultAudioTrack === undefined ?
|
|
2401
|
+
this._priv_preferredAudioTracks :
|
|
2402
|
+
[defaultAudioTrack];
|
|
2403
|
+
mediaElementTrackChoiceManager.setPreferredAudioTracks(preferredAudioTracks, true);
|
|
2404
|
+
var preferredTextTracks = defaultTextTrack === undefined ?
|
|
2405
|
+
this._priv_preferredTextTracks :
|
|
2406
|
+
[defaultTextTrack];
|
|
2407
|
+
mediaElementTrackChoiceManager.setPreferredTextTracks(preferredTextTracks, true);
|
|
2408
|
+
mediaElementTrackChoiceManager
|
|
2409
|
+
.setPreferredVideoTracks(this._priv_preferredVideoTracks, true);
|
|
2410
|
+
this._priv_triggerEventIfNotStopped("availableAudioTracksChange", mediaElementTrackChoiceManager.getAvailableAudioTracks(), cancelSignal);
|
|
2411
|
+
this._priv_triggerEventIfNotStopped("availableVideoTracksChange", mediaElementTrackChoiceManager.getAvailableVideoTracks(), cancelSignal);
|
|
2412
|
+
this._priv_triggerEventIfNotStopped("availableTextTracksChange", mediaElementTrackChoiceManager.getAvailableTextTracks(), cancelSignal);
|
|
2413
|
+
this._priv_triggerEventIfNotStopped("audioTrackChange", (_a = mediaElementTrackChoiceManager.getChosenAudioTrack()) !== null && _a !== void 0 ? _a : null, cancelSignal);
|
|
2414
|
+
this._priv_triggerEventIfNotStopped("textTrackChange", (_b = mediaElementTrackChoiceManager.getChosenTextTrack()) !== null && _b !== void 0 ? _b : null, cancelSignal);
|
|
2415
|
+
this._priv_triggerEventIfNotStopped("videoTrackChange", (_c = mediaElementTrackChoiceManager.getChosenVideoTrack()) !== null && _c !== void 0 ? _c : null, cancelSignal);
|
|
2416
|
+
mediaElementTrackChoiceManager
|
|
2038
2417
|
.addEventListener("availableVideoTracksChange", function (val) {
|
|
2039
2418
|
return _this.trigger("availableVideoTracksChange", val);
|
|
2040
2419
|
});
|
|
2041
|
-
|
|
2420
|
+
mediaElementTrackChoiceManager
|
|
2042
2421
|
.addEventListener("availableAudioTracksChange", function (val) {
|
|
2043
2422
|
return _this.trigger("availableAudioTracksChange", val);
|
|
2044
2423
|
});
|
|
2045
|
-
|
|
2424
|
+
mediaElementTrackChoiceManager
|
|
2046
2425
|
.addEventListener("availableTextTracksChange", function (val) {
|
|
2047
2426
|
return _this.trigger("availableTextTracksChange", val);
|
|
2048
2427
|
});
|
|
2049
|
-
|
|
2428
|
+
mediaElementTrackChoiceManager
|
|
2050
2429
|
.addEventListener("audioTrackChange", function (val) {
|
|
2051
2430
|
return _this.trigger("audioTrackChange", val);
|
|
2052
2431
|
});
|
|
2053
|
-
|
|
2432
|
+
mediaElementTrackChoiceManager
|
|
2054
2433
|
.addEventListener("videoTrackChange", function (val) {
|
|
2055
2434
|
return _this.trigger("videoTrackChange", val);
|
|
2056
2435
|
});
|
|
2057
|
-
|
|
2436
|
+
mediaElementTrackChoiceManager
|
|
2058
2437
|
.addEventListener("textTrackChange", function (val) {
|
|
2059
2438
|
return _this.trigger("textTrackChange", val);
|
|
2060
2439
|
});
|
|
2061
|
-
return
|
|
2062
|
-
};
|
|
2063
|
-
Player.prototype._priv_callTracksStoreGetterSetter = function (periodId, defaultValue, cb) {
|
|
2064
|
-
var _a, _b;
|
|
2065
|
-
if (this._priv_contentInfos === null ||
|
|
2066
|
-
this._priv_contentInfos.tracksStore === null) {
|
|
2067
|
-
log.warn("API: Trying to call track API too soon");
|
|
2068
|
-
return defaultValue;
|
|
2069
|
-
}
|
|
2070
|
-
var tracksStore = this._priv_contentInfos.tracksStore;
|
|
2071
|
-
var currentPeriod = (_b = (_a = this._priv_contentInfos) === null || _a === void 0 ? void 0 : _a.currentPeriod) !== null && _b !== void 0 ? _b : undefined;
|
|
2072
|
-
var wantedPeriodId = periodId !== null && periodId !== void 0 ? periodId : currentPeriod === null || currentPeriod === void 0 ? void 0 : currentPeriod.id;
|
|
2073
|
-
if (wantedPeriodId === undefined) {
|
|
2074
|
-
return defaultValue;
|
|
2075
|
-
}
|
|
2076
|
-
var periodRef = wantedPeriodId === (currentPeriod === null || currentPeriod === void 0 ? void 0 : currentPeriod.id) ?
|
|
2077
|
-
tracksStore.getPeriodObjectFromPeriod(currentPeriod) :
|
|
2078
|
-
tracksStore.getPeriodObjectFromId(wantedPeriodId);
|
|
2079
|
-
if (periodRef === undefined) {
|
|
2080
|
-
return defaultValue;
|
|
2081
|
-
}
|
|
2082
|
-
return cb(tracksStore, periodRef);
|
|
2440
|
+
return mediaElementTrackChoiceManager;
|
|
2083
2441
|
};
|
|
2084
2442
|
return Player;
|
|
2085
2443
|
}(EventEmitter));
|