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,19 +1,19 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
IAbortBufferCoreMessage,
|
|
3
|
+
IAddSourceBufferCoreMessage,
|
|
4
|
+
IAppendBufferCoreMessage,
|
|
5
|
+
ICreateMediaSourceCoreMessage,
|
|
6
|
+
IDisposeMediaSourceCoreMessage,
|
|
7
|
+
IEndOfStreamCoreMessage,
|
|
8
|
+
IInterruptMediaSourceDurationCoreMessage,
|
|
9
|
+
IRemoveBufferCoreMessage,
|
|
10
|
+
IStopEndOfStreamCoreMessage,
|
|
11
|
+
IUpdateMediaSourceDurationCoreMessage,
|
|
12
|
+
} from "../core/types";
|
|
13
|
+
import { CoreMessageType } from "../core/types";
|
|
1
14
|
import { SourceBufferError } from "../errors";
|
|
2
15
|
import type { ISerializedSourceBufferError } from "../errors/source_buffer_error";
|
|
3
16
|
import log from "../log";
|
|
4
|
-
import type {
|
|
5
|
-
IAbortBufferWorkerMessage,
|
|
6
|
-
IAddSourceBufferWorkerMessage,
|
|
7
|
-
IAppendBufferWorkerMessage,
|
|
8
|
-
ICreateMediaSourceWorkerMessage,
|
|
9
|
-
IDisposeMediaSourceWorkerMessage,
|
|
10
|
-
IEndOfStreamWorkerMessage,
|
|
11
|
-
IInterruptMediaSourceDurationWorkerMessage,
|
|
12
|
-
IRemoveBufferWorkerMessage,
|
|
13
|
-
IStopEndOfStreamWorkerMessage,
|
|
14
|
-
IUpdateMediaSourceDurationWorkerMessage,
|
|
15
|
-
} from "../multithread_types";
|
|
16
|
-
import { WorkerMessageType } from "../multithread_types";
|
|
17
17
|
import EventEmitter from "../utils/event_emitter";
|
|
18
18
|
import idGenerator from "../utils/id_generator";
|
|
19
19
|
import type { IRange } from "../utils/ranges";
|
|
@@ -73,7 +73,7 @@ export default class WorkerMediaSourceInterface
|
|
|
73
73
|
|
|
74
74
|
const mediaSourceId = generateMediaSourceId();
|
|
75
75
|
this._messageSender({
|
|
76
|
-
type:
|
|
76
|
+
type: CoreMessageType.CreateMediaSource,
|
|
77
77
|
contentId,
|
|
78
78
|
mediaSourceId,
|
|
79
79
|
});
|
|
@@ -101,7 +101,7 @@ export default class WorkerMediaSourceInterface
|
|
|
101
101
|
codec: string,
|
|
102
102
|
): ISourceBufferInterface {
|
|
103
103
|
this._messageSender({
|
|
104
|
-
type:
|
|
104
|
+
type: CoreMessageType.AddSourceBuffer,
|
|
105
105
|
mediaSourceId: this.id,
|
|
106
106
|
value: {
|
|
107
107
|
sourceBufferType: sbType,
|
|
@@ -120,7 +120,7 @@ export default class WorkerMediaSourceInterface
|
|
|
120
120
|
|
|
121
121
|
public setDuration(newDuration: number, isRealEndKnown: boolean) {
|
|
122
122
|
this._messageSender({
|
|
123
|
-
type:
|
|
123
|
+
type: CoreMessageType.UpdateMediaSourceDuration,
|
|
124
124
|
mediaSourceId: this.id,
|
|
125
125
|
value: {
|
|
126
126
|
duration: newDuration,
|
|
@@ -131,7 +131,7 @@ export default class WorkerMediaSourceInterface
|
|
|
131
131
|
|
|
132
132
|
public interruptDurationSetting() {
|
|
133
133
|
this._messageSender({
|
|
134
|
-
type:
|
|
134
|
+
type: CoreMessageType.InterruptMediaSourceDurationUpdate,
|
|
135
135
|
mediaSourceId: this.id,
|
|
136
136
|
value: null,
|
|
137
137
|
});
|
|
@@ -139,7 +139,7 @@ export default class WorkerMediaSourceInterface
|
|
|
139
139
|
|
|
140
140
|
public maintainEndOfStream() {
|
|
141
141
|
this._messageSender({
|
|
142
|
-
type:
|
|
142
|
+
type: CoreMessageType.EndOfStream,
|
|
143
143
|
mediaSourceId: this.id,
|
|
144
144
|
value: null,
|
|
145
145
|
});
|
|
@@ -147,7 +147,7 @@ export default class WorkerMediaSourceInterface
|
|
|
147
147
|
|
|
148
148
|
public stopEndOfStream() {
|
|
149
149
|
this._messageSender({
|
|
150
|
-
type:
|
|
150
|
+
type: CoreMessageType.InterruptEndOfStream,
|
|
151
151
|
mediaSourceId: this.id,
|
|
152
152
|
value: null,
|
|
153
153
|
});
|
|
@@ -157,7 +157,7 @@ export default class WorkerMediaSourceInterface
|
|
|
157
157
|
this.sourceBuffers.forEach((s) => s.dispose());
|
|
158
158
|
this._canceller.cancel();
|
|
159
159
|
this._messageSender({
|
|
160
|
-
type:
|
|
160
|
+
type: CoreMessageType.DisposeMediaSource,
|
|
161
161
|
mediaSourceId: this.id,
|
|
162
162
|
value: null,
|
|
163
163
|
});
|
|
@@ -166,16 +166,16 @@ export default class WorkerMediaSourceInterface
|
|
|
166
166
|
|
|
167
167
|
export type IWorkerMediaSourceInterfaceMessageSender = (
|
|
168
168
|
msg:
|
|
169
|
-
|
|
|
170
|
-
|
|
|
171
|
-
|
|
|
172
|
-
|
|
|
173
|
-
|
|
|
174
|
-
|
|
|
175
|
-
|
|
|
176
|
-
|
|
|
177
|
-
|
|
|
178
|
-
|
|
|
169
|
+
| IAppendBufferCoreMessage
|
|
170
|
+
| IRemoveBufferCoreMessage
|
|
171
|
+
| IAbortBufferCoreMessage
|
|
172
|
+
| ICreateMediaSourceCoreMessage
|
|
173
|
+
| IAddSourceBufferCoreMessage
|
|
174
|
+
| IUpdateMediaSourceDurationCoreMessage
|
|
175
|
+
| IInterruptMediaSourceDurationCoreMessage
|
|
176
|
+
| IEndOfStreamCoreMessage
|
|
177
|
+
| IStopEndOfStreamCoreMessage
|
|
178
|
+
| IDisposeMediaSourceCoreMessage,
|
|
179
179
|
transferables?: Transferable[],
|
|
180
180
|
) => void;
|
|
181
181
|
|
|
@@ -299,7 +299,7 @@ export class WorkerSourceBufferInterface implements ISourceBufferInterface {
|
|
|
299
299
|
const operationId = generateSourceBufferOperationId();
|
|
300
300
|
this._messageSender(
|
|
301
301
|
{
|
|
302
|
-
type:
|
|
302
|
+
type: CoreMessageType.SourceBufferAppend,
|
|
303
303
|
mediaSourceId: this._mediaSourceId,
|
|
304
304
|
sourceBufferType: this.type,
|
|
305
305
|
operationId,
|
|
@@ -334,7 +334,7 @@ export class WorkerSourceBufferInterface implements ISourceBufferInterface {
|
|
|
334
334
|
try {
|
|
335
335
|
const operationId = generateSourceBufferOperationId();
|
|
336
336
|
this._messageSender({
|
|
337
|
-
type:
|
|
337
|
+
type: CoreMessageType.SourceBufferRemove,
|
|
338
338
|
mediaSourceId: this._mediaSourceId,
|
|
339
339
|
sourceBufferType: this.type,
|
|
340
340
|
operationId,
|
|
@@ -352,7 +352,7 @@ export class WorkerSourceBufferInterface implements ISourceBufferInterface {
|
|
|
352
352
|
|
|
353
353
|
public abort(): void {
|
|
354
354
|
this._messageSender({
|
|
355
|
-
type:
|
|
355
|
+
type: CoreMessageType.AbortSourceBuffer,
|
|
356
356
|
mediaSourceId: this._mediaSourceId,
|
|
357
357
|
sourceBufferType: this.type,
|
|
358
358
|
value: null,
|
|
@@ -411,7 +411,7 @@ export class WorkerSourceBufferInterface implements ISourceBufferInterface {
|
|
|
411
411
|
const nOpId = generateSourceBufferOperationId();
|
|
412
412
|
this._messageSender(
|
|
413
413
|
{
|
|
414
|
-
type:
|
|
414
|
+
type: CoreMessageType.SourceBufferAppend,
|
|
415
415
|
mediaSourceId: this._mediaSourceId,
|
|
416
416
|
sourceBufferType: this.type,
|
|
417
417
|
operationId: nOpId,
|
|
@@ -427,7 +427,7 @@ export class WorkerSourceBufferInterface implements ISourceBufferInterface {
|
|
|
427
427
|
const [start, end] = nextOp.params;
|
|
428
428
|
const nOpId = generateSourceBufferOperationId();
|
|
429
429
|
this._messageSender({
|
|
430
|
-
type:
|
|
430
|
+
type: CoreMessageType.SourceBufferRemove,
|
|
431
431
|
mediaSourceId: this._mediaSourceId,
|
|
432
432
|
sourceBufferType: this.type,
|
|
433
433
|
operationId: nOpId,
|
|
@@ -25,6 +25,7 @@ import getMonotonicTimeStamp from "../../../utils/monotonic_timestamp";
|
|
|
25
25
|
import objectAssign from "../../../utils/object_assign";
|
|
26
26
|
import { hexToBytes } from "../../../utils/string_parsing";
|
|
27
27
|
import { getFilenameIndexInUrl } from "../../../utils/url-utils";
|
|
28
|
+
import { parseXml, type ITNode } from "../../../utils/xml-parser";
|
|
28
29
|
import { createBox } from "../../containers/isobmff";
|
|
29
30
|
import type {
|
|
30
31
|
IParsedAdaptation,
|
|
@@ -44,7 +45,7 @@ import reduceChildren from "./utils/reduceChildren";
|
|
|
44
45
|
import { replaceRepresentationSmoothTokens } from "./utils/tokens";
|
|
45
46
|
|
|
46
47
|
interface IAdaptationParserArguments {
|
|
47
|
-
root:
|
|
48
|
+
root: ITNode;
|
|
48
49
|
baseUrl: string;
|
|
49
50
|
timescale: number;
|
|
50
51
|
protections: IContentProtectionSmooth[];
|
|
@@ -108,7 +109,7 @@ interface ISmoothParsedQualityLevel {
|
|
|
108
109
|
function createSmoothStreamingParser(
|
|
109
110
|
parserOptions: IHSSParserConfiguration = {},
|
|
110
111
|
): (
|
|
111
|
-
manifest:
|
|
112
|
+
manifest: string,
|
|
112
113
|
url?: string | undefined,
|
|
113
114
|
manifestReceivedTime?: number | undefined,
|
|
114
115
|
) => IParsedManifest {
|
|
@@ -128,12 +129,12 @@ function createSmoothStreamingParser(
|
|
|
128
129
|
: undefined;
|
|
129
130
|
|
|
130
131
|
/**
|
|
131
|
-
* @param {
|
|
132
|
+
* @param {Object} q
|
|
132
133
|
* @param {string} streamType
|
|
133
134
|
* @return {Object}
|
|
134
135
|
*/
|
|
135
136
|
function parseQualityLevel(
|
|
136
|
-
q:
|
|
137
|
+
q: ITNode,
|
|
137
138
|
streamType: string,
|
|
138
139
|
): ISmoothParsedQualityLevel | null {
|
|
139
140
|
const customAttributes = reduceChildren<string[]>(
|
|
@@ -145,9 +146,9 @@ function createSmoothStreamingParser(
|
|
|
145
146
|
qNode,
|
|
146
147
|
(cAttrs, cName, cNode) => {
|
|
147
148
|
if (cName === "Attribute") {
|
|
148
|
-
const name = cNode.
|
|
149
|
-
const value = cNode.
|
|
150
|
-
if (name
|
|
149
|
+
const name = cNode.attributes.Name;
|
|
150
|
+
const value = cNode.attributes.Value;
|
|
151
|
+
if (!isNullOrUndefined(name) && !isNullOrUndefined(value)) {
|
|
151
152
|
cAttrs.push(name + "=" + value);
|
|
152
153
|
}
|
|
153
154
|
}
|
|
@@ -167,7 +168,7 @@ function createSmoothStreamingParser(
|
|
|
167
168
|
* @returns {string|undefined}
|
|
168
169
|
*/
|
|
169
170
|
function getAttribute(name: string): string | undefined {
|
|
170
|
-
const attr = q.
|
|
171
|
+
const attr = q.attributes[name];
|
|
171
172
|
return attr === null ? undefined : attr;
|
|
172
173
|
}
|
|
173
174
|
|
|
@@ -286,14 +287,14 @@ function createSmoothStreamingParser(
|
|
|
286
287
|
manifestReceivedTime,
|
|
287
288
|
isLive,
|
|
288
289
|
} = args;
|
|
289
|
-
const timescaleAttr = root.
|
|
290
|
-
let _timescale = timescaleAttr
|
|
290
|
+
const timescaleAttr = root.attributes.Timescale;
|
|
291
|
+
let _timescale = !isNonEmptyString(timescaleAttr) ? timescale : +timescaleAttr;
|
|
291
292
|
if (isNaN(_timescale)) {
|
|
292
293
|
_timescale = timescale;
|
|
293
294
|
}
|
|
294
295
|
|
|
295
|
-
const typeAttribute = root.
|
|
296
|
-
if (typeAttribute
|
|
296
|
+
const typeAttribute = root.attributes.Type;
|
|
297
|
+
if (isNullOrUndefined(typeAttribute)) {
|
|
297
298
|
throw new Error("StreamIndex without type.");
|
|
298
299
|
}
|
|
299
300
|
if (!arrayIncludes(SUPPORTED_ADAPTATIONS_TYPE, typeAttribute)) {
|
|
@@ -301,15 +302,15 @@ function createSmoothStreamingParser(
|
|
|
301
302
|
}
|
|
302
303
|
const adaptationType = typeAttribute as IAdaptationType;
|
|
303
304
|
|
|
304
|
-
const subType = root.
|
|
305
|
-
const language = root.
|
|
306
|
-
const UrlAttr = root.
|
|
307
|
-
const UrlPathWithTokens = UrlAttr
|
|
305
|
+
const subType = root.attributes.Subtype;
|
|
306
|
+
const language = root.attributes.Language;
|
|
307
|
+
const UrlAttr = root.attributes.Url;
|
|
308
|
+
const UrlPathWithTokens = UrlAttr ?? "";
|
|
308
309
|
assert(UrlPathWithTokens !== "");
|
|
309
310
|
|
|
310
311
|
const { qualityLevels, cNodes } = reduceChildren<{
|
|
311
312
|
qualityLevels: ISmoothParsedQualityLevel[];
|
|
312
|
-
cNodes:
|
|
313
|
+
cNodes: ITNode[];
|
|
313
314
|
}>(
|
|
314
315
|
root,
|
|
315
316
|
(res, _name, node) => {
|
|
@@ -452,31 +453,36 @@ function createSmoothStreamingParser(
|
|
|
452
453
|
return parsedAdaptation;
|
|
453
454
|
}
|
|
454
455
|
|
|
455
|
-
function
|
|
456
|
-
|
|
456
|
+
function parseFromNode(
|
|
457
|
+
xml: string,
|
|
457
458
|
url?: string,
|
|
458
459
|
manifestReceivedTime?: number,
|
|
459
460
|
): IParsedManifest {
|
|
461
|
+
const parsed = parseXml(xml);
|
|
462
|
+
const root = parsed[parsed.length - 1];
|
|
460
463
|
let baseUrl: string = "";
|
|
461
464
|
if (url !== undefined) {
|
|
462
465
|
const filenameIdx = getFilenameIndexInUrl(url);
|
|
463
466
|
baseUrl = url.substring(0, filenameIdx);
|
|
464
467
|
}
|
|
465
|
-
|
|
466
|
-
|
|
468
|
+
if (
|
|
469
|
+
isNullOrUndefined(root) ||
|
|
470
|
+
typeof root === "string" ||
|
|
471
|
+
root.tagName !== "SmoothStreamingMedia"
|
|
472
|
+
) {
|
|
467
473
|
throw new Error("document root should be SmoothStreamingMedia");
|
|
468
474
|
}
|
|
469
|
-
const majorVersionAttr = root.
|
|
470
|
-
const minorVersionAttr = root.
|
|
475
|
+
const majorVersionAttr = root.attributes.MajorVersion;
|
|
476
|
+
const minorVersionAttr = root.attributes.MinorVersion;
|
|
471
477
|
if (
|
|
472
|
-
majorVersionAttr
|
|
473
|
-
minorVersionAttr
|
|
478
|
+
isNullOrUndefined(majorVersionAttr) ||
|
|
479
|
+
isNullOrUndefined(minorVersionAttr) ||
|
|
474
480
|
!/^[2]-[0-2]$/.test(majorVersionAttr + "-" + minorVersionAttr)
|
|
475
481
|
) {
|
|
476
482
|
throw new Error("Version should be 2.0, 2.1 or 2.2");
|
|
477
483
|
}
|
|
478
484
|
|
|
479
|
-
const timescaleAttr = root.
|
|
485
|
+
const timescaleAttr = root.attributes.Timescale;
|
|
480
486
|
let timescale = !isNonEmptyString(timescaleAttr) ? 10000000 : +timescaleAttr;
|
|
481
487
|
if (isNaN(timescale)) {
|
|
482
488
|
timescale = 10000000;
|
|
@@ -484,7 +490,7 @@ function createSmoothStreamingParser(
|
|
|
484
490
|
|
|
485
491
|
const { protections, adaptationNodes } = reduceChildren<{
|
|
486
492
|
protections: IContentProtectionSmooth[];
|
|
487
|
-
adaptationNodes:
|
|
493
|
+
adaptationNodes: ITNode[];
|
|
488
494
|
}>(
|
|
489
495
|
root,
|
|
490
496
|
(res, name, node) => {
|
|
@@ -507,13 +513,13 @@ function createSmoothStreamingParser(
|
|
|
507
513
|
|
|
508
514
|
const initialAdaptations: IParsedAdaptations = {};
|
|
509
515
|
|
|
510
|
-
const isLive = parseBoolean(root.
|
|
516
|
+
const isLive = parseBoolean(root.attributes.IsLive);
|
|
511
517
|
|
|
512
518
|
let timeShiftBufferDepth: number | undefined;
|
|
513
519
|
if (isLive) {
|
|
514
|
-
const dvrWindowLength = root.
|
|
520
|
+
const dvrWindowLength = root.attributes.DVRWindowLength;
|
|
515
521
|
if (
|
|
516
|
-
dvrWindowLength
|
|
522
|
+
!isNullOrUndefined(dvrWindowLength) &&
|
|
517
523
|
!isNaN(+dvrWindowLength) &&
|
|
518
524
|
+dvrWindowLength !== 0
|
|
519
525
|
) {
|
|
@@ -522,7 +528,7 @@ function createSmoothStreamingParser(
|
|
|
522
528
|
}
|
|
523
529
|
|
|
524
530
|
const adaptations: IParsedAdaptations = adaptationNodes.reduce(
|
|
525
|
-
(acc: IParsedAdaptations, node:
|
|
531
|
+
(acc: IParsedAdaptations, node: ITNode) => {
|
|
526
532
|
const adaptation = parseAdaptation({
|
|
527
533
|
root: node,
|
|
528
534
|
baseUrl,
|
|
@@ -622,9 +628,9 @@ function createSmoothStreamingParser(
|
|
|
622
628
|
}
|
|
623
629
|
}
|
|
624
630
|
|
|
625
|
-
const manifestDuration = root.
|
|
631
|
+
const manifestDuration = root.attributes.Duration;
|
|
626
632
|
const duration =
|
|
627
|
-
manifestDuration
|
|
633
|
+
!isNullOrUndefined(manifestDuration) && +manifestDuration !== 0
|
|
628
634
|
? +manifestDuration / timescale
|
|
629
635
|
: undefined;
|
|
630
636
|
|
|
@@ -694,7 +700,7 @@ function createSmoothStreamingParser(
|
|
|
694
700
|
return manifest;
|
|
695
701
|
}
|
|
696
702
|
|
|
697
|
-
return
|
|
703
|
+
return parseFromNode;
|
|
698
704
|
}
|
|
699
705
|
|
|
700
706
|
/**
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import isNonEmptyString from "../../../utils/is_non_empty_string";
|
|
18
|
+
import type { ITNode } from "../../../utils/xml-parser";
|
|
18
19
|
|
|
19
20
|
interface IHSSManifestSegment {
|
|
20
21
|
start: number;
|
|
@@ -24,13 +25,18 @@ interface IHSSManifestSegment {
|
|
|
24
25
|
|
|
25
26
|
/**
|
|
26
27
|
* Parse C nodes to build index timeline.
|
|
27
|
-
* @param {
|
|
28
|
+
* @param {Object} nodes
|
|
28
29
|
*/
|
|
29
|
-
export default function parseCNodes(
|
|
30
|
+
export default function parseCNodes(
|
|
31
|
+
nodes: Array<ITNode | string>,
|
|
32
|
+
): IHSSManifestSegment[] {
|
|
30
33
|
return nodes.reduce<IHSSManifestSegment[]>((timeline, node, i) => {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
if (typeof node === "string") {
|
|
35
|
+
return timeline;
|
|
36
|
+
}
|
|
37
|
+
const dAttr = node.attributes.d ?? null;
|
|
38
|
+
const tAttr = node.attributes.t ?? null;
|
|
39
|
+
const rAttr = node.attributes.r ?? null;
|
|
34
40
|
|
|
35
41
|
const repeatCount = rAttr !== null ? +rAttr - 1 : 0;
|
|
36
42
|
let start = tAttr !== null ? +tAttr : undefined;
|
|
@@ -50,9 +56,14 @@ export default function parseCNodes(nodes: Element[]): IHSSManifestSegment[] {
|
|
|
50
56
|
}
|
|
51
57
|
}
|
|
52
58
|
if (duration === undefined || isNaN(duration)) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
59
|
+
let nextNodeIdx = i;
|
|
60
|
+
let nextNodeElt: ITNode | undefined | string;
|
|
61
|
+
do {
|
|
62
|
+
nextNodeIdx++;
|
|
63
|
+
nextNodeElt = nodes[nextNodeIdx];
|
|
64
|
+
} while (nextNodeElt !== undefined && typeof nextNodeElt === "string");
|
|
65
|
+
if (nextNodeElt !== undefined) {
|
|
66
|
+
const nextTAttr = nextNodeElt.attributes.t ?? null;
|
|
56
67
|
const nextStart = isNonEmptyString(nextTAttr) ? +nextTAttr : null;
|
|
57
68
|
if (nextStart === null) {
|
|
58
69
|
throw new Error("Can't build index timeline from Smooth Manifest.");
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
import { base64ToBytes } from "../../../utils/base64";
|
|
18
18
|
import { concat } from "../../../utils/byte_parsing";
|
|
19
19
|
import { hexToBytes } from "../../../utils/string_parsing";
|
|
20
|
+
import type { ITNode } from "../../../utils/xml-parser";
|
|
20
21
|
import { getPlayReadyKIDFromPrivateData } from "../../containers/isobmff";
|
|
21
22
|
|
|
22
23
|
export interface IKeySystem {
|
|
@@ -44,28 +45,35 @@ function createWidevineKeySystem(keyIdBytes: Uint8Array): IKeySystem[] {
|
|
|
44
45
|
|
|
45
46
|
/**
|
|
46
47
|
* Parse "Protection" Node, which contains DRM information
|
|
47
|
-
* @param {
|
|
48
|
+
* @param {Object} protectionNode
|
|
48
49
|
* @returns {Object}
|
|
49
50
|
*/
|
|
50
51
|
export default function parseProtectionNode(
|
|
51
|
-
protectionNode:
|
|
52
|
+
protectionNode: ITNode,
|
|
52
53
|
keySystemCreator: (keyId: Uint8Array) => IKeySystem[] = createWidevineKeySystem,
|
|
53
54
|
): IContentProtectionSmooth {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
let header;
|
|
56
|
+
for (const subNode of protectionNode.children) {
|
|
57
|
+
if (typeof subNode === "string") {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (subNode.tagName === "ProtectionHeader") {
|
|
61
|
+
header = subNode;
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (header === undefined) {
|
|
58
66
|
throw new Error("Protection should have ProtectionHeader child");
|
|
59
67
|
}
|
|
60
|
-
|
|
68
|
+
|
|
61
69
|
const privateData = base64ToBytes(
|
|
62
|
-
header.
|
|
70
|
+
typeof header.children[0] === "string" ? header.children[0] : "",
|
|
63
71
|
);
|
|
64
72
|
const keyIdHex = getPlayReadyKIDFromPrivateData(privateData);
|
|
65
73
|
const keyIdBytes = hexToBytes(keyIdHex);
|
|
66
74
|
|
|
67
75
|
// remove possible braces
|
|
68
|
-
const systemIdAttr = header.
|
|
76
|
+
const systemIdAttr = header.attributes.SystemID ?? null;
|
|
69
77
|
const systemId = (systemIdAttr !== null ? systemIdAttr : "")
|
|
70
78
|
.toLowerCase()
|
|
71
79
|
.replace(/\{|\}/g, "");
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* @param {*} val
|
|
19
19
|
* @returns {Boolean}
|
|
20
20
|
*/
|
|
21
|
-
export default function parseBoolean(val: string | null): boolean {
|
|
21
|
+
export default function parseBoolean(val: string | null | undefined | boolean): boolean {
|
|
22
22
|
if (typeof val === "boolean") {
|
|
23
23
|
return val;
|
|
24
24
|
} else if (typeof val === "string") {
|
|
@@ -14,23 +14,26 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
+
import type { ITNode } from "../../../../utils/xml-parser";
|
|
18
|
+
|
|
17
19
|
/**
|
|
18
20
|
* Reduce implementation for the children of the given element.
|
|
19
|
-
* @param {
|
|
21
|
+
* @param {Object} root
|
|
20
22
|
* @param {Function} fn
|
|
21
23
|
* @param {*} init
|
|
22
24
|
* @returns {*}
|
|
23
25
|
*/
|
|
24
26
|
export default function reduceChildren<T>(
|
|
25
|
-
root:
|
|
26
|
-
fn: (accu: T, nodeName: string, nodeElt:
|
|
27
|
+
root: ITNode,
|
|
28
|
+
fn: (accu: T, nodeName: string, nodeElt: ITNode) => T,
|
|
27
29
|
init: T,
|
|
28
30
|
): T {
|
|
29
|
-
let node = root.firstElementChild;
|
|
30
31
|
let accumulator = init;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
for (const elt of root.children) {
|
|
33
|
+
if (typeof elt === "string") {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
accumulator = fn(accumulator, elt.tagName, elt);
|
|
34
37
|
}
|
|
35
38
|
return accumulator;
|
|
36
39
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import {
|
|
1
|
+
import type { IUpdatePlaybackRateCoreMessage } from "../core/types";
|
|
2
|
+
import { CoreMessageType } from "../core/types";
|
|
3
3
|
import type { ITrackType } from "../public_types";
|
|
4
4
|
import type { IRange } from "../utils/ranges";
|
|
5
5
|
import type { IReadOnlySharedReference } from "../utils/reference";
|
|
@@ -12,7 +12,7 @@ import type {
|
|
|
12
12
|
import generateReadOnlyObserver from "./utils/generate_read_only_observer";
|
|
13
13
|
import type ObservationPosition from "./utils/observation_position";
|
|
14
14
|
|
|
15
|
-
export interface
|
|
15
|
+
export interface ICorePlaybackObservation {
|
|
16
16
|
/**
|
|
17
17
|
* Information on whether the media element was paused at the time of the
|
|
18
18
|
* Observation.
|
|
@@ -73,18 +73,18 @@ export interface IPausedPlaybackObservation {
|
|
|
73
73
|
pending: boolean | undefined;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
export default class
|
|
77
|
-
implements IReadOnlyPlaybackObserver<
|
|
76
|
+
export default class CorePlaybackObserver
|
|
77
|
+
implements IReadOnlyPlaybackObserver<ICorePlaybackObservation>
|
|
78
78
|
{
|
|
79
|
-
private _src: IReadOnlySharedReference<
|
|
79
|
+
private _src: IReadOnlySharedReference<ICorePlaybackObservation>;
|
|
80
80
|
private _cancelSignal: CancellationSignal;
|
|
81
|
-
private _messageSender: (msg:
|
|
81
|
+
private _messageSender: (msg: IUpdatePlaybackRateCoreMessage) => void;
|
|
82
82
|
private _contentId: string;
|
|
83
83
|
|
|
84
84
|
constructor(
|
|
85
|
-
src: IReadOnlySharedReference<
|
|
85
|
+
src: IReadOnlySharedReference<ICorePlaybackObservation>,
|
|
86
86
|
contentId: string,
|
|
87
|
-
sendMessage: (msg:
|
|
87
|
+
sendMessage: (msg: IUpdatePlaybackRateCoreMessage) => void,
|
|
88
88
|
cancellationSignal: CancellationSignal,
|
|
89
89
|
) {
|
|
90
90
|
this._src = src;
|
|
@@ -105,13 +105,13 @@ export default class WorkerPlaybackObserver
|
|
|
105
105
|
return undefined;
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
public getReference(): IReadOnlySharedReference<
|
|
108
|
+
public getReference(): IReadOnlySharedReference<ICorePlaybackObservation> {
|
|
109
109
|
return this._src;
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
public setPlaybackRate(playbackRate: number): void {
|
|
113
113
|
this._messageSender({
|
|
114
|
-
type:
|
|
114
|
+
type: CoreMessageType.UpdatePlaybackRate,
|
|
115
115
|
contentId: this._contentId,
|
|
116
116
|
value: playbackRate,
|
|
117
117
|
});
|
|
@@ -122,7 +122,7 @@ export default class WorkerPlaybackObserver
|
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
public listen(
|
|
125
|
-
cb: (observation:
|
|
125
|
+
cb: (observation: ICorePlaybackObservation, stopListening: () => void) => void,
|
|
126
126
|
params: {
|
|
127
127
|
includeLastObservation?: boolean | undefined;
|
|
128
128
|
clearSignal: CancellationSignal;
|
|
@@ -140,7 +140,7 @@ export default class WorkerPlaybackObserver
|
|
|
140
140
|
|
|
141
141
|
public deriveReadOnlyObserver<TDest>(
|
|
142
142
|
transform: (
|
|
143
|
-
observationRef: IReadOnlySharedReference<
|
|
143
|
+
observationRef: IReadOnlySharedReference<ICorePlaybackObservation>,
|
|
144
144
|
cancellationSignal: CancellationSignal,
|
|
145
145
|
) => IReadOnlySharedReference<TDest>,
|
|
146
146
|
): IReadOnlyPlaybackObserver<TDest> {
|
|
@@ -19,6 +19,8 @@ import Manifest from "../../manifest/classes";
|
|
|
19
19
|
import { getMDAT } from "../../parsers/containers/isobmff";
|
|
20
20
|
import type { ICdnMetadata } from "../../parsers/manifest";
|
|
21
21
|
import createSmoothManifestParser from "../../parsers/manifest/smooth";
|
|
22
|
+
import globalScope from "../../utils/global_scope";
|
|
23
|
+
import isNullOrUndefined from "../../utils/is_null_or_undefined";
|
|
22
24
|
import request from "../../utils/request";
|
|
23
25
|
import { strToUtf8, utf8ToStr } from "../../utils/string_parsing";
|
|
24
26
|
import type { CancellationSignal } from "../../utils/task_canceller";
|
|
@@ -69,11 +71,7 @@ export default function (transportOptions: ITransportOptions): ITransportPipelin
|
|
|
69
71
|
const url = manifestData.url ?? parserOptions.originalUrl;
|
|
70
72
|
const { receivedTime: manifestReceivedTime, responseData } = manifestData;
|
|
71
73
|
|
|
72
|
-
const documentData =
|
|
73
|
-
typeof responseData === "string"
|
|
74
|
-
? new DOMParser().parseFromString(responseData, "text/xml")
|
|
75
|
-
: (responseData as Document); // TODO find a way to check if Document?
|
|
76
|
-
|
|
74
|
+
const documentData = getManifestAsString(responseData);
|
|
77
75
|
const parserResult = smoothManifestParser(documentData, url, manifestReceivedTime);
|
|
78
76
|
|
|
79
77
|
const manifest = new Manifest(parserResult, {
|
|
@@ -434,3 +432,25 @@ export default function (transportOptions: ITransportOptions): ITransportPipelin
|
|
|
434
432
|
},
|
|
435
433
|
};
|
|
436
434
|
}
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* Try to convert a Manifest from an unknown format to a JS string format.
|
|
438
|
+
*
|
|
439
|
+
* Throws if the format cannot be converted.
|
|
440
|
+
* @param {*} manifestSrc
|
|
441
|
+
* @returns {Array.<Object | string>}
|
|
442
|
+
*/
|
|
443
|
+
function getManifestAsString(manifestSrc: unknown): string {
|
|
444
|
+
if (manifestSrc instanceof ArrayBuffer) {
|
|
445
|
+
return utf8ToStr(new Uint8Array(manifestSrc));
|
|
446
|
+
} else if (typeof manifestSrc === "string") {
|
|
447
|
+
return manifestSrc;
|
|
448
|
+
} else if (
|
|
449
|
+
!isNullOrUndefined(globalScope.Document) &&
|
|
450
|
+
manifestSrc instanceof globalScope.Document
|
|
451
|
+
) {
|
|
452
|
+
return manifestSrc.documentElement.outerHTML;
|
|
453
|
+
} else {
|
|
454
|
+
throw new Error("Smooth Manifest Parser: Unrecognized Manifest format");
|
|
455
|
+
}
|
|
456
|
+
}
|