rx-player 3.33.0 → 3.33.1
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 +13 -0
- package/VERSION +1 -1
- package/dist/_esm5.processed/core/api/public_api.js +2 -2
- package/dist/_esm5.processed/manifest/manifest.js +1 -0
- package/dist/_esm5.processed/utils/retry_promise_with_backoff.d.ts +11 -0
- package/dist/_esm5.processed/utils/retry_promise_with_backoff.js +18 -4
- package/dist/mpd-parser.wasm +0 -0
- package/dist/rx-player.d.ts +1 -1
- package/dist/rx-player.js +24 -9
- package/dist/rx-player.min.d.ts +1 -1
- package/dist/rx-player.min.js +1 -1
- package/package.json +6 -6
- package/.editorconfig +0 -22
- package/.eslintrc.js +0 -406
- package/.github/workflows/checks.yml +0 -101
- package/.github/workflows/perfs.yml +0 -22
- package/.github/workflows/sonarcloud_analysis.yml +0 -20
- package/CONTRIBUTING.md +0 -272
- package/FILES.md +0 -283
- package/jest.config.js +0 -73
- package/manifest.mpd +0 -149
- package/scripts/README.md +0 -11
- package/scripts/build/constants.d.ts +0 -53
- package/scripts/build/generate_build.js +0 -190
- package/scripts/build/templates/experimental/features/index.d.ts +0 -16
- package/scripts/build/templates/experimental/features/index.js +0 -16
- package/scripts/build/templates/experimental/index.d.ts +0 -16
- package/scripts/build/templates/experimental/index.js +0 -16
- package/scripts/build/templates/experimental/tools/VideoThumbnailLoader/index.d.ts +0 -18
- package/scripts/build/templates/experimental/tools/VideoThumbnailLoader/index.js +0 -18
- package/scripts/build/templates/experimental/tools/index.d.ts +0 -16
- package/scripts/build/templates/experimental/tools/index.js +0 -16
- package/scripts/build/templates/features/index.d.ts +0 -16
- package/scripts/build/templates/features/index.js +0 -16
- package/scripts/build/templates/logger/index.d.ts +0 -17
- package/scripts/build/templates/logger/index.js +0 -17
- package/scripts/build/templates/minimal/index.d.ts +0 -17
- package/scripts/build/templates/minimal/index.js +0 -17
- package/scripts/build/templates/tools/TextTrackRenderer.d.ts +0 -18
- package/scripts/build/templates/tools/TextTrackRenderer.js +0 -18
- package/scripts/build/templates/tools/index.d.ts +0 -16
- package/scripts/build/templates/tools/index.js +0 -16
- package/scripts/build/templates/tools/string-utils.d.ts +0 -18
- package/scripts/build/templates/tools/string-utils.js +0 -18
- package/scripts/build/templates/types/index.d.ts +0 -16
- package/scripts/build/templates/types/index.js +0 -15
- package/scripts/canal-release.patch +0 -316
- package/scripts/check_nodejs_import_compatibility.js +0 -60
- package/scripts/deploy_new_demo +0 -123
- package/scripts/fast_demo_build.js +0 -129
- package/scripts/generate_certificate +0 -19
- package/scripts/generate_demo_list.js +0 -105
- package/scripts/generate_documentation_list.js +0 -109
- package/scripts/generate_full_demo.js +0 -201
- package/scripts/generate_standalone_demo.js +0 -82
- package/scripts/launch_static_server.js +0 -163
- package/scripts/list-npm-scripts.js +0 -207
- package/scripts/make-dev-releases +0 -90
- package/scripts/report_build_sizes +0 -96
- package/scripts/run_standalone_demo.js +0 -27
- package/scripts/start_demo_web_server.js +0 -44
- package/scripts/update-version +0 -48
- package/scripts/update_gh-pages_demo +0 -132
- package/scripts/update_gh-pages_doc +0 -106
- package/scripts/utils/display_webpack_errors.js +0 -33
- package/scripts/utils/get_human_readable_hours.js +0 -14
- package/scripts/wasm-strip.js +0 -359
- package/sonar-project.properties +0 -7
- package/src/README.md +0 -136
- package/src/compat/README.md +0 -29
- package/src/compat/__tests__/add_text_track.test.ts +0 -176
- package/src/compat/__tests__/browser_compatibility_types.test.ts +0 -152
- package/src/compat/__tests__/browser_version.test.ts +0 -84
- package/src/compat/__tests__/can_patch_isobmff.test.ts +0 -50
- package/src/compat/__tests__/can_rely_on_video_visibility_and_size.test.ts +0 -78
- package/src/compat/__tests__/can_reuse_media_keys.test.ts +0 -31
- package/src/compat/__tests__/change_source_buffer_type.test.ts +0 -60
- package/src/compat/__tests__/clear_element_src.test.ts +0 -252
- package/src/compat/__tests__/enable_audio_track.test.ts +0 -341
- package/src/compat/__tests__/fullscreen.test.ts +0 -286
- package/src/compat/__tests__/is_codec_supported.test.ts +0 -78
- package/src/compat/__tests__/is_offline.test.ts +0 -65
- package/src/compat/__tests__/is_seeking_approximate.test.ts +0 -48
- package/src/compat/__tests__/is_vtt_cue.test.ts +0 -71
- package/src/compat/__tests__/make_vtt_cue.test.ts +0 -97
- package/src/compat/__tests__/patch_webkit_source_buffer.test.ts +0 -144
- package/src/compat/__tests__/remove_cue.test.ts +0 -229
- package/src/compat/__tests__/should_favour_custom_safari_EME.test.ts +0 -128
- package/src/compat/__tests__/should_reload_media_source_on_decipherability_update.test.ts +0 -50
- package/src/compat/__tests__/should_renew_media_key_system_access.test.ts +0 -55
- package/src/compat/__tests__/should_unset_media_keys.test.ts +0 -53
- package/src/compat/__tests__/should_validate_metadata.test.ts +0 -53
- package/src/compat/__tests__/should_wait_for_data_before_loaded.test.ts +0 -121
- package/src/compat/__tests__/should_wait_for_have_enough_data.test.ts +0 -36
- package/src/compat/add_class_name.ts +0 -41
- package/src/compat/add_text_track.ts +0 -58
- package/src/compat/browser_compatibility_types.ts +0 -222
- package/src/compat/browser_detection.ts +0 -172
- package/src/compat/browser_version.ts +0 -44
- package/src/compat/can_patch_isobmff.ts +0 -30
- package/src/compat/can_rely_on_video_visibility_and_size.ts +0 -52
- package/src/compat/can_reuse_media_keys.ts +0 -20
- package/src/compat/change_source_buffer_type.ts +0 -66
- package/src/compat/clear_element_src.ts +0 -55
- package/src/compat/eme/close_session.ts +0 -111
- package/src/compat/eme/constants.ts +0 -21
- package/src/compat/eme/custom_key_system_access.ts +0 -67
- package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +0 -186
- package/src/compat/eme/custom_media_keys/index.ts +0 -28
- package/src/compat/eme/custom_media_keys/moz_media_keys_constructor.ts +0 -88
- package/src/compat/eme/custom_media_keys/ms_media_keys_constructor.ts +0 -69
- package/src/compat/eme/custom_media_keys/old_webkit_media_keys.ts +0 -235
- package/src/compat/eme/custom_media_keys/types.ts +0 -67
- package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +0 -308
- package/src/compat/eme/custom_media_keys/webkit_media_keys_constructor.ts +0 -50
- package/src/compat/eme/eme-api-implementation.ts +0 -318
- package/src/compat/eme/generate_key_request.ts +0 -162
- package/src/compat/eme/get_init_data.ts +0 -159
- package/src/compat/eme/get_uuid_kid_from_keystatus_kid.ts +0 -37
- package/src/compat/eme/get_webkit_fairplay_initdata.ts +0 -75
- package/src/compat/eme/index.ts +0 -47
- package/src/compat/eme/load_session.ts +0 -67
- package/src/compat/enable_audio_track.ts +0 -33
- package/src/compat/event_listeners.ts +0 -566
- package/src/compat/fullscreen.ts +0 -87
- package/src/compat/get_start_date.ts +0 -48
- package/src/compat/has_issues_with_high_media_source_duration.ts +0 -27
- package/src/compat/index.ts +0 -87
- package/src/compat/is_codec_supported.ts +0 -40
- package/src/compat/is_debug_mode_enabled.ts +0 -12
- package/src/compat/is_node.ts +0 -18
- package/src/compat/is_offline.ts +0 -44
- package/src/compat/is_seeking_approximate.ts +0 -32
- package/src/compat/is_vtt_cue.ts +0 -30
- package/src/compat/make_vtt_cue.ts +0 -51
- package/src/compat/on_height_width_change.ts +0 -119
- package/src/compat/patch_webkit_source_buffer.ts +0 -89
- package/src/compat/remove_cue.ts +0 -64
- package/src/compat/should_favour_custom_safari_EME.ts +0 -34
- package/src/compat/should_prevent_seeking_at_0_initially.ts +0 -19
- package/src/compat/should_reload_media_source_on_decipherability_update.ts +0 -32
- package/src/compat/should_renew_media_key_system_access.ts +0 -26
- package/src/compat/should_unset_media_keys.ts +0 -27
- package/src/compat/should_validate_metadata.ts +0 -27
- package/src/compat/should_wait_for_data_before_loaded.ts +0 -35
- package/src/compat/should_wait_for_have_enough_data.ts +0 -17
- package/src/config.ts +0 -32
- package/src/core/README.md +0 -56
- package/src/core/adaptive/README.md +0 -147
- package/src/core/adaptive/__tests__/buffer_based_chooser.test.ts +0 -548
- package/src/core/adaptive/adaptive_representation_selector.ts +0 -916
- package/src/core/adaptive/buffer_based_chooser.ts +0 -264
- package/src/core/adaptive/guess_based_chooser.ts +0 -309
- package/src/core/adaptive/index.ts +0 -45
- package/src/core/adaptive/network_analyzer.ts +0 -419
- package/src/core/adaptive/utils/__tests__/bandwith_estimator.test.ts +0 -134
- package/src/core/adaptive/utils/__tests__/ewma.test.ts +0 -79
- package/src/core/adaptive/utils/__tests__/filter_by_bitrate.test.ts +0 -56
- package/src/core/adaptive/utils/__tests__/filter_by_width.test.ts +0 -60
- package/src/core/adaptive/utils/__tests__/get_buffer_levels.test.ts +0 -48
- package/src/core/adaptive/utils/__tests__/select_optimal_representation.test.ts +0 -243
- package/src/core/adaptive/utils/bandwidth_estimator.ts +0 -88
- package/src/core/adaptive/utils/ewma.ts +0 -59
- package/src/core/adaptive/utils/filter_by_bitrate.ts +0 -46
- package/src/core/adaptive/utils/filter_by_width.ts +0 -49
- package/src/core/adaptive/utils/get_buffer_levels.ts +0 -50
- package/src/core/adaptive/utils/last_estimate_storage.ts +0 -79
- package/src/core/adaptive/utils/pending_requests_store.ts +0 -147
- package/src/core/adaptive/utils/representation_score_calculator.ts +0 -168
- package/src/core/adaptive/utils/select_optimal_representation.ts +0 -54
- package/src/core/api/README.md +0 -36
- package/src/core/api/__tests__/option_utils.test.ts +0 -1668
- package/src/core/api/__tests__/public_api.test.ts +0 -857
- package/src/core/api/__tests__/utils.test.ts +0 -195
- package/src/core/api/debug/buffer_graph.ts +0 -244
- package/src/core/api/debug/buffer_size_graph.ts +0 -130
- package/src/core/api/debug/constants.ts +0 -2
- package/src/core/api/debug/index.ts +0 -3
- package/src/core/api/debug/modules/general_info.ts +0 -213
- package/src/core/api/debug/modules/segment_buffer_content.ts +0 -155
- package/src/core/api/debug/modules/segment_buffer_size.ts +0 -48
- package/src/core/api/debug/render.ts +0 -40
- package/src/core/api/debug/utils.ts +0 -103
- package/src/core/api/index.ts +0 -27
- package/src/core/api/option_utils.ts +0 -700
- package/src/core/api/playback_observer.ts +0 -994
- package/src/core/api/public_api.ts +0 -3247
- package/src/core/api/tracks_management/__tests__/media_element_track_choice_manager.test.ts +0 -184
- package/src/core/api/tracks_management/media_element_track_choice_manager.ts +0 -975
- package/src/core/api/tracks_management/track_choice_manager.ts +0 -1280
- package/src/core/api/utils.ts +0 -216
- package/src/core/decrypt/README.md +0 -22
- package/src/core/decrypt/__tests__/__global__/get_license.test.ts +0 -422
- package/src/core/decrypt/__tests__/__global__/init_data.test.ts +0 -677
- package/src/core/decrypt/__tests__/__global__/media_key_system_access.test.ts +0 -528
- package/src/core/decrypt/__tests__/__global__/media_keys.test.ts +0 -343
- package/src/core/decrypt/__tests__/__global__/server_certificate.test.ts +0 -264
- package/src/core/decrypt/__tests__/__global__/utils.ts +0 -491
- package/src/core/decrypt/attach_media_keys.ts +0 -121
- package/src/core/decrypt/clear_on_stop.ts +0 -47
- package/src/core/decrypt/content_decryptor.ts +0 -1246
- package/src/core/decrypt/create_or_load_session.ts +0 -133
- package/src/core/decrypt/create_session.ts +0 -214
- package/src/core/decrypt/dispose_decryption_resources.ts +0 -54
- package/src/core/decrypt/find_key_system.ts +0 -376
- package/src/core/decrypt/get_key_system_configuration.ts +0 -51
- package/src/core/decrypt/get_media_keys.ts +0 -147
- package/src/core/decrypt/index.ts +0 -36
- package/src/core/decrypt/init_media_keys.ts +0 -60
- package/src/core/decrypt/session_events_listener.ts +0 -386
- package/src/core/decrypt/set_server_certificate.ts +0 -105
- package/src/core/decrypt/types.ts +0 -404
- package/src/core/decrypt/utils/__tests__/are_init_values_compatible.test.ts +0 -261
- package/src/core/decrypt/utils/__tests__/clean_old_loaded_sessions.test.ts +0 -158
- package/src/core/decrypt/utils/__tests__/clean_old_stored_persistent_info.test.ts +0 -133
- package/src/core/decrypt/utils/are_init_values_compatible.ts +0 -140
- package/src/core/decrypt/utils/check_key_statuses.ts +0 -193
- package/src/core/decrypt/utils/clean_old_loaded_sessions.ts +0 -45
- package/src/core/decrypt/utils/clean_old_stored_persistent_info.ts +0 -48
- package/src/core/decrypt/utils/get_drm_system_id.ts +0 -42
- package/src/core/decrypt/utils/init_data_values_container.ts +0 -119
- package/src/core/decrypt/utils/is_session_usable.ts +0 -62
- package/src/core/decrypt/utils/key_id_comparison.ts +0 -57
- package/src/core/decrypt/utils/key_session_record.ts +0 -174
- package/src/core/decrypt/utils/loaded_sessions_store.ts +0 -505
- package/src/core/decrypt/utils/media_keys_infos_store.ts +0 -85
- package/src/core/decrypt/utils/persistent_sessions_store.ts +0 -358
- package/src/core/decrypt/utils/serializable_bytes.ts +0 -59
- package/src/core/decrypt/utils/server_certificate_store.ts +0 -133
- package/src/core/fetchers/README.md +0 -84
- package/src/core/fetchers/cdn_prioritizer.ts +0 -207
- package/src/core/fetchers/index.ts +0 -38
- package/src/core/fetchers/manifest/index.ts +0 -28
- package/src/core/fetchers/manifest/manifest_fetcher.ts +0 -798
- package/src/core/fetchers/segment/__tests__/task_prioritizer.test.ts +0 -763
- package/src/core/fetchers/segment/index.ts +0 -28
- package/src/core/fetchers/segment/prioritized_segment_fetcher.ts +0 -113
- package/src/core/fetchers/segment/segment_fetcher.ts +0 -482
- package/src/core/fetchers/segment/segment_fetcher_creator.ts +0 -129
- package/src/core/fetchers/segment/task_prioritizer.ts +0 -455
- package/src/core/fetchers/utils/error_selector.ts +0 -38
- package/src/core/fetchers/utils/schedule_request.ts +0 -493
- package/src/core/init/README.md +0 -81
- package/src/core/init/directfile_content_initializer.ts +0 -310
- package/src/core/init/index.ts +0 -22
- package/src/core/init/media_source_content_initializer.ts +0 -878
- package/src/core/init/types.ts +0 -266
- package/src/core/init/utils/__tests__/are_same_stream_events.test.ts +0 -84
- package/src/core/init/utils/__tests__/refresh_scheduled_events_list.test.ts +0 -94
- package/src/core/init/utils/content_time_boundaries_observer.ts +0 -646
- package/src/core/init/utils/create_media_source.ts +0 -139
- package/src/core/init/utils/create_stream_playback_observer.ts +0 -132
- package/src/core/init/utils/end_of_stream.ts +0 -108
- package/src/core/init/utils/get_initial_time.ts +0 -165
- package/src/core/init/utils/get_loaded_reference.ts +0 -82
- package/src/core/init/utils/initial_seek_and_play.ts +0 -237
- package/src/core/init/utils/initialize_content_decryption.ts +0 -172
- package/src/core/init/utils/media_source_duration_updater.ts +0 -349
- package/src/core/init/utils/rebuffering_controller.ts +0 -642
- package/src/core/init/utils/stream_events_emitter/are_same_stream_events.ts +0 -42
- package/src/core/init/utils/stream_events_emitter/index.ts +0 -22
- package/src/core/init/utils/stream_events_emitter/refresh_scheduled_events_list.ts +0 -74
- package/src/core/init/utils/stream_events_emitter/stream_events_emitter.ts +0 -252
- package/src/core/init/utils/stream_events_emitter/types.ts +0 -46
- package/src/core/init/utils/throw_on_media_error.ts +0 -74
- package/src/core/segment_buffers/README.md +0 -219
- package/src/core/segment_buffers/garbage_collector.ts +0 -177
- package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +0 -650
- package/src/core/segment_buffers/implementations/audio_video/index.ts +0 -18
- package/src/core/segment_buffers/implementations/image/image_segment_buffer.ts +0 -152
- package/src/core/segment_buffers/implementations/image/index.ts +0 -18
- package/src/core/segment_buffers/implementations/index.ts +0 -20
- package/src/core/segment_buffers/implementations/text/html/__tests__/utils.test.ts +0 -343
- package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +0 -527
- package/src/core/segment_buffers/implementations/text/html/index.ts +0 -24
- package/src/core/segment_buffers/implementations/text/html/parsers.ts +0 -49
- package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +0 -391
- package/src/core/segment_buffers/implementations/text/html/types.ts +0 -23
- package/src/core/segment_buffers/implementations/text/html/update_proportional_elements.ts +0 -93
- package/src/core/segment_buffers/implementations/text/html/utils.ts +0 -139
- package/src/core/segment_buffers/implementations/text/native/index.ts +0 -19
- package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +0 -340
- package/src/core/segment_buffers/implementations/text/native/parsers.ts +0 -47
- package/src/core/segment_buffers/implementations/types.ts +0 -386
- package/src/core/segment_buffers/implementations/utils/manual_time_ranges.ts +0 -80
- package/src/core/segment_buffers/index.ts +0 -67
- package/src/core/segment_buffers/inventory/buffered_history.ts +0 -131
- package/src/core/segment_buffers/inventory/index.ts +0 -30
- package/src/core/segment_buffers/inventory/segment_inventory.ts +0 -1111
- package/src/core/segment_buffers/inventory/types.ts +0 -35
- package/src/core/segment_buffers/segment_buffers_store.ts +0 -383
- package/src/core/stream/README.md +0 -59
- package/src/core/stream/adaptation/adaptation_stream.ts +0 -378
- package/src/core/stream/adaptation/index.ts +0 -20
- package/src/core/stream/adaptation/types.ts +0 -199
- package/src/core/stream/adaptation/utils/create_representation_estimator.ts +0 -114
- package/src/core/stream/index.ts +0 -38
- package/src/core/stream/orchestrator/README.md +0 -349
- package/src/core/stream/orchestrator/get_time_ranges_for_content.ts +0 -70
- package/src/core/stream/orchestrator/index.ts +0 -30
- package/src/core/stream/orchestrator/stream_orchestrator.ts +0 -664
- package/src/core/stream/period/index.ts +0 -20
- package/src/core/stream/period/period_stream.ts +0 -469
- package/src/core/stream/period/types.ts +0 -132
- package/src/core/stream/period/utils/get_adaptation_switch_strategy.ts +0 -287
- package/src/core/stream/representation/README.md +0 -16
- package/src/core/stream/representation/index.ts +0 -20
- package/src/core/stream/representation/representation_stream.ts +0 -474
- package/src/core/stream/representation/types.ts +0 -292
- package/src/core/stream/representation/utils/append_segment_to_buffer.ts +0 -77
- package/src/core/stream/representation/utils/check_for_discontinuity.ts +0 -305
- package/src/core/stream/representation/utils/downloading_queue.ts +0 -603
- package/src/core/stream/representation/utils/force_garbage_collection.ts +0 -113
- package/src/core/stream/representation/utils/get_buffer_status.ts +0 -322
- package/src/core/stream/representation/utils/get_needed_segments.ts +0 -617
- package/src/core/stream/representation/utils/get_segment_priority.ts +0 -43
- package/src/core/stream/representation/utils/push_init_segment.ts +0 -85
- package/src/core/stream/representation/utils/push_media_segment.ts +0 -113
- package/src/default_config.ts +0 -1293
- package/src/errors/README.md +0 -6
- package/src/errors/__tests__/assertion_error.test.ts +0 -26
- package/src/errors/__tests__/encrypted_media_error.test.ts +0 -45
- package/src/errors/__tests__/error_message.test.ts +0 -23
- package/src/errors/__tests__/format_error.test.ts +0 -62
- package/src/errors/__tests__/is_known_error.test.ts +0 -65
- package/src/errors/__tests__/media_error.test.ts +0 -55
- package/src/errors/__tests__/network_error.test.ts +0 -84
- package/src/errors/__tests__/other_error.test.ts +0 -53
- package/src/errors/__tests__/request_error.test.ts +0 -45
- package/src/errors/assertion_error.ts +0 -40
- package/src/errors/custom_loader_error.ts +0 -57
- package/src/errors/encrypted_media_error.ts +0 -71
- package/src/errors/error_codes.ts +0 -149
- package/src/errors/error_message.ts +0 -30
- package/src/errors/format_error.ts +0 -39
- package/src/errors/index.ts +0 -52
- package/src/errors/is_known_error.ts +0 -35
- package/src/errors/media_error.ts +0 -118
- package/src/errors/network_error.ts +0 -74
- package/src/errors/other_error.ts +0 -50
- package/src/errors/request_error.ts +0 -76
- package/src/experimental/README.md +0 -16
- package/src/experimental/features/__tests__/dash_wasm.test.ts +0 -44
- package/src/experimental/features/__tests__/debug_element.test.ts +0 -12
- package/src/experimental/features/__tests__/index.test.ts +0 -19
- package/src/experimental/features/__tests__/local.test.ts +0 -35
- package/src/experimental/features/__tests__/metaplaylist.test.ts +0 -35
- package/src/experimental/features/dash_wasm.ts +0 -41
- package/src/experimental/features/debug_element.ts +0 -13
- package/src/experimental/features/index.ts +0 -20
- package/src/experimental/features/local.ts +0 -28
- package/src/experimental/features/metaplaylist.ts +0 -28
- package/src/experimental/index.ts +0 -5
- package/src/experimental/tools/VideoThumbnailLoader/features/dash.ts +0 -23
- package/src/experimental/tools/VideoThumbnailLoader/features/metaplaylist.ts +0 -23
- package/src/experimental/tools/VideoThumbnailLoader/index.ts +0 -25
- package/src/experimental/tools/VideoThumbnailLoader/load_and_push_segment.ts +0 -77
- package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +0 -75
- package/src/experimental/tools/VideoThumbnailLoader/remove_buffer_around_time.ts +0 -54
- package/src/experimental/tools/VideoThumbnailLoader/types.ts +0 -39
- package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +0 -423
- package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader_error.ts +0 -34
- package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +0 -141
- package/src/experimental/tools/createMetaplaylist/index.ts +0 -72
- package/src/experimental/tools/index.ts +0 -27
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/capabilities.test.ts +0 -37
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +0 -140
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +0 -153
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/decodingInfos.test.ts +0 -405
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/defaultCodecFinder.test.ts +0 -136
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaContentType.test.ts +0 -294
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaDisplayInfos.test.ts +0 -189
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/utils.test.ts +0 -361
- package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +0 -184
- package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +0 -136
- package/src/experimental/tools/mediaCapabilitiesProber/capabilities.ts +0 -169
- package/src/experimental/tools/mediaCapabilitiesProber/index.ts +0 -18
- package/src/experimental/tools/mediaCapabilitiesProber/log.ts +0 -21
- package/src/experimental/tools/mediaCapabilitiesProber/probers/DRMInfos.ts +0 -67
- package/src/experimental/tools/mediaCapabilitiesProber/probers/HDCPPolicy.ts +0 -89
- package/src/experimental/tools/mediaCapabilitiesProber/probers/decodingInfo.ts +0 -100
- package/src/experimental/tools/mediaCapabilitiesProber/probers/defaultCodecsFinder.ts +0 -66
- package/src/experimental/tools/mediaCapabilitiesProber/probers/index.ts +0 -44
- package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.ts +0 -66
- package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/format.ts +0 -100
- package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentTypeWithFeatures/index.ts +0 -105
- package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.ts +0 -54
- package/src/experimental/tools/mediaCapabilitiesProber/types.ts +0 -75
- package/src/experimental/tools/mediaCapabilitiesProber/utils.ts +0 -107
- package/src/experimental/tools/parseBIFThumbnails.ts +0 -39
- package/src/features/README.md +0 -11
- package/src/features/__tests__/add_features.test.ts +0 -69
- package/src/features/__tests__/initialize_features.test.ts +0 -674
- package/src/features/add_features.ts +0 -37
- package/src/features/features_object.ts +0 -37
- package/src/features/index.ts +0 -40
- package/src/features/initialize_features.ts +0 -136
- package/src/features/list/__tests__/bif_parser.test.ts +0 -30
- package/src/features/list/__tests__/dash.test.ts +0 -41
- package/src/features/list/__tests__/directfile.test.ts +0 -35
- package/src/features/list/__tests__/eme.test.ts +0 -28
- package/src/features/list/__tests__/html_sami_parser.test.ts +0 -33
- package/src/features/list/__tests__/html_srt_parser.test.ts +0 -33
- package/src/features/list/__tests__/html_text_buffer.test.ts +0 -29
- package/src/features/list/__tests__/html_ttml_parser.test.ts +0 -33
- package/src/features/list/__tests__/html_vtt_parser.test.ts +0 -33
- package/src/features/list/__tests__/image_buffer.test.ts +0 -28
- package/src/features/list/__tests__/index.test.ts +0 -55
- package/src/features/list/__tests__/native_sami_parser.test.ts +0 -33
- package/src/features/list/__tests__/native_srt_parser.test.ts +0 -33
- package/src/features/list/__tests__/native_text_buffer.test.ts +0 -29
- package/src/features/list/__tests__/native_ttml_parser.test.ts +0 -33
- package/src/features/list/__tests__/native_vtt_parser.test.ts +0 -33
- package/src/features/list/__tests__/smooth.test.ts +0 -36
- package/src/features/list/bif_parser.ts +0 -31
- package/src/features/list/dash.ts +0 -36
- package/src/features/list/directfile.ts +0 -35
- package/src/features/list/eme.ts +0 -29
- package/src/features/list/html_sami_parser.ts +0 -31
- package/src/features/list/html_srt_parser.ts +0 -31
- package/src/features/list/html_text_buffer.ts +0 -29
- package/src/features/list/html_ttml_parser.ts +0 -31
- package/src/features/list/html_vtt_parser.ts +0 -31
- package/src/features/list/image_buffer.ts +0 -29
- package/src/features/list/index.ts +0 -32
- package/src/features/list/native_sami_parser.ts +0 -32
- package/src/features/list/native_srt_parser.ts +0 -32
- package/src/features/list/native_text_buffer.ts +0 -30
- package/src/features/list/native_ttml_parser.ts +0 -32
- package/src/features/list/native_vtt_parser.ts +0 -32
- package/src/features/list/smooth.ts +0 -32
- package/src/features/types.ts +0 -183
- package/src/index.ts +0 -38
- package/src/log.ts +0 -22
- package/src/manifest/README.md +0 -55
- package/src/manifest/__tests__/adaptation.test.ts +0 -485
- package/src/manifest/__tests__/manifest.test.ts +0 -428
- package/src/manifest/__tests__/period.test.ts +0 -769
- package/src/manifest/__tests__/representation.test.ts +0 -297
- package/src/manifest/__tests__/update_period_in_place.test.ts +0 -1074
- package/src/manifest/__tests__/update_periods.test.ts +0 -845
- package/src/manifest/adaptation.ts +0 -294
- package/src/manifest/index.ts +0 -67
- package/src/manifest/manifest.ts +0 -811
- package/src/manifest/period.ts +0 -211
- package/src/manifest/representation.ts +0 -451
- package/src/manifest/representation_index/__tests__/static.test.ts +0 -74
- package/src/manifest/representation_index/index.ts +0 -31
- package/src/manifest/representation_index/static.ts +0 -158
- package/src/manifest/representation_index/types.ts +0 -433
- package/src/manifest/types.ts +0 -33
- package/src/manifest/update_period_in_place.ts +0 -142
- package/src/manifest/update_periods.ts +0 -201
- package/src/manifest/utils.ts +0 -60
- package/src/minimal.ts +0 -34
- package/src/parsers/README.md +0 -12
- package/src/parsers/containers/isobmff/constants.ts +0 -24
- package/src/parsers/containers/isobmff/create_box.ts +0 -81
- package/src/parsers/containers/isobmff/drm/index.ts +0 -17
- package/src/parsers/containers/isobmff/drm/playready.ts +0 -45
- package/src/parsers/containers/isobmff/get_box.ts +0 -278
- package/src/parsers/containers/isobmff/index.ts +0 -51
- package/src/parsers/containers/isobmff/read.ts +0 -105
- package/src/parsers/containers/isobmff/take_pssh_out.ts +0 -101
- package/src/parsers/containers/isobmff/utils.ts +0 -555
- package/src/parsers/containers/matroska/index.ts +0 -21
- package/src/parsers/containers/matroska/utils.ts +0 -313
- package/src/parsers/images/bif.ts +0 -128
- package/src/parsers/manifest/dash/common/__tests__/attach_trickmode_track.test.ts +0 -65
- package/src/parsers/manifest/dash/common/__tests__/convert_supplemental_codecs.test.ts +0 -37
- package/src/parsers/manifest/dash/common/__tests__/flatten_overlapping_period.test.ts +0 -162
- package/src/parsers/manifest/dash/common/__tests__/get_clock_offset.test.ts +0 -65
- package/src/parsers/manifest/dash/common/__tests__/get_http_utc-timing_url.test.ts +0 -165
- package/src/parsers/manifest/dash/common/__tests__/get_periods_time_infos.test.ts +0 -118
- package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +0 -290
- package/src/parsers/manifest/dash/common/__tests__/parse_availability_start_time.test.ts +0 -63
- package/src/parsers/manifest/dash/common/attach_trickmode_track.ts +0 -55
- package/src/parsers/manifest/dash/common/convert_supplemental_codecs.ts +0 -32
- package/src/parsers/manifest/dash/common/flatten_overlapping_periods.ts +0 -87
- package/src/parsers/manifest/dash/common/get_clock_offset.ts +0 -41
- package/src/parsers/manifest/dash/common/get_hdr_information.ts +0 -94
- package/src/parsers/manifest/dash/common/get_http_utc-timing_url.ts +0 -46
- package/src/parsers/manifest/dash/common/get_minimum_and_maximum_positions.ts +0 -39
- package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +0 -91
- package/src/parsers/manifest/dash/common/index.ts +0 -40
- package/src/parsers/manifest/dash/common/indexes/__tests__/tokens.test.ts +0 -60
- package/src/parsers/manifest/dash/common/indexes/base.ts +0 -444
- package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +0 -55
- package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +0 -148
- package/src/parsers/manifest/dash/common/indexes/index.ts +0 -39
- package/src/parsers/manifest/dash/common/indexes/list.ts +0 -338
- package/src/parsers/manifest/dash/common/indexes/template.ts +0 -652
- package/src/parsers/manifest/dash/common/indexes/timeline/__tests__/parse_s_element.test.ts +0 -115
- package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +0 -54
- package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_previous_timeline.ts +0 -102
- package/src/parsers/manifest/dash/common/indexes/timeline/convert_element_to_index_segment.ts +0 -66
- package/src/parsers/manifest/dash/common/indexes/timeline/find_first_common_start_time.ts +0 -153
- package/src/parsers/manifest/dash/common/indexes/timeline/index.ts +0 -21
- package/src/parsers/manifest/dash/common/indexes/timeline/parse_s_element.ts +0 -72
- package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +0 -1049
- package/src/parsers/manifest/dash/common/indexes/tokens.ts +0 -127
- package/src/parsers/manifest/dash/common/indexes/utils.ts +0 -32
- package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +0 -142
- package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +0 -165
- package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +0 -569
- package/src/parsers/manifest/dash/common/parse_availability_start_time.ts +0 -35
- package/src/parsers/manifest/dash/common/parse_mpd.ts +0 -399
- package/src/parsers/manifest/dash/common/parse_periods.ts +0 -363
- package/src/parsers/manifest/dash/common/parse_representation_index.ts +0 -199
- package/src/parsers/manifest/dash/common/parse_representations.ts +0 -352
- package/src/parsers/manifest/dash/common/resolve_base_urls.ts +0 -58
- package/src/parsers/manifest/dash/index.ts +0 -22
- package/src/parsers/manifest/dash/js-parser/__tests__/parse_from_document.test.ts +0 -45
- package/src/parsers/manifest/dash/js-parser/index.ts +0 -18
- package/src/parsers/manifest/dash/js-parser/node_parsers/AdaptationSet.ts +0 -381
- package/src/parsers/manifest/dash/js-parser/node_parsers/BaseURL.ts +0 -35
- package/src/parsers/manifest/dash/js-parser/node_parsers/ContentComponent.ts +0 -49
- package/src/parsers/manifest/dash/js-parser/node_parsers/ContentProtection.ts +0 -94
- package/src/parsers/manifest/dash/js-parser/node_parsers/EventStream.ts +0 -117
- package/src/parsers/manifest/dash/js-parser/node_parsers/Initialization.ts +0 -48
- package/src/parsers/manifest/dash/js-parser/node_parsers/MPD.ts +0 -180
- package/src/parsers/manifest/dash/js-parser/node_parsers/Period.ts +0 -152
- package/src/parsers/manifest/dash/js-parser/node_parsers/Representation.ts +0 -234
- package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentBase.ts +0 -112
- package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentList.ts +0 -50
- package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentTemplate.ts +0 -98
- package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentTimeline.ts +0 -35
- package/src/parsers/manifest/dash/js-parser/node_parsers/SegmentURL.ts +0 -63
- package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/AdaptationSet.test.ts +0 -407
- package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/ContentComponent.test.ts +0 -67
- package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/ContentProtection.test.ts +0 -223
- package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/Initialization.test.ts +0 -139
- package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/SegmentTimeline.test.ts +0 -119
- package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/SegmentURL.test.ts +0 -205
- package/src/parsers/manifest/dash/js-parser/node_parsers/__tests__/utils.test.ts +0 -218
- package/src/parsers/manifest/dash/js-parser/node_parsers/utils.ts +0 -384
- package/src/parsers/manifest/dash/js-parser/parse_from_document.ts +0 -129
- package/src/parsers/manifest/dash/node_parser_types.ts +0 -431
- package/src/parsers/manifest/dash/parsers_types.ts +0 -91
- package/src/parsers/manifest/dash/wasm-parser/Cargo.lock +0 -25
- package/src/parsers/manifest/dash/wasm-parser/Cargo.toml +0 -16
- package/src/parsers/manifest/dash/wasm-parser/README.md +0 -267
- package/src/parsers/manifest/dash/wasm-parser/index.ts +0 -21
- package/src/parsers/manifest/dash/wasm-parser/rs/errors.rs +0 -28
- package/src/parsers/manifest/dash/wasm-parser/rs/events.rs +0 -373
- package/src/parsers/manifest/dash/wasm-parser/rs/lib.rs +0 -85
- package/src/parsers/manifest/dash/wasm-parser/rs/processor/attributes.rs +0 -414
- package/src/parsers/manifest/dash/wasm-parser/rs/processor/mod.rs +0 -472
- package/src/parsers/manifest/dash/wasm-parser/rs/processor/s_element.rs +0 -72
- package/src/parsers/manifest/dash/wasm-parser/rs/reader.rs +0 -17
- package/src/parsers/manifest/dash/wasm-parser/rs/reportable.rs +0 -147
- package/src/parsers/manifest/dash/wasm-parser/rs/utils.rs +0 -217
- package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +0 -477
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/AdaptationSet.ts +0 -343
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/BaseURL.ts +0 -38
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/ContentComponent.ts +0 -53
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/ContentProtection.ts +0 -62
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/EventStream.ts +0 -144
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/MPD.ts +0 -183
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/Period.ts +0 -180
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/Representation.ts +0 -215
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/Scheme.ts +0 -44
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentBase.ts +0 -115
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentList.ts +0 -61
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentTemplate.ts +0 -133
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/SegmentUrl.ts +0 -70
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/XLink.ts +0 -66
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/index.ts +0 -17
- package/src/parsers/manifest/dash/wasm-parser/ts/generators/root.ts +0 -66
- package/src/parsers/manifest/dash/wasm-parser/ts/parsers_stack.ts +0 -80
- package/src/parsers/manifest/dash/wasm-parser/ts/types.ts +0 -298
- package/src/parsers/manifest/dash/wasm-parser/ts/utils.ts +0 -47
- package/src/parsers/manifest/index.ts +0 -17
- package/src/parsers/manifest/local/index.ts +0 -25
- package/src/parsers/manifest/local/parse_local_manifest.ts +0 -164
- package/src/parsers/manifest/local/representation_index.ts +0 -246
- package/src/parsers/manifest/local/types.ts +0 -291
- package/src/parsers/manifest/metaplaylist/index.ts +0 -28
- package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +0 -335
- package/src/parsers/manifest/metaplaylist/representation_index.ts +0 -251
- package/src/parsers/manifest/smooth/create_parser.ts +0 -699
- package/src/parsers/manifest/smooth/get_codecs.ts +0 -55
- package/src/parsers/manifest/smooth/index.ts +0 -26
- package/src/parsers/manifest/smooth/parse_C_nodes.ts +0 -69
- package/src/parsers/manifest/smooth/parse_protection_node.ts +0 -72
- package/src/parsers/manifest/smooth/representation_index.ts +0 -704
- package/src/parsers/manifest/smooth/utils/add_segment_infos.ts +0 -77
- package/src/parsers/manifest/smooth/utils/parseBoolean.ts +0 -31
- package/src/parsers/manifest/smooth/utils/reduceChildren.ts +0 -36
- package/src/parsers/manifest/smooth/utils/tokens.ts +0 -46
- package/src/parsers/manifest/types.ts +0 -395
- package/src/parsers/manifest/utils/__tests__/get_first_time_from_adaptations.test.ts +0 -161
- package/src/parsers/manifest/utils/__tests__/get_last_time_from_adaptation.test.ts +0 -161
- package/src/parsers/manifest/utils/__tests__/index_helpers.test.ts +0 -55
- package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +0 -546
- package/src/parsers/manifest/utils/check_manifest_ids.ts +0 -83
- package/src/parsers/manifest/utils/clear_timeline_from_position.ts +0 -74
- package/src/parsers/manifest/utils/get_first_time_from_adaptation.ts +0 -48
- package/src/parsers/manifest/utils/get_last_time_from_adaptation.ts +0 -50
- package/src/parsers/manifest/utils/get_maximum_positions.ts +0 -87
- package/src/parsers/manifest/utils/get_minimum_position.ts +0 -80
- package/src/parsers/manifest/utils/index_helpers.ts +0 -204
- package/src/parsers/manifest/utils/update_segment_timeline.ts +0 -141
- package/src/parsers/texttracks/index.ts +0 -21
- package/src/parsers/texttracks/sami/html.ts +0 -219
- package/src/parsers/texttracks/sami/native.ts +0 -192
- package/src/parsers/texttracks/srt/__tests__/find_end_of_cue_block.test.ts +0 -99
- package/src/parsers/texttracks/srt/__tests__/get_cue_blocks.test.ts +0 -119
- package/src/parsers/texttracks/srt/__tests__/parse_cue.test.ts +0 -123
- package/src/parsers/texttracks/srt/__tests__/parse_timestamp.test.ts +0 -36
- package/src/parsers/texttracks/srt/find_end_of_cue_block.ts +0 -46
- package/src/parsers/texttracks/srt/get_cue_blocks.ts +0 -49
- package/src/parsers/texttracks/srt/html.ts +0 -182
- package/src/parsers/texttracks/srt/native.ts +0 -74
- package/src/parsers/texttracks/srt/parse_cue.ts +0 -76
- package/src/parsers/texttracks/srt/parse_timestamp.ts +0 -37
- package/src/parsers/texttracks/ttml/__tests__/resolve_styles_inheritance.test.ts +0 -248
- package/src/parsers/texttracks/ttml/get_parameters.ts +0 -106
- package/src/parsers/texttracks/ttml/get_styling.ts +0 -146
- package/src/parsers/texttracks/ttml/get_time_delimiters.ts +0 -49
- package/src/parsers/texttracks/ttml/html/__tests__/__global__/html_ttml_parser.test.test.ts +0 -190
- package/src/parsers/texttracks/ttml/html/__tests__/generate_css_test_outline.test.ts +0 -32
- package/src/parsers/texttracks/ttml/html/__tests__/ttml_color_to_css_color.test.ts +0 -62
- package/src/parsers/texttracks/ttml/html/apply_default_ttml_paragraph_style.ts +0 -67
- package/src/parsers/texttracks/ttml/html/apply_extent.ts +0 -65
- package/src/parsers/texttracks/ttml/html/apply_font_size.ts +0 -62
- package/src/parsers/texttracks/ttml/html/apply_line_height.ts +0 -50
- package/src/parsers/texttracks/ttml/html/apply_origin.ts +0 -64
- package/src/parsers/texttracks/ttml/html/apply_padding.ts +0 -141
- package/src/parsers/texttracks/ttml/html/create_element.ts +0 -549
- package/src/parsers/texttracks/ttml/html/generate_css_test_outline.ts +0 -46
- package/src/parsers/texttracks/ttml/html/index.ts +0 -23
- package/src/parsers/texttracks/ttml/html/parse_cue.ts +0 -65
- package/src/parsers/texttracks/ttml/html/parse_ttml_to_div.ts +0 -58
- package/src/parsers/texttracks/ttml/html/ttml_color_to_css_color.ts +0 -68
- package/src/parsers/texttracks/ttml/native/index.ts +0 -23
- package/src/parsers/texttracks/ttml/native/parse_cue.ts +0 -245
- package/src/parsers/texttracks/ttml/native/parse_ttml_to_vtt.ts +0 -39
- package/src/parsers/texttracks/ttml/parse_ttml.ts +0 -206
- package/src/parsers/texttracks/ttml/regexps.ts +0 -65
- package/src/parsers/texttracks/ttml/resolve_styles_inheritance.ts +0 -84
- package/src/parsers/texttracks/ttml/time_parsing.ts +0 -156
- package/src/parsers/texttracks/ttml/xml_utils.ts +0 -166
- package/src/parsers/texttracks/types.ts +0 -34
- package/src/parsers/texttracks/webvtt/__tests__/get_cue_blocks.test.ts +0 -218
- package/src/parsers/texttracks/webvtt/__tests__/get_style_blocks.test.ts +0 -65
- package/src/parsers/texttracks/webvtt/__tests__/parse_cue_block.test.ts +0 -249
- package/src/parsers/texttracks/webvtt/__tests__/parse_timestamp.test.ts +0 -39
- package/src/parsers/texttracks/webvtt/__tests__/utils.test.ts +0 -401
- package/src/parsers/texttracks/webvtt/get_cue_blocks.ts +0 -51
- package/src/parsers/texttracks/webvtt/get_style_blocks.ts +0 -56
- package/src/parsers/texttracks/webvtt/html/__tests__/convert_payload_to_html.test.ts +0 -106
- package/src/parsers/texttracks/webvtt/html/__tests__/create_default_style_elements.test.ts +0 -44
- package/src/parsers/texttracks/webvtt/html/__tests__/create_style_attribute.test.ts +0 -139
- package/src/parsers/texttracks/webvtt/html/__tests__/create_styled_element.test.ts +0 -140
- package/src/parsers/texttracks/webvtt/html/__tests__/parse_style_block.test.ts +0 -345
- package/src/parsers/texttracks/webvtt/html/__tests__/parse_webvtt_to_div.test.ts +0 -181
- package/src/parsers/texttracks/webvtt/html/__tests__/to_html.test.ts +0 -234
- package/src/parsers/texttracks/webvtt/html/convert_payload_to_html.ts +0 -46
- package/src/parsers/texttracks/webvtt/html/create_default_style_elements.ts +0 -26
- package/src/parsers/texttracks/webvtt/html/create_style_attribute.ts +0 -222
- package/src/parsers/texttracks/webvtt/html/create_styled_element.ts +0 -95
- package/src/parsers/texttracks/webvtt/html/index.ts +0 -25
- package/src/parsers/texttracks/webvtt/html/parse_style_block.ts +0 -76
- package/src/parsers/texttracks/webvtt/html/parse_webvtt_to_div.ts +0 -67
- package/src/parsers/texttracks/webvtt/html/to_html.ts +0 -96
- package/src/parsers/texttracks/webvtt/native/index.ts +0 -23
- package/src/parsers/texttracks/webvtt/native/parse_vtt_to_cues.ts +0 -70
- package/src/parsers/texttracks/webvtt/native/set_settings_on_cue.ts +0 -95
- package/src/parsers/texttracks/webvtt/native/to_native_cue.ts +0 -34
- package/src/parsers/texttracks/webvtt/parse_cue_block.ts +0 -128
- package/src/parsers/texttracks/webvtt/parse_timestamp.ts +0 -40
- package/src/parsers/texttracks/webvtt/utils.ts +0 -135
- package/src/public_types.ts +0 -846
- package/src/tools/README.md +0 -4
- package/src/tools/TextTrackRenderer/index.ts +0 -28
- package/src/tools/TextTrackRenderer/text_track_renderer.ts +0 -107
- package/src/tools/index.ts +0 -20
- package/src/tools/string_utils.ts +0 -24
- package/src/transports/README.md +0 -276
- package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +0 -98
- package/src/transports/dash/construct_segment_url.ts +0 -28
- package/src/transports/dash/extract_complete_chunks.ts +0 -66
- package/src/transports/dash/get_events_out_of_emsgs.ts +0 -105
- package/src/transports/dash/image_pipelines.ts +0 -122
- package/src/transports/dash/index.ts +0 -23
- package/src/transports/dash/init_segment_loader.ts +0 -114
- package/src/transports/dash/low_latency_segment_loader.ts +0 -87
- package/src/transports/dash/manifest_parser.ts +0 -325
- package/src/transports/dash/pipelines.ts +0 -72
- package/src/transports/dash/segment_loader.ts +0 -249
- package/src/transports/dash/segment_parser.ts +0 -194
- package/src/transports/dash/text_loader.ts +0 -120
- package/src/transports/dash/text_parser.ts +0 -234
- package/src/transports/index.ts +0 -17
- package/src/transports/local/index.ts +0 -18
- package/src/transports/local/pipelines.ts +0 -100
- package/src/transports/local/segment_loader.ts +0 -198
- package/src/transports/local/segment_parser.ts +0 -101
- package/src/transports/local/text_parser.ts +0 -185
- package/src/transports/metaplaylist/README.md +0 -94
- package/src/transports/metaplaylist/index.ts +0 -23
- package/src/transports/metaplaylist/manifest_loader.ts +0 -62
- package/src/transports/metaplaylist/pipelines.ts +0 -425
- package/src/transports/smooth/extract_timings_infos.ts +0 -142
- package/src/transports/smooth/index.ts +0 -23
- package/src/transports/smooth/isobmff/__tests__/create_boxes.test.ts +0 -231
- package/src/transports/smooth/isobmff/create_audio_init_segment.ts +0 -84
- package/src/transports/smooth/isobmff/create_boxes.ts +0 -481
- package/src/transports/smooth/isobmff/create_init_segment.ts +0 -100
- package/src/transports/smooth/isobmff/create_traf_box.ts +0 -40
- package/src/transports/smooth/isobmff/create_video_init_segment.ts +0 -78
- package/src/transports/smooth/isobmff/get_aaces_header.ts +0 -62
- package/src/transports/smooth/isobmff/index.ts +0 -32
- package/src/transports/smooth/isobmff/parse_tfrf.ts +0 -57
- package/src/transports/smooth/isobmff/parse_tfxd.ts +0 -38
- package/src/transports/smooth/isobmff/patch_segment.ts +0 -171
- package/src/transports/smooth/pipelines.ts +0 -533
- package/src/transports/smooth/segment_loader.ts +0 -288
- package/src/transports/smooth/utils.ts +0 -106
- package/src/transports/types.ts +0 -809
- package/src/transports/utils/__tests__/byte_range.test.ts +0 -35
- package/src/transports/utils/__tests__/check_isobmff_integrity.test.ts +0 -148
- package/src/transports/utils/__tests__/find_complete_box.test.ts +0 -138
- package/src/transports/utils/__tests__/infer_segment_container.test.ts +0 -227
- package/src/transports/utils/byte_range.ts +0 -25
- package/src/transports/utils/call_custom_manifest_loader.ts +0 -147
- package/src/transports/utils/check_isobmff_integrity.ts +0 -50
- package/src/transports/utils/find_complete_box.ts +0 -63
- package/src/transports/utils/generate_manifest_loader.ts +0 -97
- package/src/transports/utils/get_isobmff_timing_infos.ts +0 -86
- package/src/transports/utils/infer_segment_container.ts +0 -56
- package/src/transports/utils/parse_text_track.ts +0 -176
- package/src/typings/README.md +0 -7
- package/src/typings/globals.d.ts +0 -83
- package/src/typings/next-tick.d.ts +0 -23
- package/src/utils/README.md +0 -5
- package/src/utils/__tests__/are_arrays_of_numbers_equal.test.ts +0 -86
- package/src/utils/__tests__/are_codecs_compatible.test.ts +0 -88
- package/src/utils/__tests__/array_find.test.ts +0 -113
- package/src/utils/__tests__/array_find_index.test.ts +0 -113
- package/src/utils/__tests__/array_includes.test.ts +0 -151
- package/src/utils/__tests__/assert.test.ts +0 -237
- package/src/utils/__tests__/assert_unreachable.test.ts +0 -40
- package/src/utils/__tests__/base64.test.ts +0 -147
- package/src/utils/__tests__/byte_parsing.test.ts +0 -267
- package/src/utils/__tests__/deep_merge.test.ts +0 -48
- package/src/utils/__tests__/event_emitter.test.ts +0 -579
- package/src/utils/__tests__/flat_map.test.ts +0 -71
- package/src/utils/__tests__/get_fuzzed_delay.test.ts +0 -32
- package/src/utils/__tests__/hash_buffer.test.ts +0 -105
- package/src/utils/__tests__/id_generator.test.ts +0 -80
- package/src/utils/__tests__/initialization_segment_cache.test.ts +0 -245
- package/src/utils/__tests__/is_non_empty_string.test.ts +0 -41
- package/src/utils/__tests__/is_null_or_undefined.test.ts +0 -33
- package/src/utils/__tests__/list_to_map.test.ts +0 -46
- package/src/utils/__tests__/logger.test.ts +0 -214
- package/src/utils/__tests__/noop.test.ts +0 -23
- package/src/utils/__tests__/object_assign.test.ts +0 -56
- package/src/utils/__tests__/object_values.test.ts +0 -26
- package/src/utils/__tests__/ranges.test.ts +0 -907
- package/src/utils/__tests__/resolve_url.test.ts +0 -100
- package/src/utils/__tests__/simple_set.test.ts +0 -57
- package/src/utils/__tests__/sorted_list.test.ts +0 -335
- package/src/utils/__tests__/starts_with.test.ts +0 -65
- package/src/utils/__tests__/string_parsing.test.ts +0 -267
- package/src/utils/__tests__/uniq.test.ts +0 -134
- package/src/utils/__tests__/warn_once.test.ts +0 -38
- package/src/utils/__tests__/weak_map_memory.test.ts +0 -188
- package/src/utils/are_arrays_of_numbers_equal.ts +0 -39
- package/src/utils/are_codecs_compatible.ts +0 -51
- package/src/utils/array_find.ts +0 -55
- package/src/utils/array_find_index.ts +0 -54
- package/src/utils/array_includes.ts +0 -93
- package/src/utils/assert.ts +0 -65
- package/src/utils/assert_unreachable.ts +0 -45
- package/src/utils/base64.ts +0 -153
- package/src/utils/byte_parsing.ts +0 -256
- package/src/utils/cancellable_sleep.ts +0 -41
- package/src/utils/create_cancellable_promise.ts +0 -69
- package/src/utils/deep_merge.ts +0 -49
- package/src/utils/event_emitter.ts +0 -147
- package/src/utils/flat_map.ts +0 -50
- package/src/utils/get_fuzzed_delay.ts +0 -27
- package/src/utils/hash_buffer.ts +0 -42
- package/src/utils/id_generator.ts +0 -35
- package/src/utils/initialization_segment_cache.ts +0 -68
- package/src/utils/is_non_empty_string.ts +0 -23
- package/src/utils/is_null_or_undefined.ts +0 -27
- package/src/utils/languages/ISO_639-1_to_ISO_639-3.ts +0 -207
- package/src/utils/languages/ISO_639-2_to_ISO_639-3.ts +0 -43
- package/src/utils/languages/__tests__/normalize.test.ts +0 -290
- package/src/utils/languages/index.ts +0 -29
- package/src/utils/languages/normalize.ts +0 -152
- package/src/utils/list_to_map.ts +0 -32
- package/src/utils/logger.ts +0 -100
- package/src/utils/noop.ts +0 -26
- package/src/utils/object_assign.ts +0 -60
- package/src/utils/object_values.ts +0 -31
- package/src/utils/ranges.ts +0 -499
- package/src/utils/reference.ts +0 -390
- package/src/utils/request/fetch.ts +0 -250
- package/src/utils/request/index.ts +0 -38
- package/src/utils/request/xhr.ts +0 -287
- package/src/utils/resolve_url.ts +0 -126
- package/src/utils/retry_promise_with_backoff.ts +0 -95
- package/src/utils/simple_set.ts +0 -67
- package/src/utils/sleep.ts +0 -14
- package/src/utils/slice_uint8array.ts +0 -53
- package/src/utils/sorted_list.ts +0 -240
- package/src/utils/starts_with.ts +0 -42
- package/src/utils/string_parsing.ts +0 -414
- package/src/utils/task_canceller.ts +0 -367
- package/src/utils/uniq.ts +0 -49
- package/src/utils/warn_once.ts +0 -34
- package/src/utils/weak_map_memory.ts +0 -89
- package/src/utils/wrapInPromise.ts +0 -24
- package/tsconfig.json +0 -28
- package/tsconfig.modules.json +0 -36
|
@@ -1,975 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright 2015 CANAL+ Group
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* /!\ This file is feature-switchable.
|
|
19
|
-
* It always should be imported through the `features` object.
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
import { enableAudioTrack } from "../../../compat";
|
|
23
|
-
import {
|
|
24
|
-
ICompatAudioTrack,
|
|
25
|
-
ICompatAudioTrackList,
|
|
26
|
-
ICompatHTMLMediaElement,
|
|
27
|
-
ICompatTextTrackList,
|
|
28
|
-
ICompatVideoTrack,
|
|
29
|
-
ICompatVideoTrackList,
|
|
30
|
-
} from "../../../compat/browser_compatibility_types";
|
|
31
|
-
import { Representation } from "../../../manifest";
|
|
32
|
-
import {
|
|
33
|
-
IAudioTrack,
|
|
34
|
-
ITextTrack,
|
|
35
|
-
IVideoTrack,
|
|
36
|
-
IAudioTrackPreference,
|
|
37
|
-
ITextTrackPreference,
|
|
38
|
-
IVideoTrackPreference,
|
|
39
|
-
IAvailableVideoTrack,
|
|
40
|
-
IAvailableAudioTrack,
|
|
41
|
-
IAvailableTextTrack,
|
|
42
|
-
} from "../../../public_types";
|
|
43
|
-
import EventEmitter from "../../../utils/event_emitter";
|
|
44
|
-
import normalizeLanguage from "../../../utils/languages";
|
|
45
|
-
|
|
46
|
-
/** Events emitted by the MediaElementTrackChoiceManager. */
|
|
47
|
-
interface IMediaElementTrackChoiceManagerEvents {
|
|
48
|
-
availableVideoTracksChange: IAvailableVideoTrack[];
|
|
49
|
-
availableAudioTracksChange: IAvailableAudioTrack[];
|
|
50
|
-
availableTextTracksChange: IAvailableTextTrack[];
|
|
51
|
-
videoTrackChange: IVideoTrack|null;
|
|
52
|
-
audioTrackChange: IAudioTrack|null;
|
|
53
|
-
textTrackChange: ITextTrack|null;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Check if track array is different from an other one
|
|
58
|
-
* @param {Array.<Object>} oldTrackArray
|
|
59
|
-
* @param {Array.<Object>} newTrackArray
|
|
60
|
-
* @returns {boolean}
|
|
61
|
-
*/
|
|
62
|
-
function areTrackArraysDifferent(
|
|
63
|
-
oldTrackArray: Array<{ nativeTrack: ICompatVideoTrack|ICompatAudioTrack|TextTrack }>,
|
|
64
|
-
newTrackArray: Array<{ nativeTrack: ICompatVideoTrack|ICompatAudioTrack|TextTrack }>
|
|
65
|
-
): boolean {
|
|
66
|
-
if (newTrackArray.length !== oldTrackArray.length) {
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
69
|
-
for (let i = 0; i < newTrackArray.length; i++) {
|
|
70
|
-
if (newTrackArray[i].nativeTrack !== oldTrackArray[i]?.nativeTrack) {
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Create audio tracks from native audio tracks.
|
|
79
|
-
* @param {AudioTrackList} audioTracks
|
|
80
|
-
* @returns {Array.<Object>}
|
|
81
|
-
*/
|
|
82
|
-
function createAudioTracks(
|
|
83
|
-
audioTracks: ICompatAudioTrackList
|
|
84
|
-
): Array<{ track: { id: string;
|
|
85
|
-
normalized: string;
|
|
86
|
-
language: string;
|
|
87
|
-
audioDescription: boolean;
|
|
88
|
-
representations: Representation[]; };
|
|
89
|
-
nativeTrack: ICompatAudioTrack; }> {
|
|
90
|
-
const newAudioTracks = [];
|
|
91
|
-
const languagesOccurences: Partial<Record<string, number>> = {};
|
|
92
|
-
for (let i = 0; i < audioTracks.length; i++) {
|
|
93
|
-
const audioTrack = audioTracks[i];
|
|
94
|
-
const language = audioTrack.language === "" ? "nolang" :
|
|
95
|
-
audioTrack.language;
|
|
96
|
-
const occurences = languagesOccurences[language] ?? 1;
|
|
97
|
-
const id = "gen_audio_" +
|
|
98
|
-
language +
|
|
99
|
-
"_" +
|
|
100
|
-
occurences.toString();
|
|
101
|
-
languagesOccurences[language] = occurences + 1;
|
|
102
|
-
const track = { language: audioTrack.language,
|
|
103
|
-
id,
|
|
104
|
-
normalized: normalizeLanguage(audioTrack.language),
|
|
105
|
-
audioDescription: audioTrack.kind === "descriptions" ||
|
|
106
|
-
// Safari seem to prefer the non-standard singular
|
|
107
|
-
// version, funnily enough
|
|
108
|
-
audioTrack.kind === "description",
|
|
109
|
-
representations: [] as Representation[] };
|
|
110
|
-
newAudioTracks.push({ track,
|
|
111
|
-
nativeTrack: audioTrack });
|
|
112
|
-
}
|
|
113
|
-
return newAudioTracks;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Create text tracks from native text tracks.
|
|
118
|
-
* @param {TextTrackList} textTracks
|
|
119
|
-
* @returns {Array.<Object>}
|
|
120
|
-
*/
|
|
121
|
-
function createTextTracks(
|
|
122
|
-
textTracks: ICompatTextTrackList
|
|
123
|
-
): Array<{ track: ITextTrack;
|
|
124
|
-
nativeTrack: TextTrack; }> {
|
|
125
|
-
const newTextTracks = [];
|
|
126
|
-
const languagesOccurences: Partial<Record<string, number>> = {};
|
|
127
|
-
for (let i = 0; i < textTracks.length; i++) {
|
|
128
|
-
const textTrack = textTracks[i];
|
|
129
|
-
const language = textTrack.language === "" ? "nolang" :
|
|
130
|
-
textTrack.language;
|
|
131
|
-
const occurences = languagesOccurences[language] ?? 1;
|
|
132
|
-
const id = "gen_text_" +
|
|
133
|
-
language +
|
|
134
|
-
"_" +
|
|
135
|
-
occurences.toString();
|
|
136
|
-
languagesOccurences[language] = occurences + 1;
|
|
137
|
-
|
|
138
|
-
// Safari seems to be indicating that the subtitles track is a forced
|
|
139
|
-
// subtitles track by setting the `kind` attribute to `"forced"`.
|
|
140
|
-
// As of now (2023-04-04), this is not standard.
|
|
141
|
-
// @see https://github.com/whatwg/html/issues/4472
|
|
142
|
-
const forced = (textTrack.kind as string) === "forced" ?
|
|
143
|
-
true :
|
|
144
|
-
undefined;
|
|
145
|
-
const track = { language: textTrack.language,
|
|
146
|
-
forced,
|
|
147
|
-
label: textTrack.label,
|
|
148
|
-
id,
|
|
149
|
-
normalized: normalizeLanguage(textTrack.language),
|
|
150
|
-
closedCaption: textTrack.kind === "captions" };
|
|
151
|
-
newTextTracks.push({ track,
|
|
152
|
-
nativeTrack: textTrack });
|
|
153
|
-
}
|
|
154
|
-
return newTextTracks;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Create video tracks from native video tracks.
|
|
159
|
-
* @param {VideoTrackList} videoTracks
|
|
160
|
-
* @returns {Array.<Object>}
|
|
161
|
-
*/
|
|
162
|
-
function createVideoTracks(
|
|
163
|
-
videoTracks: ICompatVideoTrackList
|
|
164
|
-
): Array<{ track: { id: string;
|
|
165
|
-
representations: Representation[]; };
|
|
166
|
-
nativeTrack: ICompatVideoTrack; }> {
|
|
167
|
-
const newVideoTracks = [];
|
|
168
|
-
const languagesOccurences: Partial<Record<string, number>> = {};
|
|
169
|
-
for (let i = 0; i < videoTracks.length; i++) {
|
|
170
|
-
const videoTrack = videoTracks[i];
|
|
171
|
-
const language = videoTrack.language === "" ? "nolang" :
|
|
172
|
-
videoTrack.language;
|
|
173
|
-
const occurences = languagesOccurences[language] ?? 1;
|
|
174
|
-
const id = "gen_video_" +
|
|
175
|
-
language +
|
|
176
|
-
"_" +
|
|
177
|
-
occurences.toString();
|
|
178
|
-
languagesOccurences[language] = occurences + 1;
|
|
179
|
-
newVideoTracks.push({ track: { id,
|
|
180
|
-
representations: [] as Representation[] },
|
|
181
|
-
nativeTrack: videoTrack });
|
|
182
|
-
}
|
|
183
|
-
return newVideoTracks;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
/**
|
|
187
|
-
* Manage video, audio and text tracks for current direct file content.
|
|
188
|
-
* @class MediaElementTrackChoiceManager
|
|
189
|
-
*/
|
|
190
|
-
export default class MediaElementTrackChoiceManager
|
|
191
|
-
extends EventEmitter<IMediaElementTrackChoiceManagerEvents> {
|
|
192
|
-
/**
|
|
193
|
-
* Array of preferred settings for audio tracks.
|
|
194
|
-
* Sorted by order of preference descending.
|
|
195
|
-
*/
|
|
196
|
-
private _preferredAudioTracks : IAudioTrackPreference[];
|
|
197
|
-
|
|
198
|
-
/**
|
|
199
|
-
* Array of preferred languages for text tracks.
|
|
200
|
-
* Sorted by order of preference descending.
|
|
201
|
-
*/
|
|
202
|
-
private _preferredTextTracks : ITextTrackPreference[];
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* Array of preferred settings for video tracks.
|
|
206
|
-
* Sorted by order of preference descending.
|
|
207
|
-
*/
|
|
208
|
-
private _preferredVideoTracks : IVideoTrackPreference[];
|
|
209
|
-
|
|
210
|
-
/** List every available audio tracks available on the media element. */
|
|
211
|
-
private _audioTracks : Array<{ track: IAudioTrack; nativeTrack: ICompatAudioTrack }>;
|
|
212
|
-
/** List every available text tracks available on the media element. */
|
|
213
|
-
private _textTracks : Array<{ track: ITextTrack; nativeTrack: TextTrack }>;
|
|
214
|
-
/** List every available video tracks available on the media element. */
|
|
215
|
-
private _videoTracks : Array<{ track: IVideoTrack; nativeTrack: ICompatVideoTrack }>;
|
|
216
|
-
|
|
217
|
-
/** Last audio track emitted as active. */
|
|
218
|
-
private _lastEmittedNativeAudioTrack : ICompatAudioTrack | null | undefined;
|
|
219
|
-
/** Last video track emitted as active. */
|
|
220
|
-
private _lastEmittedNativeVideoTrack : ICompatVideoTrack | null | undefined;
|
|
221
|
-
/** Last text track emitted as active. */
|
|
222
|
-
private _lastEmittedNativeTextTrack : TextTrack | null | undefined;
|
|
223
|
-
|
|
224
|
-
/** Native `AudioTrackList` implemented on the media element. */
|
|
225
|
-
private _nativeAudioTracks : ICompatAudioTrackList | undefined;
|
|
226
|
-
/** Native `VideoTrackList` implemented on the media element. */
|
|
227
|
-
private _nativeVideoTracks : ICompatVideoTrackList | undefined;
|
|
228
|
-
/** Native `TextTrackList` implemented on the media element. */
|
|
229
|
-
private _nativeTextTracks : ICompatTextTrackList|undefined;
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* Last audio track manually set active through the corresponding
|
|
233
|
-
* MediaElementTrackChoiceManager's API(s).
|
|
234
|
-
* Allows to "lock on" a track, to be sure that choice will be kept even
|
|
235
|
-
* through audio track list updates, as long as it is still available.
|
|
236
|
-
* `undefined` if the audio track was not manually set.
|
|
237
|
-
*/
|
|
238
|
-
private _audioTrackLockedOn : ICompatAudioTrack | undefined;
|
|
239
|
-
|
|
240
|
-
/**
|
|
241
|
-
* Last text track manually set active through the corresponding
|
|
242
|
-
* MediaElementTrackChoiceManager's API(s).
|
|
243
|
-
* Allows to "lock on" a track, to be sure that choice will be kept even
|
|
244
|
-
* through text track list updates, as long as it is still available.
|
|
245
|
-
* `null` if the text track was disabled.
|
|
246
|
-
* `undefined` if the text track was not manually set.
|
|
247
|
-
*/
|
|
248
|
-
private _textTrackLockedOn : TextTrack | undefined | null;
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Last video track manually set active through the corresponding
|
|
252
|
-
* MediaElementTrackChoiceManager's API(s).
|
|
253
|
-
* Allows to "lock on" a track, to be sure that choice will be kept even
|
|
254
|
-
* through video track list updates, as long as it is still available.
|
|
255
|
-
* `null` if the video track was disabled.
|
|
256
|
-
* `undefined` if the video track was not manually set.
|
|
257
|
-
*/
|
|
258
|
-
private _videoTrackLockedOn : ICompatVideoTrack | undefined | null;
|
|
259
|
-
|
|
260
|
-
constructor(mediaElement: HTMLMediaElement) {
|
|
261
|
-
super();
|
|
262
|
-
|
|
263
|
-
this._preferredAudioTracks = [];
|
|
264
|
-
this._preferredTextTracks = [];
|
|
265
|
-
this._preferredVideoTracks = [];
|
|
266
|
-
|
|
267
|
-
// TODO In practice, the audio/video/text tracks API are not always implemented on
|
|
268
|
-
// the media element, although Typescript HTMLMediaElement types tend to mean
|
|
269
|
-
// that can't be undefined.
|
|
270
|
-
this._nativeAudioTracks = (mediaElement as ICompatHTMLMediaElement).audioTracks;
|
|
271
|
-
this._nativeVideoTracks = (mediaElement as ICompatHTMLMediaElement).videoTracks;
|
|
272
|
-
this._nativeTextTracks = mediaElement.textTracks as ICompatTextTrackList|undefined;
|
|
273
|
-
|
|
274
|
-
this._audioTracks =
|
|
275
|
-
this._nativeAudioTracks !== undefined ? createAudioTracks(this._nativeAudioTracks) :
|
|
276
|
-
[];
|
|
277
|
-
this._videoTracks =
|
|
278
|
-
this._nativeVideoTracks !== undefined ? createVideoTracks(this._nativeVideoTracks) :
|
|
279
|
-
[];
|
|
280
|
-
this._textTracks =
|
|
281
|
-
this._nativeTextTracks !== undefined ? createTextTracks(this._nativeTextTracks) :
|
|
282
|
-
[];
|
|
283
|
-
|
|
284
|
-
this._lastEmittedNativeAudioTrack = this._getPrivateChosenAudioTrack()?.nativeTrack;
|
|
285
|
-
this._lastEmittedNativeVideoTrack = this._getPrivateChosenVideoTrack()?.nativeTrack;
|
|
286
|
-
this._lastEmittedNativeTextTrack = this._getPrivateChosenTextTrack()?.nativeTrack;
|
|
287
|
-
|
|
288
|
-
this._handleNativeTracksCallbacks();
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* Set the list of preferred audio tracks, in preference order.
|
|
293
|
-
* @param {Array.<Object>} preferredAudioTracks
|
|
294
|
-
* @param {boolean} shouldApply - `true` if those preferences should be
|
|
295
|
-
* applied on the currently loaded Period. `false` if it should only
|
|
296
|
-
* be applied to new content.
|
|
297
|
-
*/
|
|
298
|
-
public setPreferredAudioTracks(
|
|
299
|
-
preferredAudioTracks : IAudioTrackPreference[],
|
|
300
|
-
shouldApply : boolean
|
|
301
|
-
) : void {
|
|
302
|
-
this._preferredAudioTracks = preferredAudioTracks;
|
|
303
|
-
if (shouldApply) {
|
|
304
|
-
this._applyAudioPreferences();
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
/**
|
|
309
|
-
* Set the list of preferred text tracks, in preference order.
|
|
310
|
-
* @param {Array.<Object>} preferredTextTracks
|
|
311
|
-
* @param {boolean} shouldApply - `true` if those preferences should be
|
|
312
|
-
* applied on the currently loaded Period. `false` if it should only
|
|
313
|
-
* be applied to new content.
|
|
314
|
-
*/
|
|
315
|
-
public setPreferredTextTracks(
|
|
316
|
-
preferredTextTracks : ITextTrackPreference[],
|
|
317
|
-
shouldApply : boolean
|
|
318
|
-
) : void {
|
|
319
|
-
this._preferredTextTracks = preferredTextTracks;
|
|
320
|
-
if (shouldApply) {
|
|
321
|
-
this._applyTextPreferences();
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
/**
|
|
326
|
-
* Set the list of preferred video tracks, in preference order.
|
|
327
|
-
* @param {Array.<Object>} preferredVideoTracks
|
|
328
|
-
* @param {boolean} shouldApply - `true` if those preferences should be
|
|
329
|
-
* applied on the currently loaded Period. `false` if it should only
|
|
330
|
-
* be applied to new content.
|
|
331
|
-
*/
|
|
332
|
-
public setPreferredVideoTracks(
|
|
333
|
-
preferredVideoTracks : IVideoTrackPreference[],
|
|
334
|
-
shouldApply : boolean
|
|
335
|
-
) : void {
|
|
336
|
-
this._preferredVideoTracks = preferredVideoTracks;
|
|
337
|
-
if (shouldApply) {
|
|
338
|
-
this._applyVideoPreferences();
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
/**
|
|
343
|
-
* Update the currently active audio track by setting the wanted audio track's
|
|
344
|
-
* ID property.
|
|
345
|
-
* Throws if the wanted audio track is not found.
|
|
346
|
-
* @param {string|number|undefined} id
|
|
347
|
-
*/
|
|
348
|
-
public setAudioTrackById(id?: string|number): void {
|
|
349
|
-
for (let i = 0; i < this._audioTracks.length; i++) {
|
|
350
|
-
const { track, nativeTrack } = this._audioTracks[i];
|
|
351
|
-
if (track.id === id) {
|
|
352
|
-
this._enableAudioTrackFromIndex(i);
|
|
353
|
-
this._audioTrackLockedOn = nativeTrack;
|
|
354
|
-
return;
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
throw new Error("Audio track not found.");
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
/**
|
|
361
|
-
* Disable the currently-active text track, if one.
|
|
362
|
-
*/
|
|
363
|
-
public disableTextTrack(): void {
|
|
364
|
-
disableTextTracks(this._textTracks);
|
|
365
|
-
this._textTrackLockedOn = null;
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
/**
|
|
369
|
-
* Update the currently active text track by setting the wanted text track's
|
|
370
|
-
* ID property.
|
|
371
|
-
* Throws if the wanted text track is not found.
|
|
372
|
-
* @param {string|number|undefined} id
|
|
373
|
-
*/
|
|
374
|
-
public setTextTrackById(id?: string|number): void {
|
|
375
|
-
let hasSetTrack = false;
|
|
376
|
-
for (let i = 0; i < this._textTracks.length; i++) {
|
|
377
|
-
const { track, nativeTrack } = this._textTracks[i];
|
|
378
|
-
if (track.id === id) {
|
|
379
|
-
nativeTrack.mode = "showing";
|
|
380
|
-
hasSetTrack = true;
|
|
381
|
-
this._textTrackLockedOn = nativeTrack;
|
|
382
|
-
} else if (nativeTrack.mode === "showing" || nativeTrack.mode === "hidden") {
|
|
383
|
-
nativeTrack.mode = "disabled";
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
if (!hasSetTrack) {
|
|
387
|
-
throw new Error("Text track not found.");
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
/**
|
|
392
|
-
* Disable the currently-active video track, if one.
|
|
393
|
-
*/
|
|
394
|
-
public disableVideoTrack(): void {
|
|
395
|
-
disableVideoTracks(this._videoTracks);
|
|
396
|
-
this._videoTrackLockedOn = null;
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
/**
|
|
400
|
-
* Update the currently active video track by setting the wanted video track's
|
|
401
|
-
* ID property.
|
|
402
|
-
* Throws if the wanted video track is not found.
|
|
403
|
-
* @param {string|number|undefined} id
|
|
404
|
-
*/
|
|
405
|
-
public setVideoTrackById(id?: string | number): void {
|
|
406
|
-
for (let i = 0; i < this._videoTracks.length; i++) {
|
|
407
|
-
const { track, nativeTrack } = this._videoTracks[i];
|
|
408
|
-
if (track.id === id) {
|
|
409
|
-
nativeTrack.selected = true;
|
|
410
|
-
this._videoTrackLockedOn = nativeTrack;
|
|
411
|
-
return;
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
throw new Error("Video track not found.");
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
/**
|
|
418
|
-
* Returns the currently active audio track.
|
|
419
|
-
* Returns `null` if no audio track is active.
|
|
420
|
-
* Returns `undefined` if we cannot know which audio track is active.
|
|
421
|
-
* @returns {Object|null|undefined}
|
|
422
|
-
*/
|
|
423
|
-
public getChosenAudioTrack(): IAudioTrack|null|undefined {
|
|
424
|
-
const chosenPrivateAudioTrack = this._getPrivateChosenAudioTrack();
|
|
425
|
-
if (chosenPrivateAudioTrack != null) {
|
|
426
|
-
return chosenPrivateAudioTrack.track;
|
|
427
|
-
}
|
|
428
|
-
return chosenPrivateAudioTrack;
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
/**
|
|
432
|
-
* Returns the currently active text track.
|
|
433
|
-
* Returns `null` if no text track is active.
|
|
434
|
-
* Returns `undefined` if we cannot know which text track is active.
|
|
435
|
-
* @returns {Object|null|undefined}
|
|
436
|
-
*/
|
|
437
|
-
public getChosenTextTrack(): ITextTrack|null|undefined {
|
|
438
|
-
const chosenPrivateTextTrack = this._getPrivateChosenTextTrack();
|
|
439
|
-
if (chosenPrivateTextTrack != null) {
|
|
440
|
-
return chosenPrivateTextTrack.track;
|
|
441
|
-
}
|
|
442
|
-
return chosenPrivateTextTrack;
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
/**
|
|
446
|
-
* Returns the currently active video track.
|
|
447
|
-
* Returns `null` if no video track is active.
|
|
448
|
-
* Returns `undefined` if we cannot know which video track is active.
|
|
449
|
-
* @returns {Object|null|undefined}
|
|
450
|
-
*/
|
|
451
|
-
public getChosenVideoTrack(): IVideoTrack|null|undefined {
|
|
452
|
-
const chosenPrivateVideoTrack = this._getPrivateChosenVideoTrack();
|
|
453
|
-
if (chosenPrivateVideoTrack != null) {
|
|
454
|
-
return chosenPrivateVideoTrack.track;
|
|
455
|
-
}
|
|
456
|
-
return chosenPrivateVideoTrack;
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
/**
|
|
460
|
-
* Returns a description of every available audio tracks.
|
|
461
|
-
* @returns {Array.<Object>}
|
|
462
|
-
*/
|
|
463
|
-
public getAvailableAudioTracks(): IAvailableAudioTrack[] {
|
|
464
|
-
return this._audioTracks.map(({ track, nativeTrack }) => {
|
|
465
|
-
return { id: track.id,
|
|
466
|
-
language: track.language,
|
|
467
|
-
normalized: track.normalized,
|
|
468
|
-
audioDescription: track.audioDescription,
|
|
469
|
-
active: nativeTrack.enabled,
|
|
470
|
-
representations: track.representations };
|
|
471
|
-
});
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
/**
|
|
475
|
-
* Returns a description of every available text tracks.
|
|
476
|
-
* @returns {Array.<Object>}
|
|
477
|
-
*/
|
|
478
|
-
public getAvailableTextTracks(): IAvailableTextTrack[] {
|
|
479
|
-
return this._textTracks.map(({ track, nativeTrack }) => {
|
|
480
|
-
return { id: track.id,
|
|
481
|
-
label: track.label,
|
|
482
|
-
forced: track.forced,
|
|
483
|
-
language: track.language,
|
|
484
|
-
normalized: track.normalized,
|
|
485
|
-
closedCaption: track.closedCaption,
|
|
486
|
-
active: nativeTrack.mode === "showing" };
|
|
487
|
-
});
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
/**
|
|
491
|
-
* Returns a description of every available video tracks.
|
|
492
|
-
* @returns {Array.<Object>}
|
|
493
|
-
*/
|
|
494
|
-
public getAvailableVideoTracks(): IAvailableVideoTrack[] {
|
|
495
|
-
return this._videoTracks.map(({ track, nativeTrack }) => {
|
|
496
|
-
return { id: track.id,
|
|
497
|
-
representations: track.representations,
|
|
498
|
-
active: nativeTrack.selected };
|
|
499
|
-
});
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
/**
|
|
503
|
-
* Free the resources used by the MediaElementTrackChoiceManager.
|
|
504
|
-
*/
|
|
505
|
-
public dispose(): void {
|
|
506
|
-
if (this._nativeVideoTracks !== undefined) {
|
|
507
|
-
this._nativeVideoTracks.onchange = null;
|
|
508
|
-
this._nativeVideoTracks.onaddtrack = null;
|
|
509
|
-
this._nativeVideoTracks.onremovetrack = null;
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
if (this._nativeAudioTracks !== undefined) {
|
|
513
|
-
this._nativeAudioTracks.onchange = null;
|
|
514
|
-
this._nativeAudioTracks.onaddtrack = null;
|
|
515
|
-
this._nativeAudioTracks.onremovetrack = null;
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
if (this._nativeTextTracks !== undefined) {
|
|
519
|
-
this._nativeTextTracks.onchange = null;
|
|
520
|
-
this._nativeTextTracks.onaddtrack = null;
|
|
521
|
-
this._nativeTextTracks.onremovetrack = null;
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
this.removeEventListener();
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
/**
|
|
528
|
-
* Get information about the currently chosen audio track.
|
|
529
|
-
* `undefined` if we cannot know it.
|
|
530
|
-
* `null` if no audio track is chosen.
|
|
531
|
-
* @returns {Object|undefined|null}
|
|
532
|
-
*/
|
|
533
|
-
private _getPrivateChosenAudioTrack(): { track: IAudioTrack;
|
|
534
|
-
nativeTrack: ICompatAudioTrack; } |
|
|
535
|
-
undefined |
|
|
536
|
-
null {
|
|
537
|
-
if (this._nativeAudioTracks === undefined) {
|
|
538
|
-
return undefined;
|
|
539
|
-
}
|
|
540
|
-
for (let i = 0; i < this._audioTracks.length; i++) {
|
|
541
|
-
const audioTrack = this._audioTracks[i];
|
|
542
|
-
if (audioTrack.nativeTrack.enabled) {
|
|
543
|
-
return audioTrack;
|
|
544
|
-
}
|
|
545
|
-
}
|
|
546
|
-
return null;
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
/**
|
|
550
|
-
* Get information about the currently chosen video track.
|
|
551
|
-
* `undefined` if we cannot know it.
|
|
552
|
-
* `null` if no video track is chosen.
|
|
553
|
-
* @returns {Object|undefined|null}
|
|
554
|
-
*/
|
|
555
|
-
private _getPrivateChosenVideoTrack(): { track: IVideoTrack;
|
|
556
|
-
nativeTrack: ICompatVideoTrack; } |
|
|
557
|
-
undefined |
|
|
558
|
-
null {
|
|
559
|
-
if (this._nativeVideoTracks === undefined) {
|
|
560
|
-
return undefined;
|
|
561
|
-
}
|
|
562
|
-
for (let i = 0; i < this._videoTracks.length; i++) {
|
|
563
|
-
const videoTrack = this._videoTracks[i];
|
|
564
|
-
if (videoTrack.nativeTrack.selected) {
|
|
565
|
-
return videoTrack;
|
|
566
|
-
}
|
|
567
|
-
}
|
|
568
|
-
return null;
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
/**
|
|
572
|
-
* Get information about the currently chosen text track.
|
|
573
|
-
* `undefined` if we cannot know it.
|
|
574
|
-
* `null` if no text track is chosen.
|
|
575
|
-
* @returns {Object|undefined|null}
|
|
576
|
-
*/
|
|
577
|
-
private _getPrivateChosenTextTrack(): { track: ITextTrack;
|
|
578
|
-
nativeTrack: TextTrack; } |
|
|
579
|
-
undefined |
|
|
580
|
-
null {
|
|
581
|
-
if (this._nativeTextTracks === undefined) {
|
|
582
|
-
return undefined;
|
|
583
|
-
}
|
|
584
|
-
for (let i = 0; i < this._textTracks.length; i++) {
|
|
585
|
-
const textTrack = this._textTracks[i];
|
|
586
|
-
if (textTrack.nativeTrack.mode === "showing") {
|
|
587
|
-
return textTrack;
|
|
588
|
-
}
|
|
589
|
-
}
|
|
590
|
-
return null;
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
/**
|
|
594
|
-
* Iterate over every available audio tracks on the media element and either:
|
|
595
|
-
* - if the last manually set audio track is found, set that one.
|
|
596
|
-
* - if not, set the most preferred one
|
|
597
|
-
* - if we still do not find an optimal track, let the one chosen by default
|
|
598
|
-
*/
|
|
599
|
-
private _setOptimalAudioTrack() : void {
|
|
600
|
-
// First check if the last set track is available, set it if that's the case
|
|
601
|
-
if (this._audioTrackLockedOn !== undefined) {
|
|
602
|
-
for (let i = 0; i < this._audioTracks.length; i++) {
|
|
603
|
-
const { nativeTrack } = this._audioTracks[i];
|
|
604
|
-
if (nativeTrack === this._audioTrackLockedOn) {
|
|
605
|
-
this._enableAudioTrackFromIndex(i);
|
|
606
|
-
return;
|
|
607
|
-
}
|
|
608
|
-
}
|
|
609
|
-
}
|
|
610
|
-
this._applyAudioPreferences();
|
|
611
|
-
}
|
|
612
|
-
|
|
613
|
-
/**
|
|
614
|
-
* Try to find a track corresponding to the audio track preferences:
|
|
615
|
-
* - if found, set it as the active track
|
|
616
|
-
* - if not found, let the chosen audio track by default
|
|
617
|
-
*/
|
|
618
|
-
private _applyAudioPreferences() : void {
|
|
619
|
-
// Re-set the last manually set audio track
|
|
620
|
-
this._audioTrackLockedOn = undefined;
|
|
621
|
-
|
|
622
|
-
const preferredAudioTracks = this._preferredAudioTracks;
|
|
623
|
-
for (let i = 0; i < preferredAudioTracks.length; i++) {
|
|
624
|
-
const track = preferredAudioTracks[i];
|
|
625
|
-
if (track !== null && track.language !== undefined) {
|
|
626
|
-
const normalized = normalizeLanguage(track.language);
|
|
627
|
-
for (let j = 0; j < this._audioTracks.length; j++) {
|
|
628
|
-
const audioTrack = this._audioTracks[j];
|
|
629
|
-
if (audioTrack.track.normalized === normalized &&
|
|
630
|
-
audioTrack.track.audioDescription === track.audioDescription
|
|
631
|
-
) {
|
|
632
|
-
this._enableAudioTrackFromIndex(j);
|
|
633
|
-
return;
|
|
634
|
-
}
|
|
635
|
-
}
|
|
636
|
-
}
|
|
637
|
-
}
|
|
638
|
-
|
|
639
|
-
// else just let the default one instead
|
|
640
|
-
}
|
|
641
|
-
|
|
642
|
-
/**
|
|
643
|
-
* Iterate over every available text tracks on the media element and either:
|
|
644
|
-
* - if the last manually set text track is found, set that one.
|
|
645
|
-
* - if not, set the most preferred one
|
|
646
|
-
* - if we still do not find an optimal track, just disable it.
|
|
647
|
-
*/
|
|
648
|
-
private _setOptimalTextTrack() : void {
|
|
649
|
-
// First check if the last set track is available, set it if that's the case
|
|
650
|
-
if (this._textTrackLockedOn === null) {
|
|
651
|
-
disableTextTracks(this._textTracks);
|
|
652
|
-
return;
|
|
653
|
-
} else if (this._textTrackLockedOn !== undefined) {
|
|
654
|
-
for (let i = 0; i < this._textTracks.length; i++) {
|
|
655
|
-
const { nativeTrack } = this._textTracks[i];
|
|
656
|
-
if (nativeTrack === this._textTrackLockedOn) {
|
|
657
|
-
// disable the rest
|
|
658
|
-
disableAllTextTracksBut(this._textTracks, nativeTrack);
|
|
659
|
-
|
|
660
|
-
if (nativeTrack.mode !== "showing") {
|
|
661
|
-
nativeTrack.mode = "showing";
|
|
662
|
-
}
|
|
663
|
-
return;
|
|
664
|
-
}
|
|
665
|
-
}
|
|
666
|
-
}
|
|
667
|
-
|
|
668
|
-
// Else set the preferred one
|
|
669
|
-
this._applyTextPreferences();
|
|
670
|
-
}
|
|
671
|
-
|
|
672
|
-
/**
|
|
673
|
-
* Try to find a track corresponding to the text track preferences:
|
|
674
|
-
* - if found, set it as the active track
|
|
675
|
-
* - if not found, let the chosen text track by default
|
|
676
|
-
*/
|
|
677
|
-
private _applyTextPreferences() : void {
|
|
678
|
-
// Re-set the last manually set audio track
|
|
679
|
-
this._textTrackLockedOn = undefined;
|
|
680
|
-
|
|
681
|
-
const preferredTextTracks = this._preferredTextTracks;
|
|
682
|
-
for (let i = 0; i < preferredTextTracks.length; i++) {
|
|
683
|
-
const track = preferredTextTracks[i];
|
|
684
|
-
if (track === null) {
|
|
685
|
-
disableTextTracks(this._textTracks);
|
|
686
|
-
return;
|
|
687
|
-
}
|
|
688
|
-
const normalized = normalizeLanguage(track.language);
|
|
689
|
-
for (let j = 0; j < this._textTracks.length; j++) {
|
|
690
|
-
const textTrack = this._textTracks[j];
|
|
691
|
-
if (textTrack.track.normalized === normalized &&
|
|
692
|
-
textTrack.track.closedCaption === track.closedCaption
|
|
693
|
-
) {
|
|
694
|
-
// disable the rest
|
|
695
|
-
disableAllTextTracksBut(this._textTracks, textTrack.nativeTrack);
|
|
696
|
-
|
|
697
|
-
if (textTrack.nativeTrack.mode !== "showing") {
|
|
698
|
-
textTrack.nativeTrack.mode = "showing";
|
|
699
|
-
}
|
|
700
|
-
return;
|
|
701
|
-
}
|
|
702
|
-
}
|
|
703
|
-
}
|
|
704
|
-
|
|
705
|
-
// Else just disable text tracks
|
|
706
|
-
disableTextTracks(this._textTracks);
|
|
707
|
-
}
|
|
708
|
-
|
|
709
|
-
/**
|
|
710
|
-
* Iterate over every available video tracks on the media element and either:
|
|
711
|
-
* - if the last manually set video track is found, set that one.
|
|
712
|
-
* - if not, set the most preferred one
|
|
713
|
-
* - if we still do not find an optimal track, let the one chosen by default
|
|
714
|
-
*/
|
|
715
|
-
private _setOptimalVideoTrack() : void {
|
|
716
|
-
// 1. first check if the last set track is available, set it if that's the case
|
|
717
|
-
if (this._videoTrackLockedOn === null) {
|
|
718
|
-
disableVideoTracks(this._videoTracks);
|
|
719
|
-
return;
|
|
720
|
-
} else if (this._videoTrackLockedOn !== undefined) {
|
|
721
|
-
for (let i = 0; i < this._videoTracks.length; i++) {
|
|
722
|
-
const { nativeTrack } = this._videoTracks[i];
|
|
723
|
-
if (nativeTrack === this._videoTrackLockedOn) {
|
|
724
|
-
nativeTrack.selected = true;
|
|
725
|
-
return;
|
|
726
|
-
}
|
|
727
|
-
}
|
|
728
|
-
}
|
|
729
|
-
|
|
730
|
-
// Else set the preferred one
|
|
731
|
-
this._applyVideoPreferences();
|
|
732
|
-
}
|
|
733
|
-
|
|
734
|
-
/**
|
|
735
|
-
* Try to find a track corresponding to the text track preferences:
|
|
736
|
-
* - if found, set it as the active track
|
|
737
|
-
* - if not found, let the chosen text track by default
|
|
738
|
-
*/
|
|
739
|
-
private _applyVideoPreferences() : void {
|
|
740
|
-
// Re-set the last manually set video track
|
|
741
|
-
this._videoTrackLockedOn = undefined;
|
|
742
|
-
|
|
743
|
-
// NOTE: As we cannot access either codec information or sign interpretation
|
|
744
|
-
// information easily about the different codecs. It is the same case than
|
|
745
|
-
// if we had only tracks where those were set to undefined.
|
|
746
|
-
// Based on that, we should disable the video track as long as one of the
|
|
747
|
-
// set preferrence is "no video track" (i.e. `null`) as this is the only
|
|
748
|
-
// constraint that we know we can respect.
|
|
749
|
-
// Else, just chose the first track.
|
|
750
|
-
const preferredVideoTracks = this._preferredVideoTracks;
|
|
751
|
-
const hasNullPreference = preferredVideoTracks.some(p => p === null);
|
|
752
|
-
if (hasNullPreference) {
|
|
753
|
-
disableVideoTracks(this._videoTracks);
|
|
754
|
-
}
|
|
755
|
-
// else just let the default one instead
|
|
756
|
-
}
|
|
757
|
-
|
|
758
|
-
/**
|
|
759
|
-
* Monitor native tracks add, remove and change callback and trigger the
|
|
760
|
-
* change events.
|
|
761
|
-
*/
|
|
762
|
-
private _handleNativeTracksCallbacks(): void {
|
|
763
|
-
if (this._nativeAudioTracks !== undefined) {
|
|
764
|
-
this._nativeAudioTracks.onaddtrack = () => {
|
|
765
|
-
if (this._nativeAudioTracks !== undefined) {
|
|
766
|
-
const newAudioTracks = createAudioTracks(this._nativeAudioTracks);
|
|
767
|
-
if (areTrackArraysDifferent(this._audioTracks, newAudioTracks)) {
|
|
768
|
-
this._audioTracks = newAudioTracks;
|
|
769
|
-
this._setOptimalAudioTrack();
|
|
770
|
-
this.trigger("availableAudioTracksChange", this.getAvailableAudioTracks());
|
|
771
|
-
const chosenAudioTrack = this._getPrivateChosenAudioTrack();
|
|
772
|
-
if (chosenAudioTrack?.nativeTrack !== this._lastEmittedNativeAudioTrack) {
|
|
773
|
-
this.trigger("audioTrackChange", chosenAudioTrack?.track ?? null);
|
|
774
|
-
this._lastEmittedNativeAudioTrack = chosenAudioTrack?.nativeTrack ?? null;
|
|
775
|
-
}
|
|
776
|
-
}
|
|
777
|
-
}
|
|
778
|
-
};
|
|
779
|
-
this._nativeAudioTracks.onremovetrack = () => {
|
|
780
|
-
if (this._nativeAudioTracks !== undefined) {
|
|
781
|
-
const newAudioTracks = createAudioTracks(this._nativeAudioTracks);
|
|
782
|
-
if (areTrackArraysDifferent(this._audioTracks, newAudioTracks)) {
|
|
783
|
-
this._audioTracks = newAudioTracks;
|
|
784
|
-
this.trigger("availableAudioTracksChange", this.getAvailableAudioTracks());
|
|
785
|
-
const chosenAudioTrack = this._getPrivateChosenAudioTrack();
|
|
786
|
-
if (chosenAudioTrack?.nativeTrack !== this._lastEmittedNativeAudioTrack) {
|
|
787
|
-
this.trigger("audioTrackChange", chosenAudioTrack?.track ?? null);
|
|
788
|
-
this._lastEmittedNativeAudioTrack = chosenAudioTrack?.nativeTrack ?? null;
|
|
789
|
-
}
|
|
790
|
-
}
|
|
791
|
-
}
|
|
792
|
-
};
|
|
793
|
-
this._nativeAudioTracks.onchange = () => {
|
|
794
|
-
if (this._audioTracks !== undefined) {
|
|
795
|
-
for (let i = 0; i < this._audioTracks.length; i++) {
|
|
796
|
-
const { track, nativeTrack } = this._audioTracks[i];
|
|
797
|
-
if (nativeTrack.enabled) {
|
|
798
|
-
if (nativeTrack !== this._lastEmittedNativeAudioTrack) {
|
|
799
|
-
this.trigger("audioTrackChange", track);
|
|
800
|
-
this._lastEmittedNativeAudioTrack = nativeTrack;
|
|
801
|
-
}
|
|
802
|
-
return;
|
|
803
|
-
}
|
|
804
|
-
}
|
|
805
|
-
}
|
|
806
|
-
if (this._lastEmittedNativeAudioTrack !== null) {
|
|
807
|
-
this.trigger("audioTrackChange", null);
|
|
808
|
-
this._lastEmittedNativeAudioTrack = null;
|
|
809
|
-
}
|
|
810
|
-
return;
|
|
811
|
-
};
|
|
812
|
-
}
|
|
813
|
-
|
|
814
|
-
if (this._nativeTextTracks !== undefined) {
|
|
815
|
-
this._nativeTextTracks.onaddtrack = () => {
|
|
816
|
-
if (this._nativeTextTracks !== undefined) {
|
|
817
|
-
const newTextTracks = createTextTracks(this._nativeTextTracks);
|
|
818
|
-
if (areTrackArraysDifferent(this._textTracks, newTextTracks)) {
|
|
819
|
-
this._textTracks = newTextTracks;
|
|
820
|
-
this._setOptimalTextTrack();
|
|
821
|
-
this.trigger("availableTextTracksChange", this.getAvailableTextTracks());
|
|
822
|
-
const chosenTextTrack = this._getPrivateChosenTextTrack();
|
|
823
|
-
if (chosenTextTrack?.nativeTrack !== this._lastEmittedNativeTextTrack) {
|
|
824
|
-
this.trigger("textTrackChange", chosenTextTrack?.track ?? null);
|
|
825
|
-
this._lastEmittedNativeTextTrack = chosenTextTrack?.nativeTrack ?? null;
|
|
826
|
-
}
|
|
827
|
-
}
|
|
828
|
-
}
|
|
829
|
-
};
|
|
830
|
-
this._nativeTextTracks.onremovetrack = () => {
|
|
831
|
-
if (this._nativeTextTracks !== undefined) {
|
|
832
|
-
const newTextTracks = createTextTracks(this._nativeTextTracks);
|
|
833
|
-
if (areTrackArraysDifferent(this._textTracks, newTextTracks)) {
|
|
834
|
-
this._textTracks = newTextTracks;
|
|
835
|
-
this._setOptimalTextTrack();
|
|
836
|
-
this.trigger("availableTextTracksChange", this.getAvailableTextTracks());
|
|
837
|
-
const chosenTextTrack = this._getPrivateChosenTextTrack();
|
|
838
|
-
if (chosenTextTrack?.nativeTrack !== this._lastEmittedNativeTextTrack) {
|
|
839
|
-
this.trigger("textTrackChange", chosenTextTrack?.track ?? null);
|
|
840
|
-
this._lastEmittedNativeTextTrack = chosenTextTrack?.nativeTrack ?? null;
|
|
841
|
-
}
|
|
842
|
-
}
|
|
843
|
-
}
|
|
844
|
-
};
|
|
845
|
-
this._nativeTextTracks.onchange = () => {
|
|
846
|
-
if (this._textTracks !== undefined) {
|
|
847
|
-
for (let i = 0; i < this._textTracks.length; i++) {
|
|
848
|
-
const { track, nativeTrack } = this._textTracks[i];
|
|
849
|
-
if (nativeTrack.mode === "showing") {
|
|
850
|
-
if (nativeTrack !== this._lastEmittedNativeTextTrack) {
|
|
851
|
-
this.trigger("textTrackChange", track);
|
|
852
|
-
this._lastEmittedNativeTextTrack = nativeTrack;
|
|
853
|
-
}
|
|
854
|
-
return;
|
|
855
|
-
}
|
|
856
|
-
}
|
|
857
|
-
}
|
|
858
|
-
if (this._lastEmittedNativeTextTrack !== null) {
|
|
859
|
-
this.trigger("textTrackChange", null);
|
|
860
|
-
this._lastEmittedNativeTextTrack = null;
|
|
861
|
-
}
|
|
862
|
-
return;
|
|
863
|
-
};
|
|
864
|
-
}
|
|
865
|
-
|
|
866
|
-
if (this._nativeVideoTracks !== undefined) {
|
|
867
|
-
this._nativeVideoTracks.onaddtrack = () => {
|
|
868
|
-
if (this._nativeVideoTracks !== undefined) {
|
|
869
|
-
const newVideoTracks = createVideoTracks(this._nativeVideoTracks);
|
|
870
|
-
if (areTrackArraysDifferent(this._videoTracks, newVideoTracks)) {
|
|
871
|
-
this._videoTracks = newVideoTracks;
|
|
872
|
-
this._setOptimalVideoTrack();
|
|
873
|
-
this.trigger("availableVideoTracksChange", this.getAvailableVideoTracks());
|
|
874
|
-
const chosenVideoTrack = this._getPrivateChosenVideoTrack();
|
|
875
|
-
if (chosenVideoTrack?.nativeTrack !== this._lastEmittedNativeVideoTrack) {
|
|
876
|
-
this.trigger("videoTrackChange", chosenVideoTrack?.track ?? null);
|
|
877
|
-
this._lastEmittedNativeVideoTrack = chosenVideoTrack?.nativeTrack ?? null;
|
|
878
|
-
}
|
|
879
|
-
}
|
|
880
|
-
}
|
|
881
|
-
};
|
|
882
|
-
this._nativeVideoTracks.onremovetrack = () => {
|
|
883
|
-
if (this._nativeVideoTracks !== undefined) {
|
|
884
|
-
const newVideoTracks = createVideoTracks(this._nativeVideoTracks);
|
|
885
|
-
if (areTrackArraysDifferent(this._videoTracks, newVideoTracks)) {
|
|
886
|
-
this._videoTracks = newVideoTracks;
|
|
887
|
-
this._setOptimalVideoTrack();
|
|
888
|
-
this.trigger("availableVideoTracksChange", this.getAvailableVideoTracks());
|
|
889
|
-
const chosenVideoTrack = this._getPrivateChosenVideoTrack();
|
|
890
|
-
if (chosenVideoTrack?.nativeTrack !== this._lastEmittedNativeVideoTrack) {
|
|
891
|
-
this.trigger("videoTrackChange", chosenVideoTrack?.track ?? null);
|
|
892
|
-
this._lastEmittedNativeVideoTrack = chosenVideoTrack?.nativeTrack ?? null;
|
|
893
|
-
}
|
|
894
|
-
}
|
|
895
|
-
}
|
|
896
|
-
};
|
|
897
|
-
this._nativeVideoTracks.onchange = () => {
|
|
898
|
-
if (this._videoTracks !== undefined) {
|
|
899
|
-
for (let i = 0; i < this._videoTracks.length; i++) {
|
|
900
|
-
const { track, nativeTrack } = this._videoTracks[i];
|
|
901
|
-
if (nativeTrack.selected) {
|
|
902
|
-
if (nativeTrack !== this._lastEmittedNativeVideoTrack) {
|
|
903
|
-
this.trigger("videoTrackChange", track);
|
|
904
|
-
this._lastEmittedNativeVideoTrack = nativeTrack;
|
|
905
|
-
}
|
|
906
|
-
return;
|
|
907
|
-
}
|
|
908
|
-
}
|
|
909
|
-
}
|
|
910
|
-
if (this._lastEmittedNativeVideoTrack !== null) {
|
|
911
|
-
this.trigger("videoTrackChange", null);
|
|
912
|
-
this._lastEmittedNativeVideoTrack = null;
|
|
913
|
-
}
|
|
914
|
-
return;
|
|
915
|
-
};
|
|
916
|
-
}
|
|
917
|
-
}
|
|
918
|
-
|
|
919
|
-
/**
|
|
920
|
-
* Enable an audio track (and disable all others), based on its index in the
|
|
921
|
-
* `this._audioTracks` array.
|
|
922
|
-
* @param {number} index}
|
|
923
|
-
*/
|
|
924
|
-
private _enableAudioTrackFromIndex(index : number) : void {
|
|
925
|
-
enableAudioTrack(this._audioTracks.map(({ nativeTrack }) => nativeTrack),
|
|
926
|
-
index);
|
|
927
|
-
}
|
|
928
|
-
}
|
|
929
|
-
|
|
930
|
-
/**
|
|
931
|
-
* Disable all text track elements in the given array from showing.
|
|
932
|
-
* @param {Array.<Object>} textTracks
|
|
933
|
-
*/
|
|
934
|
-
function disableTextTracks(
|
|
935
|
-
textTracks : Array<{ nativeTrack : TextTrack }>
|
|
936
|
-
) {
|
|
937
|
-
for (let i = 0; i < textTracks.length; i++) {
|
|
938
|
-
const { nativeTrack } = textTracks[i];
|
|
939
|
-
nativeTrack.mode = "disabled";
|
|
940
|
-
}
|
|
941
|
-
}
|
|
942
|
-
|
|
943
|
-
/**
|
|
944
|
-
* Disable all text track elements in the given array from showing but one which
|
|
945
|
-
* should stay in the same state it was before.
|
|
946
|
-
* @param {Array.<Object>} textTracks
|
|
947
|
-
* @param {TextTrack} track
|
|
948
|
-
*/
|
|
949
|
-
function disableAllTextTracksBut(
|
|
950
|
-
textTracks : Array<{ nativeTrack : TextTrack }>,
|
|
951
|
-
track : TextTrack
|
|
952
|
-
) {
|
|
953
|
-
for (let i = 0; i < textTracks.length; i++) {
|
|
954
|
-
const { nativeTrack } = textTracks[i];
|
|
955
|
-
if (nativeTrack !== track &&
|
|
956
|
-
(nativeTrack.mode === "showing" || nativeTrack.mode === "hidden"))
|
|
957
|
-
{
|
|
958
|
-
nativeTrack.mode = "disabled";
|
|
959
|
-
}
|
|
960
|
-
}
|
|
961
|
-
}
|
|
962
|
-
|
|
963
|
-
/**
|
|
964
|
-
* Disable all video track elements in the given array from showing.
|
|
965
|
-
* Note that browser need to support that use case, which they often do not.
|
|
966
|
-
* @param {Array.<Object>} videoTracks
|
|
967
|
-
*/
|
|
968
|
-
function disableVideoTracks(
|
|
969
|
-
videoTracks : Array<{ nativeTrack : ICompatVideoTrack }>
|
|
970
|
-
) {
|
|
971
|
-
for (let i = 0; i < videoTracks.length; i++) {
|
|
972
|
-
const { nativeTrack } = videoTracks[i];
|
|
973
|
-
nativeTrack.selected = false;
|
|
974
|
-
}
|
|
975
|
-
}
|