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
|
@@ -1,86 +1,57 @@
|
|
|
1
|
-
import config from "
|
|
2
|
-
import { MediaError, OtherError } from "
|
|
3
|
-
import features from "
|
|
4
|
-
import log from "
|
|
1
|
+
import config from "../../../config";
|
|
2
|
+
import { MediaError, OtherError } from "../../../errors";
|
|
3
|
+
import features from "../../../features";
|
|
4
|
+
import log from "../../../log";
|
|
5
|
+
import Manifest, { Adaptation, Period, Representation } from "../../../manifest/classes";
|
|
5
6
|
import type {
|
|
6
7
|
IContentInitializationData,
|
|
8
|
+
IDiscontinuityUpdateWorkerMessagePayload,
|
|
7
9
|
IMainThreadMessage,
|
|
8
10
|
IReferenceUpdateMessage,
|
|
9
11
|
IThumbnailDataRequestMainMessage,
|
|
10
|
-
} from "
|
|
11
|
-
import { MainThreadMessageType } from "
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import
|
|
19
|
-
import
|
|
20
|
-
import {
|
|
21
|
-
import
|
|
22
|
-
import type {
|
|
23
|
-
import
|
|
24
|
-
import
|
|
12
|
+
} from "../../../multithread_types";
|
|
13
|
+
import { MainThreadMessageType, WorkerMessageType } from "../../../multithread_types";
|
|
14
|
+
import DashJsParser from "../../../parsers/manifest/dash/js-parser";
|
|
15
|
+
import DashWasmParser from "../../../parsers/manifest/dash/wasm-parser";
|
|
16
|
+
import { ObservationPosition } from "../../../playback_observer";
|
|
17
|
+
import type { IWorkerPlaybackObservation } from "../../../playback_observer/worker_playback_observer";
|
|
18
|
+
import WorkerPlaybackObserver from "../../../playback_observer/worker_playback_observer";
|
|
19
|
+
import type { IPlayerError, ITrackType } from "../../../public_types";
|
|
20
|
+
import createDashPipelines from "../../../transports/dash";
|
|
21
|
+
import arrayFind from "../../../utils/array_find";
|
|
22
|
+
import assert, { assertUnreachable } from "../../../utils/assert";
|
|
23
|
+
import globalScope from "../../../utils/global_scope";
|
|
24
|
+
import type { ILogFormat, ILoggerLevel } from "../../../utils/logger";
|
|
25
|
+
import { scaleTimestamp } from "../../../utils/monotonic_timestamp";
|
|
26
|
+
import objectAssign from "../../../utils/object_assign";
|
|
27
|
+
import type { IReadOnlySharedReference } from "../../../utils/reference";
|
|
28
|
+
import SharedReference from "../../../utils/reference";
|
|
29
|
+
import TaskCanceller from "../../../utils/task_canceller";
|
|
25
30
|
import type {
|
|
26
31
|
INeedsMediaSourceReloadPayload,
|
|
27
32
|
IStreamOrchestratorCallbacks,
|
|
28
33
|
IStreamStatusPayload,
|
|
29
|
-
} from "
|
|
30
|
-
import StreamOrchestrator from "
|
|
31
|
-
import
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
import { CoreMessageType } from "../types";
|
|
34
|
+
} from "../../stream";
|
|
35
|
+
import StreamOrchestrator from "../../stream";
|
|
36
|
+
import createContentTimeBoundariesObserver from "../common/create_content_time_boundaries_observer";
|
|
37
|
+
import type { IFreezeResolution } from "../common/FreezeResolver";
|
|
38
|
+
import getBufferedDataPerMediaBuffer from "../common/get_buffered_data_per_media_buffer";
|
|
39
|
+
import getThumbnailData from "../common/get_thumbnail_data";
|
|
40
|
+
import synchronizeSegmentSinksOnObservation from "../common/synchronize_sinks_on_observation";
|
|
37
41
|
import ContentPreparer from "./content_preparer";
|
|
38
|
-
import
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
* entry point to all its "core" code.
|
|
50
|
-
*
|
|
51
|
-
* Its role is to receive and react to messages coming from "main thead", which
|
|
52
|
-
* may include loading and playing a content, and to send back messages for the main
|
|
53
|
-
* thread.
|
|
54
|
-
* @param {Function} setMessageReceiver - Declares the function that will
|
|
55
|
-
* receive messages coming from the "main thread" part of the RxPlayer logic.
|
|
56
|
-
* @param {Function} sendMessage - Function allowing to send messages to the
|
|
57
|
-
* "main thread" part of the RxPlayer logic.
|
|
58
|
-
*/
|
|
59
|
-
export default function initializeCoreEntry(
|
|
60
|
-
setMessageReceiver: (cb: IMessageReceiverCallback) => void,
|
|
61
|
-
sendMessage: (msg: ICoreMessage, transferables?: Transferable[]) => void,
|
|
62
|
-
): void {
|
|
63
|
-
const {
|
|
64
|
-
DEFAULT_WANTED_BUFFER_AHEAD,
|
|
65
|
-
DEFAULT_MAX_VIDEO_BUFFER_SIZE,
|
|
66
|
-
DEFAULT_MAX_BUFFER_AHEAD,
|
|
67
|
-
DEFAULT_MAX_BUFFER_BEHIND,
|
|
68
|
-
} = config.getCurrent();
|
|
69
|
-
const refs: ICoreReferences = {
|
|
70
|
-
wantedBufferAhead: new SharedReference(DEFAULT_WANTED_BUFFER_AHEAD),
|
|
71
|
-
maxVideoBufferSize: new SharedReference(DEFAULT_MAX_VIDEO_BUFFER_SIZE),
|
|
72
|
-
maxBufferAhead: new SharedReference(DEFAULT_MAX_BUFFER_AHEAD),
|
|
73
|
-
maxBufferBehind: new SharedReference(DEFAULT_MAX_BUFFER_BEHIND),
|
|
74
|
-
limitVideoResolution: new SharedReference<IResolutionInfo>({
|
|
75
|
-
height: undefined,
|
|
76
|
-
width: undefined,
|
|
77
|
-
pixelRatio: 1,
|
|
78
|
-
}),
|
|
79
|
-
throttleVideoBitrate: new SharedReference(Infinity),
|
|
80
|
-
};
|
|
81
|
-
|
|
42
|
+
import {
|
|
43
|
+
limitVideoResolution,
|
|
44
|
+
maxBufferAhead,
|
|
45
|
+
maxBufferBehind,
|
|
46
|
+
maxVideoBufferSize,
|
|
47
|
+
throttleVideoBitrate,
|
|
48
|
+
wantedBufferAhead,
|
|
49
|
+
} from "./globals";
|
|
50
|
+
import sendMessage, { formatErrorForSender } from "./send_message";
|
|
51
|
+
|
|
52
|
+
export default function initializeWorkerMain() {
|
|
82
53
|
/**
|
|
83
|
-
* `true` once the
|
|
54
|
+
* `true` once the worker has been initialized.
|
|
84
55
|
* Allow to enforce the fact that it is only initialized once.
|
|
85
56
|
*/
|
|
86
57
|
let isInitialized = false;
|
|
@@ -97,44 +68,48 @@ export default function initializeCoreEntry(
|
|
|
97
68
|
*/
|
|
98
69
|
let currentContentHandle: IContentHandle | null = null;
|
|
99
70
|
|
|
71
|
+
// Initialize Manually a `DashWasmParser` and add the feature.
|
|
72
|
+
// TODO allow worker-side feature-switching? Not sure how
|
|
73
|
+
const dashWasmParser = new DashWasmParser();
|
|
74
|
+
features.dashParsers.wasm = dashWasmParser;
|
|
75
|
+
features.dashParsers.js = DashJsParser;
|
|
76
|
+
features.transports.dash = createDashPipelines;
|
|
77
|
+
|
|
100
78
|
/**
|
|
101
79
|
* When set, emit playback observation made on the main thread.
|
|
102
80
|
*/
|
|
103
|
-
let playbackObservationRef: SharedReference<
|
|
104
|
-
|
|
81
|
+
let playbackObservationRef: SharedReference<IWorkerPlaybackObservation> | null = null;
|
|
82
|
+
|
|
83
|
+
globalScope.onmessageerror = (_msg: MessageEvent) => {
|
|
84
|
+
log.error("Core", "Error when receiving message from main thread.");
|
|
85
|
+
};
|
|
86
|
+
onmessage = function (e: MessageEvent<IMainThreadMessage>) {
|
|
105
87
|
log.debug("Core", "received message", { name: e.data.type });
|
|
106
88
|
|
|
107
89
|
const msg = e.data;
|
|
108
90
|
switch (msg.type) {
|
|
109
91
|
case MainThreadMessageType.Init:
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
) {
|
|
125
|
-
dashWasmParser.initialize({ wasmUrl: msg.value.dashWasmUrl }).catch((err) => {
|
|
126
|
-
const error = err instanceof Error ? err.toString() : "Unknown Error";
|
|
127
|
-
log.error("Core", "Could not initialize DASH_WASM parser", error);
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if (!msg.value.hasVideo) {
|
|
132
|
-
contentPreparer.disposeCurrentContent();
|
|
133
|
-
contentPreparer = new ContentPreparer({ hasVideo: msg.value.hasVideo });
|
|
134
|
-
}
|
|
92
|
+
assert(!isInitialized);
|
|
93
|
+
isInitialized = true;
|
|
94
|
+
scaleTimestamp(msg.value);
|
|
95
|
+
updateLoggerLevel(
|
|
96
|
+
msg.value.logLevel,
|
|
97
|
+
msg.value.logFormat,
|
|
98
|
+
msg.value.sendBackLogs,
|
|
99
|
+
);
|
|
100
|
+
if (msg.value.dashWasmUrl !== undefined && dashWasmParser.isCompatible()) {
|
|
101
|
+
dashWasmParser.initialize({ wasmUrl: msg.value.dashWasmUrl }).catch((err) => {
|
|
102
|
+
const error = err instanceof Error ? err.toString() : "Unknown Error";
|
|
103
|
+
log.error("Core", "Could not initialize DASH_WASM parser", error);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
135
106
|
|
|
136
|
-
|
|
107
|
+
if (!msg.value.hasVideo) {
|
|
108
|
+
contentPreparer.disposeCurrentContent();
|
|
109
|
+
contentPreparer = new ContentPreparer({ hasVideo: msg.value.hasVideo });
|
|
137
110
|
}
|
|
111
|
+
|
|
112
|
+
sendMessage({ type: WorkerMessageType.InitSuccess, value: null });
|
|
138
113
|
break;
|
|
139
114
|
|
|
140
115
|
case MainThreadMessageType.LogLevelUpdate:
|
|
@@ -146,7 +121,7 @@ export default function initializeCoreEntry(
|
|
|
146
121
|
break;
|
|
147
122
|
|
|
148
123
|
case MainThreadMessageType.PrepareContent:
|
|
149
|
-
prepareNewContent(
|
|
124
|
+
prepareNewContent(contentPreparer, msg.value);
|
|
150
125
|
break;
|
|
151
126
|
|
|
152
127
|
case MainThreadMessageType.StartPreparedContent: {
|
|
@@ -159,18 +134,16 @@ export default function initializeCoreEntry(
|
|
|
159
134
|
playbackObservationRef?.finish();
|
|
160
135
|
|
|
161
136
|
const currentContentObservationRef =
|
|
162
|
-
new SharedReference<
|
|
137
|
+
new SharedReference<IWorkerPlaybackObservation>(
|
|
163
138
|
objectAssign(msg.value.initialObservation, {
|
|
164
139
|
position: new ObservationPosition(...msg.value.initialObservation.position),
|
|
165
140
|
}),
|
|
166
141
|
);
|
|
167
142
|
playbackObservationRef = currentContentObservationRef;
|
|
168
143
|
currentContentHandle = loadPreparedContent(
|
|
169
|
-
sendMessage,
|
|
170
144
|
msg.value,
|
|
171
145
|
contentPreparer,
|
|
172
146
|
currentContentObservationRef,
|
|
173
|
-
refs,
|
|
174
147
|
);
|
|
175
148
|
break;
|
|
176
149
|
}
|
|
@@ -201,7 +174,7 @@ export default function initializeCoreEntry(
|
|
|
201
174
|
}
|
|
202
175
|
|
|
203
176
|
case MainThreadMessageType.ReferenceUpdate:
|
|
204
|
-
|
|
177
|
+
updateGlobalReference(msg);
|
|
205
178
|
break;
|
|
206
179
|
|
|
207
180
|
case MainThreadMessageType.StopContent:
|
|
@@ -331,14 +304,14 @@ export default function initializeCoreEntry(
|
|
|
331
304
|
const warning = preparedContent.manifest.updateCodecSupport(newEvaluatedCodecs);
|
|
332
305
|
if (warning !== null) {
|
|
333
306
|
sendMessage({
|
|
334
|
-
type:
|
|
307
|
+
type: WorkerMessageType.Warning,
|
|
335
308
|
contentId: preparedContent.contentId,
|
|
336
309
|
value: formatErrorForSender(warning),
|
|
337
310
|
});
|
|
338
311
|
}
|
|
339
312
|
} catch (err) {
|
|
340
313
|
sendMessage({
|
|
341
|
-
type:
|
|
314
|
+
type: WorkerMessageType.Error,
|
|
342
315
|
contentId: preparedContent.contentId,
|
|
343
316
|
value: formatErrorForSender(err),
|
|
344
317
|
});
|
|
@@ -390,11 +363,11 @@ export default function initializeCoreEntry(
|
|
|
390
363
|
if (preparedContent === null || preparedContent.contentId !== msg.contentId) {
|
|
391
364
|
return;
|
|
392
365
|
}
|
|
393
|
-
if (preparedContent.
|
|
366
|
+
if (preparedContent.workerTextSender === null) {
|
|
394
367
|
log.error("Core", "Added text track but text track aren't enabled");
|
|
395
368
|
return;
|
|
396
369
|
}
|
|
397
|
-
preparedContent.
|
|
370
|
+
preparedContent.workerTextSender.onPushedTrackSuccess(msg.value.ranges);
|
|
398
371
|
break;
|
|
399
372
|
}
|
|
400
373
|
|
|
@@ -403,11 +376,11 @@ export default function initializeCoreEntry(
|
|
|
403
376
|
if (preparedContent === null || preparedContent.contentId !== msg.contentId) {
|
|
404
377
|
return;
|
|
405
378
|
}
|
|
406
|
-
if (preparedContent.
|
|
379
|
+
if (preparedContent.workerTextSender === null) {
|
|
407
380
|
log.error("Core", "Added text track but text track aren't enabled");
|
|
408
381
|
return;
|
|
409
382
|
}
|
|
410
|
-
preparedContent.
|
|
383
|
+
preparedContent.workerTextSender.onPushedTrackError(new Error(msg.value.message));
|
|
411
384
|
break;
|
|
412
385
|
}
|
|
413
386
|
|
|
@@ -416,11 +389,11 @@ export default function initializeCoreEntry(
|
|
|
416
389
|
if (preparedContent === null || preparedContent.contentId !== msg.contentId) {
|
|
417
390
|
return;
|
|
418
391
|
}
|
|
419
|
-
if (preparedContent.
|
|
392
|
+
if (preparedContent.workerTextSender === null) {
|
|
420
393
|
log.error("Core", "Removed text track but text track aren't enabled");
|
|
421
394
|
return;
|
|
422
395
|
}
|
|
423
|
-
preparedContent.
|
|
396
|
+
preparedContent.workerTextSender.onRemoveSuccess(msg.value.ranges);
|
|
424
397
|
break;
|
|
425
398
|
}
|
|
426
399
|
|
|
@@ -429,21 +402,21 @@ export default function initializeCoreEntry(
|
|
|
429
402
|
if (preparedContent === null || preparedContent.contentId !== msg.contentId) {
|
|
430
403
|
return;
|
|
431
404
|
}
|
|
432
|
-
if (preparedContent.
|
|
405
|
+
if (preparedContent.workerTextSender === null) {
|
|
433
406
|
log.error("Core", "Removed text track but text track aren't enabled");
|
|
434
407
|
return;
|
|
435
408
|
}
|
|
436
|
-
preparedContent.
|
|
409
|
+
preparedContent.workerTextSender.onRemoveError(new Error(msg.value.message));
|
|
437
410
|
break;
|
|
438
411
|
}
|
|
439
412
|
|
|
440
413
|
case MainThreadMessageType.PullSegmentSinkStoreInfos: {
|
|
441
|
-
sendSegmentSinksStoreInfos(
|
|
414
|
+
sendSegmentSinksStoreInfos(contentPreparer, msg.value.requestId);
|
|
442
415
|
break;
|
|
443
416
|
}
|
|
444
417
|
|
|
445
418
|
case MainThreadMessageType.ThumbnailDataRequest: {
|
|
446
|
-
sendThumbnailData(
|
|
419
|
+
sendThumbnailData(contentPreparer, msg);
|
|
447
420
|
break;
|
|
448
421
|
}
|
|
449
422
|
|
|
@@ -455,72 +428,50 @@ export default function initializeCoreEntry(
|
|
|
455
428
|
default:
|
|
456
429
|
assertUnreachable(msg);
|
|
457
430
|
}
|
|
458
|
-
}
|
|
431
|
+
};
|
|
459
432
|
}
|
|
460
433
|
|
|
461
|
-
/**
|
|
462
|
-
* Performs steps needed to prepare a future content to be played:
|
|
463
|
-
* - Load its Manifest file
|
|
464
|
-
* - Create MSE `MediaSource` for that content.
|
|
465
|
-
* - Initialize all modules that will follow that content
|
|
466
|
-
* - etc.
|
|
467
|
-
* @param {Function} sendMessage - Function allowing to send messages to the
|
|
468
|
-
* "main thread" part of the RxPlayer logic.
|
|
469
|
-
* @param {ContentPreparer} contentPreparer
|
|
470
|
-
* @param {Object} contentInitData - Configuration wanted for the content to
|
|
471
|
-
* load.
|
|
472
|
-
* @param {Object} refs - Collection of so-called "references": values
|
|
473
|
-
* configuring playback that may be updated at any time and that the
|
|
474
|
-
* CoreEntry should react on.
|
|
475
|
-
*/
|
|
476
434
|
function prepareNewContent(
|
|
477
|
-
sendMessage: (msg: ICoreMessage, transferables?: Transferable[]) => void,
|
|
478
435
|
contentPreparer: ContentPreparer,
|
|
479
436
|
contentInitData: IContentInitializationData,
|
|
480
|
-
refs: ICoreReferences,
|
|
481
437
|
): void {
|
|
482
|
-
contentPreparer
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
contentId: contentInitData.contentId,
|
|
499
|
-
value: formatErrorForSender(err),
|
|
500
|
-
});
|
|
501
|
-
},
|
|
502
|
-
);
|
|
438
|
+
contentPreparer.initializeNewContent(contentInitData).then(
|
|
439
|
+
(manifest) => {
|
|
440
|
+
sendMessage({
|
|
441
|
+
type: WorkerMessageType.ManifestReady,
|
|
442
|
+
contentId: contentInitData.contentId,
|
|
443
|
+
value: { manifest },
|
|
444
|
+
});
|
|
445
|
+
},
|
|
446
|
+
(err: unknown) => {
|
|
447
|
+
sendMessage({
|
|
448
|
+
type: WorkerMessageType.Error,
|
|
449
|
+
contentId: contentInitData.contentId,
|
|
450
|
+
value: formatErrorForSender(err),
|
|
451
|
+
});
|
|
452
|
+
},
|
|
453
|
+
);
|
|
503
454
|
}
|
|
504
455
|
|
|
505
|
-
function
|
|
456
|
+
function updateGlobalReference(msg: IReferenceUpdateMessage): void {
|
|
506
457
|
switch (msg.value.name) {
|
|
507
458
|
case "wantedBufferAhead":
|
|
508
|
-
|
|
459
|
+
wantedBufferAhead.setValueIfChanged(msg.value.newVal);
|
|
509
460
|
break;
|
|
510
461
|
case "maxVideoBufferSize":
|
|
511
|
-
|
|
462
|
+
maxVideoBufferSize.setValueIfChanged(msg.value.newVal);
|
|
512
463
|
break;
|
|
513
464
|
case "maxBufferBehind":
|
|
514
|
-
|
|
465
|
+
maxBufferBehind.setValueIfChanged(msg.value.newVal);
|
|
515
466
|
break;
|
|
516
467
|
case "maxBufferAhead":
|
|
517
|
-
|
|
468
|
+
maxBufferAhead.setValueIfChanged(msg.value.newVal);
|
|
518
469
|
break;
|
|
519
470
|
case "limitVideoResolution":
|
|
520
|
-
|
|
471
|
+
limitVideoResolution.setValueIfChanged(msg.value.newVal);
|
|
521
472
|
break;
|
|
522
473
|
case "throttleVideoBitrate":
|
|
523
|
-
|
|
474
|
+
throttleVideoBitrate.setValueIfChanged(msg.value.newVal);
|
|
524
475
|
break;
|
|
525
476
|
default:
|
|
526
477
|
assertUnreachable(msg.value);
|
|
@@ -556,11 +507,9 @@ interface IContentHandle {
|
|
|
556
507
|
}
|
|
557
508
|
|
|
558
509
|
function loadPreparedContent(
|
|
559
|
-
sendMessage: (msg: ICoreMessage, transferables?: Transferable[]) => void,
|
|
560
510
|
val: ILoadingContentParameters,
|
|
561
511
|
contentPreparer: ContentPreparer,
|
|
562
|
-
playbackObservationRef: IReadOnlySharedReference<
|
|
563
|
-
refs: ICoreReferences,
|
|
512
|
+
playbackObservationRef: IReadOnlySharedReference<IWorkerPlaybackObservation>,
|
|
564
513
|
): IContentHandle {
|
|
565
514
|
log.debug("Core", "Loading pepared content.");
|
|
566
515
|
const contentCanceller = new TaskCanceller();
|
|
@@ -583,7 +532,7 @@ function loadPreparedContent(
|
|
|
583
532
|
currentLoadCanceller.linkToSignal(contentCanceller.signal);
|
|
584
533
|
|
|
585
534
|
/**
|
|
586
|
-
* Stores last discontinuity update sent to the
|
|
535
|
+
* Stores last discontinuity update sent to the worker for each Period and type
|
|
587
536
|
* combinations, at least until the corresponding `PeriodStreamCleared`
|
|
588
537
|
* message.
|
|
589
538
|
*
|
|
@@ -592,14 +541,14 @@ function loadPreparedContent(
|
|
|
592
541
|
*/
|
|
593
542
|
const lastSentDiscontinuitiesStore: Map<
|
|
594
543
|
Period,
|
|
595
|
-
Map<ITrackType,
|
|
544
|
+
Map<ITrackType, IDiscontinuityUpdateWorkerMessagePayload>
|
|
596
545
|
> = new Map();
|
|
597
546
|
|
|
598
547
|
const preparedContent = contentPreparer.getCurrentContent();
|
|
599
548
|
if (preparedContent === null || preparedContent.manifest === null) {
|
|
600
549
|
const error = new OtherError("NONE", "Loading content when none is prepared");
|
|
601
550
|
sendMessage({
|
|
602
|
-
type:
|
|
551
|
+
type: WorkerMessageType.Error,
|
|
603
552
|
contentId: undefined,
|
|
604
553
|
value: formatErrorForSender(error),
|
|
605
554
|
});
|
|
@@ -623,7 +572,7 @@ function loadPreparedContent(
|
|
|
623
572
|
const freezeResolution =
|
|
624
573
|
preparedContent.freezeResolver.onNewObservation(observation);
|
|
625
574
|
if (freezeResolution !== null) {
|
|
626
|
-
handleFreezeResolution(
|
|
575
|
+
handleFreezeResolution(freezeResolution, {
|
|
627
576
|
contentId,
|
|
628
577
|
manifest,
|
|
629
578
|
handleMediaSourceReload: performMediaSourceReload,
|
|
@@ -642,14 +591,14 @@ function loadPreparedContent(
|
|
|
642
591
|
"Wanted starting time not found in the Manifest.",
|
|
643
592
|
);
|
|
644
593
|
sendMessage({
|
|
645
|
-
type:
|
|
594
|
+
type: WorkerMessageType.Error,
|
|
646
595
|
contentId,
|
|
647
596
|
value: formatErrorForSender(error),
|
|
648
597
|
});
|
|
649
598
|
throw error;
|
|
650
599
|
}
|
|
651
600
|
|
|
652
|
-
const playbackObserver = new
|
|
601
|
+
const playbackObserver = new WorkerPlaybackObserver(
|
|
653
602
|
playbackObservationRef,
|
|
654
603
|
contentId,
|
|
655
604
|
sendMessage,
|
|
@@ -668,13 +617,13 @@ function loadPreparedContent(
|
|
|
668
617
|
{
|
|
669
618
|
onWarning: (err: IPlayerError) =>
|
|
670
619
|
sendMessage({
|
|
671
|
-
type:
|
|
620
|
+
type: WorkerMessageType.Warning,
|
|
672
621
|
contentId,
|
|
673
622
|
value: formatErrorForSender(err),
|
|
674
623
|
}),
|
|
675
624
|
onPeriodChanged: (period: Period) => {
|
|
676
625
|
sendMessage({
|
|
677
|
-
type:
|
|
626
|
+
type: WorkerMessageType.ActivePeriodChanged,
|
|
678
627
|
contentId,
|
|
679
628
|
value: { periodId: period.id },
|
|
680
629
|
});
|
|
@@ -690,10 +639,10 @@ function loadPreparedContent(
|
|
|
690
639
|
segmentSinksStore,
|
|
691
640
|
segmentQueueCreator,
|
|
692
641
|
{
|
|
693
|
-
wantedBufferAhead
|
|
694
|
-
maxVideoBufferSize
|
|
695
|
-
maxBufferAhead
|
|
696
|
-
maxBufferBehind
|
|
642
|
+
wantedBufferAhead,
|
|
643
|
+
maxVideoBufferSize,
|
|
644
|
+
maxBufferAhead,
|
|
645
|
+
maxBufferBehind,
|
|
697
646
|
drmSystemId,
|
|
698
647
|
enableFastSwitching,
|
|
699
648
|
onCodecSwitch,
|
|
@@ -711,7 +660,7 @@ function loadPreparedContent(
|
|
|
711
660
|
return {
|
|
712
661
|
needsBufferFlush(payload) {
|
|
713
662
|
sendMessage({
|
|
714
|
-
type:
|
|
663
|
+
type: WorkerMessageType.NeedsBufferFlush,
|
|
715
664
|
contentId,
|
|
716
665
|
value: payload,
|
|
717
666
|
});
|
|
@@ -757,7 +706,7 @@ function loadPreparedContent(
|
|
|
757
706
|
|
|
758
707
|
lockedStream(payload) {
|
|
759
708
|
sendMessage({
|
|
760
|
-
type:
|
|
709
|
+
type: WorkerMessageType.LockedStream,
|
|
761
710
|
contentId,
|
|
762
711
|
value: {
|
|
763
712
|
periodId: payload.period.id,
|
|
@@ -779,7 +728,7 @@ function loadPreparedContent(
|
|
|
779
728
|
return;
|
|
780
729
|
}
|
|
781
730
|
sendMessage({
|
|
782
|
-
type:
|
|
731
|
+
type: WorkerMessageType.AdaptationChanged,
|
|
783
732
|
contentId,
|
|
784
733
|
value: {
|
|
785
734
|
adaptationId: value.adaptation?.id ?? null,
|
|
@@ -798,7 +747,7 @@ function loadPreparedContent(
|
|
|
798
747
|
return;
|
|
799
748
|
}
|
|
800
749
|
sendMessage({
|
|
801
|
-
type:
|
|
750
|
+
type: WorkerMessageType.RepresentationChanged,
|
|
802
751
|
contentId,
|
|
803
752
|
value: {
|
|
804
753
|
adaptationId: value.adaptation.id,
|
|
@@ -811,7 +760,7 @@ function loadPreparedContent(
|
|
|
811
760
|
|
|
812
761
|
inbandEvent(value) {
|
|
813
762
|
sendMessage({
|
|
814
|
-
type:
|
|
763
|
+
type: WorkerMessageType.InbandEvent,
|
|
815
764
|
contentId,
|
|
816
765
|
value,
|
|
817
766
|
});
|
|
@@ -819,7 +768,7 @@ function loadPreparedContent(
|
|
|
819
768
|
|
|
820
769
|
warning(value) {
|
|
821
770
|
sendMessage({
|
|
822
|
-
type:
|
|
771
|
+
type: WorkerMessageType.Warning,
|
|
823
772
|
contentId,
|
|
824
773
|
value: formatErrorForSender(value),
|
|
825
774
|
});
|
|
@@ -835,7 +784,7 @@ function loadPreparedContent(
|
|
|
835
784
|
value.adaptationRef,
|
|
836
785
|
);
|
|
837
786
|
sendMessage({
|
|
838
|
-
type:
|
|
787
|
+
type: WorkerMessageType.PeriodStreamReady,
|
|
839
788
|
contentId,
|
|
840
789
|
value: { periodId: value.period.id, bufferType: value.type },
|
|
841
790
|
});
|
|
@@ -862,7 +811,7 @@ function loadPreparedContent(
|
|
|
862
811
|
value.type,
|
|
863
812
|
);
|
|
864
813
|
sendMessage({
|
|
865
|
-
type:
|
|
814
|
+
type: WorkerMessageType.PeriodStreamCleared,
|
|
866
815
|
contentId,
|
|
867
816
|
value: { periodId: value.period.id, bufferType: value.type },
|
|
868
817
|
});
|
|
@@ -880,7 +829,7 @@ function loadPreparedContent(
|
|
|
880
829
|
// Considering this is only for an unimportant undocumented API, we may
|
|
881
830
|
// throttle such messages. (e.g. max one per 2 seconds for each type?).
|
|
882
831
|
sendMessage({
|
|
883
|
-
type:
|
|
832
|
+
type: WorkerMessageType.BitrateEstimateChange,
|
|
884
833
|
contentId,
|
|
885
834
|
value: {
|
|
886
835
|
bitrate: payload.bitrate,
|
|
@@ -895,7 +844,7 @@ function loadPreparedContent(
|
|
|
895
844
|
|
|
896
845
|
needsDecipherabilityFlush() {
|
|
897
846
|
sendMessage({
|
|
898
|
-
type:
|
|
847
|
+
type: WorkerMessageType.NeedsDecipherabilityFlush,
|
|
899
848
|
contentId,
|
|
900
849
|
value: null,
|
|
901
850
|
});
|
|
@@ -918,7 +867,7 @@ function loadPreparedContent(
|
|
|
918
867
|
content.representation = content.representation.getMetadataSnapshot();
|
|
919
868
|
}
|
|
920
869
|
sendMessage({
|
|
921
|
-
type:
|
|
870
|
+
type: WorkerMessageType.EncryptionDataEncountered,
|
|
922
871
|
contentId,
|
|
923
872
|
value: {
|
|
924
873
|
keyIds: value.keyIds,
|
|
@@ -932,7 +881,7 @@ function loadPreparedContent(
|
|
|
932
881
|
|
|
933
882
|
error(error: unknown) {
|
|
934
883
|
sendMessage({
|
|
935
|
-
type:
|
|
884
|
+
type: WorkerMessageType.Error,
|
|
936
885
|
contentId,
|
|
937
886
|
value: formatErrorForSender(error),
|
|
938
887
|
});
|
|
@@ -971,7 +920,7 @@ function loadPreparedContent(
|
|
|
971
920
|
};
|
|
972
921
|
periodMap.set(value.bufferType, msgObj);
|
|
973
922
|
sendMessage({
|
|
974
|
-
type:
|
|
923
|
+
type: WorkerMessageType.DiscontinuityUpdate,
|
|
975
924
|
contentId,
|
|
976
925
|
value: msgObj,
|
|
977
926
|
});
|
|
@@ -996,7 +945,7 @@ function loadPreparedContent(
|
|
|
996
945
|
|
|
997
946
|
sendMessage(
|
|
998
947
|
{
|
|
999
|
-
type:
|
|
948
|
+
type: WorkerMessageType.ReloadingMediaSource,
|
|
1000
949
|
mediaSourceId,
|
|
1001
950
|
value: payload,
|
|
1002
951
|
},
|
|
@@ -1014,7 +963,7 @@ function loadPreparedContent(
|
|
|
1014
963
|
currentLoadCanceller = null;
|
|
1015
964
|
}
|
|
1016
965
|
const contentId = contentPreparer.getCurrentContent()?.contentId;
|
|
1017
|
-
contentPreparer.reloadMediaSource(
|
|
966
|
+
contentPreparer.reloadMediaSource().then(
|
|
1018
967
|
() => {
|
|
1019
968
|
log.info("Core", "MediaSource Reloaded, loading content again", {
|
|
1020
969
|
newInitialTime,
|
|
@@ -1027,7 +976,7 @@ function loadPreparedContent(
|
|
|
1027
976
|
return;
|
|
1028
977
|
}
|
|
1029
978
|
sendMessage({
|
|
1030
|
-
type:
|
|
979
|
+
type: WorkerMessageType.Error,
|
|
1031
980
|
contentId,
|
|
1032
981
|
value: formatErrorForSender(err),
|
|
1033
982
|
});
|
|
@@ -1055,7 +1004,7 @@ function updateLoggerLevel(
|
|
|
1055
1004
|
});
|
|
1056
1005
|
// Not relying on `sendMessage` as it also logs
|
|
1057
1006
|
postMessage({
|
|
1058
|
-
type:
|
|
1007
|
+
type: WorkerMessageType.LogMessage,
|
|
1059
1008
|
value: {
|
|
1060
1009
|
namespace,
|
|
1061
1010
|
logLevel: levelStr,
|
|
@@ -1069,12 +1018,10 @@ function updateLoggerLevel(
|
|
|
1069
1018
|
/**
|
|
1070
1019
|
* Send a message `SegmentSinkStoreUpdate` to the main thread with
|
|
1071
1020
|
* a serialized object that represents the segmentSinksStore state.
|
|
1072
|
-
* @param {Function} sendMessage - Function allowing to send messages to the
|
|
1073
|
-
* "main thread" part of the RxPlayer logic.
|
|
1074
1021
|
* @param {ContentPreparer} contentPreparer
|
|
1022
|
+
* @returns {void}
|
|
1075
1023
|
*/
|
|
1076
1024
|
function sendSegmentSinksStoreInfos(
|
|
1077
|
-
sendMessage: (msg: ICoreMessage, transferables?: Transferable[]) => void,
|
|
1078
1025
|
contentPreparer: ContentPreparer,
|
|
1079
1026
|
requestId: number,
|
|
1080
1027
|
): void {
|
|
@@ -1084,7 +1031,7 @@ function sendSegmentSinksStoreInfos(
|
|
|
1084
1031
|
}
|
|
1085
1032
|
const segmentSinksMetrics = currentContent.segmentSinksStore.getSegmentSinksMetrics();
|
|
1086
1033
|
sendMessage({
|
|
1087
|
-
type:
|
|
1034
|
+
type: WorkerMessageType.SegmentSinkStoreUpdate,
|
|
1088
1035
|
contentId: currentContent.contentId,
|
|
1089
1036
|
value: { segmentSinkMetrics: segmentSinksMetrics, requestId },
|
|
1090
1037
|
});
|
|
@@ -1092,8 +1039,6 @@ function sendSegmentSinksStoreInfos(
|
|
|
1092
1039
|
|
|
1093
1040
|
/**
|
|
1094
1041
|
* Handle accordingly an `IFreezeResolution` object.
|
|
1095
|
-
* @param {Function} sendMessage - Function allowing to send messages to the
|
|
1096
|
-
* "main thread" part of the RxPlayer logic.
|
|
1097
1042
|
* @param {Object|null} freezeResolution - The `IFreezeResolution` suggested.
|
|
1098
1043
|
* @param {Object} param - Parameters that might be needed to implement the
|
|
1099
1044
|
* resolution.
|
|
@@ -1107,7 +1052,6 @@ function sendSegmentSinksStoreInfos(
|
|
|
1107
1052
|
* `IFreezeResolution` object suggest it.
|
|
1108
1053
|
*/
|
|
1109
1054
|
function handleFreezeResolution(
|
|
1110
|
-
sendMessage: (msg: ICoreMessage, transferables?: Transferable[]) => void,
|
|
1111
1055
|
freezeResolution: IFreezeResolution,
|
|
1112
1056
|
{
|
|
1113
1057
|
contentId,
|
|
@@ -1134,7 +1078,7 @@ function handleFreezeResolution(
|
|
|
1134
1078
|
case "flush": {
|
|
1135
1079
|
log.info("Core", "Flushing buffer due to freeze");
|
|
1136
1080
|
sendMessage({
|
|
1137
|
-
type:
|
|
1081
|
+
type: WorkerMessageType.NeedsBufferFlush,
|
|
1138
1082
|
contentId,
|
|
1139
1083
|
value: {
|
|
1140
1084
|
relativeResumingPosition: freezeResolution.value.relativeSeek,
|
|
@@ -1167,14 +1111,13 @@ function handleFreezeResolution(
|
|
|
1167
1111
|
* @returns {void}
|
|
1168
1112
|
*/
|
|
1169
1113
|
function sendThumbnailData(
|
|
1170
|
-
sendMessage: (msg: ICoreMessage, transferables?: Transferable[]) => void,
|
|
1171
1114
|
contentPreparer: ContentPreparer,
|
|
1172
1115
|
msg: IThumbnailDataRequestMainMessage,
|
|
1173
1116
|
): void {
|
|
1174
1117
|
const preparedContent = contentPreparer.getCurrentContent();
|
|
1175
1118
|
const respondWithError = (err: unknown) => {
|
|
1176
1119
|
sendMessage({
|
|
1177
|
-
type:
|
|
1120
|
+
type: WorkerMessageType.ThumbnailDataResponse,
|
|
1178
1121
|
contentId: msg.contentId,
|
|
1179
1122
|
value: {
|
|
1180
1123
|
status: "error",
|
|
@@ -1202,7 +1145,7 @@ function sendThumbnailData(
|
|
|
1202
1145
|
(result) => {
|
|
1203
1146
|
sendMessage(
|
|
1204
1147
|
{
|
|
1205
|
-
type:
|
|
1148
|
+
type: WorkerMessageType.ThumbnailDataResponse,
|
|
1206
1149
|
contentId: msg.contentId,
|
|
1207
1150
|
value: {
|
|
1208
1151
|
status: "success",
|
|
@@ -1218,20 +1161,3 @@ function sendThumbnailData(
|
|
|
1218
1161
|
},
|
|
1219
1162
|
);
|
|
1220
1163
|
}
|
|
1221
|
-
|
|
1222
|
-
/**
|
|
1223
|
-
* Collection of so-called "references": values configuring playback that may
|
|
1224
|
-
* be updated at any time and that the CoreEntry should react on.
|
|
1225
|
-
*/
|
|
1226
|
-
export interface ICoreReferences {
|
|
1227
|
-
limitVideoResolution: SharedReference<IResolutionInfo>;
|
|
1228
|
-
/** Max buffer size after the current position, in seconds (we GC further up). */
|
|
1229
|
-
maxBufferAhead: SharedReference<number>;
|
|
1230
|
-
/** Max buffer size before the current position, in seconds (we GC further down). */
|
|
1231
|
-
maxBufferBehind: SharedReference<number>;
|
|
1232
|
-
/** Buffer maximum size in kiloBytes at which we stop downloading */
|
|
1233
|
-
maxVideoBufferSize: SharedReference<number>;
|
|
1234
|
-
throttleVideoBitrate: SharedReference<number>;
|
|
1235
|
-
/** Buffer "goal" at which we stop downloading new segments. */
|
|
1236
|
-
wantedBufferAhead: SharedReference<number>;
|
|
1237
|
-
}
|