rx-player 3.33.0 → 3.33.2
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,994 +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
|
-
import config from "../../config";
|
|
18
|
-
import log from "../../log";
|
|
19
|
-
import noop from "../../utils/noop";
|
|
20
|
-
import objectAssign from "../../utils/object_assign";
|
|
21
|
-
import { getRange } from "../../utils/ranges";
|
|
22
|
-
import SharedReference, {
|
|
23
|
-
IReadOnlySharedReference,
|
|
24
|
-
} from "../../utils/reference";
|
|
25
|
-
import TaskCanceller, {
|
|
26
|
-
CancellationSignal,
|
|
27
|
-
} from "../../utils/task_canceller";
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* HTMLMediaElement Events for which playback observations are calculated and
|
|
31
|
-
* emitted.
|
|
32
|
-
* @type {Array.<string>}
|
|
33
|
-
*/
|
|
34
|
-
const SCANNED_MEDIA_ELEMENTS_EVENTS : IPlaybackObserverEventType[] = [ "canplay",
|
|
35
|
-
"ended",
|
|
36
|
-
"play",
|
|
37
|
-
"pause",
|
|
38
|
-
"seeking",
|
|
39
|
-
"seeked",
|
|
40
|
-
"loadedmetadata",
|
|
41
|
-
"ratechange" ];
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Class allowing to "observe" current playback conditions so the RxPlayer is
|
|
45
|
-
* then able to react upon them.
|
|
46
|
-
*
|
|
47
|
-
* This is a central class of the RxPlayer as many modules rely on the
|
|
48
|
-
* `PlaybackObserver` to know the current state of the media being played.
|
|
49
|
-
*
|
|
50
|
-
* You can use the PlaybackObserver to either get the last observation
|
|
51
|
-
* performed, get the current media state or listen to media observation sent
|
|
52
|
-
* at a regular interval.
|
|
53
|
-
*
|
|
54
|
-
* @class {PlaybackObserver}
|
|
55
|
-
*/
|
|
56
|
-
export default class PlaybackObserver {
|
|
57
|
-
|
|
58
|
-
/** HTMLMediaElement which we want to observe. */
|
|
59
|
-
private _mediaElement : HTMLMediaElement;
|
|
60
|
-
|
|
61
|
-
/** If `true`, a `MediaSource` object is linked to `_mediaElement`. */
|
|
62
|
-
private _withMediaSource : boolean;
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* If `true`, we're playing in a low-latency mode, which might have an
|
|
66
|
-
* influence on some chosen interval values here.
|
|
67
|
-
*/
|
|
68
|
-
private _lowLatencyMode : boolean;
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* The RxPlayer usually wants to differientate when a seek was sourced from
|
|
72
|
-
* the RxPlayer's internal logic vs when it was sourced from an outside
|
|
73
|
-
* application code.
|
|
74
|
-
*
|
|
75
|
-
* To implement this in the PlaybackObserver, we maintain this counter
|
|
76
|
-
* allowing to know when a "seeking" event received from a `HTMLMediaElement`
|
|
77
|
-
* was due to an "internal seek" or an external seek:
|
|
78
|
-
* - This counter is incremented each time an "internal seek" (seek from the
|
|
79
|
-
* inside of the RxPlayer has been performed.
|
|
80
|
-
* - This counter is decremented each time we received a "seeking" event.
|
|
81
|
-
*
|
|
82
|
-
* This allows us to correctly characterize seeking events: if the counter is
|
|
83
|
-
* superior to `0`, it is probably due to an internal "seek".
|
|
84
|
-
*/
|
|
85
|
-
private _internalSeeksIncoming : number[];
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Stores the last playback observation produced by the `PlaybackObserver`.:
|
|
89
|
-
*/
|
|
90
|
-
private _observationRef : IReadOnlySharedReference<IPlaybackObservation>;
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* `TaskCanceller` allowing to free all resources and stop producing playback
|
|
94
|
-
* observations.
|
|
95
|
-
*/
|
|
96
|
-
private _canceller : TaskCanceller;
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Create a new `PlaybackObserver`, which allows to produce new "playback
|
|
100
|
-
* observations" on various media events and intervals.
|
|
101
|
-
*
|
|
102
|
-
* Note that creating a `PlaybackObserver` lead to the usage of resources,
|
|
103
|
-
* such as event listeners which will only be freed once the `stop` method is
|
|
104
|
-
* called.
|
|
105
|
-
* @param {HTMLMediaElement} mediaElement
|
|
106
|
-
* @param {Object} options
|
|
107
|
-
*/
|
|
108
|
-
constructor(mediaElement : HTMLMediaElement, options : IPlaybackObserverOptions) {
|
|
109
|
-
this._internalSeeksIncoming = [];
|
|
110
|
-
this._mediaElement = mediaElement;
|
|
111
|
-
this._withMediaSource = options.withMediaSource;
|
|
112
|
-
this._lowLatencyMode = options.lowLatencyMode;
|
|
113
|
-
this._canceller = new TaskCanceller();
|
|
114
|
-
this._observationRef = this._createSharedReference();
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Stop the `PlaybackObserver` from emitting playback observations and free all
|
|
119
|
-
* resources reserved to emitting them such as event listeners and intervals.
|
|
120
|
-
*
|
|
121
|
-
* Once `stop` is called, no new playback observation will ever be emitted.
|
|
122
|
-
*
|
|
123
|
-
* Note that it is important to call stop once the `PlaybackObserver` is no
|
|
124
|
-
* more needed to avoid unnecessarily leaking resources.
|
|
125
|
-
*/
|
|
126
|
-
public stop() {
|
|
127
|
-
this._canceller.cancel();
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Returns the current position advertised by the `HTMLMediaElement`, in
|
|
132
|
-
* seconds.
|
|
133
|
-
* @returns {number}
|
|
134
|
-
*/
|
|
135
|
-
public getCurrentTime() : number {
|
|
136
|
-
return this._mediaElement.currentTime;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Returns the current playback rate advertised by the `HTMLMediaElement`.
|
|
141
|
-
* @returns {number}
|
|
142
|
-
*/
|
|
143
|
-
public getPlaybackRate() : number {
|
|
144
|
-
return this._mediaElement.playbackRate;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Returns the current `paused` status advertised by the `HTMLMediaElement`.
|
|
149
|
-
*
|
|
150
|
-
* Use this instead of the same status emitted on an observation when you want
|
|
151
|
-
* to be sure you're using the current value.
|
|
152
|
-
* @returns {boolean}
|
|
153
|
-
*/
|
|
154
|
-
public getIsPaused() : boolean {
|
|
155
|
-
return this._mediaElement.paused;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Update the current position (seek) on the `HTMLMediaElement`, by giving a
|
|
160
|
-
* new position in seconds.
|
|
161
|
-
*
|
|
162
|
-
* Note that seeks performed through this method are caracherized as
|
|
163
|
-
* "internal" seeks. They don't result into the exact same playback
|
|
164
|
-
* observation than regular seeks (which most likely comes from the outside,
|
|
165
|
-
* e.g. the user).
|
|
166
|
-
* @param {number} time
|
|
167
|
-
*/
|
|
168
|
-
public setCurrentTime(time: number) : void {
|
|
169
|
-
this._internalSeeksIncoming.push(time);
|
|
170
|
-
log.info("API: Seeking internally", time);
|
|
171
|
-
this._mediaElement.currentTime = time;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Update the playback rate of the `HTMLMediaElement`.
|
|
176
|
-
* @param {number} playbackRate
|
|
177
|
-
*/
|
|
178
|
-
public setPlaybackRate(playbackRate: number) : void {
|
|
179
|
-
this._mediaElement.playbackRate = playbackRate;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* Returns the current `readyState` advertised by the `HTMLMediaElement`.
|
|
184
|
-
* @returns {number}
|
|
185
|
-
*/
|
|
186
|
-
public getReadyState() : number {
|
|
187
|
-
return this._mediaElement.readyState;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Returns an `IReadOnlySharedReference` storing the last playback observation
|
|
192
|
-
* produced by the `PlaybackObserver` and updated each time a new one is
|
|
193
|
-
* produced.
|
|
194
|
-
*
|
|
195
|
-
* This value can then be for example listened to to be notified of future
|
|
196
|
-
* playback observations.
|
|
197
|
-
*
|
|
198
|
-
* @returns {Object}
|
|
199
|
-
*/
|
|
200
|
-
public getReference() : IReadOnlySharedReference<IPlaybackObservation> {
|
|
201
|
-
return this._observationRef;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* Register a callback so it regularly receives playback observations.
|
|
206
|
-
* @param {Function} cb
|
|
207
|
-
* @param {Object} options - Configuration options:
|
|
208
|
-
* - `includeLastObservation`: If set to `true` the last observation will
|
|
209
|
-
* be first emitted synchronously.
|
|
210
|
-
* - `clearSignal`: If set, the callback will be unregistered when this
|
|
211
|
-
* CancellationSignal emits.
|
|
212
|
-
*/
|
|
213
|
-
public listen(
|
|
214
|
-
cb : (
|
|
215
|
-
observation : IPlaybackObservation,
|
|
216
|
-
stopListening : () => void
|
|
217
|
-
) => void,
|
|
218
|
-
options? : { includeLastObservation? : boolean | undefined;
|
|
219
|
-
clearSignal? : CancellationSignal | undefined; }
|
|
220
|
-
) {
|
|
221
|
-
if (this._canceller.isUsed() || options?.clearSignal?.isCancelled() === true) {
|
|
222
|
-
return noop;
|
|
223
|
-
}
|
|
224
|
-
this._observationRef.onUpdate(cb, {
|
|
225
|
-
clearSignal: options?.clearSignal,
|
|
226
|
-
emitCurrentValue: options?.includeLastObservation,
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
/**
|
|
231
|
-
* Generate a new playback observer which can listen to other
|
|
232
|
-
* properties and which can only be accessed to read observations (e.g.
|
|
233
|
-
* it cannot ask to perform a seek).
|
|
234
|
-
*
|
|
235
|
-
* The object returned will respect the `IReadOnlyPlaybackObserver` interface
|
|
236
|
-
* and will inherit this `PlaybackObserver`'s lifecycle: it will emit when
|
|
237
|
-
* the latter emits.
|
|
238
|
-
*
|
|
239
|
-
* As argument, this method takes a function which will allow to produce
|
|
240
|
-
* the new set of properties to be present on each observation.
|
|
241
|
-
* @param {Function} transform
|
|
242
|
-
* @returns {Object}
|
|
243
|
-
*/
|
|
244
|
-
public deriveReadOnlyObserver<TDest>(
|
|
245
|
-
transform : (
|
|
246
|
-
observationRef : IReadOnlySharedReference<IPlaybackObservation>,
|
|
247
|
-
cancellationSignal : CancellationSignal
|
|
248
|
-
) => IReadOnlySharedReference<TDest>
|
|
249
|
-
) : IReadOnlyPlaybackObserver<TDest> {
|
|
250
|
-
return generateReadOnlyObserver(this, transform, this._canceller.signal);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
/**
|
|
254
|
-
* Creates the `IReadOnlySharedReference` that will generate playback
|
|
255
|
-
* observations.
|
|
256
|
-
* @returns {Object}
|
|
257
|
-
*/
|
|
258
|
-
private _createSharedReference() : IReadOnlySharedReference<IPlaybackObservation> {
|
|
259
|
-
if (this._observationRef !== undefined) {
|
|
260
|
-
return this._observationRef;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
let lastObservation : IPlaybackObservation | null;
|
|
264
|
-
const { SAMPLING_INTERVAL_MEDIASOURCE,
|
|
265
|
-
SAMPLING_INTERVAL_LOW_LATENCY,
|
|
266
|
-
SAMPLING_INTERVAL_NO_MEDIASOURCE } = config.getCurrent();
|
|
267
|
-
|
|
268
|
-
const getCurrentObservation = (
|
|
269
|
-
event : IPlaybackObserverEventType
|
|
270
|
-
) : IPlaybackObservation => {
|
|
271
|
-
let tmpEvt: IPlaybackObserverEventType = event;
|
|
272
|
-
let startedInternalSeekTime : number | undefined;
|
|
273
|
-
if (tmpEvt === "seeking" && this._internalSeeksIncoming.length > 0) {
|
|
274
|
-
tmpEvt = "internal-seeking";
|
|
275
|
-
startedInternalSeekTime = this._internalSeeksIncoming.shift();
|
|
276
|
-
}
|
|
277
|
-
const _lastObservation = lastObservation ?? this._generateInitialObservation();
|
|
278
|
-
const mediaTimings = getMediaInfos(this._mediaElement,
|
|
279
|
-
tmpEvt,
|
|
280
|
-
this._withMediaSource);
|
|
281
|
-
let pendingInternalSeek : number | null = null;
|
|
282
|
-
if (mediaTimings.seeking) {
|
|
283
|
-
if (typeof startedInternalSeekTime === "number") {
|
|
284
|
-
pendingInternalSeek = startedInternalSeekTime;
|
|
285
|
-
} else if (_lastObservation.pendingInternalSeek !== null && event !== "seeking") {
|
|
286
|
-
pendingInternalSeek = _lastObservation.pendingInternalSeek;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
const rebufferingStatus = getRebufferingStatus(
|
|
290
|
-
_lastObservation,
|
|
291
|
-
mediaTimings,
|
|
292
|
-
{ lowLatencyMode: this._lowLatencyMode,
|
|
293
|
-
withMediaSource: this._withMediaSource });
|
|
294
|
-
|
|
295
|
-
const freezingStatus = getFreezingStatus(_lastObservation, mediaTimings);
|
|
296
|
-
const timings = objectAssign(
|
|
297
|
-
{},
|
|
298
|
-
{ rebuffering: rebufferingStatus,
|
|
299
|
-
freezing: freezingStatus,
|
|
300
|
-
pendingInternalSeek },
|
|
301
|
-
mediaTimings);
|
|
302
|
-
if (log.hasLevel("DEBUG")) {
|
|
303
|
-
log.debug("API: current media element state tick",
|
|
304
|
-
"event", timings.event,
|
|
305
|
-
"position", timings.position,
|
|
306
|
-
"seeking", timings.seeking,
|
|
307
|
-
"internalSeek", timings.pendingInternalSeek,
|
|
308
|
-
"rebuffering", timings.rebuffering !== null,
|
|
309
|
-
"freezing", timings.freezing !== null,
|
|
310
|
-
"ended", timings.ended,
|
|
311
|
-
"paused", timings.paused,
|
|
312
|
-
"playbackRate", timings.playbackRate,
|
|
313
|
-
"readyState", timings.readyState);
|
|
314
|
-
}
|
|
315
|
-
return timings;
|
|
316
|
-
};
|
|
317
|
-
|
|
318
|
-
const returnedSharedReference = new SharedReference(getCurrentObservation("init"),
|
|
319
|
-
this._canceller.signal);
|
|
320
|
-
|
|
321
|
-
const generateObservationForEvent = (event : IPlaybackObserverEventType) => {
|
|
322
|
-
const newObservation = getCurrentObservation(event);
|
|
323
|
-
if (log.hasLevel("DEBUG")) {
|
|
324
|
-
log.debug("API: current playback timeline:\n" +
|
|
325
|
-
prettyPrintBuffered(newObservation.buffered,
|
|
326
|
-
newObservation.position),
|
|
327
|
-
`\n${event}`);
|
|
328
|
-
}
|
|
329
|
-
lastObservation = newObservation;
|
|
330
|
-
returnedSharedReference.setValue(newObservation);
|
|
331
|
-
};
|
|
332
|
-
|
|
333
|
-
const interval = this._lowLatencyMode ? SAMPLING_INTERVAL_LOW_LATENCY :
|
|
334
|
-
this._withMediaSource ? SAMPLING_INTERVAL_MEDIASOURCE :
|
|
335
|
-
SAMPLING_INTERVAL_NO_MEDIASOURCE;
|
|
336
|
-
let intervalId = setInterval(onInterval, interval);
|
|
337
|
-
const removeEventListeners = SCANNED_MEDIA_ELEMENTS_EVENTS.map((eventName) => {
|
|
338
|
-
this._mediaElement.addEventListener(eventName, onMediaEvent);
|
|
339
|
-
function onMediaEvent() {
|
|
340
|
-
restartInterval();
|
|
341
|
-
generateObservationForEvent(eventName);
|
|
342
|
-
}
|
|
343
|
-
return () => {
|
|
344
|
-
this._mediaElement.removeEventListener(eventName, onMediaEvent);
|
|
345
|
-
};
|
|
346
|
-
});
|
|
347
|
-
|
|
348
|
-
this._canceller.signal.register(() => {
|
|
349
|
-
clearInterval(intervalId);
|
|
350
|
-
removeEventListeners.forEach(cb => cb());
|
|
351
|
-
returnedSharedReference.finish();
|
|
352
|
-
});
|
|
353
|
-
|
|
354
|
-
return returnedSharedReference;
|
|
355
|
-
|
|
356
|
-
function onInterval() {
|
|
357
|
-
generateObservationForEvent("timeupdate");
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
function restartInterval() {
|
|
361
|
-
clearInterval(intervalId);
|
|
362
|
-
intervalId = setInterval(onInterval, interval);
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
private _generateInitialObservation() : IPlaybackObservation {
|
|
367
|
-
return objectAssign(getMediaInfos(this._mediaElement,
|
|
368
|
-
"init",
|
|
369
|
-
this._withMediaSource),
|
|
370
|
-
{ rebuffering: null,
|
|
371
|
-
freezing: null,
|
|
372
|
-
pendingInternalSeek: null });
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
/** "Event" that triggered the playback observation. */
|
|
377
|
-
export type IPlaybackObserverEventType =
|
|
378
|
-
/** First playback observation automatically emitted. */
|
|
379
|
-
"init" | // set once on first emit
|
|
380
|
-
/** Regularly emitted playback observation when no event happened in a long time. */
|
|
381
|
-
"timeupdate" |
|
|
382
|
-
/** On the HTML5 event with the same name */
|
|
383
|
-
"canplay" |
|
|
384
|
-
/** On the HTML5 event with the same name */
|
|
385
|
-
"ended" |
|
|
386
|
-
/** On the HTML5 event with the same name */
|
|
387
|
-
"canplaythrough" | // HTML5 Event
|
|
388
|
-
/** On the HTML5 event with the same name */
|
|
389
|
-
"play" |
|
|
390
|
-
/** On the HTML5 event with the same name */
|
|
391
|
-
"pause" |
|
|
392
|
-
/** On the HTML5 event with the same name */
|
|
393
|
-
"seeking" |
|
|
394
|
-
/** On the HTML5 event with the same name */
|
|
395
|
-
"seeked" |
|
|
396
|
-
/** On the HTML5 event with the same name */
|
|
397
|
-
"stalled" |
|
|
398
|
-
/** On the HTML5 event with the same name */
|
|
399
|
-
"loadedmetadata" |
|
|
400
|
-
/** On the HTML5 event with the same name */
|
|
401
|
-
"ratechange" |
|
|
402
|
-
/** An internal seek happens */
|
|
403
|
-
"internal-seeking";
|
|
404
|
-
|
|
405
|
-
/** Information recuperated on the media element on each playback observation. */
|
|
406
|
-
interface IMediaInfos {
|
|
407
|
-
/**
|
|
408
|
-
* Gap between `currentTime` and the next position with un-buffered data.
|
|
409
|
-
* `Infinity` if we don't have buffered data right now.
|
|
410
|
-
* `undefined` if we cannot determine the buffer gap.
|
|
411
|
-
*/
|
|
412
|
-
bufferGap : number | undefined;
|
|
413
|
-
/** Value of `buffered` (buffered ranges) for the media element. */
|
|
414
|
-
buffered : TimeRanges;
|
|
415
|
-
/**
|
|
416
|
-
* The buffered range we are currently playing.
|
|
417
|
-
* `null` if no range is currently available.
|
|
418
|
-
* `undefined` if we cannot tell which range is currently available.
|
|
419
|
-
*/
|
|
420
|
-
currentRange : { start : number;
|
|
421
|
-
end : number; } |
|
|
422
|
-
null |
|
|
423
|
-
undefined;
|
|
424
|
-
/**
|
|
425
|
-
* `currentTime` (position) set on the media element at the time of the
|
|
426
|
-
* PlaybackObserver's measure.
|
|
427
|
-
*/
|
|
428
|
-
position : number;
|
|
429
|
-
/** Current `duration` set on the media element. */
|
|
430
|
-
duration : number;
|
|
431
|
-
/** Current `ended` set on the media element. */
|
|
432
|
-
ended: boolean;
|
|
433
|
-
/** Current `paused` set on the media element. */
|
|
434
|
-
paused : boolean;
|
|
435
|
-
/** Current `playbackRate` set on the media element. */
|
|
436
|
-
playbackRate : number;
|
|
437
|
-
/** Current `readyState` value on the media element. */
|
|
438
|
-
readyState : number;
|
|
439
|
-
/** Current `seeking` value on the mediaElement. */
|
|
440
|
-
seeking : boolean;
|
|
441
|
-
/** Event that triggered this playback observation. */
|
|
442
|
-
event : IPlaybackObserverEventType;
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
/**
|
|
446
|
-
* Describes when the player is "rebuffering" and what event started that
|
|
447
|
-
* status.
|
|
448
|
-
* "Rebuffering" is a status where the player has not enough buffer ahead to
|
|
449
|
-
* play reliably.
|
|
450
|
-
* The RxPlayer should pause playback when a playback observation indicates the
|
|
451
|
-
* rebuffering status.
|
|
452
|
-
*/
|
|
453
|
-
export interface IRebufferingStatus {
|
|
454
|
-
/** What started the player to rebuffer. */
|
|
455
|
-
reason : "seeking" | // Building buffer after seeking
|
|
456
|
-
"not-ready" | // Building buffer after low readyState
|
|
457
|
-
"buffering"; // Other cases
|
|
458
|
-
/** `performance.now` at the time the rebuffering happened. */
|
|
459
|
-
timestamp : number;
|
|
460
|
-
/**
|
|
461
|
-
* Position, in seconds, at which data is awaited.
|
|
462
|
-
* If `null` the player is rebuffering but not because it is awaiting future data.
|
|
463
|
-
* If `undefined`, that position is unknown.
|
|
464
|
-
*/
|
|
465
|
-
position : number | null | undefined;
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
/**
|
|
469
|
-
* Describes when the player is "frozen".
|
|
470
|
-
* This status is reserved for when the player is stuck at the same position for
|
|
471
|
-
* an unknown reason.
|
|
472
|
-
*/
|
|
473
|
-
export interface IFreezingStatus {
|
|
474
|
-
/** `performance.now` at the time the freezing started to be detected. */
|
|
475
|
-
timestamp : number;
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
/** Information emitted on each playback observation. */
|
|
479
|
-
export interface IPlaybackObservation extends IMediaInfos {
|
|
480
|
-
/**
|
|
481
|
-
* Set if the player is short on audio and/or video media data and is a such,
|
|
482
|
-
* rebuffering.
|
|
483
|
-
* `null` if not.
|
|
484
|
-
*/
|
|
485
|
-
rebuffering : IRebufferingStatus | null;
|
|
486
|
-
/**
|
|
487
|
-
* Set if the player is frozen, that is, stuck in place for unknown reason.
|
|
488
|
-
* Note that this reason can be a valid one, such as a necessary license not
|
|
489
|
-
* being obtained yet.
|
|
490
|
-
*
|
|
491
|
-
* `null` if the player is not frozen.
|
|
492
|
-
*/
|
|
493
|
-
freezing : IFreezingStatus | null;
|
|
494
|
-
/**
|
|
495
|
-
* If `true`, an "internal seek" (a seeking operation triggered by the
|
|
496
|
-
* RxPlayer code) is currently pending.
|
|
497
|
-
*/
|
|
498
|
-
pendingInternalSeek : number | null;
|
|
499
|
-
}
|
|
500
|
-
|
|
501
|
-
/**
|
|
502
|
-
* Interface providing a generic and read-only version of a `PlaybackObserver`.
|
|
503
|
-
*
|
|
504
|
-
* This interface allows to provide regular and specific playback information
|
|
505
|
-
* without allowing any effect on playback like seeking.
|
|
506
|
-
*
|
|
507
|
-
* This can be very useful to give specific playback information to modules you
|
|
508
|
-
* don't want to be able to update playback.
|
|
509
|
-
*
|
|
510
|
-
* Note that a `PlaybackObserver` is compatible and can thus be upcasted to a
|
|
511
|
-
* `IReadOnlyPlaybackObserver` to "remove" its right to update playback.
|
|
512
|
-
*/
|
|
513
|
-
export interface IReadOnlyPlaybackObserver<TObservationType> {
|
|
514
|
-
/** Get the current playing position, in seconds. */
|
|
515
|
-
getCurrentTime() : number;
|
|
516
|
-
/**
|
|
517
|
-
* Returns the current playback rate advertised by the `HTMLMediaElement`.
|
|
518
|
-
* @returns {number}
|
|
519
|
-
*/
|
|
520
|
-
getPlaybackRate() : number;
|
|
521
|
-
/** Get the HTMLMediaElement's current `readyState`. */
|
|
522
|
-
getReadyState() : number;
|
|
523
|
-
/**
|
|
524
|
-
* Returns the current `paused` status advertised by the `HTMLMediaElement`.
|
|
525
|
-
*
|
|
526
|
-
* Use this instead of the same status emitted on an observation when you want
|
|
527
|
-
* to be sure you're using the current value.
|
|
528
|
-
* @returns {boolean}
|
|
529
|
-
*/
|
|
530
|
-
getIsPaused() : boolean;
|
|
531
|
-
/**
|
|
532
|
-
* Returns an `IReadOnlySharedReference` storing the last playback observation
|
|
533
|
-
* produced by the `IReadOnlyPlaybackObserver` and updated each time a new one
|
|
534
|
-
* is produced.
|
|
535
|
-
*
|
|
536
|
-
* This value can then be for example listened to to be notified of future
|
|
537
|
-
* playback observations.
|
|
538
|
-
*
|
|
539
|
-
* @returns {Object}
|
|
540
|
-
*/
|
|
541
|
-
getReference() : IReadOnlySharedReference<TObservationType>;
|
|
542
|
-
/**
|
|
543
|
-
* Register a callback so it regularly receives playback observations.
|
|
544
|
-
* @param {Function} cb
|
|
545
|
-
* @param {Object} options - Configuration options:
|
|
546
|
-
* - `includeLastObservation`: If set to `true` the last observation will
|
|
547
|
-
* be first emitted synchronously.
|
|
548
|
-
* - `clearSignal`: If set, the callback will be unregistered when this
|
|
549
|
-
* CancellationSignal emits.
|
|
550
|
-
* @returns {Function} - Allows to easily unregister the callback
|
|
551
|
-
*/
|
|
552
|
-
listen(
|
|
553
|
-
cb : (
|
|
554
|
-
observation : TObservationType,
|
|
555
|
-
stopListening : () => void
|
|
556
|
-
) => void,
|
|
557
|
-
options? : { includeLastObservation? : boolean | undefined;
|
|
558
|
-
clearSignal? : CancellationSignal | undefined; }
|
|
559
|
-
) : void;
|
|
560
|
-
/**
|
|
561
|
-
* Generate a new `IReadOnlyPlaybackObserver` from this one.
|
|
562
|
-
*
|
|
563
|
-
* As argument, this method takes a function which will allow to produce
|
|
564
|
-
* the new set of properties to be present on each observation.
|
|
565
|
-
* @param {Function} transform
|
|
566
|
-
* @returns {Object}
|
|
567
|
-
*/
|
|
568
|
-
deriveReadOnlyObserver<TDest>(
|
|
569
|
-
transform : (
|
|
570
|
-
observationRef : IReadOnlySharedReference<TObservationType>,
|
|
571
|
-
cancellationSignal : CancellationSignal
|
|
572
|
-
) => IReadOnlySharedReference<TDest>
|
|
573
|
-
) : IReadOnlyPlaybackObserver<TDest>;
|
|
574
|
-
}
|
|
575
|
-
|
|
576
|
-
/**
|
|
577
|
-
* Returns the amount of time in seconds the buffer should have ahead of the
|
|
578
|
-
* current position before resuming playback. Based on the infos of the
|
|
579
|
-
* rebuffering status.
|
|
580
|
-
*
|
|
581
|
-
* Waiting time differs between a rebuffering happening after a "seek" or one
|
|
582
|
-
* happening after a buffer starvation occured.
|
|
583
|
-
* @param {Object|null} rebufferingStatus
|
|
584
|
-
* @param {Boolean} lowLatencyMode
|
|
585
|
-
* @returns {Number}
|
|
586
|
-
*/
|
|
587
|
-
function getRebufferingEndGap(
|
|
588
|
-
rebufferingStatus : IRebufferingStatus,
|
|
589
|
-
lowLatencyMode : boolean
|
|
590
|
-
) : number {
|
|
591
|
-
if (rebufferingStatus === null) {
|
|
592
|
-
return 0;
|
|
593
|
-
}
|
|
594
|
-
const suffix : "LOW_LATENCY" | "DEFAULT" = lowLatencyMode ? "LOW_LATENCY" :
|
|
595
|
-
"DEFAULT";
|
|
596
|
-
const { RESUME_GAP_AFTER_SEEKING,
|
|
597
|
-
RESUME_GAP_AFTER_NOT_ENOUGH_DATA,
|
|
598
|
-
RESUME_GAP_AFTER_BUFFERING } = config.getCurrent();
|
|
599
|
-
|
|
600
|
-
switch (rebufferingStatus.reason) {
|
|
601
|
-
case "seeking":
|
|
602
|
-
return RESUME_GAP_AFTER_SEEKING[suffix];
|
|
603
|
-
case "not-ready":
|
|
604
|
-
return RESUME_GAP_AFTER_NOT_ENOUGH_DATA[suffix];
|
|
605
|
-
case "buffering":
|
|
606
|
-
return RESUME_GAP_AFTER_BUFFERING[suffix];
|
|
607
|
-
}
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
/**
|
|
611
|
-
* @param {Object} currentRange
|
|
612
|
-
* @param {Number} duration
|
|
613
|
-
* @param {Boolean} lowLatencyMode
|
|
614
|
-
* @returns {Boolean}
|
|
615
|
-
*/
|
|
616
|
-
function hasLoadedUntilTheEnd(
|
|
617
|
-
currentTime : number,
|
|
618
|
-
currentRange : { start : number; end : number } | null | undefined,
|
|
619
|
-
ended : boolean,
|
|
620
|
-
duration : number,
|
|
621
|
-
lowLatencyMode : boolean
|
|
622
|
-
) : boolean {
|
|
623
|
-
const { REBUFFERING_GAP } = config.getCurrent();
|
|
624
|
-
const suffix : "LOW_LATENCY" | "DEFAULT" = lowLatencyMode ? "LOW_LATENCY" :
|
|
625
|
-
"DEFAULT";
|
|
626
|
-
if (currentRange === undefined) {
|
|
627
|
-
return ended && Math.abs(duration - currentTime) <= REBUFFERING_GAP[suffix];
|
|
628
|
-
}
|
|
629
|
-
return currentRange !== null &&
|
|
630
|
-
(duration - currentRange.end) <= REBUFFERING_GAP[suffix];
|
|
631
|
-
}
|
|
632
|
-
|
|
633
|
-
/**
|
|
634
|
-
* Get basic playback information.
|
|
635
|
-
* @param {HTMLMediaElement} mediaElement
|
|
636
|
-
* @param {string} event
|
|
637
|
-
* @returns {Object}
|
|
638
|
-
*/
|
|
639
|
-
function getMediaInfos(
|
|
640
|
-
mediaElement : HTMLMediaElement,
|
|
641
|
-
event : IPlaybackObserverEventType,
|
|
642
|
-
withMediaSource : boolean
|
|
643
|
-
) : IMediaInfos {
|
|
644
|
-
const { buffered,
|
|
645
|
-
currentTime,
|
|
646
|
-
duration,
|
|
647
|
-
ended,
|
|
648
|
-
paused,
|
|
649
|
-
playbackRate,
|
|
650
|
-
readyState,
|
|
651
|
-
seeking } = mediaElement;
|
|
652
|
-
|
|
653
|
-
let currentRange;
|
|
654
|
-
let bufferGap;
|
|
655
|
-
if (!withMediaSource && buffered.length === 0 && readyState >= 3) {
|
|
656
|
-
// Sometimes `buffered` stay empty for directfile contents yet we are able
|
|
657
|
-
// to play. This seems to be linked to browser-side issues but has been
|
|
658
|
-
// encountered on enough platforms (Chrome desktop and PlayStation 4's
|
|
659
|
-
// WebKit for us to do something about it in the player.
|
|
660
|
-
currentRange = undefined;
|
|
661
|
-
bufferGap = undefined;
|
|
662
|
-
} else {
|
|
663
|
-
currentRange = getRange(buffered, currentTime);
|
|
664
|
-
bufferGap = currentRange !== null ? currentRange.end - currentTime :
|
|
665
|
-
// TODO null/0 would probably be
|
|
666
|
-
// more appropriate
|
|
667
|
-
Infinity;
|
|
668
|
-
}
|
|
669
|
-
return { bufferGap,
|
|
670
|
-
buffered,
|
|
671
|
-
currentRange,
|
|
672
|
-
position: currentTime,
|
|
673
|
-
duration,
|
|
674
|
-
ended,
|
|
675
|
-
paused,
|
|
676
|
-
playbackRate,
|
|
677
|
-
readyState,
|
|
678
|
-
seeking,
|
|
679
|
-
event };
|
|
680
|
-
}
|
|
681
|
-
|
|
682
|
-
/**
|
|
683
|
-
* Infer rebuffering status of the media based on:
|
|
684
|
-
* - the return of the function getMediaInfos
|
|
685
|
-
* - the previous observation object.
|
|
686
|
-
*
|
|
687
|
-
* @param {Object} prevObservation - Previous playback observation object.
|
|
688
|
-
* @param {Object} currentInfo - Current set of basic information on the
|
|
689
|
-
* `HTMLMediaElement`. This does not need every single property from a regular
|
|
690
|
-
* playback observation.
|
|
691
|
-
* @param {Object} options
|
|
692
|
-
* @returns {Object|null}
|
|
693
|
-
*/
|
|
694
|
-
function getRebufferingStatus(
|
|
695
|
-
prevObservation : IPlaybackObservation,
|
|
696
|
-
currentInfo : IMediaInfos,
|
|
697
|
-
{ withMediaSource, lowLatencyMode } : IPlaybackObserverOptions
|
|
698
|
-
) : IRebufferingStatus | null {
|
|
699
|
-
|
|
700
|
-
const { REBUFFERING_GAP } = config.getCurrent();
|
|
701
|
-
const { event: currentEvt,
|
|
702
|
-
position: currentTime,
|
|
703
|
-
bufferGap,
|
|
704
|
-
currentRange,
|
|
705
|
-
duration,
|
|
706
|
-
paused,
|
|
707
|
-
readyState,
|
|
708
|
-
ended } = currentInfo;
|
|
709
|
-
|
|
710
|
-
const { rebuffering: prevRebuffering,
|
|
711
|
-
event: prevEvt,
|
|
712
|
-
position: prevTime } = prevObservation;
|
|
713
|
-
|
|
714
|
-
const fullyLoaded = hasLoadedUntilTheEnd(currentTime,
|
|
715
|
-
currentRange,
|
|
716
|
-
ended,
|
|
717
|
-
duration,
|
|
718
|
-
lowLatencyMode);
|
|
719
|
-
|
|
720
|
-
const canSwitchToRebuffering = (readyState >= 1 &&
|
|
721
|
-
currentEvt !== "loadedmetadata" &&
|
|
722
|
-
prevRebuffering === null &&
|
|
723
|
-
!(fullyLoaded || ended));
|
|
724
|
-
|
|
725
|
-
let rebufferEndPosition : number | null | undefined = null;
|
|
726
|
-
let shouldRebuffer : boolean | undefined;
|
|
727
|
-
let shouldStopRebuffer : boolean | undefined;
|
|
728
|
-
|
|
729
|
-
const rebufferGap = lowLatencyMode ? REBUFFERING_GAP.LOW_LATENCY :
|
|
730
|
-
REBUFFERING_GAP.DEFAULT;
|
|
731
|
-
|
|
732
|
-
if (withMediaSource) {
|
|
733
|
-
if (canSwitchToRebuffering) {
|
|
734
|
-
if (bufferGap === Infinity) {
|
|
735
|
-
shouldRebuffer = true;
|
|
736
|
-
rebufferEndPosition = currentTime;
|
|
737
|
-
} else if (bufferGap === undefined) {
|
|
738
|
-
if (readyState < 3) {
|
|
739
|
-
shouldRebuffer = true;
|
|
740
|
-
rebufferEndPosition = undefined;
|
|
741
|
-
}
|
|
742
|
-
} else if (bufferGap <= rebufferGap) {
|
|
743
|
-
shouldRebuffer = true;
|
|
744
|
-
rebufferEndPosition = currentTime + bufferGap;
|
|
745
|
-
}
|
|
746
|
-
} else if (prevRebuffering !== null) {
|
|
747
|
-
const resumeGap = getRebufferingEndGap(prevRebuffering, lowLatencyMode);
|
|
748
|
-
if (shouldRebuffer !== true && prevRebuffering !== null && readyState > 1 &&
|
|
749
|
-
(fullyLoaded || ended ||
|
|
750
|
-
(bufferGap !== undefined && isFinite(bufferGap) && bufferGap > resumeGap)) ||
|
|
751
|
-
(bufferGap === undefined && readyState >= 3))
|
|
752
|
-
{
|
|
753
|
-
shouldStopRebuffer = true;
|
|
754
|
-
} else if (bufferGap === undefined) {
|
|
755
|
-
rebufferEndPosition = undefined;
|
|
756
|
-
} else if (bufferGap === Infinity) {
|
|
757
|
-
rebufferEndPosition = currentTime;
|
|
758
|
-
} else if (bufferGap <= resumeGap) {
|
|
759
|
-
rebufferEndPosition = currentTime + bufferGap;
|
|
760
|
-
}
|
|
761
|
-
}
|
|
762
|
-
}
|
|
763
|
-
|
|
764
|
-
// when using a direct file, the media will stall and unstall on its
|
|
765
|
-
// own, so we only try to detect when the media timestamp has not changed
|
|
766
|
-
// between two consecutive timeupdates
|
|
767
|
-
else {
|
|
768
|
-
if (canSwitchToRebuffering &&
|
|
769
|
-
(
|
|
770
|
-
(
|
|
771
|
-
!paused &&
|
|
772
|
-
currentEvt === "timeupdate" && prevEvt === "timeupdate" &&
|
|
773
|
-
currentTime === prevTime
|
|
774
|
-
) ||
|
|
775
|
-
(
|
|
776
|
-
currentEvt === "seeking" && (
|
|
777
|
-
bufferGap === Infinity || (bufferGap === undefined && readyState < 3)
|
|
778
|
-
)
|
|
779
|
-
)
|
|
780
|
-
)
|
|
781
|
-
) {
|
|
782
|
-
shouldRebuffer = true;
|
|
783
|
-
} else if (
|
|
784
|
-
prevRebuffering !== null &&
|
|
785
|
-
(
|
|
786
|
-
(currentEvt !== "seeking" && currentTime !== prevTime) ||
|
|
787
|
-
currentEvt === "canplay" ||
|
|
788
|
-
(bufferGap === undefined && readyState >= 3) ||
|
|
789
|
-
(
|
|
790
|
-
bufferGap !== undefined && bufferGap < Infinity &&
|
|
791
|
-
(
|
|
792
|
-
bufferGap > getRebufferingEndGap(prevRebuffering, lowLatencyMode) ||
|
|
793
|
-
fullyLoaded || ended
|
|
794
|
-
)
|
|
795
|
-
)
|
|
796
|
-
)
|
|
797
|
-
) {
|
|
798
|
-
shouldStopRebuffer = true;
|
|
799
|
-
}
|
|
800
|
-
}
|
|
801
|
-
|
|
802
|
-
if (shouldStopRebuffer === true) {
|
|
803
|
-
return null;
|
|
804
|
-
} else if (shouldRebuffer === true || prevRebuffering !== null) {
|
|
805
|
-
let reason : "seeking" | "not-ready" | "buffering" | "internal-seek";
|
|
806
|
-
if (currentEvt === "seeking" ||
|
|
807
|
-
prevRebuffering !== null && prevRebuffering.reason === "seeking") {
|
|
808
|
-
reason = "seeking";
|
|
809
|
-
} else if (currentInfo.seeking) {
|
|
810
|
-
reason = "seeking";
|
|
811
|
-
} else if (readyState === 1) {
|
|
812
|
-
reason = "not-ready";
|
|
813
|
-
} else {
|
|
814
|
-
reason = "buffering";
|
|
815
|
-
}
|
|
816
|
-
if (prevRebuffering !== null && prevRebuffering.reason === reason) {
|
|
817
|
-
return { reason: prevRebuffering.reason,
|
|
818
|
-
timestamp: prevRebuffering.timestamp,
|
|
819
|
-
position: rebufferEndPosition };
|
|
820
|
-
}
|
|
821
|
-
return { reason,
|
|
822
|
-
timestamp: performance.now(),
|
|
823
|
-
position: rebufferEndPosition };
|
|
824
|
-
}
|
|
825
|
-
return null;
|
|
826
|
-
}
|
|
827
|
-
|
|
828
|
-
/**
|
|
829
|
-
* Detect if the current media can be considered as "freezing" (i.e. not
|
|
830
|
-
* advancing for unknown reasons).
|
|
831
|
-
*
|
|
832
|
-
* Returns a corresponding `IFreezingStatus` object if that's the case and
|
|
833
|
-
* `null` if not.
|
|
834
|
-
* @param {Object} prevObservation
|
|
835
|
-
* @param {Object} currentInfo
|
|
836
|
-
* @returns {Object|null}
|
|
837
|
-
*/
|
|
838
|
-
function getFreezingStatus(
|
|
839
|
-
prevObservation : IPlaybackObservation,
|
|
840
|
-
currentInfo : IMediaInfos
|
|
841
|
-
) : IFreezingStatus | null {
|
|
842
|
-
const { MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING } = config.getCurrent();
|
|
843
|
-
if (prevObservation.freezing) {
|
|
844
|
-
if (currentInfo.ended ||
|
|
845
|
-
currentInfo.paused ||
|
|
846
|
-
currentInfo.readyState === 0 ||
|
|
847
|
-
currentInfo.playbackRate === 0 ||
|
|
848
|
-
prevObservation.position !== currentInfo.position)
|
|
849
|
-
{
|
|
850
|
-
return null; // Quit freezing status
|
|
851
|
-
}
|
|
852
|
-
return prevObservation.freezing; // Stay in it
|
|
853
|
-
}
|
|
854
|
-
|
|
855
|
-
return currentInfo.event === "timeupdate" &&
|
|
856
|
-
currentInfo.bufferGap !== undefined &&
|
|
857
|
-
currentInfo.bufferGap > MINIMUM_BUFFER_AMOUNT_BEFORE_FREEZING &&
|
|
858
|
-
!currentInfo.ended &&
|
|
859
|
-
!currentInfo.paused &&
|
|
860
|
-
currentInfo.readyState >= 1 &&
|
|
861
|
-
currentInfo.playbackRate !== 0 &&
|
|
862
|
-
currentInfo.position === prevObservation.position ?
|
|
863
|
-
{ timestamp: performance.now() } :
|
|
864
|
-
null;
|
|
865
|
-
}
|
|
866
|
-
|
|
867
|
-
export interface IPlaybackObserverOptions {
|
|
868
|
-
withMediaSource : boolean;
|
|
869
|
-
lowLatencyMode : boolean;
|
|
870
|
-
}
|
|
871
|
-
|
|
872
|
-
/**
|
|
873
|
-
* Pretty print a TimeRanges Object, to see the current content of it in a
|
|
874
|
-
* one-liner string.
|
|
875
|
-
*
|
|
876
|
-
* @example
|
|
877
|
-
* This function is called by giving it directly the TimeRanges, such as:
|
|
878
|
-
* ```js
|
|
879
|
-
* prettyPrintBuffered(document.getElementsByTagName("video")[0].buffered);
|
|
880
|
-
* ```
|
|
881
|
-
*
|
|
882
|
-
* Let's consider this possible return:
|
|
883
|
-
*
|
|
884
|
-
* ```
|
|
885
|
-
* 0.00|==29.95==|29.95 ~30.05~ 60.00|==29.86==|89.86
|
|
886
|
-
* ^14
|
|
887
|
-
* ```
|
|
888
|
-
* This means that our video element has 29.95 seconds of buffer between 0 and
|
|
889
|
-
* 29.95 seconds.
|
|
890
|
-
* Then 30.05 seconds where no buffer is found.
|
|
891
|
-
* Then 29.86 seconds of buffer between 60.00 and 89.86 seconds.
|
|
892
|
-
*
|
|
893
|
-
* A caret on the second line indicates the current time we're at.
|
|
894
|
-
* The number coming after it is the current time.
|
|
895
|
-
* @param {TimeRanges} buffered
|
|
896
|
-
* @param {number} currentTime
|
|
897
|
-
* @returns {string}
|
|
898
|
-
*/
|
|
899
|
-
function prettyPrintBuffered(
|
|
900
|
-
buffered : TimeRanges,
|
|
901
|
-
currentTime : number
|
|
902
|
-
) : string {
|
|
903
|
-
let str = "";
|
|
904
|
-
let currentTimeStr = "";
|
|
905
|
-
|
|
906
|
-
for (let i = 0; i < buffered.length; i++) {
|
|
907
|
-
const start = buffered.start(i);
|
|
908
|
-
const end = buffered.end(i);
|
|
909
|
-
const fixedStart = start.toFixed(2);
|
|
910
|
-
const fixedEnd = end.toFixed(2);
|
|
911
|
-
const fixedDuration = (end - start).toFixed(2);
|
|
912
|
-
const newIntervalStr = `${fixedStart}|==${fixedDuration}==|${fixedEnd}`;
|
|
913
|
-
str += newIntervalStr;
|
|
914
|
-
if (currentTimeStr.length === 0 && end > currentTime) {
|
|
915
|
-
const padBefore = str.length - Math.floor(newIntervalStr.length / 2);
|
|
916
|
-
currentTimeStr = " ".repeat(padBefore) + `^${currentTime}`;
|
|
917
|
-
}
|
|
918
|
-
if (i < buffered.length - 1) {
|
|
919
|
-
const nextStart = buffered.start(i + 1);
|
|
920
|
-
const fixedDiff = (nextStart - end).toFixed(2);
|
|
921
|
-
const holeStr = ` ~${fixedDiff}~ `;
|
|
922
|
-
str += holeStr;
|
|
923
|
-
if (currentTimeStr.length === 0 && currentTime < nextStart) {
|
|
924
|
-
const padBefore = str.length - Math.floor(holeStr.length / 2);
|
|
925
|
-
currentTimeStr = " ".repeat(padBefore) + `^${currentTime}`;
|
|
926
|
-
}
|
|
927
|
-
}
|
|
928
|
-
}
|
|
929
|
-
if (currentTimeStr.length === 0) {
|
|
930
|
-
currentTimeStr = " ".repeat(str.length) + `^${currentTime}`;
|
|
931
|
-
}
|
|
932
|
-
return str + "\n" + currentTimeStr;
|
|
933
|
-
}
|
|
934
|
-
|
|
935
|
-
/**
|
|
936
|
-
* Create `IReadOnlyPlaybackObserver` from a source `IReadOnlyPlaybackObserver`
|
|
937
|
-
* and a mapping function.
|
|
938
|
-
* @param {Object} src
|
|
939
|
-
* @param {Function} transform
|
|
940
|
-
* @returns {Object}
|
|
941
|
-
*/
|
|
942
|
-
function generateReadOnlyObserver<TSource, TDest>(
|
|
943
|
-
src : IReadOnlyPlaybackObserver<TSource>,
|
|
944
|
-
transform : (
|
|
945
|
-
observationRef : IReadOnlySharedReference<TSource>,
|
|
946
|
-
cancellationSignal : CancellationSignal
|
|
947
|
-
) => IReadOnlySharedReference<TDest>,
|
|
948
|
-
cancellationSignal : CancellationSignal
|
|
949
|
-
) : IReadOnlyPlaybackObserver<TDest> {
|
|
950
|
-
const mappedRef = transform(src.getReference(), cancellationSignal);
|
|
951
|
-
return {
|
|
952
|
-
getCurrentTime() {
|
|
953
|
-
return src.getCurrentTime();
|
|
954
|
-
},
|
|
955
|
-
getReadyState() {
|
|
956
|
-
return src.getReadyState();
|
|
957
|
-
},
|
|
958
|
-
getPlaybackRate() : number {
|
|
959
|
-
return src.getPlaybackRate();
|
|
960
|
-
},
|
|
961
|
-
getIsPaused() {
|
|
962
|
-
return src.getIsPaused();
|
|
963
|
-
},
|
|
964
|
-
getReference() : IReadOnlySharedReference<TDest> {
|
|
965
|
-
return mappedRef;
|
|
966
|
-
},
|
|
967
|
-
listen(
|
|
968
|
-
cb : (
|
|
969
|
-
observation : TDest,
|
|
970
|
-
stopListening : () => void
|
|
971
|
-
) => void,
|
|
972
|
-
options? : { includeLastObservation? : boolean | undefined;
|
|
973
|
-
clearSignal? : CancellationSignal | undefined; }
|
|
974
|
-
) : void {
|
|
975
|
-
if (cancellationSignal.isCancelled() ||
|
|
976
|
-
options?.clearSignal?.isCancelled() === true)
|
|
977
|
-
{
|
|
978
|
-
return ;
|
|
979
|
-
}
|
|
980
|
-
mappedRef.onUpdate(cb, {
|
|
981
|
-
clearSignal: options?.clearSignal,
|
|
982
|
-
emitCurrentValue: options?.includeLastObservation,
|
|
983
|
-
});
|
|
984
|
-
},
|
|
985
|
-
deriveReadOnlyObserver<TNext>(
|
|
986
|
-
newTransformFn : (
|
|
987
|
-
observationRef : IReadOnlySharedReference<TDest>,
|
|
988
|
-
signal : CancellationSignal
|
|
989
|
-
) => IReadOnlySharedReference<TNext>
|
|
990
|
-
) : IReadOnlyPlaybackObserver<TNext> {
|
|
991
|
-
return generateReadOnlyObserver(this, newTransformFn, cancellationSignal);
|
|
992
|
-
},
|
|
993
|
-
};
|
|
994
|
-
}
|