rx-player 4.4.1-dev.2025101500 → 4.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3 -1
- package/README.md +111 -50
- package/VERSION +1 -1
- package/dist/commonjs/__GENERATED_CODE/embedded_dash_wasm.d.ts.map +1 -1
- package/dist/commonjs/__GENERATED_CODE/embedded_dash_wasm.js +1 -1
- package/dist/commonjs/__GENERATED_CODE/embedded_worker.d.ts.map +1 -1
- package/dist/commonjs/__GENERATED_CODE/embedded_worker.js +1 -1
- package/dist/commonjs/core/{entry → main/common}/FreezeResolver.d.ts +3 -3
- package/dist/commonjs/core/main/common/FreezeResolver.d.ts.map +1 -0
- package/dist/commonjs/core/{entry → main/common}/FreezeResolver.js +3 -3
- package/dist/commonjs/core/{entry → main/common}/content_time_boundaries_observer.d.ts +5 -5
- package/dist/commonjs/core/main/common/content_time_boundaries_observer.d.ts.map +1 -0
- package/dist/commonjs/core/{entry → main/common}/content_time_boundaries_observer.js +6 -6
- package/dist/{es2017/core/entry → commonjs/core/main/common}/create_content_time_boundaries_observer.d.ts +6 -6
- package/dist/commonjs/core/main/common/create_content_time_boundaries_observer.d.ts.map +1 -0
- package/dist/commonjs/core/{entry → main/common}/create_content_time_boundaries_observer.js +1 -1
- package/dist/{es2017/core/entry → commonjs/core/main/common}/get_buffered_data_per_media_buffer.d.ts +4 -4
- package/dist/commonjs/core/main/common/get_buffered_data_per_media_buffer.d.ts.map +1 -0
- package/dist/commonjs/core/{entry → main/common}/get_buffered_data_per_media_buffer.js +1 -1
- package/dist/{es2017/core/entry → commonjs/core/main/common}/get_thumbnail_data.d.ts +3 -3
- package/dist/commonjs/core/main/common/get_thumbnail_data.d.ts.map +1 -0
- package/dist/commonjs/core/{entry → main/common}/get_thumbnail_data.js +2 -2
- package/dist/{es2017/core/entry → commonjs/core/main/common}/synchronize_sinks_on_observation.d.ts +2 -2
- package/dist/commonjs/core/main/common/synchronize_sinks_on_observation.d.ts.map +1 -0
- package/dist/{es2017/core/entry → commonjs/core/main/worker}/content_preparer.d.ts +15 -22
- package/dist/commonjs/core/main/worker/content_preparer.d.ts.map +1 -0
- package/dist/commonjs/core/{entry → main/worker}/content_preparer.js +64 -62
- package/dist/commonjs/core/main/worker/globals.d.ts +14 -0
- package/dist/commonjs/core/main/worker/globals.d.ts.map +1 -0
- package/dist/commonjs/core/main/worker/globals.js +26 -0
- package/dist/commonjs/core/main/worker/index.d.ts +3 -0
- package/dist/commonjs/core/main/worker/index.d.ts.map +1 -0
- package/dist/commonjs/core/main/worker/index.js +4 -0
- package/dist/commonjs/core/main/worker/send_message.d.ts +4 -0
- package/dist/commonjs/core/main/worker/send_message.d.ts.map +1 -0
- package/dist/commonjs/core/main/worker/send_message.js +23 -0
- package/dist/{es2017/core/entry → commonjs/core/main/worker}/track_choice_setter.d.ts +4 -4
- package/dist/commonjs/core/main/worker/track_choice_setter.d.ts.map +1 -0
- package/dist/commonjs/core/{entry → main/worker}/track_choice_setter.js +4 -4
- package/dist/commonjs/core/main/worker/worker_main.d.ts +2 -0
- package/dist/commonjs/core/main/worker/worker_main.d.ts.map +1 -0
- package/dist/commonjs/core/{entry/core_entry.js → main/worker/worker_main.js} +153 -192
- package/dist/commonjs/core/{entry/core_text_displayer_interface.d.ts → main/worker/worker_text_displayer_interface.d.ts} +11 -11
- package/dist/commonjs/core/main/worker/worker_text_displayer_interface.d.ts.map +1 -0
- package/dist/commonjs/core/{entry/core_text_displayer_interface.js → main/worker/worker_text_displayer_interface.js} +22 -22
- package/dist/commonjs/core/types.d.ts +1 -519
- package/dist/commonjs/core/types.d.ts.map +1 -1
- package/dist/commonjs/core/types.js +0 -1
- package/dist/commonjs/experimental/features/local.d.ts.map +1 -1
- package/dist/commonjs/experimental/features/local.js +1 -7
- package/dist/commonjs/experimental/features/metaplaylist.d.ts.map +1 -1
- package/dist/commonjs/experimental/features/metaplaylist.js +1 -7
- package/dist/commonjs/experimental/features/multi_thread.d.ts.map +1 -1
- package/dist/commonjs/experimental/features/multi_thread.js +2 -6
- package/dist/commonjs/features/features_object.js +1 -1
- package/dist/commonjs/features/list/dash.d.ts.map +1 -1
- package/dist/commonjs/features/list/dash.js +1 -7
- package/dist/commonjs/features/list/dash_wasm.d.ts.map +1 -1
- package/dist/commonjs/features/list/dash_wasm.js +1 -7
- package/dist/commonjs/features/list/media_source_main.d.ts.map +1 -1
- package/dist/commonjs/features/list/media_source_main.js +1 -7
- package/dist/commonjs/features/list/smooth.d.ts.map +1 -1
- package/dist/commonjs/features/list/smooth.js +1 -7
- package/dist/commonjs/features/types.d.ts +4 -20
- package/dist/commonjs/features/types.d.ts.map +1 -1
- package/dist/commonjs/main_thread/api/public_api.d.ts.map +1 -1
- package/dist/commonjs/main_thread/api/public_api.js +44 -40
- package/dist/commonjs/main_thread/init/media_source_content_initializer.d.ts +108 -166
- package/dist/commonjs/main_thread/init/media_source_content_initializer.d.ts.map +1 -1
- package/dist/commonjs/main_thread/init/media_source_content_initializer.js +918 -1491
- package/dist/commonjs/main_thread/init/multi_thread_content_initializer.d.ts +308 -0
- package/dist/commonjs/main_thread/init/multi_thread_content_initializer.d.ts.map +1 -0
- package/dist/commonjs/main_thread/init/multi_thread_content_initializer.js +1713 -0
- package/dist/commonjs/main_thread/init/send_message.d.ts +3 -0
- package/dist/commonjs/main_thread/init/send_message.d.ts.map +1 -0
- package/dist/commonjs/main_thread/init/send_message.js +13 -0
- package/dist/commonjs/main_thread/init/utils/create_core_playback_observer.d.ts.map +1 -1
- package/dist/commonjs/main_thread/init/utils/create_core_playback_observer.js +1 -2
- package/dist/commonjs/main_thread/init/utils/update_manifest_codec_support.d.ts +1 -1
- package/dist/commonjs/main_thread/init/utils/update_manifest_codec_support.d.ts.map +1 -1
- package/dist/commonjs/main_thread/types.d.ts +0 -537
- package/dist/commonjs/main_thread/types.d.ts.map +1 -1
- package/dist/commonjs/manifest/utils.d.ts.map +1 -1
- package/dist/commonjs/manifest/utils.js +4 -18
- package/dist/commonjs/mse/worker_media_source_interface.d.ts +2 -2
- package/dist/commonjs/mse/worker_media_source_interface.d.ts.map +1 -1
- package/dist/commonjs/mse/worker_media_source_interface.js +12 -12
- package/dist/commonjs/multithread_types.d.ts +915 -0
- package/dist/commonjs/multithread_types.d.ts.map +1 -0
- package/dist/commonjs/multithread_types.js +7 -0
- package/dist/commonjs/parsers/manifest/smooth/create_parser.d.ts +1 -1
- package/dist/commonjs/parsers/manifest/smooth/create_parser.d.ts.map +1 -1
- package/dist/commonjs/parsers/manifest/smooth/create_parser.js +27 -31
- package/dist/commonjs/parsers/manifest/smooth/parse_C_nodes.d.ts +2 -3
- package/dist/commonjs/parsers/manifest/smooth/parse_C_nodes.d.ts.map +1 -1
- package/dist/commonjs/parsers/manifest/smooth/parse_C_nodes.js +7 -16
- package/dist/commonjs/parsers/manifest/smooth/parse_protection_node.d.ts +2 -3
- package/dist/commonjs/parsers/manifest/smooth/parse_protection_node.d.ts.map +1 -1
- package/dist/commonjs/parsers/manifest/smooth/parse_protection_node.js +6 -37
- package/dist/commonjs/parsers/manifest/smooth/utils/parseBoolean.d.ts +1 -1
- package/dist/commonjs/parsers/manifest/smooth/utils/parseBoolean.d.ts.map +1 -1
- package/dist/commonjs/parsers/manifest/smooth/utils/reduceChildren.d.ts +2 -3
- package/dist/commonjs/parsers/manifest/smooth/utils/reduceChildren.d.ts.map +1 -1
- package/dist/commonjs/parsers/manifest/smooth/utils/reduceChildren.js +5 -28
- package/dist/commonjs/playback_observer/media_element_playback_observer.d.ts +28 -8
- package/dist/commonjs/playback_observer/media_element_playback_observer.d.ts.map +1 -1
- package/dist/commonjs/playback_observer/media_element_playback_observer.js +146 -64
- package/dist/{es2017/playback_observer/core_playback_observer.d.ts → commonjs/playback_observer/worker_playback_observer.d.ts} +8 -8
- package/dist/commonjs/playback_observer/worker_playback_observer.d.ts.map +1 -0
- package/dist/commonjs/playback_observer/{core_playback_observer.js → worker_playback_observer.js} +13 -13
- package/dist/commonjs/transports/smooth/pipelines.d.ts.map +1 -1
- package/dist/commonjs/transports/smooth/pipelines.js +3 -25
- package/dist/commonjs/worker_entry_point.js +2 -62
- package/dist/es2017/__GENERATED_CODE/embedded_dash_wasm.d.ts.map +1 -1
- package/dist/es2017/__GENERATED_CODE/embedded_dash_wasm.js +1 -1
- package/dist/es2017/__GENERATED_CODE/embedded_worker.d.ts.map +1 -1
- package/dist/es2017/__GENERATED_CODE/embedded_worker.js +1 -1
- package/dist/es2017/core/{entry → main/common}/FreezeResolver.d.ts +3 -3
- package/dist/es2017/core/main/common/FreezeResolver.d.ts.map +1 -0
- package/dist/es2017/core/{entry → main/common}/FreezeResolver.js +3 -3
- package/dist/es2017/core/{entry → main/common}/content_time_boundaries_observer.d.ts +5 -5
- package/dist/es2017/core/main/common/content_time_boundaries_observer.d.ts.map +1 -0
- package/dist/es2017/core/{entry → main/common}/content_time_boundaries_observer.js +6 -6
- package/dist/{commonjs/core/entry → es2017/core/main/common}/create_content_time_boundaries_observer.d.ts +6 -6
- package/dist/es2017/core/main/common/create_content_time_boundaries_observer.d.ts.map +1 -0
- package/dist/es2017/core/{entry → main/common}/create_content_time_boundaries_observer.js +1 -1
- package/dist/{commonjs/core/entry → es2017/core/main/common}/get_buffered_data_per_media_buffer.d.ts +4 -4
- package/dist/es2017/core/main/common/get_buffered_data_per_media_buffer.d.ts.map +1 -0
- package/dist/es2017/core/{entry → main/common}/get_buffered_data_per_media_buffer.js +1 -1
- package/dist/{commonjs/core/entry → es2017/core/main/common}/get_thumbnail_data.d.ts +3 -3
- package/dist/es2017/core/main/common/get_thumbnail_data.d.ts.map +1 -0
- package/dist/es2017/core/{entry → main/common}/get_thumbnail_data.js +2 -2
- package/dist/{commonjs/core/entry → es2017/core/main/common}/synchronize_sinks_on_observation.d.ts +2 -2
- package/dist/es2017/core/main/common/synchronize_sinks_on_observation.d.ts.map +1 -0
- package/dist/{commonjs/core/entry → es2017/core/main/worker}/content_preparer.d.ts +15 -22
- package/dist/es2017/core/main/worker/content_preparer.d.ts.map +1 -0
- package/dist/es2017/core/{entry → main/worker}/content_preparer.js +55 -53
- package/dist/es2017/core/main/worker/globals.d.ts +14 -0
- package/dist/es2017/core/main/worker/globals.d.ts.map +1 -0
- package/dist/es2017/core/main/worker/globals.js +18 -0
- package/dist/es2017/core/main/worker/index.d.ts +3 -0
- package/dist/es2017/core/main/worker/index.d.ts.map +1 -0
- package/dist/es2017/core/main/worker/index.js +2 -0
- package/dist/es2017/core/main/worker/send_message.d.ts +4 -0
- package/dist/es2017/core/main/worker/send_message.d.ts.map +1 -0
- package/dist/es2017/core/main/worker/send_message.js +19 -0
- package/dist/{commonjs/core/entry → es2017/core/main/worker}/track_choice_setter.d.ts +4 -4
- package/dist/es2017/core/main/worker/track_choice_setter.d.ts.map +1 -0
- package/dist/es2017/core/{entry → main/worker}/track_choice_setter.js +4 -4
- package/dist/es2017/core/main/worker/worker_main.d.ts +2 -0
- package/dist/es2017/core/main/worker/worker_main.d.ts.map +1 -0
- package/dist/es2017/core/{entry/core_entry.js → main/worker/worker_main.js} +114 -153
- package/dist/es2017/core/{entry/core_text_displayer_interface.d.ts → main/worker/worker_text_displayer_interface.d.ts} +11 -11
- package/dist/es2017/core/main/worker/worker_text_displayer_interface.d.ts.map +1 -0
- package/dist/es2017/core/{entry/core_text_displayer_interface.js → main/worker/worker_text_displayer_interface.js} +10 -10
- package/dist/es2017/core/types.d.ts +1 -519
- package/dist/es2017/core/types.d.ts.map +1 -1
- package/dist/es2017/core/types.js +0 -1
- package/dist/es2017/experimental/features/local.d.ts.map +1 -1
- package/dist/es2017/experimental/features/local.js +1 -7
- package/dist/es2017/experimental/features/metaplaylist.d.ts.map +1 -1
- package/dist/es2017/experimental/features/metaplaylist.js +1 -7
- package/dist/es2017/experimental/features/multi_thread.d.ts.map +1 -1
- package/dist/es2017/experimental/features/multi_thread.js +2 -6
- package/dist/es2017/features/features_object.js +1 -1
- package/dist/es2017/features/list/dash.d.ts.map +1 -1
- package/dist/es2017/features/list/dash.js +1 -7
- package/dist/es2017/features/list/dash_wasm.d.ts.map +1 -1
- package/dist/es2017/features/list/dash_wasm.js +1 -7
- package/dist/es2017/features/list/media_source_main.d.ts.map +1 -1
- package/dist/es2017/features/list/media_source_main.js +1 -7
- package/dist/es2017/features/list/smooth.d.ts.map +1 -1
- package/dist/es2017/features/list/smooth.js +1 -7
- package/dist/es2017/features/types.d.ts +4 -20
- package/dist/es2017/features/types.d.ts.map +1 -1
- package/dist/es2017/main_thread/api/public_api.d.ts.map +1 -1
- package/dist/es2017/main_thread/api/public_api.js +45 -41
- package/dist/es2017/main_thread/init/media_source_content_initializer.d.ts +108 -166
- package/dist/es2017/main_thread/init/media_source_content_initializer.d.ts.map +1 -1
- package/dist/es2017/main_thread/init/media_source_content_initializer.js +760 -1405
- package/dist/es2017/main_thread/init/multi_thread_content_initializer.d.ts +308 -0
- package/dist/es2017/main_thread/init/multi_thread_content_initializer.d.ts.map +1 -0
- package/dist/es2017/main_thread/init/multi_thread_content_initializer.js +1559 -0
- package/dist/es2017/main_thread/init/send_message.d.ts +3 -0
- package/dist/es2017/main_thread/init/send_message.d.ts.map +1 -0
- package/dist/es2017/main_thread/init/send_message.js +10 -0
- package/dist/es2017/main_thread/init/utils/create_core_playback_observer.d.ts.map +1 -1
- package/dist/es2017/main_thread/init/utils/create_core_playback_observer.js +1 -2
- package/dist/es2017/main_thread/init/utils/update_manifest_codec_support.d.ts +1 -1
- package/dist/es2017/main_thread/init/utils/update_manifest_codec_support.d.ts.map +1 -1
- package/dist/es2017/main_thread/types.d.ts +0 -537
- package/dist/es2017/main_thread/types.d.ts.map +1 -1
- package/dist/es2017/manifest/utils.d.ts.map +1 -1
- package/dist/es2017/manifest/utils.js +4 -16
- package/dist/es2017/mse/worker_media_source_interface.d.ts +2 -2
- package/dist/es2017/mse/worker_media_source_interface.d.ts.map +1 -1
- package/dist/es2017/mse/worker_media_source_interface.js +12 -12
- package/dist/es2017/multithread_types.d.ts +915 -0
- package/dist/es2017/multithread_types.d.ts.map +1 -0
- package/dist/es2017/multithread_types.js +6 -0
- package/dist/es2017/parsers/manifest/smooth/create_parser.d.ts +1 -1
- package/dist/es2017/parsers/manifest/smooth/create_parser.d.ts.map +1 -1
- package/dist/es2017/parsers/manifest/smooth/create_parser.js +27 -31
- package/dist/es2017/parsers/manifest/smooth/parse_C_nodes.d.ts +2 -3
- package/dist/es2017/parsers/manifest/smooth/parse_C_nodes.d.ts.map +1 -1
- package/dist/es2017/parsers/manifest/smooth/parse_C_nodes.js +7 -16
- package/dist/es2017/parsers/manifest/smooth/parse_protection_node.d.ts +2 -3
- package/dist/es2017/parsers/manifest/smooth/parse_protection_node.d.ts.map +1 -1
- package/dist/es2017/parsers/manifest/smooth/parse_protection_node.js +6 -15
- package/dist/es2017/parsers/manifest/smooth/utils/parseBoolean.d.ts +1 -1
- package/dist/es2017/parsers/manifest/smooth/utils/parseBoolean.d.ts.map +1 -1
- package/dist/es2017/parsers/manifest/smooth/utils/reduceChildren.d.ts +2 -3
- package/dist/es2017/parsers/manifest/smooth/utils/reduceChildren.d.ts.map +1 -1
- package/dist/es2017/parsers/manifest/smooth/utils/reduceChildren.js +5 -6
- package/dist/es2017/playback_observer/media_element_playback_observer.d.ts +28 -8
- package/dist/es2017/playback_observer/media_element_playback_observer.d.ts.map +1 -1
- package/dist/es2017/playback_observer/media_element_playback_observer.js +144 -64
- package/dist/{commonjs/playback_observer/core_playback_observer.d.ts → es2017/playback_observer/worker_playback_observer.d.ts} +8 -8
- package/dist/es2017/playback_observer/worker_playback_observer.d.ts.map +1 -0
- package/dist/es2017/playback_observer/{core_playback_observer.js → worker_playback_observer.js} +2 -2
- package/dist/es2017/transports/smooth/pipelines.d.ts.map +1 -1
- package/dist/es2017/transports/smooth/pipelines.js +3 -25
- package/dist/es2017/worker_entry_point.js +2 -62
- package/dist/mpd-parser.wasm +0 -0
- package/dist/rx-player.js +19165 -21886
- package/dist/rx-player.min.js +20 -20
- package/dist/worker.js +8 -8
- package/eslint.config.mjs +647 -348
- package/package.json +6 -6
- package/src/README.md +198 -88
- package/src/__GENERATED_CODE/embedded_dash_wasm.ts +1 -1
- package/src/__GENERATED_CODE/embedded_worker.ts +1 -1
- package/src/core/{entry → main}/README.md +1 -1
- package/src/core/{entry → main/common}/FreezeResolver.ts +7 -7
- package/src/core/{entry → main/common}/content_time_boundaries_observer.ts +10 -10
- package/src/core/{entry → main/common}/create_content_time_boundaries_observer.ts +7 -7
- package/src/core/{entry → main/common}/get_buffered_data_per_media_buffer.ts +6 -6
- package/src/core/{entry → main/common}/get_thumbnail_data.ts +5 -5
- package/src/core/{entry → main/common}/synchronize_sinks_on_observation.ts +2 -2
- package/src/core/{entry → main/worker}/content_preparer.ts +76 -77
- package/src/core/main/worker/globals.ts +38 -0
- package/src/core/main/worker/index.ts +2 -0
- package/src/core/main/worker/send_message.ts +28 -0
- package/src/core/{entry → main/worker}/track_choice_setter.ts +7 -7
- package/src/core/{entry/core_entry.ts → main/worker/worker_main.ts} +149 -223
- package/src/core/{entry/core_text_displayer_interface.ts → main/worker/worker_text_displayer_interface.ts} +26 -26
- package/src/core/types.ts +3 -631
- package/src/experimental/features/__tests__/local.test.ts +2 -11
- package/src/experimental/features/__tests__/metaplaylist.test.ts +2 -11
- package/src/experimental/features/__tests__/multi_thread.test.ts +3 -8
- package/src/experimental/features/local.ts +1 -7
- package/src/experimental/features/metaplaylist.ts +1 -7
- package/src/experimental/features/multi_thread.ts +2 -6
- package/src/features/features_object.ts +1 -1
- package/src/features/list/__tests__/dash.test.ts +3 -12
- package/src/features/list/__tests__/smooth.test.ts +2 -11
- package/src/features/list/dash.ts +1 -7
- package/src/features/list/dash_wasm.ts +1 -7
- package/src/features/list/media_source_main.ts +1 -7
- package/src/features/list/smooth.ts +1 -7
- package/src/features/types.ts +4 -23
- package/src/main_thread/README.md +0 -8
- package/src/main_thread/api/public_api.ts +51 -47
- package/src/main_thread/init/media_source_content_initializer.ts +1164 -2046
- package/src/main_thread/init/multi_thread_content_initializer.ts +2330 -0
- package/src/main_thread/init/send_message.ts +15 -0
- package/src/main_thread/init/utils/create_core_playback_observer.ts +1 -2
- package/src/main_thread/init/utils/update_manifest_codec_support.ts +1 -1
- package/src/main_thread/types.ts +0 -610
- package/src/manifest/utils.ts +4 -20
- package/src/mse/worker_media_source_interface.ts +35 -35
- package/src/multithread_types.ts +1095 -0
- package/src/parsers/manifest/smooth/create_parser.ts +34 -40
- package/src/parsers/manifest/smooth/parse_C_nodes.ts +8 -19
- package/src/parsers/manifest/smooth/parse_protection_node.ts +9 -17
- package/src/parsers/manifest/smooth/utils/parseBoolean.ts +1 -1
- package/src/parsers/manifest/smooth/utils/reduceChildren.ts +7 -10
- package/src/playback_observer/media_element_playback_observer.ts +177 -73
- package/src/playback_observer/{core_playback_observer.ts → worker_playback_observer.ts} +13 -13
- package/src/transports/smooth/pipelines.ts +5 -25
- package/src/worker_entry_point.ts +2 -71
- package/dist/commonjs/core/entry/FreezeResolver.d.ts.map +0 -1
- package/dist/commonjs/core/entry/content_preparer.d.ts.map +0 -1
- package/dist/commonjs/core/entry/content_time_boundaries_observer.d.ts.map +0 -1
- package/dist/commonjs/core/entry/core_entry.d.ts +0 -36
- package/dist/commonjs/core/entry/core_entry.d.ts.map +0 -1
- package/dist/commonjs/core/entry/core_text_displayer_interface.d.ts.map +0 -1
- package/dist/commonjs/core/entry/create_content_time_boundaries_observer.d.ts.map +0 -1
- package/dist/commonjs/core/entry/get_buffered_data_per_media_buffer.d.ts.map +0 -1
- package/dist/commonjs/core/entry/get_thumbnail_data.d.ts.map +0 -1
- package/dist/commonjs/core/entry/index.d.ts +0 -5
- package/dist/commonjs/core/entry/index.d.ts.map +0 -1
- package/dist/commonjs/core/entry/index.js +0 -4
- package/dist/commonjs/core/entry/synchronize_sinks_on_observation.d.ts.map +0 -1
- package/dist/commonjs/core/entry/track_choice_setter.d.ts.map +0 -1
- package/dist/commonjs/core/entry/utils.d.ts +0 -3
- package/dist/commonjs/core/entry/utils.d.ts.map +0 -1
- package/dist/commonjs/core/entry/utils.js +0 -11
- package/dist/commonjs/main_thread/core_interface/base.d.ts +0 -13
- package/dist/commonjs/main_thread/core_interface/base.d.ts.map +0 -1
- package/dist/commonjs/main_thread/core_interface/base.js +0 -32
- package/dist/commonjs/main_thread/core_interface/monothread.d.ts +0 -13
- package/dist/commonjs/main_thread/core_interface/monothread.d.ts.map +0 -1
- package/dist/commonjs/main_thread/core_interface/monothread.js +0 -56
- package/dist/commonjs/main_thread/core_interface/multithread.d.ts +0 -25
- package/dist/commonjs/main_thread/core_interface/multithread.d.ts.map +0 -1
- package/dist/commonjs/main_thread/core_interface/multithread.js +0 -67
- package/dist/commonjs/main_thread/core_interface/types.d.ts +0 -6
- package/dist/commonjs/main_thread/core_interface/types.d.ts.map +0 -1
- package/dist/commonjs/main_thread/core_interface/types.js +0 -2
- package/dist/commonjs/playback_observer/core_playback_observer.d.ts.map +0 -1
- package/dist/es2017/core/entry/FreezeResolver.d.ts.map +0 -1
- package/dist/es2017/core/entry/content_preparer.d.ts.map +0 -1
- package/dist/es2017/core/entry/content_time_boundaries_observer.d.ts.map +0 -1
- package/dist/es2017/core/entry/core_entry.d.ts +0 -36
- package/dist/es2017/core/entry/core_entry.d.ts.map +0 -1
- package/dist/es2017/core/entry/core_text_displayer_interface.d.ts.map +0 -1
- package/dist/es2017/core/entry/create_content_time_boundaries_observer.d.ts.map +0 -1
- package/dist/es2017/core/entry/get_buffered_data_per_media_buffer.d.ts.map +0 -1
- package/dist/es2017/core/entry/get_thumbnail_data.d.ts.map +0 -1
- package/dist/es2017/core/entry/index.d.ts +0 -5
- package/dist/es2017/core/entry/index.d.ts.map +0 -1
- package/dist/es2017/core/entry/index.js +0 -2
- package/dist/es2017/core/entry/synchronize_sinks_on_observation.d.ts.map +0 -1
- package/dist/es2017/core/entry/track_choice_setter.d.ts.map +0 -1
- package/dist/es2017/core/entry/utils.d.ts +0 -3
- package/dist/es2017/core/entry/utils.d.ts.map +0 -1
- package/dist/es2017/core/entry/utils.js +0 -8
- package/dist/es2017/main_thread/core_interface/base.d.ts +0 -13
- package/dist/es2017/main_thread/core_interface/base.d.ts.map +0 -1
- package/dist/es2017/main_thread/core_interface/base.js +0 -28
- package/dist/es2017/main_thread/core_interface/monothread.d.ts +0 -13
- package/dist/es2017/main_thread/core_interface/monothread.d.ts.map +0 -1
- package/dist/es2017/main_thread/core_interface/monothread.js +0 -32
- package/dist/es2017/main_thread/core_interface/multithread.d.ts +0 -25
- package/dist/es2017/main_thread/core_interface/multithread.d.ts.map +0 -1
- package/dist/es2017/main_thread/core_interface/multithread.js +0 -45
- package/dist/es2017/main_thread/core_interface/types.d.ts +0 -6
- package/dist/es2017/main_thread/core_interface/types.d.ts.map +0 -1
- package/dist/es2017/main_thread/core_interface/types.js +0 -1
- package/dist/es2017/playback_observer/core_playback_observer.d.ts.map +0 -1
- package/src/core/entry/index.ts +0 -4
- package/src/core/entry/utils.ts +0 -11
- package/src/main_thread/core_interface/README.md +0 -22
- package/src/main_thread/core_interface/base.ts +0 -36
- package/src/main_thread/core_interface/monothread.ts +0 -46
- package/src/main_thread/core_interface/multithread.ts +0 -49
- package/src/main_thread/core_interface/types.ts +0 -5
- /package/dist/commonjs/core/{entry → main/common}/synchronize_sinks_on_observation.js +0 -0
- /package/dist/es2017/core/{entry → main/common}/synchronize_sinks_on_observation.js +0 -0
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import isSeekingApproximate from "../compat/is_seeking_approximate";
|
|
17
17
|
import config from "../config";
|
|
18
|
+
import ManualTimeRanges from "../core/segment_sinks/implementations/utils/manual_time_ranges";
|
|
18
19
|
import log from "../log";
|
|
19
20
|
import getMonotonicTimeStamp from "../utils/monotonic_timestamp";
|
|
20
21
|
import noop from "../utils/noop";
|
|
@@ -56,34 +57,61 @@ export default class PlaybackObserver {
|
|
|
56
57
|
* Create a new `PlaybackObserver`, which allows to produce new "playback
|
|
57
58
|
* observations" on various media events and intervals.
|
|
58
59
|
*
|
|
60
|
+
* Once a `PlaybackObserver` is created, you will want to "attach" the
|
|
61
|
+
* media element to it through the `attachMediaElement` method once that
|
|
62
|
+
* element is ready to play your content.
|
|
63
|
+
*
|
|
59
64
|
* Note that creating a `PlaybackObserver` lead to the usage of resources,
|
|
60
65
|
* such as event listeners which will only be freed once the `stop` method is
|
|
61
66
|
* called.
|
|
62
|
-
* @param {HTMLMediaElement} mediaElement
|
|
63
67
|
* @param {Object} options
|
|
64
68
|
*/
|
|
65
|
-
constructor(
|
|
69
|
+
constructor(options) {
|
|
66
70
|
this._internalSeeksIncoming = [];
|
|
67
|
-
this.
|
|
71
|
+
this._mediaElementRef = new SharedReference(null);
|
|
68
72
|
this._withMediaSource = options.withMediaSource;
|
|
69
73
|
this._lowLatencyMode = options.lowLatencyMode;
|
|
70
74
|
this._canceller = new TaskCanceller();
|
|
71
|
-
this._observationRef = this._createSharedReference();
|
|
72
75
|
this._expectedSeekingPosition = null;
|
|
73
76
|
this._pendingSeek = null;
|
|
74
77
|
this._isSeekBlocked = false;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const { position: positionToSeekTo, isInternal } = this._pendingSeek;
|
|
78
|
-
this._pendingSeek = null;
|
|
79
|
-
this._actuallySetCurrentTime(positionToSeekTo, isInternal);
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
mediaElement.addEventListener("loadedmetadata", onLoadedMetadata);
|
|
78
|
+
this._observationIntervalId = null;
|
|
79
|
+
this._observationRef = this._createSharedReference();
|
|
83
80
|
this._canceller.signal.register(() => {
|
|
84
|
-
|
|
81
|
+
this._mediaElementRef.finish();
|
|
85
82
|
});
|
|
86
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* "Link" the actual `HTMLMediaElement` to this `PlaybackObserver`.
|
|
86
|
+
*
|
|
87
|
+
* This is done in a step separate from the constructor to allow complex
|
|
88
|
+
* situations where you want to inialize the polling logic before the media
|
|
89
|
+
* element is ready to play your content (e.g. when pre-loading the next
|
|
90
|
+
* content).
|
|
91
|
+
*
|
|
92
|
+
* @param {HTMLMediaElement} mediaElement - The `HTMLMediaElement` on which
|
|
93
|
+
* the content plays.
|
|
94
|
+
*/
|
|
95
|
+
attachMediaElement(mediaElement) {
|
|
96
|
+
const prevMediaElement = this._mediaElementRef.getValue();
|
|
97
|
+
if (prevMediaElement !== null) {
|
|
98
|
+
throw new Error("A media element was already attached to this PlaybackObserver");
|
|
99
|
+
}
|
|
100
|
+
this._mediaElementRef.setValue(mediaElement);
|
|
101
|
+
if (this._canceller.isUsed()) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
this._registerLoadedMetadataEvent(mediaElement);
|
|
105
|
+
this._restartInterval();
|
|
106
|
+
this._registerMediaElementEvents(mediaElement);
|
|
107
|
+
this._generateObservationForEvent("init");
|
|
108
|
+
if (this._canceller.isUsed()) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (mediaElement.readyState >= 1) {
|
|
112
|
+
this._onLoadedMetadataEvent();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
87
115
|
/**
|
|
88
116
|
* Stop the `PlaybackObserver` from emitting playback observations and free all
|
|
89
117
|
* resources reserved to emitting them such as event listeners and intervals.
|
|
@@ -102,24 +130,27 @@ export default class PlaybackObserver {
|
|
|
102
130
|
* @returns {number}
|
|
103
131
|
*/
|
|
104
132
|
getCurrentTime() {
|
|
105
|
-
|
|
133
|
+
var _a, _b;
|
|
134
|
+
return ((_b = (_a = this._mediaElementRef.getValue()) === null || _a === void 0 ? void 0 : _a.currentTime) !== null && _b !== void 0 ? _b : this._observationRef.getValue().position.getPolled());
|
|
106
135
|
}
|
|
107
136
|
/**
|
|
108
137
|
* Returns the current playback rate advertised by the `HTMLMediaElement`.
|
|
109
|
-
* @returns {number}
|
|
138
|
+
* @returns {number|undefined}
|
|
110
139
|
*/
|
|
111
140
|
getPlaybackRate() {
|
|
112
|
-
|
|
141
|
+
var _a, _b;
|
|
142
|
+
return ((_b = (_a = this._mediaElementRef.getValue()) === null || _a === void 0 ? void 0 : _a.playbackRate) !== null && _b !== void 0 ? _b : this._observationRef.getValue().playbackRate);
|
|
113
143
|
}
|
|
114
144
|
/**
|
|
115
145
|
* Returns the current `paused` status advertised by the `HTMLMediaElement`.
|
|
116
146
|
*
|
|
117
147
|
* Use this instead of the same status emitted on an observation when you want
|
|
118
148
|
* to be sure you're using the current value.
|
|
119
|
-
* @returns {boolean}
|
|
149
|
+
* @returns {boolean|undefined}
|
|
120
150
|
*/
|
|
121
151
|
getIsPaused() {
|
|
122
|
-
|
|
152
|
+
var _a, _b;
|
|
153
|
+
return ((_b = (_a = this._mediaElementRef.getValue()) === null || _a === void 0 ? void 0 : _a.paused) !== null && _b !== void 0 ? _b : this._observationRef.getValue().paused);
|
|
123
154
|
}
|
|
124
155
|
/**
|
|
125
156
|
* Prevent seeking operations from being performed from inside the
|
|
@@ -143,10 +174,13 @@ export default class PlaybackObserver {
|
|
|
143
174
|
unblockSeeking() {
|
|
144
175
|
if (this._isSeekBlocked) {
|
|
145
176
|
this._isSeekBlocked = false;
|
|
146
|
-
|
|
177
|
+
const mediaElement = this._mediaElementRef.getValue();
|
|
178
|
+
if (mediaElement !== null &&
|
|
179
|
+
mediaElement.readyState >= 1 &&
|
|
180
|
+
this._pendingSeek !== null) {
|
|
147
181
|
const { position: positionToSeekTo, isInternal } = this._pendingSeek;
|
|
148
182
|
this._pendingSeek = null;
|
|
149
|
-
this._actuallySetCurrentTime(positionToSeekTo, isInternal);
|
|
183
|
+
this._actuallySetCurrentTime(mediaElement, positionToSeekTo, isInternal);
|
|
150
184
|
}
|
|
151
185
|
}
|
|
152
186
|
}
|
|
@@ -193,30 +227,34 @@ export default class PlaybackObserver {
|
|
|
193
227
|
* the user.
|
|
194
228
|
*/
|
|
195
229
|
setCurrentTime(time, isInternal = true) {
|
|
196
|
-
|
|
197
|
-
|
|
230
|
+
const mediaElement = this._mediaElementRef.getValue();
|
|
231
|
+
if (mediaElement !== null && !this._isSeekBlocked && mediaElement.readyState >= 1) {
|
|
232
|
+
this._actuallySetCurrentTime(mediaElement, time, isInternal);
|
|
198
233
|
}
|
|
199
234
|
else {
|
|
200
235
|
this._pendingSeek = { position: time, isInternal };
|
|
201
236
|
this._internalSeeksIncoming = [];
|
|
202
|
-
|
|
203
|
-
this._generateObservationForEvent("manual");
|
|
204
|
-
}
|
|
237
|
+
this._generateObservationForEvent("manual");
|
|
205
238
|
}
|
|
206
239
|
}
|
|
207
240
|
/**
|
|
208
|
-
* Update the playback rate of the `
|
|
241
|
+
* Update the playback rate of the `HTMLmediaElement`.
|
|
209
242
|
* @param {number} playbackRate
|
|
210
243
|
*/
|
|
211
244
|
setPlaybackRate(playbackRate) {
|
|
212
|
-
this.
|
|
245
|
+
const mediaElement = this._mediaElementRef.getValue();
|
|
246
|
+
if (mediaElement === null) {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
mediaElement.playbackRate = playbackRate;
|
|
213
250
|
}
|
|
214
251
|
/**
|
|
215
|
-
* Returns the current `readyState` advertised by the `
|
|
252
|
+
* Returns the current `readyState` advertised by the `HTMLmediaElement`.
|
|
216
253
|
* @returns {number}
|
|
217
254
|
*/
|
|
218
255
|
getReadyState() {
|
|
219
|
-
|
|
256
|
+
var _a, _b;
|
|
257
|
+
return ((_b = (_a = this._mediaElementRef.getValue()) === null || _a === void 0 ? void 0 : _a.readyState) !== null && _b !== void 0 ? _b : this._observationRef.getValue().readyState);
|
|
220
258
|
}
|
|
221
259
|
/**
|
|
222
260
|
* Returns an `IReadOnlySharedReference` storing the last playback observation
|
|
@@ -266,12 +304,12 @@ export default class PlaybackObserver {
|
|
|
266
304
|
deriveReadOnlyObserver(transform) {
|
|
267
305
|
return generateReadOnlyObserver(this, transform, this._canceller.signal);
|
|
268
306
|
}
|
|
269
|
-
_actuallySetCurrentTime(time, isInternal) {
|
|
307
|
+
_actuallySetCurrentTime(mediaElement, time, isInternal) {
|
|
270
308
|
log.info("media", "Actually seeking.", { time, isInternal });
|
|
271
309
|
if (isInternal) {
|
|
272
310
|
this._internalSeeksIncoming.push(time);
|
|
273
311
|
}
|
|
274
|
-
|
|
312
|
+
mediaElement.currentTime = time;
|
|
275
313
|
}
|
|
276
314
|
/**
|
|
277
315
|
* Creates the `IReadOnlySharedReference` that will generate playback
|
|
@@ -282,50 +320,29 @@ export default class PlaybackObserver {
|
|
|
282
320
|
if (this._observationRef !== undefined) {
|
|
283
321
|
return this._observationRef;
|
|
284
322
|
}
|
|
285
|
-
const { SAMPLING_INTERVAL_MEDIASOURCE, SAMPLING_INTERVAL_LOW_LATENCY, SAMPLING_INTERVAL_NO_MEDIASOURCE, } = config.getCurrent();
|
|
286
323
|
const returnedSharedReference = new SharedReference(this._getCurrentObservation("init"), this._canceller.signal);
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
else if (this._withMediaSource) {
|
|
292
|
-
interval = SAMPLING_INTERVAL_MEDIASOURCE;
|
|
293
|
-
}
|
|
294
|
-
else {
|
|
295
|
-
interval = SAMPLING_INTERVAL_NO_MEDIASOURCE;
|
|
324
|
+
this._restartInterval();
|
|
325
|
+
const mediaElement = this._mediaElementRef.getValue();
|
|
326
|
+
if (mediaElement !== null) {
|
|
327
|
+
this._registerMediaElementEvents(mediaElement);
|
|
296
328
|
}
|
|
297
|
-
const onInterval = () => {
|
|
298
|
-
this._generateObservationForEvent("timeupdate");
|
|
299
|
-
};
|
|
300
|
-
let intervalId = setInterval(onInterval, interval);
|
|
301
|
-
SCANNED_MEDIA_ELEMENTS_EVENTS.map((eventName) => {
|
|
302
|
-
const onMediaEvent = () => {
|
|
303
|
-
restartInterval();
|
|
304
|
-
this._generateObservationForEvent(eventName);
|
|
305
|
-
};
|
|
306
|
-
this._mediaElement.addEventListener(eventName, onMediaEvent);
|
|
307
|
-
this._canceller.signal.register(() => {
|
|
308
|
-
this._mediaElement.removeEventListener(eventName, onMediaEvent);
|
|
309
|
-
});
|
|
310
|
-
});
|
|
311
329
|
this._canceller.signal.register(() => {
|
|
312
|
-
|
|
330
|
+
if (this._observationIntervalId !== null) {
|
|
331
|
+
clearInterval(this._observationIntervalId);
|
|
332
|
+
}
|
|
313
333
|
returnedSharedReference.finish();
|
|
314
334
|
});
|
|
315
335
|
return returnedSharedReference;
|
|
316
|
-
function restartInterval() {
|
|
317
|
-
clearInterval(intervalId);
|
|
318
|
-
intervalId = setInterval(onInterval, interval);
|
|
319
|
-
}
|
|
320
336
|
}
|
|
321
337
|
_getCurrentObservation(event) {
|
|
322
338
|
var _a, _b, _c, _d;
|
|
323
339
|
/** Actual event emitted through an observation. */
|
|
324
340
|
let tmpEvt = event;
|
|
341
|
+
const mediaElement = this._mediaElementRef.getValue();
|
|
325
342
|
// NOTE: `this._observationRef` may be `undefined` because we might here be
|
|
326
343
|
// called in the constructor when that property is not yet set.
|
|
327
344
|
const previousObservation = this._observationRef === undefined
|
|
328
|
-
? getInitialObservation(
|
|
345
|
+
? getInitialObservation(mediaElement)
|
|
329
346
|
: this._observationRef.getValue();
|
|
330
347
|
/**
|
|
331
348
|
* If `true`, there is a seek operation ongoing but it was done from the
|
|
@@ -335,7 +352,7 @@ export default class PlaybackObserver {
|
|
|
335
352
|
/** If set, the position for which we plan to seek to as soon as possible. */
|
|
336
353
|
let pendingPosition = (_b = (_a = this._pendingSeek) === null || _a === void 0 ? void 0 : _a.position) !== null && _b !== void 0 ? _b : null;
|
|
337
354
|
/** Initially-polled playback observation, before adjustments. */
|
|
338
|
-
const mediaTimings = getMediaInfos(
|
|
355
|
+
const mediaTimings = mediaElement === null ? getEmptyMediaInfo() : getMediaInfos(mediaElement);
|
|
339
356
|
const { buffered, readyState, position, seeking } = mediaTimings;
|
|
340
357
|
if (tmpEvt === "seeking") {
|
|
341
358
|
// We just began seeking.
|
|
@@ -466,6 +483,50 @@ export default class PlaybackObserver {
|
|
|
466
483
|
}
|
|
467
484
|
this._observationRef.setValue(newObservation);
|
|
468
485
|
}
|
|
486
|
+
_restartInterval() {
|
|
487
|
+
const { SAMPLING_INTERVAL_MEDIASOURCE, SAMPLING_INTERVAL_LOW_LATENCY, SAMPLING_INTERVAL_NO_MEDIASOURCE, } = config.getCurrent();
|
|
488
|
+
let interval;
|
|
489
|
+
if (this._lowLatencyMode) {
|
|
490
|
+
interval = SAMPLING_INTERVAL_LOW_LATENCY;
|
|
491
|
+
}
|
|
492
|
+
else if (this._withMediaSource) {
|
|
493
|
+
interval = SAMPLING_INTERVAL_MEDIASOURCE;
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
interval = SAMPLING_INTERVAL_NO_MEDIASOURCE;
|
|
497
|
+
}
|
|
498
|
+
if (this._observationIntervalId !== null) {
|
|
499
|
+
clearInterval(this._observationIntervalId);
|
|
500
|
+
}
|
|
501
|
+
this._observationIntervalId = setInterval(() => this._generateObservationForEvent("timeupdate"), interval);
|
|
502
|
+
}
|
|
503
|
+
_registerMediaElementEvents(mediaElement) {
|
|
504
|
+
SCANNED_MEDIA_ELEMENTS_EVENTS.map((eventName) => {
|
|
505
|
+
const onMediaEvent = () => {
|
|
506
|
+
this._restartInterval();
|
|
507
|
+
this._generateObservationForEvent(eventName);
|
|
508
|
+
};
|
|
509
|
+
mediaElement.addEventListener(eventName, onMediaEvent);
|
|
510
|
+
this._canceller.signal.register(() => {
|
|
511
|
+
mediaElement.removeEventListener(eventName, onMediaEvent);
|
|
512
|
+
});
|
|
513
|
+
});
|
|
514
|
+
}
|
|
515
|
+
_registerLoadedMetadataEvent(mediaElement) {
|
|
516
|
+
const loadedmetadataCb = this._onLoadedMetadataEvent.bind(this);
|
|
517
|
+
mediaElement.addEventListener("loadedmetadata", loadedmetadataCb);
|
|
518
|
+
this._canceller.signal.register(() => {
|
|
519
|
+
mediaElement.removeEventListener("loadedmetadata", loadedmetadataCb);
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
_onLoadedMetadataEvent() {
|
|
523
|
+
const mediaElement = this._mediaElementRef.getValue();
|
|
524
|
+
if (mediaElement !== null && this._pendingSeek !== null && !this._isSeekBlocked) {
|
|
525
|
+
const { position: positionToSeekTo, isInternal } = this._pendingSeek;
|
|
526
|
+
this._pendingSeek = null;
|
|
527
|
+
this._actuallySetCurrentTime(mediaElement, positionToSeekTo, isInternal);
|
|
528
|
+
}
|
|
529
|
+
}
|
|
469
530
|
}
|
|
470
531
|
/**
|
|
471
532
|
* Returns the amount of time in seconds the buffer should have ahead of the
|
|
@@ -507,9 +568,28 @@ function hasLoadedUntilTheEnd(currentTime, currentRange, ended, duration, lowLat
|
|
|
507
568
|
}
|
|
508
569
|
return currentRange !== null && duration - currentRange.end <= REBUFFERING_GAP[suffix];
|
|
509
570
|
}
|
|
571
|
+
/**
|
|
572
|
+
* Get polled media metrics for when the `HTMLMediaElement` is not yet "attached"
|
|
573
|
+
* to the `PlaybackObserver`.
|
|
574
|
+
*
|
|
575
|
+
* Those metrics actually corresponds to an idle media element.
|
|
576
|
+
* @returns {Object}
|
|
577
|
+
*/
|
|
578
|
+
function getEmptyMediaInfo() {
|
|
579
|
+
return {
|
|
580
|
+
buffered: new ManualTimeRanges(),
|
|
581
|
+
position: 0,
|
|
582
|
+
duration: NaN,
|
|
583
|
+
ended: false,
|
|
584
|
+
paused: true,
|
|
585
|
+
playbackRate: 1,
|
|
586
|
+
readyState: 0,
|
|
587
|
+
seeking: false,
|
|
588
|
+
};
|
|
589
|
+
}
|
|
510
590
|
/**
|
|
511
591
|
* Get basic playback information.
|
|
512
|
-
* @param {
|
|
592
|
+
* @param {HTMLmediaElement} mediaElement
|
|
513
593
|
* @returns {Object}
|
|
514
594
|
*/
|
|
515
595
|
function getMediaInfos(mediaElement) {
|
|
@@ -738,7 +818,7 @@ function prettyPrintBuffered(buffered, currentTime) {
|
|
|
738
818
|
* @returns {Object}
|
|
739
819
|
*/
|
|
740
820
|
function getInitialObservation(mediaElement) {
|
|
741
|
-
const mediaTimings = getMediaInfos(mediaElement);
|
|
821
|
+
const mediaTimings = mediaElement === null ? getEmptyMediaInfo() : getMediaInfos(mediaElement);
|
|
742
822
|
return objectAssign(mediaTimings, {
|
|
743
823
|
rebuffering: null,
|
|
744
824
|
event: "init",
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { IUpdatePlaybackRateWorkerMessage } from "../multithread_types";
|
|
2
2
|
import type { ITrackType } from "../public_types";
|
|
3
3
|
import type { IRange } from "../utils/ranges";
|
|
4
4
|
import type { IReadOnlySharedReference } from "../utils/reference";
|
|
5
5
|
import type { CancellationSignal } from "../utils/task_canceller";
|
|
6
6
|
import type { IFreezingStatus, IReadOnlyPlaybackObserver, IRebufferingStatus } from "./types";
|
|
7
7
|
import type ObservationPosition from "./utils/observation_position";
|
|
8
|
-
export interface
|
|
8
|
+
export interface IWorkerPlaybackObservation {
|
|
9
9
|
/**
|
|
10
10
|
* Information on whether the media element was paused at the time of the
|
|
11
11
|
* Observation.
|
|
@@ -64,22 +64,22 @@ export interface IPausedPlaybackObservation {
|
|
|
64
64
|
*/
|
|
65
65
|
pending: boolean | undefined;
|
|
66
66
|
}
|
|
67
|
-
export default class
|
|
67
|
+
export default class WorkerPlaybackObserver implements IReadOnlyPlaybackObserver<IWorkerPlaybackObservation> {
|
|
68
68
|
private _src;
|
|
69
69
|
private _cancelSignal;
|
|
70
70
|
private _messageSender;
|
|
71
71
|
private _contentId;
|
|
72
|
-
constructor(src: IReadOnlySharedReference<
|
|
72
|
+
constructor(src: IReadOnlySharedReference<IWorkerPlaybackObservation>, contentId: string, sendMessage: (msg: IUpdatePlaybackRateWorkerMessage) => void, cancellationSignal: CancellationSignal);
|
|
73
73
|
getCurrentTime(): number | undefined;
|
|
74
74
|
getReadyState(): number | undefined;
|
|
75
75
|
getIsPaused(): boolean | undefined;
|
|
76
|
-
getReference(): IReadOnlySharedReference<
|
|
76
|
+
getReference(): IReadOnlySharedReference<IWorkerPlaybackObservation>;
|
|
77
77
|
setPlaybackRate(playbackRate: number): void;
|
|
78
78
|
getPlaybackRate(): number | undefined;
|
|
79
|
-
listen(cb: (observation:
|
|
79
|
+
listen(cb: (observation: IWorkerPlaybackObservation, stopListening: () => void) => void, params: {
|
|
80
80
|
includeLastObservation?: boolean | undefined;
|
|
81
81
|
clearSignal: CancellationSignal;
|
|
82
82
|
}): void;
|
|
83
|
-
deriveReadOnlyObserver<TDest>(transform: (observationRef: IReadOnlySharedReference<
|
|
83
|
+
deriveReadOnlyObserver<TDest>(transform: (observationRef: IReadOnlySharedReference<IWorkerPlaybackObservation>, cancellationSignal: CancellationSignal) => IReadOnlySharedReference<TDest>): IReadOnlyPlaybackObserver<TDest>;
|
|
84
84
|
}
|
|
85
|
-
//# sourceMappingURL=
|
|
85
|
+
//# sourceMappingURL=worker_playback_observer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker_playback_observer.d.ts","sourceRoot":"","sources":["../../../src/playback_observer/worker_playback_observer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EACV,eAAe,EACf,yBAAyB,EACzB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,mBAAmB,MAAM,8BAA8B,CAAC;AAEpE,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,MAAM,EAAE,0BAA0B,CAAC;IACnC;;;OAGG;IACH,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,eAAe,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,WAAW,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACvC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B;;;;;;;;OAQG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,kEAAkE;IAClE,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,2EAA2E;AAC3E,MAAM,WAAW,0BAA0B;IACzC;;;;;;;;OAQG;IACH,IAAI,EAAE,OAAO,CAAC;IACd;;;;OAIG;IACH,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,CAAC,OAAO,OAAO,sBACnB,YAAW,yBAAyB,CAAC,0BAA0B,CAAC;IAEhE,OAAO,CAAC,IAAI,CAAuD;IACnE,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,cAAc,CAAkD;IACxE,OAAO,CAAC,UAAU,CAAS;gBAGzB,GAAG,EAAE,wBAAwB,CAAC,0BAA0B,CAAC,EACzD,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,CAAC,GAAG,EAAE,gCAAgC,KAAK,IAAI,EAC5D,kBAAkB,EAAE,kBAAkB;IAQjC,cAAc,IAAI,MAAM,GAAG,SAAS;IAIpC,aAAa,IAAI,MAAM,GAAG,SAAS;IAInC,WAAW,IAAI,OAAO,GAAG,SAAS;IAIlC,YAAY,IAAI,wBAAwB,CAAC,0BAA0B,CAAC;IAIpE,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAQ3C,eAAe,IAAI,MAAM,GAAG,SAAS;IAIrC,MAAM,CACX,EAAE,EAAE,CAAC,WAAW,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,IAAI,KAAK,IAAI,EAChF,MAAM,EAAE;QACN,sBAAsB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAC7C,WAAW,EAAE,kBAAkB,CAAC;KACjC,GACA,IAAI;IAWA,sBAAsB,CAAC,KAAK,EACjC,SAAS,EAAE,CACT,cAAc,EAAE,wBAAwB,CAAC,0BAA0B,CAAC,EACpE,kBAAkB,EAAE,kBAAkB,KACnC,wBAAwB,CAAC,KAAK,CAAC,GACnC,yBAAyB,CAAC,KAAK,CAAC;CAGpC"}
|
package/dist/es2017/playback_observer/{core_playback_observer.js → worker_playback_observer.js}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import generateReadOnlyObserver from "./utils/generate_read_only_observer";
|
|
2
|
-
export default class
|
|
2
|
+
export default class WorkerPlaybackObserver {
|
|
3
3
|
constructor(src, contentId, sendMessage, cancellationSignal) {
|
|
4
4
|
this._src = src;
|
|
5
5
|
this._contentId = contentId;
|
|
@@ -20,7 +20,7 @@ export default class CorePlaybackObserver {
|
|
|
20
20
|
}
|
|
21
21
|
setPlaybackRate(playbackRate) {
|
|
22
22
|
this._messageSender({
|
|
23
|
-
type: "update-playback-rate" /*
|
|
23
|
+
type: "update-playback-rate" /* WorkerMessageType.UpdatePlaybackRate */,
|
|
24
24
|
contentId: this._contentId,
|
|
25
25
|
value: playbackRate,
|
|
26
26
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipelines.d.ts","sourceRoot":"","sources":["../../../../src/transports/smooth/pipelines.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"pipelines.d.ts","sourceRoot":"","sources":["../../../../src/transports/smooth/pipelines.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,OAAO,KAAK,EAgBV,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAUlB,MAAM,CAAC,OAAO,WAAW,gBAAgB,EAAE,iBAAiB,GAAG,mBAAmB,CA+XjF"}
|
|
@@ -17,8 +17,6 @@ import log from "../../log";
|
|
|
17
17
|
import Manifest from "../../manifest/classes";
|
|
18
18
|
import { getMDAT } from "../../parsers/containers/isobmff";
|
|
19
19
|
import createSmoothManifestParser from "../../parsers/manifest/smooth";
|
|
20
|
-
import globalScope from "../../utils/global_scope";
|
|
21
|
-
import isNullOrUndefined from "../../utils/is_null_or_undefined";
|
|
22
20
|
import request from "../../utils/request";
|
|
23
21
|
import { strToUtf8, utf8ToStr } from "../../utils/string_parsing";
|
|
24
22
|
import addQueryString from "../utils/add_query_string";
|
|
@@ -42,7 +40,9 @@ export default function (transportOptions) {
|
|
|
42
40
|
var _a;
|
|
43
41
|
const url = (_a = manifestData.url) !== null && _a !== void 0 ? _a : parserOptions.originalUrl;
|
|
44
42
|
const { receivedTime: manifestReceivedTime, responseData } = manifestData;
|
|
45
|
-
const documentData =
|
|
43
|
+
const documentData = typeof responseData === "string"
|
|
44
|
+
? new DOMParser().parseFromString(responseData, "text/xml")
|
|
45
|
+
: responseData; // TODO find a way to check if Document?
|
|
46
46
|
const parserResult = smoothManifestParser(documentData, url, manifestReceivedTime);
|
|
47
47
|
const manifest = new Manifest(parserResult, {
|
|
48
48
|
representationFilter: transportOptions.representationFilter,
|
|
@@ -334,25 +334,3 @@ export default function (transportOptions) {
|
|
|
334
334
|
},
|
|
335
335
|
};
|
|
336
336
|
}
|
|
337
|
-
/**
|
|
338
|
-
* Try to convert a Manifest from an unknown format to a JS string format.
|
|
339
|
-
*
|
|
340
|
-
* Throws if the format cannot be converted.
|
|
341
|
-
* @param {*} manifestSrc
|
|
342
|
-
* @returns {Array.<Object | string>}
|
|
343
|
-
*/
|
|
344
|
-
function getManifestAsString(manifestSrc) {
|
|
345
|
-
if (manifestSrc instanceof ArrayBuffer) {
|
|
346
|
-
return utf8ToStr(new Uint8Array(manifestSrc));
|
|
347
|
-
}
|
|
348
|
-
else if (typeof manifestSrc === "string") {
|
|
349
|
-
return manifestSrc;
|
|
350
|
-
}
|
|
351
|
-
else if (!isNullOrUndefined(globalScope.Document) &&
|
|
352
|
-
manifestSrc instanceof globalScope.Document) {
|
|
353
|
-
return manifestSrc.documentElement.outerHTML;
|
|
354
|
-
}
|
|
355
|
-
else {
|
|
356
|
-
throw new Error("Smooth Manifest Parser: Unrecognized Manifest format");
|
|
357
|
-
}
|
|
358
|
-
}
|
|
@@ -2,65 +2,5 @@
|
|
|
2
2
|
* This file is the entry point of the worker part of the RxPlayer, only relied
|
|
3
3
|
* on when running in a multithread mode.
|
|
4
4
|
*/
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
import features from "./features";
|
|
8
|
-
import Manifest from "./manifest/classes";
|
|
9
|
-
import DashJsParser from "./parsers/manifest/dash/js-parser";
|
|
10
|
-
import DashWasmParser from "./parsers/manifest/dash/wasm-parser";
|
|
11
|
-
import createDashPipelines from "./transports/dash";
|
|
12
|
-
import globalScope from "./utils/global_scope";
|
|
13
|
-
// Initialize Manually a `DashWasmParser` and add the feature.
|
|
14
|
-
// TODO allow worker-side feature-switching? Not sure how
|
|
15
|
-
const dashWasmParser = new DashWasmParser();
|
|
16
|
-
features.dashParsers.wasm = dashWasmParser;
|
|
17
|
-
features.dashParsers.js = DashJsParser;
|
|
18
|
-
features.transports.dash = createDashPipelines;
|
|
19
|
-
globalScope.onmessageerror = (_msg) => {
|
|
20
|
-
log.error("Core", "Error when receiving message from main thread.");
|
|
21
|
-
};
|
|
22
|
-
initializeCoreEntry((handler) => {
|
|
23
|
-
onmessage = handler;
|
|
24
|
-
}, sendMessage);
|
|
25
|
-
/**
|
|
26
|
-
* Perform a `postMessage` to main thread with the given message.
|
|
27
|
-
* Arguments follow the `postMessage` API.
|
|
28
|
-
* @param {Object} msg
|
|
29
|
-
* @param {Array.<Object>} [transferables]
|
|
30
|
-
*/
|
|
31
|
-
function sendMessage(msg, transferables) {
|
|
32
|
-
updateMessageFormat(msg);
|
|
33
|
-
if (msg.type !== "log" /* CoreMessageType.LogMessage */) {
|
|
34
|
-
log.debug("M<--C", "Sending message from worker", { name: msg.type });
|
|
35
|
-
}
|
|
36
|
-
if (transferables === undefined) {
|
|
37
|
-
postMessage(msg);
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
// TypeScript made a mistake here, and 2busy2fix
|
|
41
|
-
postMessage(msg, transferables);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Ensure that we're sending data that can be serialized, as this is a
|
|
46
|
-
* requirement for the `postMessage` browser API.
|
|
47
|
-
*
|
|
48
|
-
* If necessary, mutations are done in place.
|
|
49
|
-
* @param {Object} msg
|
|
50
|
-
*/
|
|
51
|
-
function updateMessageFormat(msg) {
|
|
52
|
-
if (msg.type === "manifest-ready" /* CoreMessageType.ManifestReady */ ||
|
|
53
|
-
msg.type === "manifest-update" /* CoreMessageType.ManifestUpdate */) {
|
|
54
|
-
if (msg.value.manifest instanceof Manifest) {
|
|
55
|
-
msg.value.manifest = msg.value.manifest.getMetadataSnapshot();
|
|
56
|
-
if (msg.type === "manifest-update" /* CoreMessageType.ManifestUpdate */) {
|
|
57
|
-
// Remove `periods` key to reduce cost of an unnecessary manifest
|
|
58
|
-
// clone.
|
|
59
|
-
msg.value.manifest.periods = [];
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
log.warn("Core", "the Manifest instance should be communicated to `sendMessage`.");
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
5
|
+
import initializeWorkerMain from "./core/main/worker";
|
|
6
|
+
initializeWorkerMain();
|
package/dist/mpd-parser.wasm
CHANGED
|
Binary file
|