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