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,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Copyright 2015 CANAL+ Group
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
|
-
*/
|
|
17
2
|
var __extends = (this && this.__extends) || (function () {
|
|
18
3
|
var extendStatics = function (d, b) {
|
|
19
4
|
extendStatics = Object.setPrototypeOf ||
|
|
@@ -76,6 +61,31 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
76
61
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
77
62
|
}
|
|
78
63
|
};
|
|
64
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
65
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
66
|
+
if (!m) return o;
|
|
67
|
+
var i = m.call(o), r, ar = [], e;
|
|
68
|
+
try {
|
|
69
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
70
|
+
}
|
|
71
|
+
catch (error) { e = { error: error }; }
|
|
72
|
+
finally {
|
|
73
|
+
try {
|
|
74
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
75
|
+
}
|
|
76
|
+
finally { if (e) throw e.error; }
|
|
77
|
+
}
|
|
78
|
+
return ar;
|
|
79
|
+
};
|
|
80
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
81
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
82
|
+
if (ar || !(i in from)) {
|
|
83
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
84
|
+
ar[i] = from[i];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
88
|
+
};
|
|
79
89
|
var __values = (this && this.__values) || function(o) {
|
|
80
90
|
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
81
91
|
if (m) return m.call(o);
|
|
@@ -88,29 +98,21 @@ var __values = (this && this.__values) || function(o) {
|
|
|
88
98
|
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
89
99
|
};
|
|
90
100
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
91
|
-
var
|
|
101
|
+
var eme_1 = require("../../compat/eme");
|
|
92
102
|
var may_media_element_fail_on_undecipherable_data_1 = require("../../compat/may_media_element_fail_on_undecipherable_data");
|
|
93
103
|
var should_reload_media_source_on_decipherability_update_1 = require("../../compat/should_reload_media_source_on_decipherability_update");
|
|
94
|
-
var config_1 = require("../../config");
|
|
95
|
-
var adaptive_1 = require("../../core/adaptive");
|
|
96
|
-
var cmcd_1 = require("../../core/cmcd");
|
|
97
|
-
var fetchers_1 = require("../../core/fetchers");
|
|
98
|
-
var create_content_time_boundaries_observer_1 = require("../../core/main/common/create_content_time_boundaries_observer");
|
|
99
|
-
var FreezeResolver_1 = require("../../core/main/common/FreezeResolver");
|
|
100
|
-
var get_thumbnail_data_1 = require("../../core/main/common/get_thumbnail_data");
|
|
101
|
-
var synchronize_sinks_on_observation_1 = require("../../core/main/common/synchronize_sinks_on_observation");
|
|
102
|
-
var segment_sinks_1 = require("../../core/segment_sinks");
|
|
103
|
-
var stream_1 = require("../../core/stream");
|
|
104
104
|
var errors_1 = require("../../errors");
|
|
105
105
|
var features_1 = require("../../features");
|
|
106
106
|
var log_1 = require("../../log");
|
|
107
|
-
var
|
|
107
|
+
var manifest_1 = require("../../manifest");
|
|
108
|
+
var main_media_source_interface_1 = require("../../mse/main_media_source_interface");
|
|
109
|
+
var array_find_1 = require("../../utils/array_find");
|
|
108
110
|
var assert_1 = require("../../utils/assert");
|
|
109
|
-
var
|
|
111
|
+
var id_generator_1 = require("../../utils/id_generator");
|
|
110
112
|
var is_null_or_undefined_1 = require("../../utils/is_null_or_undefined");
|
|
111
|
-
var noop_1 = require("../../utils/noop");
|
|
112
113
|
var object_assign_1 = require("../../utils/object_assign");
|
|
113
|
-
var
|
|
114
|
+
var reference_1 = require("../../utils/reference");
|
|
115
|
+
var request_1 = require("../../utils/request");
|
|
114
116
|
var task_canceller_1 = require("../../utils/task_canceller");
|
|
115
117
|
var decrypt_1 = require("../decrypt");
|
|
116
118
|
var types_1 = require("./types");
|
|
@@ -119,20 +121,12 @@ var create_media_source_1 = require("./utils/create_media_source");
|
|
|
119
121
|
var get_initial_time_1 = require("./utils/get_initial_time");
|
|
120
122
|
var get_loaded_reference_1 = require("./utils/get_loaded_reference");
|
|
121
123
|
var initial_seek_and_play_1 = require("./utils/initial_seek_and_play");
|
|
122
|
-
var initialize_content_decryption_1 = require("./utils/initialize_content_decryption");
|
|
123
|
-
var main_thread_text_displayer_interface_1 = require("./utils/main_thread_text_displayer_interface");
|
|
124
124
|
var rebuffering_controller_1 = require("./utils/rebuffering_controller");
|
|
125
|
-
var stream_events_emitter_1 = require("./utils/stream_events_emitter");
|
|
125
|
+
var stream_events_emitter_1 = require("./utils/stream_events_emitter/stream_events_emitter");
|
|
126
126
|
var throw_on_media_error_1 = require("./utils/throw_on_media_error");
|
|
127
|
+
var update_manifest_codec_support_1 = require("./utils/update_manifest_codec_support");
|
|
128
|
+
var generateContentId = (0, id_generator_1.default)();
|
|
127
129
|
/**
|
|
128
|
-
* Allows to load a new content thanks to the MediaSource Extensions (a.k.a. MSE)
|
|
129
|
-
* Web APIs.
|
|
130
|
-
*
|
|
131
|
-
* Through this `ContentInitializer`, a Manifest will be fetched (and depending
|
|
132
|
-
* on the situation, refreshed), a `MediaSource` instance will be linked to the
|
|
133
|
-
* wanted `HTMLMediaElement` and chunks of media data, called segments, will be
|
|
134
|
-
* pushed on buffers associated to this `MediaSource` instance.
|
|
135
|
-
*
|
|
136
130
|
* @class MediaSourceContentInitializer
|
|
137
131
|
*/
|
|
138
132
|
var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
@@ -144,58 +138,148 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
144
138
|
*/
|
|
145
139
|
function MediaSourceContentInitializer(settings) {
|
|
146
140
|
var _this = _super.call(this) || this;
|
|
147
|
-
_this.
|
|
141
|
+
_this._settings = settings;
|
|
148
142
|
_this._initCanceller = new task_canceller_1.default();
|
|
149
|
-
_this.
|
|
150
|
-
_this.
|
|
151
|
-
|
|
152
|
-
_this.
|
|
153
|
-
|
|
154
|
-
|
|
143
|
+
_this._currentMediaSourceCanceller = new task_canceller_1.default();
|
|
144
|
+
_this._currentMediaSourceCanceller.linkToSignal(_this._initCanceller.signal);
|
|
145
|
+
_this._currentContentInfo = null;
|
|
146
|
+
_this._awaitingRequests = {
|
|
147
|
+
nextRequestId: 0,
|
|
148
|
+
pendingSinkMetrics: new Map(),
|
|
149
|
+
pendingThumbnailFetching: new Map(),
|
|
150
|
+
};
|
|
151
|
+
_this._queuedCoreMessages = null;
|
|
155
152
|
return _this;
|
|
156
153
|
}
|
|
157
154
|
/**
|
|
158
155
|
* Perform non-destructive preparation steps, to prepare a future content.
|
|
159
|
-
* For now, this mainly mean loading the Manifest document.
|
|
160
156
|
*/
|
|
161
157
|
MediaSourceContentInitializer.prototype.prepare = function () {
|
|
162
158
|
var _this = this;
|
|
163
|
-
|
|
159
|
+
var _a, _b;
|
|
160
|
+
if (this._currentContentInfo !== null || this._initCanceller.isUsed()) {
|
|
164
161
|
return;
|
|
165
162
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
163
|
+
var contentId = generateContentId();
|
|
164
|
+
var _c = this._settings, adaptiveOptions = _c.adaptiveOptions, transport = _c.transport, transportOptions = _c.transportOptions, useMseInWorker = _c.useMseInWorker, coreInterface = _c.coreInterface;
|
|
165
|
+
var _d = this._settings.bufferOptions, wantedBufferAhead = _d.wantedBufferAhead, maxVideoBufferSize = _d.maxVideoBufferSize, maxBufferAhead = _d.maxBufferAhead, maxBufferBehind = _d.maxBufferBehind;
|
|
166
|
+
var initialVideoBitrate = adaptiveOptions.initialBitrates.video;
|
|
167
|
+
var initialAudioBitrate = adaptiveOptions.initialBitrates.audio;
|
|
168
|
+
this._currentContentInfo = {
|
|
169
|
+
contentId: contentId,
|
|
170
|
+
contentDecryptor: null,
|
|
171
|
+
manifest: null,
|
|
172
|
+
mediaSourceInfo: null,
|
|
173
|
+
rebufferingController: null,
|
|
174
|
+
streamEventsEmitter: null,
|
|
175
|
+
initialTime: undefined,
|
|
176
|
+
autoPlay: undefined,
|
|
177
|
+
initialPlayPerformed: null,
|
|
178
|
+
useMseInWorker: useMseInWorker,
|
|
179
|
+
};
|
|
180
|
+
coreInterface.sendMessage({
|
|
181
|
+
type: "prepare" /* MainThreadMessageType.PrepareContent */,
|
|
182
|
+
value: {
|
|
183
|
+
contentId: contentId,
|
|
184
|
+
cmcd: this._settings.cmcd,
|
|
185
|
+
enableRepresentationAvoidance: this._settings.enableRepresentationAvoidance,
|
|
186
|
+
url: this._settings.url,
|
|
187
|
+
hasText: this._hasTextBufferFeature(),
|
|
188
|
+
transport: transport,
|
|
189
|
+
transportOptions: transportOptions,
|
|
190
|
+
initialVideoBitrate: initialVideoBitrate,
|
|
191
|
+
initialAudioBitrate: initialAudioBitrate,
|
|
192
|
+
manifestRetryOptions: __assign(__assign({}, this._settings.manifestRequestSettings), { lowLatencyMode: this._settings.lowLatencyMode }),
|
|
193
|
+
segmentRetryOptions: this._settings.segmentRequestOptions,
|
|
194
|
+
useMseInWorker: useMseInWorker,
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
this._initCanceller.signal.register(function () {
|
|
198
|
+
coreInterface.sendMessage({
|
|
199
|
+
type: "stop" /* MainThreadMessageType.StopContent */,
|
|
200
|
+
contentId: contentId,
|
|
201
|
+
value: null,
|
|
176
202
|
});
|
|
177
|
-
})
|
|
178
|
-
this.
|
|
203
|
+
});
|
|
204
|
+
if (this._initCanceller.isUsed()) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
this._queuedCoreMessages = [];
|
|
208
|
+
log_1.default.debug("Init", "addEventListener prepare buffering core messages");
|
|
209
|
+
var onmessage = function (msgData) {
|
|
210
|
+
if (msgData.type !== "log" /* CoreMessageType.LogMessage */) {
|
|
211
|
+
log_1.default.debug("Init", "Core message received", msgData.type);
|
|
212
|
+
}
|
|
213
|
+
var type = msgData.type;
|
|
214
|
+
switch (type) {
|
|
215
|
+
case "log" /* CoreMessageType.LogMessage */: {
|
|
216
|
+
var formatted = msgData.value.logs.map(function (l) {
|
|
217
|
+
switch (typeof l) {
|
|
218
|
+
case "string":
|
|
219
|
+
case "number":
|
|
220
|
+
case "boolean":
|
|
221
|
+
case "undefined":
|
|
222
|
+
return l;
|
|
223
|
+
case "object":
|
|
224
|
+
if (l === null) {
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
return formatSentLogObject(l);
|
|
228
|
+
default:
|
|
229
|
+
(0, assert_1.assertUnreachable)(l);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
switch (msgData.value.logLevel) {
|
|
233
|
+
case "NONE":
|
|
234
|
+
break;
|
|
235
|
+
case "ERROR":
|
|
236
|
+
log_1.default.error.apply(log_1.default, __spreadArray([msgData.value.namespace], __read(formatted), false));
|
|
237
|
+
break;
|
|
238
|
+
case "WARNING":
|
|
239
|
+
log_1.default.warn.apply(log_1.default, __spreadArray([msgData.value.namespace], __read(formatted), false));
|
|
240
|
+
break;
|
|
241
|
+
case "INFO":
|
|
242
|
+
log_1.default.info.apply(log_1.default, __spreadArray([msgData.value.namespace], __read(formatted), false));
|
|
243
|
+
break;
|
|
244
|
+
case "DEBUG":
|
|
245
|
+
log_1.default.debug.apply(log_1.default, __spreadArray([msgData.value.namespace], __read(formatted), false));
|
|
246
|
+
break;
|
|
247
|
+
default:
|
|
248
|
+
(0, assert_1.assertUnreachable)(msgData.value.logLevel);
|
|
249
|
+
}
|
|
250
|
+
break;
|
|
251
|
+
}
|
|
252
|
+
default:
|
|
253
|
+
if (_this._queuedCoreMessages !== null) {
|
|
254
|
+
_this._queuedCoreMessages.push(msgData);
|
|
255
|
+
}
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
this._settings.coreInterface.addMessageListener(onmessage);
|
|
260
|
+
var onmessageerror = function () {
|
|
261
|
+
log_1.default.error("Init", "Error when receiving message from core.");
|
|
262
|
+
};
|
|
263
|
+
this._settings.coreInterface.addErrorListener(onmessageerror);
|
|
179
264
|
this._initCanceller.signal.register(function () {
|
|
180
|
-
|
|
265
|
+
log_1.default.debug("Init", "removeEventListener prepare for core message");
|
|
266
|
+
_this._settings.coreInterface.removeMessageListener(onmessage);
|
|
267
|
+
_this._settings.coreInterface.removeErrorListener(onmessageerror);
|
|
181
268
|
});
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
this.prepare(); // Load Manifest if not already done
|
|
190
|
-
/** Translate errors coming from the media element into RxPlayer errors. */
|
|
191
|
-
(0, throw_on_media_error_1.default)(mediaElement, function (error) { return _this._onFatalError(error); }, this._initCanceller.signal);
|
|
192
|
-
this._setupInitialMediaSourceAndDecryption(mediaElement)
|
|
193
|
-
.then(function (initResult) {
|
|
194
|
-
return _this._onInitialMediaSourceReady(mediaElement, initResult.mediaSource, playbackObserver, initResult.drmSystemId, initResult.unlinkMediaSource);
|
|
195
|
-
})
|
|
196
|
-
.catch(function (err) {
|
|
197
|
-
_this._onFatalError(err);
|
|
269
|
+
// Also bind all `SharedReference` objects:
|
|
270
|
+
var throttleVideoBitrate = (_a = adaptiveOptions.throttlers.throttleBitrate.video) !== null && _a !== void 0 ? _a : new reference_1.default(Infinity);
|
|
271
|
+
bindNumberReferencesToCore(coreInterface, this._initCanceller.signal, [wantedBufferAhead, "wantedBufferAhead"], [maxVideoBufferSize, "maxVideoBufferSize"], [maxBufferAhead, "maxBufferAhead"], [maxBufferBehind, "maxBufferBehind"], [throttleVideoBitrate, "throttleVideoBitrate"]);
|
|
272
|
+
var limitVideoResolution = (_b = adaptiveOptions.throttlers.limitResolution.video) !== null && _b !== void 0 ? _b : new reference_1.default({
|
|
273
|
+
height: undefined,
|
|
274
|
+
width: undefined,
|
|
275
|
+
pixelRatio: 1,
|
|
198
276
|
});
|
|
277
|
+
limitVideoResolution.onUpdate(function (newVal) {
|
|
278
|
+
coreInterface.sendMessage({
|
|
279
|
+
type: "ref-update" /* MainThreadMessageType.ReferenceUpdate */,
|
|
280
|
+
value: { name: "limitVideoResolution", newVal: newVal },
|
|
281
|
+
});
|
|
282
|
+
}, { clearSignal: this._initCanceller.signal, emitCurrentValue: true });
|
|
199
283
|
};
|
|
200
284
|
/**
|
|
201
285
|
* Update URL of the Manifest.
|
|
@@ -205,664 +289,1069 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
205
289
|
* DASH's MPD) will be refreshed immediately.
|
|
206
290
|
*/
|
|
207
291
|
MediaSourceContentInitializer.prototype.updateContentUrls = function (urls, refreshNow) {
|
|
208
|
-
this.
|
|
209
|
-
};
|
|
210
|
-
/**
|
|
211
|
-
* Stop content and free all resources linked to this
|
|
212
|
-
* `MediaSourceContentInitializer`.
|
|
213
|
-
*/
|
|
214
|
-
MediaSourceContentInitializer.prototype.dispose = function () {
|
|
215
|
-
this._initCanceller.cancel();
|
|
216
|
-
};
|
|
217
|
-
/**
|
|
218
|
-
* Callback called when an error interrupting playback arised.
|
|
219
|
-
* @param {*} err
|
|
220
|
-
*/
|
|
221
|
-
MediaSourceContentInitializer.prototype._onFatalError = function (err) {
|
|
222
|
-
if (this._initCanceller.isUsed()) {
|
|
292
|
+
if (this._currentContentInfo === null) {
|
|
223
293
|
return;
|
|
224
294
|
}
|
|
225
|
-
this.
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
* Initialize decryption mechanisms if needed and begin creating and relying
|
|
230
|
-
* on the initial `MediaSourceInterface` for this content.
|
|
231
|
-
* @param {HTMLMediaElement|null} mediaElement
|
|
232
|
-
* @returns {Promise.<Object>}
|
|
233
|
-
*/
|
|
234
|
-
MediaSourceContentInitializer.prototype._setupInitialMediaSourceAndDecryption = function (mediaElement) {
|
|
235
|
-
var _this = this;
|
|
236
|
-
var initCanceller = this._initCanceller;
|
|
237
|
-
return (0, create_cancellable_promise_1.default)(initCanceller.signal, function (resolve) {
|
|
238
|
-
var keySystems = _this._initSettings.keySystems;
|
|
239
|
-
/** Initialize decryption capabilities. */
|
|
240
|
-
var _a = (0, initialize_content_decryption_1.default)(mediaElement, keySystems, {
|
|
241
|
-
onWarning: function (err) { return _this.trigger("warning", err); },
|
|
242
|
-
onError: function (err) { return _this._onFatalError(err); },
|
|
243
|
-
onBlackListProtectionData: function (val) {
|
|
244
|
-
// Ugly IIFE workaround to allow async event listener
|
|
245
|
-
(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
246
|
-
var manifest, _a;
|
|
247
|
-
var _b;
|
|
248
|
-
return __generator(this, function (_c) {
|
|
249
|
-
switch (_c.label) {
|
|
250
|
-
case 0:
|
|
251
|
-
if (this._manifest === null) {
|
|
252
|
-
return [2 /*return*/];
|
|
253
|
-
}
|
|
254
|
-
if (!((_b = this._manifest.syncValue) !== null && _b !== void 0)) return [3 /*break*/, 1];
|
|
255
|
-
_a = _b;
|
|
256
|
-
return [3 /*break*/, 3];
|
|
257
|
-
case 1: return [4 /*yield*/, this._manifest.getValueAsAsync()];
|
|
258
|
-
case 2:
|
|
259
|
-
_a = (_c.sent());
|
|
260
|
-
_c.label = 3;
|
|
261
|
-
case 3:
|
|
262
|
-
manifest = _a;
|
|
263
|
-
blackListProtectionDataOnManifest(manifest, val);
|
|
264
|
-
return [2 /*return*/];
|
|
265
|
-
}
|
|
266
|
-
});
|
|
267
|
-
}); })().catch(noop_1.default);
|
|
268
|
-
},
|
|
269
|
-
onKeyIdsCompatibilityUpdate: function (updates) {
|
|
270
|
-
// Ugly IIFE workaround to allow async event listener
|
|
271
|
-
(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
272
|
-
var manifest, _a;
|
|
273
|
-
var _b;
|
|
274
|
-
return __generator(this, function (_c) {
|
|
275
|
-
switch (_c.label) {
|
|
276
|
-
case 0:
|
|
277
|
-
if (this._manifest === null) {
|
|
278
|
-
return [2 /*return*/];
|
|
279
|
-
}
|
|
280
|
-
if (!((_b = this._manifest.syncValue) !== null && _b !== void 0)) return [3 /*break*/, 1];
|
|
281
|
-
_a = _b;
|
|
282
|
-
return [3 /*break*/, 3];
|
|
283
|
-
case 1: return [4 /*yield*/, this._manifest.getValueAsAsync()];
|
|
284
|
-
case 2:
|
|
285
|
-
_a = (_c.sent());
|
|
286
|
-
_c.label = 3;
|
|
287
|
-
case 3:
|
|
288
|
-
manifest = _a;
|
|
289
|
-
updateKeyIdsDecipherabilityOnManifest(manifest, updates.whitelistedKeyIds, updates.blacklistedKeyIds, updates.delistedKeyIds);
|
|
290
|
-
return [2 /*return*/];
|
|
291
|
-
}
|
|
292
|
-
});
|
|
293
|
-
}); })().catch(noop_1.default);
|
|
294
|
-
},
|
|
295
|
-
onCodecSupportUpdate: function () {
|
|
296
|
-
var _a, _b;
|
|
297
|
-
var syncManifest = (_a = _this._manifest) === null || _a === void 0 ? void 0 : _a.syncValue;
|
|
298
|
-
if ((0, is_null_or_undefined_1.default)(syncManifest)) {
|
|
299
|
-
// The Manifest is not yet fetched, but we will be able to check
|
|
300
|
-
// the codecs once it is the case
|
|
301
|
-
(_b = _this._manifest) === null || _b === void 0 ? void 0 : _b.getValueAsAsync().then(function (loadedManifest) {
|
|
302
|
-
if (_this._initCanceller.isUsed()) {
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
|
-
_this._refreshManifestCodecSupport(loadedManifest, mediaElement);
|
|
306
|
-
}, noop_1.default);
|
|
307
|
-
}
|
|
308
|
-
else {
|
|
309
|
-
_this._refreshManifestCodecSupport(syncManifest, mediaElement);
|
|
310
|
-
}
|
|
311
|
-
},
|
|
312
|
-
}, initCanceller.signal), drmInitRef = _a.statusRef, contentDecryptor = _a.contentDecryptor;
|
|
313
|
-
if (contentDecryptor.enabled) {
|
|
314
|
-
_this._decryptionCapabilities = {
|
|
315
|
-
status: "enabled",
|
|
316
|
-
value: contentDecryptor.value,
|
|
317
|
-
};
|
|
318
|
-
}
|
|
319
|
-
else {
|
|
320
|
-
_this._decryptionCapabilities = {
|
|
321
|
-
status: "disabled",
|
|
322
|
-
value: contentDecryptor.value,
|
|
323
|
-
};
|
|
324
|
-
}
|
|
325
|
-
drmInitRef.onUpdate(function (drmStatus, stopListeningToDrmUpdates) {
|
|
326
|
-
if (drmStatus.initializationState.type === "uninitialized") {
|
|
327
|
-
return;
|
|
328
|
-
}
|
|
329
|
-
stopListeningToDrmUpdates();
|
|
330
|
-
var mediaSourceCanceller = new task_canceller_1.default();
|
|
331
|
-
mediaSourceCanceller.linkToSignal(initCanceller.signal);
|
|
332
|
-
(0, create_media_source_1.default)(mediaElement, mediaSourceCanceller.signal)
|
|
333
|
-
.then(function (mediaSource) {
|
|
334
|
-
var lastDrmStatus = drmInitRef.getValue();
|
|
335
|
-
if (lastDrmStatus.initializationState.type === "awaiting-media-link") {
|
|
336
|
-
lastDrmStatus.initializationState.value.isMediaLinked.setValue(true);
|
|
337
|
-
drmInitRef.onUpdate(function (newDrmStatus, stopListeningToDrmUpdatesAgain) {
|
|
338
|
-
if (newDrmStatus.initializationState.type === "initialized") {
|
|
339
|
-
stopListeningToDrmUpdatesAgain();
|
|
340
|
-
resolve({
|
|
341
|
-
mediaSource: mediaSource,
|
|
342
|
-
drmSystemId: newDrmStatus.drmSystemId,
|
|
343
|
-
unlinkMediaSource: mediaSourceCanceller,
|
|
344
|
-
});
|
|
345
|
-
return;
|
|
346
|
-
}
|
|
347
|
-
}, { emitCurrentValue: true, clearSignal: initCanceller.signal });
|
|
348
|
-
}
|
|
349
|
-
else if (drmStatus.initializationState.type === "initialized") {
|
|
350
|
-
resolve({
|
|
351
|
-
mediaSource: mediaSource,
|
|
352
|
-
drmSystemId: drmStatus.drmSystemId,
|
|
353
|
-
unlinkMediaSource: mediaSourceCanceller,
|
|
354
|
-
});
|
|
355
|
-
return;
|
|
356
|
-
}
|
|
357
|
-
})
|
|
358
|
-
.catch(function (err) {
|
|
359
|
-
if (mediaSourceCanceller.isUsed()) {
|
|
360
|
-
return;
|
|
361
|
-
}
|
|
362
|
-
_this._onFatalError(err);
|
|
363
|
-
});
|
|
364
|
-
}, { emitCurrentValue: true, clearSignal: initCanceller.signal });
|
|
365
|
-
});
|
|
366
|
-
};
|
|
367
|
-
MediaSourceContentInitializer.prototype._onInitialMediaSourceReady = function (mediaElement, initialMediaSource, playbackObserver, drmSystemId, initialMediaSourceCanceller) {
|
|
368
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
369
|
-
var _a, adaptiveOptions, autoPlay, bufferOptions, lowLatencyMode, segmentRequestOptions, speed, startAt, textTrackOptions, transport, initCanceller, manifest, _b, _e_1, initialTime, representationEstimator, subBufferOptions, cdnPrioritizer, segmentQueueCreator;
|
|
370
|
-
var _this = this;
|
|
371
|
-
var _c;
|
|
372
|
-
return __generator(this, function (_d) {
|
|
373
|
-
switch (_d.label) {
|
|
374
|
-
case 0:
|
|
375
|
-
_a = this._initSettings, adaptiveOptions = _a.adaptiveOptions, autoPlay = _a.autoPlay, bufferOptions = _a.bufferOptions, lowLatencyMode = _a.lowLatencyMode, segmentRequestOptions = _a.segmentRequestOptions, speed = _a.speed, startAt = _a.startAt, textTrackOptions = _a.textTrackOptions, transport = _a.transport;
|
|
376
|
-
initCanceller = this._initCanceller;
|
|
377
|
-
(0, assert_1.default)(this._manifest !== null);
|
|
378
|
-
_d.label = 1;
|
|
379
|
-
case 1:
|
|
380
|
-
_d.trys.push([1, 5, , 6]);
|
|
381
|
-
if (!((_c = this._manifest.syncValue) !== null && _c !== void 0)) return [3 /*break*/, 2];
|
|
382
|
-
_b = _c;
|
|
383
|
-
return [3 /*break*/, 4];
|
|
384
|
-
case 2: return [4 /*yield*/, this._manifest.getValueAsAsync()];
|
|
385
|
-
case 3:
|
|
386
|
-
_b = (_d.sent());
|
|
387
|
-
_d.label = 4;
|
|
388
|
-
case 4:
|
|
389
|
-
manifest = _b;
|
|
390
|
-
return [3 /*break*/, 6];
|
|
391
|
-
case 5:
|
|
392
|
-
_e_1 = _d.sent();
|
|
393
|
-
return [2 /*return*/]; // The error should already have been processed through an event listener
|
|
394
|
-
case 6:
|
|
395
|
-
manifest.addEventListener("manifestUpdate", function (updates) {
|
|
396
|
-
_this.trigger("manifestUpdate", updates);
|
|
397
|
-
_this._refreshManifestCodecSupport(manifest, mediaElement);
|
|
398
|
-
}, initCanceller.signal);
|
|
399
|
-
manifest.addEventListener("decipherabilityUpdate", function (elts) {
|
|
400
|
-
_this.trigger("decipherabilityUpdate", elts);
|
|
401
|
-
}, initCanceller.signal);
|
|
402
|
-
manifest.addEventListener("supportUpdate", function () {
|
|
403
|
-
_this.trigger("codecSupportUpdate", null);
|
|
404
|
-
}, initCanceller.signal);
|
|
405
|
-
log_1.default.debug("Init", "Calculating initial time");
|
|
406
|
-
initialTime = (0, get_initial_time_1.default)(manifest, lowLatencyMode, startAt);
|
|
407
|
-
log_1.default.debug("Init", "Initial time calculated", { initialTime: initialTime });
|
|
408
|
-
representationEstimator = (0, adaptive_1.default)(adaptiveOptions);
|
|
409
|
-
subBufferOptions = (0, object_assign_1.default)({ textTrackOptions: textTrackOptions, drmSystemId: drmSystemId }, bufferOptions);
|
|
410
|
-
cdnPrioritizer = new fetchers_1.CdnPrioritizer(initCanceller.signal);
|
|
411
|
-
segmentQueueCreator = new fetchers_1.SegmentQueueCreator(transport, cdnPrioritizer, this._cmcdDataBuilder, segmentRequestOptions);
|
|
412
|
-
this._refreshManifestCodecSupport(manifest, mediaElement);
|
|
413
|
-
this.trigger("manifestReady", manifest);
|
|
414
|
-
if (initCanceller.isUsed()) {
|
|
415
|
-
return [2 /*return*/];
|
|
416
|
-
}
|
|
417
|
-
// handle initial load and reloads
|
|
418
|
-
this._setupContentWithNewMediaSource({
|
|
419
|
-
mediaElement: mediaElement,
|
|
420
|
-
playbackObserver: playbackObserver,
|
|
421
|
-
mediaSource: initialMediaSource,
|
|
422
|
-
initialTime: initialTime,
|
|
423
|
-
autoPlay: autoPlay,
|
|
424
|
-
manifest: manifest,
|
|
425
|
-
representationEstimator: representationEstimator,
|
|
426
|
-
cdnPrioritizer: cdnPrioritizer,
|
|
427
|
-
segmentQueueCreator: segmentQueueCreator,
|
|
428
|
-
speed: speed,
|
|
429
|
-
bufferOptions: subBufferOptions,
|
|
430
|
-
}, initialMediaSourceCanceller);
|
|
431
|
-
return [2 /*return*/];
|
|
432
|
-
}
|
|
433
|
-
});
|
|
295
|
+
this._settings.coreInterface.sendMessage({
|
|
296
|
+
type: "urls-update" /* MainThreadMessageType.ContentUrlsUpdate */,
|
|
297
|
+
contentId: this._currentContentInfo.contentId,
|
|
298
|
+
value: { urls: urls, refreshNow: refreshNow },
|
|
434
299
|
});
|
|
435
300
|
};
|
|
436
301
|
/**
|
|
437
|
-
*
|
|
438
|
-
*
|
|
439
|
-
* This function recursively re-call itself when a MediaSource reload is
|
|
440
|
-
* wanted.
|
|
441
|
-
* @param {Object} args
|
|
442
|
-
* @param {Object} currentCanceller
|
|
443
|
-
*/
|
|
444
|
-
MediaSourceContentInitializer.prototype._setupContentWithNewMediaSource = function (args, currentCanceller) {
|
|
445
|
-
this._startLoadingContentOnMediaSource(args, this._createReloadMediaSourceCallback(args, currentCanceller), currentCanceller.signal);
|
|
446
|
-
};
|
|
447
|
-
/**
|
|
448
|
-
* Create `IReloadMediaSourceCallback` allowing to handle reload orders.
|
|
449
|
-
* @param {Object} args
|
|
450
|
-
* @param {Object} currentCanceller
|
|
451
|
-
*/
|
|
452
|
-
MediaSourceContentInitializer.prototype._createReloadMediaSourceCallback = function (args, currentCanceller) {
|
|
453
|
-
var _this = this;
|
|
454
|
-
var initCanceller = this._initCanceller;
|
|
455
|
-
return function (reloadOrder) {
|
|
456
|
-
currentCanceller.cancel();
|
|
457
|
-
if (initCanceller.isUsed()) {
|
|
458
|
-
return;
|
|
459
|
-
}
|
|
460
|
-
_this.trigger("reloadingMediaSource", reloadOrder);
|
|
461
|
-
if (initCanceller.isUsed()) {
|
|
462
|
-
return;
|
|
463
|
-
}
|
|
464
|
-
var newCanceller = new task_canceller_1.default();
|
|
465
|
-
newCanceller.linkToSignal(initCanceller.signal);
|
|
466
|
-
(0, create_media_source_1.default)(args.mediaElement, newCanceller.signal)
|
|
467
|
-
.then(function (newMediaSource) {
|
|
468
|
-
_this._setupContentWithNewMediaSource(__assign(__assign({}, args), { mediaSource: newMediaSource, initialTime: reloadOrder.position, autoPlay: reloadOrder.autoPlay }), newCanceller);
|
|
469
|
-
})
|
|
470
|
-
.catch(function (err) {
|
|
471
|
-
if (newCanceller.isUsed()) {
|
|
472
|
-
return;
|
|
473
|
-
}
|
|
474
|
-
_this._onFatalError(err);
|
|
475
|
-
});
|
|
476
|
-
};
|
|
477
|
-
};
|
|
478
|
-
/**
|
|
479
|
-
* Buffer the content on the given MediaSource.
|
|
480
|
-
* @param {Object} args
|
|
481
|
-
* @param {function} onReloadOrder
|
|
482
|
-
* @param {Object} cancelSignal
|
|
302
|
+
* @param {HTMLMediaElement} mediaElement
|
|
303
|
+
* @param {Object} playbackObserver
|
|
483
304
|
*/
|
|
484
|
-
MediaSourceContentInitializer.prototype.
|
|
305
|
+
MediaSourceContentInitializer.prototype.start = function (mediaElement, playbackObserver) {
|
|
306
|
+
var e_1, _a;
|
|
485
307
|
var _this = this;
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
var initialPeriod = (_a = manifest.getPeriodForTime(initialTime)) !== null && _a !== void 0 ? _a : manifest.getNextPeriod(initialTime);
|
|
490
|
-
if (initialPeriod === undefined) {
|
|
491
|
-
var error = new errors_1.MediaError("MEDIA_STARTING_TIME_NOT_FOUND", "Wanted starting time not found in the Manifest.");
|
|
492
|
-
return this._onFatalError(error);
|
|
308
|
+
this.prepare(); // Load Manifest if not already done
|
|
309
|
+
if (this._initCanceller.isUsed()) {
|
|
310
|
+
return;
|
|
493
311
|
}
|
|
494
|
-
var
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
cancelSignal.register(function () {
|
|
500
|
-
sender_1.stop();
|
|
501
|
-
textDisplayer === null || textDisplayer === void 0 ? void 0 : textDisplayer.stop();
|
|
502
|
-
});
|
|
312
|
+
var textDisplayer = null;
|
|
313
|
+
if (this._settings.textTrackOptions.textTrackMode === "html" &&
|
|
314
|
+
features_1.default.htmlTextDisplayer !== null) {
|
|
315
|
+
(0, assert_1.default)(this._hasTextBufferFeature());
|
|
316
|
+
textDisplayer = new features_1.default.htmlTextDisplayer(mediaElement, this._settings.textTrackOptions.textTrackElement);
|
|
503
317
|
}
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
318
|
+
else if (features_1.default.nativeTextDisplayer !== null) {
|
|
319
|
+
(0, assert_1.default)(this._hasTextBufferFeature());
|
|
320
|
+
textDisplayer = new features_1.default.nativeTextDisplayer(mediaElement);
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
(0, assert_1.default)(!this._hasTextBufferFeature());
|
|
324
|
+
}
|
|
325
|
+
this._initCanceller.signal.register(function () {
|
|
326
|
+
textDisplayer === null || textDisplayer === void 0 ? void 0 : textDisplayer.stop();
|
|
508
327
|
});
|
|
509
|
-
|
|
328
|
+
/** Translate errors coming from the media element into RxPlayer errors. */
|
|
329
|
+
(0, throw_on_media_error_1.default)(mediaElement, function (error) { return _this._onFatalError(error); }, this._initCanceller.signal);
|
|
330
|
+
/**
|
|
331
|
+
* Send content protection initialization data.
|
|
332
|
+
* TODO remove and use ContentDecryptor directly when possible.
|
|
333
|
+
*/
|
|
334
|
+
var lastContentProtection = new reference_1.default(null);
|
|
335
|
+
var mediaSourceStatus = new reference_1.default(0 /* MediaSourceInitializationStatus.Nothing */);
|
|
336
|
+
var _b = this._initializeContentDecryption(mediaElement, lastContentProtection, mediaSourceStatus, function () { return notifyAndStartMediaSourceReload(0, undefined, undefined); }, this._initCanceller.signal), drmInitializationStatus = _b.statusRef, contentDecryptor = _b.contentDecryptor;
|
|
337
|
+
var contentInfo = this._currentContentInfo;
|
|
338
|
+
if (contentInfo !== null) {
|
|
339
|
+
contentInfo.contentDecryptor = contentDecryptor;
|
|
340
|
+
}
|
|
341
|
+
var playbackStartParams = {
|
|
510
342
|
mediaElement: mediaElement,
|
|
343
|
+
textDisplayer: textDisplayer,
|
|
511
344
|
playbackObserver: playbackObserver,
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
if (cancelSignal.isCancelled()) {
|
|
520
|
-
return;
|
|
521
|
-
}
|
|
522
|
-
initialPlayPerformed.onUpdate(function (isPerformed, stopListening) {
|
|
523
|
-
if (isPerformed) {
|
|
524
|
-
stopListening();
|
|
525
|
-
var streamEventsEmitter_1 = new stream_events_emitter_1.default(manifest, playbackObserver);
|
|
526
|
-
manifest.addEventListener("manifestUpdate", function () {
|
|
527
|
-
streamEventsEmitter_1.onManifestUpdate(manifest);
|
|
528
|
-
}, cancelSignal);
|
|
529
|
-
streamEventsEmitter_1.addEventListener("event", function (payload) {
|
|
530
|
-
_this.trigger("streamEvent", payload);
|
|
531
|
-
}, cancelSignal);
|
|
532
|
-
streamEventsEmitter_1.addEventListener("eventSkip", function (payload) {
|
|
533
|
-
_this.trigger("streamEventSkip", payload);
|
|
534
|
-
}, cancelSignal);
|
|
535
|
-
streamEventsEmitter_1.start();
|
|
536
|
-
cancelSignal.register(function () {
|
|
537
|
-
streamEventsEmitter_1.stop();
|
|
538
|
-
});
|
|
345
|
+
drmInitializationStatus: drmInitializationStatus,
|
|
346
|
+
mediaSourceStatus: mediaSourceStatus,
|
|
347
|
+
};
|
|
348
|
+
mediaSourceStatus.onUpdate(function (msInitStatus, stopListeningMSStatus) {
|
|
349
|
+
if (msInitStatus === 2 /* MediaSourceInitializationStatus.Attached */) {
|
|
350
|
+
stopListeningMSStatus();
|
|
351
|
+
_this._startPlaybackIfReady(playbackStartParams);
|
|
539
352
|
}
|
|
540
|
-
}, { clearSignal:
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
textDisplayer: textDisplayer,
|
|
546
|
-
initialPlayPerformed: initialPlayPerformed,
|
|
547
|
-
speed: speed,
|
|
548
|
-
}, cancelSignal);
|
|
549
|
-
(_b = this._cmcdDataBuilder) === null || _b === void 0 ? void 0 : _b.startMonitoringPlayback(coreObserver);
|
|
550
|
-
cancelSignal.register(function () {
|
|
551
|
-
var _a;
|
|
552
|
-
(_a = _this._cmcdDataBuilder) === null || _a === void 0 ? void 0 : _a.stopMonitoringPlayback();
|
|
553
|
-
});
|
|
554
|
-
var rebufferingController = this._createRebufferingController(playbackObserver, manifest, speed, cancelSignal);
|
|
555
|
-
var freezeResolver = new FreezeResolver_1.default(segmentSinksStore);
|
|
556
|
-
if ((0, may_media_element_fail_on_undecipherable_data_1.default)()) {
|
|
557
|
-
// On some devices, just reload immediately when data become undecipherable
|
|
558
|
-
manifest.addEventListener("decipherabilityUpdate", function (elts) {
|
|
559
|
-
if (elts.some(function (e) { return e.representation.decipherable !== true; })) {
|
|
560
|
-
reloadMediaSource(0, undefined, undefined);
|
|
561
|
-
}
|
|
562
|
-
}, cancelSignal);
|
|
563
|
-
}
|
|
564
|
-
coreObserver.listen(function (observation) {
|
|
565
|
-
(0, synchronize_sinks_on_observation_1.default)(observation, segmentSinksStore);
|
|
566
|
-
var freezeResolution = freezeResolver.onNewObservation(observation);
|
|
567
|
-
if (freezeResolution === null) {
|
|
568
|
-
return;
|
|
353
|
+
}, { clearSignal: this._initCanceller.signal, emitCurrentValue: true });
|
|
354
|
+
drmInitializationStatus.onUpdate(function (initializationStatus, stopListeningDrm) {
|
|
355
|
+
if (initializationStatus.initializationState.type === "initialized") {
|
|
356
|
+
stopListeningDrm();
|
|
357
|
+
_this._startPlaybackIfReady(playbackStartParams);
|
|
569
358
|
}
|
|
570
|
-
|
|
571
|
-
// it with other reload handlers after some work.
|
|
572
|
-
var triggerReload = function () {
|
|
573
|
-
var _a;
|
|
574
|
-
var lastObservation = playbackObserver.getReference().getValue();
|
|
575
|
-
var position = lastObservation.position.isAwaitingFuturePosition()
|
|
576
|
-
? lastObservation.position.getWanted()
|
|
577
|
-
: ((_a = coreObserver.getCurrentTime()) !== null && _a !== void 0 ? _a : lastObservation.position.getPolled());
|
|
578
|
-
var autoplay = initialPlayPerformed.getValue()
|
|
579
|
-
? !playbackObserver.getIsPaused()
|
|
580
|
-
: autoPlay;
|
|
581
|
-
onReloadOrder({ position: position, autoPlay: autoplay });
|
|
582
|
-
};
|
|
583
|
-
handleFreezeResolution(freezeResolution, {
|
|
584
|
-
enableRepresentationAvoidance: _this._initSettings.enableRepresentationAvoidance,
|
|
585
|
-
manifest: manifest,
|
|
586
|
-
triggerReload: triggerReload,
|
|
587
|
-
playbackObserver: playbackObserver,
|
|
588
|
-
});
|
|
589
|
-
}, { clearSignal: cancelSignal });
|
|
590
|
-
var contentTimeBoundariesObserver = (0, create_content_time_boundaries_observer_1.default)(manifest, mediaSource, coreObserver, segmentSinksStore, {
|
|
591
|
-
onWarning: function (err) { return _this.trigger("warning", err); },
|
|
592
|
-
onPeriodChanged: function (period) {
|
|
593
|
-
return _this.trigger("activePeriodChanged", { period: period });
|
|
594
|
-
},
|
|
595
|
-
}, cancelSignal);
|
|
359
|
+
}, { emitCurrentValue: true, clearSignal: this._initCanceller.signal });
|
|
596
360
|
/**
|
|
597
|
-
*
|
|
598
|
-
*
|
|
599
|
-
*
|
|
361
|
+
* Reset directly (synchronously) the current `MediaSource` and signal to
|
|
362
|
+
* the core that we did so.
|
|
363
|
+
* @param {number} deltaPosition - Position you want to seek to after
|
|
364
|
+
* reloading, as a delta in seconds from the last polled playing position.
|
|
365
|
+
* @param {number|undefined} minimumPosition - If set, minimum time bound
|
|
366
|
+
* in seconds after `deltaPosition` has been applied.
|
|
367
|
+
* @param {number|undefined} maximumPosition - If set, minimum time bound
|
|
368
|
+
* in seconds after `deltaPosition` has been applied.
|
|
600
369
|
*/
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
stopListening();
|
|
607
|
-
_this.trigger("loaded", {
|
|
608
|
-
getSegmentSinkMetrics: function () { return __awaiter(_this, void 0, void 0, function () {
|
|
609
|
-
return __generator(this, function (_a) {
|
|
610
|
-
return [2 /*return*/, new Promise(function (resolve) {
|
|
611
|
-
return resolve(segmentSinksStore.getSegmentSinksMetrics());
|
|
612
|
-
})];
|
|
613
|
-
});
|
|
614
|
-
}); },
|
|
615
|
-
getThumbnailData: function (periodId, thumbnailTrackId, time) { return __awaiter(_this, void 0, void 0, function () {
|
|
616
|
-
return __generator(this, function (_a) {
|
|
617
|
-
return [2 /*return*/, (0, get_thumbnail_data_1.default)(fetchThumbnails_1, manifest, periodId, thumbnailTrackId, time)];
|
|
618
|
-
});
|
|
619
|
-
}); },
|
|
620
|
-
});
|
|
621
|
-
}
|
|
622
|
-
}, { emitCurrentValue: true, clearSignal: cancelSignal });
|
|
623
|
-
})
|
|
624
|
-
.catch(function (err) {
|
|
625
|
-
if (cancelSignal.isCancelled()) {
|
|
626
|
-
return; // Current loading cancelled, no need to trigger the error
|
|
370
|
+
var notifyAndStartMediaSourceReload = function (deltaPosition, minimumPosition, maximumPosition) {
|
|
371
|
+
var reloadingContentInfo = _this._currentContentInfo;
|
|
372
|
+
if (reloadingContentInfo === null) {
|
|
373
|
+
log_1.default.warn("Init", "Asked to reload when no content is loaded.");
|
|
374
|
+
return;
|
|
627
375
|
}
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
376
|
+
if (reloadingContentInfo === null ||
|
|
377
|
+
reloadingContentInfo.mediaSourceInfo === null) {
|
|
378
|
+
log_1.default.warn("Init", "Asked to reload when no MediaSource is active.");
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
var mediaSourceId = reloadingContentInfo.mediaSourceInfo.type === "main"
|
|
382
|
+
? reloadingContentInfo.mediaSourceInfo.mediaSource.id
|
|
383
|
+
: reloadingContentInfo.mediaSourceInfo.mediaSourceId;
|
|
384
|
+
_this._settings.coreInterface.sendMessage({
|
|
385
|
+
type: "ms-reload" /* MainThreadMessageType.MediaSourceReload */,
|
|
386
|
+
mediaSourceId: mediaSourceId,
|
|
387
|
+
value: null,
|
|
388
|
+
});
|
|
389
|
+
reloadMediaSource(deltaPosition, minimumPosition, maximumPosition);
|
|
390
|
+
};
|
|
633
391
|
/**
|
|
634
|
-
*
|
|
635
|
-
*
|
|
636
|
-
*
|
|
392
|
+
* Reset directly (synchronously) the current `MediaSource`.
|
|
393
|
+
*
|
|
394
|
+
* It is assumed that `core` already knows about this action. If not, call
|
|
395
|
+
* `notifyAndStartMediaSourceReload` instead.
|
|
396
|
+
* @param {number} deltaPosition - Position you want to seek to after
|
|
397
|
+
* reloading, as a delta in seconds from the last polled playing position.
|
|
398
|
+
* @param {number|undefined} minimumPosition - If set, minimum time bound
|
|
399
|
+
* in seconds after `deltaPosition` has been applied.
|
|
400
|
+
* @param {number|undefined} maximumPosition - If set, minimum time bound
|
|
401
|
+
* in seconds after `deltaPosition` has been applied.
|
|
637
402
|
*/
|
|
638
|
-
function
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
403
|
+
var reloadMediaSource = function (deltaPosition, minimumPosition, maximumPosition) {
|
|
404
|
+
var _a;
|
|
405
|
+
var reloadingContentInfo = _this._currentContentInfo;
|
|
406
|
+
if (reloadingContentInfo === null) {
|
|
407
|
+
log_1.default.warn("Init", "Asked to reload when no content is loaded.");
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
410
|
+
var lastObservation = playbackObserver.getReference().getValue();
|
|
411
|
+
var currentPosition = lastObservation.position.getWanted();
|
|
412
|
+
var isPaused = ((_a = reloadingContentInfo.initialPlayPerformed) === null || _a === void 0 ? void 0 : _a.getValue()) === true ||
|
|
413
|
+
reloadingContentInfo.autoPlay === undefined
|
|
414
|
+
? lastObservation.paused
|
|
415
|
+
: !reloadingContentInfo.autoPlay;
|
|
416
|
+
var position = currentPosition + deltaPosition;
|
|
417
|
+
if (minimumPosition !== undefined) {
|
|
418
|
+
position = Math.max(minimumPosition, position);
|
|
419
|
+
}
|
|
420
|
+
if (maximumPosition !== undefined) {
|
|
421
|
+
position = Math.min(maximumPosition, position);
|
|
422
|
+
}
|
|
423
|
+
_this._reload(mediaElement, textDisplayer, playbackObserver, mediaSourceStatus, position, !isPaused);
|
|
424
|
+
};
|
|
425
|
+
var onmessage = function (msgData) {
|
|
426
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28;
|
|
427
|
+
switch (msgData.type) {
|
|
428
|
+
case "attach-media-source" /* CoreMessageType.AttachMediaSource */: {
|
|
429
|
+
if (((_a = _this._currentContentInfo) === null || _a === void 0 ? void 0 : _a.contentId) !== msgData.contentId) {
|
|
430
|
+
return;
|
|
653
431
|
}
|
|
654
|
-
|
|
655
|
-
|
|
432
|
+
if (_this._currentContentInfo !== null) {
|
|
433
|
+
if (((_b = _this._currentContentInfo.mediaSourceInfo) === null || _b === void 0 ? void 0 : _b.type) === "main") {
|
|
434
|
+
_this._currentContentInfo.mediaSourceInfo.mediaSource.dispose();
|
|
435
|
+
}
|
|
436
|
+
_this._currentContentInfo.mediaSourceInfo = {
|
|
437
|
+
type: "core",
|
|
438
|
+
mediaSourceId: msgData.mediaSourceId,
|
|
439
|
+
};
|
|
656
440
|
}
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
// issues after a flush.
|
|
661
|
-
//
|
|
662
|
-
// NOTE: there's in theory a potential race condition in the following
|
|
663
|
-
// logic as the callback could be called when media data is still
|
|
664
|
-
// being removed by the browser - which is an asynchronous process.
|
|
665
|
-
// The following condition checking for buffered data could thus lead
|
|
666
|
-
// to a false positive where we're actually checking previous data.
|
|
667
|
-
// For now, such scenario is avoided by setting the
|
|
668
|
-
// `includeLastObservation` option to `false` and calling
|
|
669
|
-
// `needsBufferFlush` once MSE media removal operations have been
|
|
670
|
-
// explicitely validated by the browser, but that's a complex and easy
|
|
671
|
-
// to break system.
|
|
672
|
-
playbackObserver.listen(function (obs, stopListening) {
|
|
673
|
-
if (
|
|
674
|
-
// Data is buffered around the current position
|
|
675
|
-
obs.currentRange !== null ||
|
|
676
|
-
// Or, for whatever reason, we have no buffer but we're already advancing
|
|
677
|
-
obs.position.getPolled() > wantedSeekingTime + 0.1) {
|
|
441
|
+
var mediaSourceLink_1 = msgData.value;
|
|
442
|
+
mediaSourceStatus.onUpdate(function (currStatus, stopListening) {
|
|
443
|
+
if (currStatus === 1 /* MediaSourceInitializationStatus.AttachNow */) {
|
|
678
444
|
stopListening();
|
|
679
|
-
|
|
445
|
+
log_1.default.info("media", "Attaching MediaSource URL to the media element");
|
|
446
|
+
if (mediaSourceLink_1.type === "handle") {
|
|
447
|
+
mediaElement.srcObject = mediaSourceLink_1.value;
|
|
448
|
+
_this._currentMediaSourceCanceller.signal.register(function () {
|
|
449
|
+
mediaElement.srcObject = null;
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
else {
|
|
453
|
+
mediaElement.src = mediaSourceLink_1.value;
|
|
454
|
+
_this._currentMediaSourceCanceller.signal.register(function () {
|
|
455
|
+
(0, create_media_source_1.resetMediaElement)(mediaElement, mediaSourceLink_1.value);
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
(0, create_media_source_1.disableRemotePlaybackOnManagedMediaSource)(mediaElement, _this._currentMediaSourceCanceller.signal);
|
|
459
|
+
mediaSourceStatus.setValue(2 /* MediaSourceInitializationStatus.Attached */);
|
|
680
460
|
}
|
|
681
|
-
}, {
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
if (
|
|
702
|
-
|
|
461
|
+
}, { emitCurrentValue: true, clearSignal: _this._initCanceller.signal });
|
|
462
|
+
break;
|
|
463
|
+
}
|
|
464
|
+
case "warning" /* CoreMessageType.Warning */:
|
|
465
|
+
if (((_c = _this._currentContentInfo) === null || _c === void 0 ? void 0 : _c.contentId) !== msgData.contentId) {
|
|
466
|
+
return;
|
|
467
|
+
}
|
|
468
|
+
_this.trigger("warning", formatCoreError(msgData.value));
|
|
469
|
+
break;
|
|
470
|
+
case "error" /* CoreMessageType.Error */:
|
|
471
|
+
if (((_d = _this._currentContentInfo) === null || _d === void 0 ? void 0 : _d.contentId) !== msgData.contentId) {
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
_this._onFatalError(formatCoreError(msgData.value));
|
|
475
|
+
break;
|
|
476
|
+
case "create-media-source" /* CoreMessageType.CreateMediaSource */:
|
|
477
|
+
_this._onCreateMediaSourceMessage(msgData, mediaElement, mediaSourceStatus, _this._settings.coreInterface);
|
|
478
|
+
break;
|
|
479
|
+
case "add-source-buffer" /* CoreMessageType.AddSourceBuffer */:
|
|
480
|
+
{
|
|
481
|
+
if (((_f = (_e = _this._currentContentInfo) === null || _e === void 0 ? void 0 : _e.mediaSourceInfo) === null || _f === void 0 ? void 0 : _f.type) !== "main" ||
|
|
482
|
+
_this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
|
|
483
|
+
msgData.mediaSourceId) {
|
|
484
|
+
return;
|
|
703
485
|
}
|
|
704
|
-
|
|
705
|
-
|
|
486
|
+
var mediaSource = _this._currentContentInfo.mediaSourceInfo.mediaSource;
|
|
487
|
+
mediaSource.addSourceBuffer(msgData.value.sourceBufferType, msgData.value.codec);
|
|
488
|
+
}
|
|
489
|
+
break;
|
|
490
|
+
case "source-buffer-append" /* CoreMessageType.SourceBufferAppend */:
|
|
491
|
+
{
|
|
492
|
+
if (((_h = (_g = _this._currentContentInfo) === null || _g === void 0 ? void 0 : _g.mediaSourceInfo) === null || _h === void 0 ? void 0 : _h.type) !== "main" ||
|
|
493
|
+
_this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
|
|
494
|
+
msgData.mediaSourceId) {
|
|
495
|
+
return;
|
|
706
496
|
}
|
|
497
|
+
var mediaSource_1 = _this._currentContentInfo.mediaSourceInfo.mediaSource;
|
|
498
|
+
var sourceBuffer_1 = (0, array_find_1.default)(mediaSource_1.sourceBuffers, function (s) { return s.type === msgData.sourceBufferType; });
|
|
499
|
+
if (sourceBuffer_1 === undefined) {
|
|
500
|
+
return;
|
|
501
|
+
}
|
|
502
|
+
sourceBuffer_1
|
|
503
|
+
.appendBuffer(msgData.value.data, msgData.value.params)
|
|
504
|
+
.then(function (buffered) {
|
|
505
|
+
_this._settings.coreInterface.sendMessage({
|
|
506
|
+
type: "sb-success" /* MainThreadMessageType.SourceBufferSuccess */,
|
|
507
|
+
mediaSourceId: mediaSource_1.id,
|
|
508
|
+
sourceBufferType: sourceBuffer_1.type,
|
|
509
|
+
operationId: msgData.operationId,
|
|
510
|
+
value: { buffered: buffered },
|
|
511
|
+
});
|
|
512
|
+
})
|
|
513
|
+
.catch(function (error) {
|
|
514
|
+
_this._settings.coreInterface.sendMessage({
|
|
515
|
+
type: "sb-error" /* MainThreadMessageType.SourceBufferError */,
|
|
516
|
+
mediaSourceId: mediaSource_1.id,
|
|
517
|
+
sourceBufferType: sourceBuffer_1.type,
|
|
518
|
+
operationId: msgData.operationId,
|
|
519
|
+
value: error instanceof task_canceller_1.CancellationError
|
|
520
|
+
? { errorName: "CancellationError" }
|
|
521
|
+
: formatSourceBufferError(error).serialize(),
|
|
522
|
+
});
|
|
523
|
+
});
|
|
707
524
|
}
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
525
|
+
break;
|
|
526
|
+
case "source-buffer-remove" /* CoreMessageType.SourceBufferRemove */:
|
|
527
|
+
{
|
|
528
|
+
if (((_k = (_j = _this._currentContentInfo) === null || _j === void 0 ? void 0 : _j.mediaSourceInfo) === null || _k === void 0 ? void 0 : _k.type) !== "main" ||
|
|
529
|
+
_this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
|
|
530
|
+
msgData.mediaSourceId) {
|
|
531
|
+
return;
|
|
532
|
+
}
|
|
533
|
+
var mediaSource_2 = _this._currentContentInfo.mediaSourceInfo.mediaSource;
|
|
534
|
+
var sourceBuffer_2 = (0, array_find_1.default)(mediaSource_2.sourceBuffers, function (s) { return s.type === msgData.sourceBufferType; });
|
|
535
|
+
if (sourceBuffer_2 === undefined) {
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
538
|
+
sourceBuffer_2
|
|
539
|
+
.remove(msgData.value.start, msgData.value.end)
|
|
540
|
+
.then(function (buffered) {
|
|
541
|
+
_this._settings.coreInterface.sendMessage({
|
|
542
|
+
type: "sb-success" /* MainThreadMessageType.SourceBufferSuccess */,
|
|
543
|
+
mediaSourceId: mediaSource_2.id,
|
|
544
|
+
sourceBufferType: sourceBuffer_2.type,
|
|
545
|
+
operationId: msgData.operationId,
|
|
546
|
+
value: { buffered: buffered },
|
|
547
|
+
});
|
|
548
|
+
})
|
|
549
|
+
.catch(function (error) {
|
|
550
|
+
_this._settings.coreInterface.sendMessage({
|
|
551
|
+
type: "sb-error" /* MainThreadMessageType.SourceBufferError */,
|
|
552
|
+
mediaSourceId: mediaSource_2.id,
|
|
553
|
+
sourceBufferType: sourceBuffer_2.type,
|
|
554
|
+
operationId: msgData.operationId,
|
|
555
|
+
value: error instanceof task_canceller_1.CancellationError
|
|
556
|
+
? { errorName: "CancellationError" }
|
|
557
|
+
: formatSourceBufferError(error).serialize(),
|
|
558
|
+
});
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
break;
|
|
562
|
+
case "abort-source-buffer" /* CoreMessageType.AbortSourceBuffer */:
|
|
563
|
+
{
|
|
564
|
+
if (((_m = (_l = _this._currentContentInfo) === null || _l === void 0 ? void 0 : _l.mediaSourceInfo) === null || _m === void 0 ? void 0 : _m.type) !== "main" ||
|
|
565
|
+
_this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
|
|
566
|
+
msgData.mediaSourceId) {
|
|
567
|
+
return;
|
|
568
|
+
}
|
|
569
|
+
var mediaSource = _this._currentContentInfo.mediaSourceInfo.mediaSource;
|
|
570
|
+
var sourceBuffer = (0, array_find_1.default)(mediaSource.sourceBuffers, function (s) { return s.type === msgData.sourceBufferType; });
|
|
571
|
+
if (sourceBuffer === undefined) {
|
|
572
|
+
return;
|
|
573
|
+
}
|
|
574
|
+
sourceBuffer.abort();
|
|
575
|
+
}
|
|
576
|
+
break;
|
|
577
|
+
case "update-media-source-duration" /* CoreMessageType.UpdateMediaSourceDuration */:
|
|
578
|
+
{
|
|
579
|
+
if (((_p = (_o = _this._currentContentInfo) === null || _o === void 0 ? void 0 : _o.mediaSourceInfo) === null || _p === void 0 ? void 0 : _p.type) !== "main" ||
|
|
580
|
+
_this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
|
|
581
|
+
msgData.mediaSourceId) {
|
|
582
|
+
return;
|
|
583
|
+
}
|
|
584
|
+
var mediaSource = _this._currentContentInfo.mediaSourceInfo.mediaSource;
|
|
585
|
+
if ((mediaSource === null || mediaSource === void 0 ? void 0 : mediaSource.id) !== msgData.mediaSourceId) {
|
|
586
|
+
return;
|
|
587
|
+
}
|
|
588
|
+
mediaSource.setDuration(msgData.value.duration, msgData.value.isRealEndKnown);
|
|
589
|
+
}
|
|
590
|
+
break;
|
|
591
|
+
case "stop-media-source-duration" /* CoreMessageType.InterruptMediaSourceDurationUpdate */:
|
|
592
|
+
{
|
|
593
|
+
if (((_r = (_q = _this._currentContentInfo) === null || _q === void 0 ? void 0 : _q.mediaSourceInfo) === null || _r === void 0 ? void 0 : _r.type) !== "main" ||
|
|
594
|
+
_this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
|
|
595
|
+
msgData.mediaSourceId) {
|
|
596
|
+
return;
|
|
597
|
+
}
|
|
598
|
+
var mediaSource = _this._currentContentInfo.mediaSourceInfo.mediaSource;
|
|
599
|
+
if ((mediaSource === null || mediaSource === void 0 ? void 0 : mediaSource.id) !== msgData.mediaSourceId) {
|
|
600
|
+
return;
|
|
601
|
+
}
|
|
602
|
+
mediaSource.interruptDurationSetting();
|
|
603
|
+
}
|
|
604
|
+
break;
|
|
605
|
+
case "end-of-stream" /* CoreMessageType.EndOfStream */:
|
|
606
|
+
{
|
|
607
|
+
if (((_t = (_s = _this._currentContentInfo) === null || _s === void 0 ? void 0 : _s.mediaSourceInfo) === null || _t === void 0 ? void 0 : _t.type) !== "main" ||
|
|
608
|
+
_this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
|
|
609
|
+
msgData.mediaSourceId) {
|
|
610
|
+
return;
|
|
611
|
+
}
|
|
612
|
+
var mediaSource = _this._currentContentInfo.mediaSourceInfo.mediaSource;
|
|
613
|
+
mediaSource.maintainEndOfStream();
|
|
614
|
+
}
|
|
615
|
+
break;
|
|
616
|
+
case "stop-end-of-stream" /* CoreMessageType.InterruptEndOfStream */:
|
|
617
|
+
{
|
|
618
|
+
if (((_v = (_u = _this._currentContentInfo) === null || _u === void 0 ? void 0 : _u.mediaSourceInfo) === null || _v === void 0 ? void 0 : _v.type) !== "main" ||
|
|
619
|
+
_this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
|
|
620
|
+
msgData.mediaSourceId) {
|
|
621
|
+
return;
|
|
622
|
+
}
|
|
623
|
+
var mediaSource = _this._currentContentInfo.mediaSourceInfo.mediaSource;
|
|
624
|
+
mediaSource.stopEndOfStream();
|
|
625
|
+
}
|
|
626
|
+
break;
|
|
627
|
+
case "dispose-media-source" /* CoreMessageType.DisposeMediaSource */:
|
|
628
|
+
{
|
|
629
|
+
if (((_x = (_w = _this._currentContentInfo) === null || _w === void 0 ? void 0 : _w.mediaSourceInfo) === null || _x === void 0 ? void 0 : _x.type) !== "main" ||
|
|
630
|
+
_this._currentContentInfo.mediaSourceInfo.mediaSource.id !==
|
|
631
|
+
msgData.mediaSourceId) {
|
|
632
|
+
return;
|
|
633
|
+
}
|
|
634
|
+
var mediaSource = _this._currentContentInfo.mediaSourceInfo.mediaSource;
|
|
635
|
+
mediaSource.dispose();
|
|
636
|
+
}
|
|
637
|
+
break;
|
|
638
|
+
case "needs-buffer-flush" /* CoreMessageType.NeedsBufferFlush */: {
|
|
639
|
+
if (((_y = _this._currentContentInfo) === null || _y === void 0 ? void 0 : _y.contentId) !== msgData.contentId) {
|
|
640
|
+
return;
|
|
641
|
+
}
|
|
642
|
+
var lastObservation = playbackObserver.getReference().getValue();
|
|
643
|
+
var currentTime = lastObservation.position.isAwaitingFuturePosition()
|
|
644
|
+
? lastObservation.position.getWanted()
|
|
645
|
+
: mediaElement.currentTime;
|
|
646
|
+
var relativeResumingPosition = (_0 = (_z = msgData.value) === null || _z === void 0 ? void 0 : _z.relativeResumingPosition) !== null && _0 !== void 0 ? _0 : 0;
|
|
647
|
+
var canBeApproximateSeek = Boolean((_1 = msgData.value) === null || _1 === void 0 ? void 0 : _1.relativePosHasBeenDefaulted);
|
|
648
|
+
var wantedSeekingTime = void 0;
|
|
649
|
+
if (relativeResumingPosition === 0 && canBeApproximateSeek) {
|
|
650
|
+
// in case relativeResumingPosition is 0, we still perform
|
|
651
|
+
// a tiny seek to be sure that the browser will correclty reload the video.
|
|
652
|
+
wantedSeekingTime = currentTime + 0.001;
|
|
653
|
+
}
|
|
654
|
+
else {
|
|
655
|
+
wantedSeekingTime = currentTime + relativeResumingPosition;
|
|
656
|
+
}
|
|
657
|
+
playbackObserver.setCurrentTime(wantedSeekingTime);
|
|
658
|
+
break;
|
|
659
|
+
}
|
|
660
|
+
case "active-period-changed" /* CoreMessageType.ActivePeriodChanged */: {
|
|
661
|
+
if (((_2 = _this._currentContentInfo) === null || _2 === void 0 ? void 0 : _2.contentId) !== msgData.contentId ||
|
|
662
|
+
_this._currentContentInfo.manifest === null) {
|
|
663
|
+
return;
|
|
664
|
+
}
|
|
665
|
+
var period = (0, array_find_1.default)(_this._currentContentInfo.manifest.periods, function (p) { return p.id === msgData.value.periodId; });
|
|
666
|
+
if (period !== undefined) {
|
|
667
|
+
_this.trigger("activePeriodChanged", { period: period });
|
|
668
|
+
}
|
|
669
|
+
break;
|
|
670
|
+
}
|
|
671
|
+
case "adaptation-changed" /* CoreMessageType.AdaptationChanged */: {
|
|
672
|
+
if (((_3 = _this._currentContentInfo) === null || _3 === void 0 ? void 0 : _3.contentId) !== msgData.contentId ||
|
|
673
|
+
_this._currentContentInfo.manifest === null) {
|
|
674
|
+
return;
|
|
675
|
+
}
|
|
676
|
+
var period = (0, array_find_1.default)(_this._currentContentInfo.manifest.periods, function (p) { return p.id === msgData.value.periodId; });
|
|
677
|
+
if (period === undefined) {
|
|
678
|
+
return;
|
|
679
|
+
}
|
|
680
|
+
if (msgData.value.adaptationId === null) {
|
|
681
|
+
_this.trigger("adaptationChange", {
|
|
682
|
+
period: period,
|
|
683
|
+
adaptation: null,
|
|
684
|
+
type: msgData.value.type,
|
|
685
|
+
});
|
|
686
|
+
return;
|
|
687
|
+
}
|
|
688
|
+
var adaptations = (_4 = period.adaptations[msgData.value.type]) !== null && _4 !== void 0 ? _4 : [];
|
|
689
|
+
var adaptation = (0, array_find_1.default)(adaptations, function (a) { return a.id === msgData.value.adaptationId; });
|
|
690
|
+
if (adaptation !== undefined) {
|
|
691
|
+
_this.trigger("adaptationChange", {
|
|
692
|
+
period: period,
|
|
693
|
+
adaptation: adaptation,
|
|
694
|
+
type: msgData.value.type,
|
|
695
|
+
});
|
|
696
|
+
}
|
|
697
|
+
break;
|
|
698
|
+
}
|
|
699
|
+
case "representation-changed" /* CoreMessageType.RepresentationChanged */: {
|
|
700
|
+
if (((_5 = _this._currentContentInfo) === null || _5 === void 0 ? void 0 : _5.contentId) !== msgData.contentId ||
|
|
701
|
+
_this._currentContentInfo.manifest === null) {
|
|
702
|
+
return;
|
|
703
|
+
}
|
|
704
|
+
var period = (0, array_find_1.default)(_this._currentContentInfo.manifest.periods, function (p) { return p.id === msgData.value.periodId; });
|
|
705
|
+
if (period === undefined) {
|
|
706
|
+
return;
|
|
707
|
+
}
|
|
708
|
+
if (msgData.value.representationId === null) {
|
|
709
|
+
_this.trigger("representationChange", {
|
|
710
|
+
period: period,
|
|
711
|
+
type: msgData.value.type,
|
|
712
|
+
representation: null,
|
|
713
|
+
});
|
|
714
|
+
return;
|
|
715
|
+
}
|
|
716
|
+
var adaptations = (_6 = period.adaptations[msgData.value.type]) !== null && _6 !== void 0 ? _6 : [];
|
|
717
|
+
var adaptation = (0, array_find_1.default)(adaptations, function (a) { return a.id === msgData.value.adaptationId; });
|
|
718
|
+
if (adaptation === undefined) {
|
|
719
|
+
return;
|
|
720
|
+
}
|
|
721
|
+
var representation = (0, array_find_1.default)(adaptation.representations, function (r) { return r.id === msgData.value.representationId; });
|
|
722
|
+
if (representation !== undefined) {
|
|
723
|
+
_this.trigger("representationChange", {
|
|
724
|
+
period: period,
|
|
725
|
+
type: msgData.value.type,
|
|
726
|
+
representation: representation,
|
|
727
|
+
});
|
|
728
|
+
}
|
|
729
|
+
break;
|
|
730
|
+
}
|
|
731
|
+
case "encryption-data-encountered" /* CoreMessageType.EncryptionDataEncountered */:
|
|
732
|
+
if (((_7 = _this._currentContentInfo) === null || _7 === void 0 ? void 0 : _7.contentId) !== msgData.contentId) {
|
|
733
|
+
return;
|
|
734
|
+
}
|
|
735
|
+
lastContentProtection.setValue(msgData.value);
|
|
736
|
+
break;
|
|
737
|
+
case "manifest-ready" /* CoreMessageType.ManifestReady */: {
|
|
738
|
+
if (((_8 = _this._currentContentInfo) === null || _8 === void 0 ? void 0 : _8.contentId) !== msgData.contentId) {
|
|
739
|
+
return;
|
|
740
|
+
}
|
|
741
|
+
var manifest = msgData.value.manifest;
|
|
742
|
+
_this._currentContentInfo.manifest = manifest;
|
|
743
|
+
_this._updateCodecSupport(manifest, mediaElement);
|
|
744
|
+
_this._startPlaybackIfReady(playbackStartParams);
|
|
745
|
+
break;
|
|
746
|
+
}
|
|
747
|
+
case "manifest-update" /* CoreMessageType.ManifestUpdate */: {
|
|
748
|
+
if (((_9 = _this._currentContentInfo) === null || _9 === void 0 ? void 0 : _9.contentId) !== msgData.contentId) {
|
|
749
|
+
return;
|
|
750
|
+
}
|
|
751
|
+
var manifest = (_10 = _this._currentContentInfo) === null || _10 === void 0 ? void 0 : _10.manifest;
|
|
752
|
+
if ((0, is_null_or_undefined_1.default)(manifest)) {
|
|
753
|
+
log_1.default.error("Init", "Manifest update but no Manifest loaded");
|
|
754
|
+
return;
|
|
755
|
+
}
|
|
756
|
+
(0, manifest_1.replicateUpdatesOnManifestMetadata)(manifest, msgData.value.manifest, msgData.value.updates);
|
|
757
|
+
(_12 = (_11 = _this._currentContentInfo) === null || _11 === void 0 ? void 0 : _11.streamEventsEmitter) === null || _12 === void 0 ? void 0 : _12.onManifestUpdate(manifest);
|
|
758
|
+
_this._updateCodecSupport(manifest, mediaElement);
|
|
759
|
+
_this.trigger("manifestUpdate", msgData.value.updates);
|
|
760
|
+
break;
|
|
761
|
+
}
|
|
762
|
+
case "update-playback-rate" /* CoreMessageType.UpdatePlaybackRate */:
|
|
763
|
+
if (((_13 = _this._currentContentInfo) === null || _13 === void 0 ? void 0 : _13.contentId) !== msgData.contentId) {
|
|
764
|
+
return;
|
|
765
|
+
}
|
|
766
|
+
playbackObserver.setPlaybackRate(msgData.value);
|
|
767
|
+
break;
|
|
768
|
+
case "bitrate-estimate-change" /* CoreMessageType.BitrateEstimateChange */:
|
|
769
|
+
if (((_14 = _this._currentContentInfo) === null || _14 === void 0 ? void 0 : _14.contentId) !== msgData.contentId) {
|
|
770
|
+
return;
|
|
771
|
+
}
|
|
772
|
+
_this.trigger("bitrateEstimateChange", {
|
|
773
|
+
type: msgData.value.bufferType,
|
|
774
|
+
bitrate: msgData.value.bitrate,
|
|
721
775
|
});
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
adaptationChange: function (value) {
|
|
727
|
-
self.trigger("adaptationChange", value);
|
|
728
|
-
if (cancelSignal.isCancelled()) {
|
|
729
|
-
return; // Previous call has stopped streams due to a side-effect
|
|
776
|
+
break;
|
|
777
|
+
case "inband-event" /* CoreMessageType.InbandEvent */:
|
|
778
|
+
if (((_15 = _this._currentContentInfo) === null || _15 === void 0 ? void 0 : _15.contentId) !== msgData.contentId) {
|
|
779
|
+
return;
|
|
730
780
|
}
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
return;
|
|
781
|
+
_this.trigger("inbandEvents", msgData.value);
|
|
782
|
+
break;
|
|
783
|
+
case "locked-stream" /* CoreMessageType.LockedStream */: {
|
|
784
|
+
if (((_16 = _this._currentContentInfo) === null || _16 === void 0 ? void 0 : _16.contentId) !== msgData.contentId ||
|
|
785
|
+
_this._currentContentInfo.manifest === null) {
|
|
786
|
+
return;
|
|
737
787
|
}
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
788
|
+
var period = (0, array_find_1.default)(_this._currentContentInfo.manifest.periods, function (p) { return p.id === msgData.value.periodId; });
|
|
789
|
+
if (period === undefined) {
|
|
790
|
+
return;
|
|
791
|
+
}
|
|
792
|
+
(_17 = _this._currentContentInfo.rebufferingController) === null || _17 === void 0 ? void 0 : _17.onLockedStream(msgData.value.bufferType, period);
|
|
793
|
+
break;
|
|
794
|
+
}
|
|
795
|
+
case "period-stream-ready" /* CoreMessageType.PeriodStreamReady */: {
|
|
796
|
+
if (((_18 = _this._currentContentInfo) === null || _18 === void 0 ? void 0 : _18.contentId) !== msgData.contentId ||
|
|
797
|
+
_this._currentContentInfo.manifest === null) {
|
|
798
|
+
return;
|
|
799
|
+
}
|
|
800
|
+
var period = (0, array_find_1.default)(_this._currentContentInfo.manifest.periods, function (p) { return p.id === msgData.value.periodId; });
|
|
801
|
+
if (period === undefined) {
|
|
802
|
+
return;
|
|
803
|
+
}
|
|
804
|
+
var ref_1 = new reference_1.default(undefined);
|
|
805
|
+
ref_1.onUpdate(function (adapChoice) {
|
|
806
|
+
if (_this._currentContentInfo === null) {
|
|
807
|
+
ref_1.finish();
|
|
808
|
+
return;
|
|
809
|
+
}
|
|
810
|
+
if (!(0, is_null_or_undefined_1.default)(adapChoice)) {
|
|
811
|
+
adapChoice.representations.onUpdate(function (repChoice, stopListening) {
|
|
812
|
+
if (_this._currentContentInfo === null) {
|
|
813
|
+
stopListening();
|
|
814
|
+
return;
|
|
815
|
+
}
|
|
816
|
+
_this._settings.coreInterface.sendMessage({
|
|
817
|
+
type: "rep-update" /* MainThreadMessageType.RepresentationUpdate */,
|
|
818
|
+
contentId: _this._currentContentInfo.contentId,
|
|
819
|
+
value: {
|
|
820
|
+
periodId: msgData.value.periodId,
|
|
821
|
+
adaptationId: adapChoice.adaptationId,
|
|
822
|
+
bufferType: msgData.value.bufferType,
|
|
823
|
+
choice: repChoice,
|
|
824
|
+
},
|
|
825
|
+
});
|
|
826
|
+
}, { clearSignal: _this._initCanceller.signal });
|
|
827
|
+
}
|
|
828
|
+
_this._settings.coreInterface.sendMessage({
|
|
829
|
+
type: "track-update" /* MainThreadMessageType.TrackUpdate */,
|
|
830
|
+
contentId: _this._currentContentInfo.contentId,
|
|
831
|
+
value: {
|
|
832
|
+
periodId: msgData.value.periodId,
|
|
833
|
+
bufferType: msgData.value.bufferType,
|
|
834
|
+
choice: (0, is_null_or_undefined_1.default)(adapChoice)
|
|
835
|
+
? adapChoice
|
|
836
|
+
: {
|
|
837
|
+
adaptationId: adapChoice.adaptationId,
|
|
838
|
+
switchingMode: adapChoice.switchingMode,
|
|
839
|
+
initialRepresentations: adapChoice.representations.getValue(),
|
|
840
|
+
relativeResumingPosition: adapChoice.relativeResumingPosition,
|
|
841
|
+
},
|
|
842
|
+
},
|
|
843
|
+
});
|
|
844
|
+
}, { clearSignal: _this._initCanceller.signal });
|
|
845
|
+
_this.trigger("periodStreamReady", {
|
|
846
|
+
period: period,
|
|
847
|
+
type: msgData.value.bufferType,
|
|
848
|
+
adaptationRef: ref_1,
|
|
751
849
|
});
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
(
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
850
|
+
break;
|
|
851
|
+
}
|
|
852
|
+
case "period-stream-cleared" /* CoreMessageType.PeriodStreamCleared */: {
|
|
853
|
+
if (((_19 = _this._currentContentInfo) === null || _19 === void 0 ? void 0 : _19.contentId) !== msgData.contentId ||
|
|
854
|
+
_this._currentContentInfo.manifest === null) {
|
|
855
|
+
return;
|
|
856
|
+
}
|
|
857
|
+
_this.trigger("periodStreamCleared", {
|
|
858
|
+
periodId: msgData.value.periodId,
|
|
859
|
+
type: msgData.value.bufferType,
|
|
860
|
+
});
|
|
861
|
+
break;
|
|
862
|
+
}
|
|
863
|
+
case "discontinuity-update" /* CoreMessageType.DiscontinuityUpdate */: {
|
|
864
|
+
if (((_20 = _this._currentContentInfo) === null || _20 === void 0 ? void 0 : _20.contentId) !== msgData.contentId ||
|
|
865
|
+
_this._currentContentInfo.manifest === null) {
|
|
866
|
+
return;
|
|
867
|
+
}
|
|
868
|
+
var period = (0, array_find_1.default)(_this._currentContentInfo.manifest.periods, function (p) { return p.id === msgData.value.periodId; });
|
|
869
|
+
if (period === undefined) {
|
|
870
|
+
log_1.default.warn("Init", "Discontinuity's Period not found", {
|
|
871
|
+
periodId: msgData.value.periodId,
|
|
872
|
+
});
|
|
873
|
+
return;
|
|
874
|
+
}
|
|
875
|
+
(_21 = _this._currentContentInfo.rebufferingController) === null || _21 === void 0 ? void 0 : _21.updateDiscontinuityInfo({
|
|
876
|
+
period: period,
|
|
877
|
+
bufferType: msgData.value.bufferType,
|
|
878
|
+
discontinuity: msgData.value.discontinuity,
|
|
879
|
+
position: msgData.value.position,
|
|
880
|
+
});
|
|
881
|
+
break;
|
|
882
|
+
}
|
|
883
|
+
case "push-text-data" /* CoreMessageType.PushTextData */: {
|
|
884
|
+
if (((_22 = _this._currentContentInfo) === null || _22 === void 0 ? void 0 : _22.contentId) !== msgData.contentId) {
|
|
885
|
+
return;
|
|
886
|
+
}
|
|
887
|
+
if (textDisplayer === null) {
|
|
888
|
+
log_1.default.warn("text", "Received AddTextData message but no text displayer exists");
|
|
771
889
|
}
|
|
772
890
|
else {
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
playbackObserver.setCurrentTime(mediaElement.currentTime + 0.001);
|
|
891
|
+
try {
|
|
892
|
+
var ranges = textDisplayer.pushTextData(msgData.value);
|
|
893
|
+
_this._settings.coreInterface.sendMessage({
|
|
894
|
+
type: "add-text-success" /* MainThreadMessageType.PushTextDataSuccess */,
|
|
895
|
+
contentId: msgData.contentId,
|
|
896
|
+
value: { ranges: ranges },
|
|
897
|
+
});
|
|
781
898
|
}
|
|
782
|
-
|
|
783
|
-
|
|
899
|
+
catch (err) {
|
|
900
|
+
var message = err instanceof Error ? err.message : "Unknown error";
|
|
901
|
+
_this._settings.coreInterface.sendMessage({
|
|
902
|
+
type: "push-text-error" /* MainThreadMessageType.PushTextDataError */,
|
|
903
|
+
contentId: msgData.contentId,
|
|
904
|
+
value: { message: message },
|
|
905
|
+
});
|
|
784
906
|
}
|
|
785
907
|
}
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
if (
|
|
790
|
-
self._onFatalError(self._decryptionCapabilities.value);
|
|
908
|
+
break;
|
|
909
|
+
}
|
|
910
|
+
case "remove-text-data" /* CoreMessageType.RemoveTextData */: {
|
|
911
|
+
if (((_23 = _this._currentContentInfo) === null || _23 === void 0 ? void 0 : _23.contentId) !== msgData.contentId) {
|
|
791
912
|
return;
|
|
792
913
|
}
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
914
|
+
if (textDisplayer === null) {
|
|
915
|
+
log_1.default.warn("text", "Received RemoveTextData message but no text displayer exists");
|
|
916
|
+
}
|
|
917
|
+
else {
|
|
918
|
+
try {
|
|
919
|
+
var ranges = textDisplayer.removeBuffer(msgData.value.start, msgData.value.end);
|
|
920
|
+
_this._settings.coreInterface.sendMessage({
|
|
921
|
+
type: "remove-text-success" /* MainThreadMessageType.RemoveTextDataSuccess */,
|
|
922
|
+
contentId: msgData.contentId,
|
|
923
|
+
value: { ranges: ranges },
|
|
924
|
+
});
|
|
925
|
+
}
|
|
926
|
+
catch (err) {
|
|
927
|
+
var message = err instanceof Error ? err.message : "Unknown error";
|
|
928
|
+
_this._settings.coreInterface.sendMessage({
|
|
929
|
+
type: "remove-text-error" /* MainThreadMessageType.RemoveTextDataError */,
|
|
930
|
+
contentId: msgData.contentId,
|
|
931
|
+
value: { message: message },
|
|
932
|
+
});
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
break;
|
|
936
|
+
}
|
|
937
|
+
case "reset-text-displayer" /* CoreMessageType.ResetTextDisplayer */: {
|
|
938
|
+
if (((_24 = _this._currentContentInfo) === null || _24 === void 0 ? void 0 : _24.contentId) !== msgData.contentId) {
|
|
939
|
+
return;
|
|
940
|
+
}
|
|
941
|
+
if (textDisplayer === null) {
|
|
942
|
+
log_1.default.warn("text", "Received ResetTextDisplayer message but no text displayer exists");
|
|
943
|
+
}
|
|
944
|
+
else {
|
|
945
|
+
textDisplayer.reset();
|
|
946
|
+
}
|
|
947
|
+
break;
|
|
948
|
+
}
|
|
949
|
+
case "stop-text-displayer" /* CoreMessageType.StopTextDisplayer */: {
|
|
950
|
+
if (((_25 = _this._currentContentInfo) === null || _25 === void 0 ? void 0 : _25.contentId) !== msgData.contentId) {
|
|
796
951
|
return;
|
|
797
952
|
}
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
953
|
+
if (textDisplayer === null) {
|
|
954
|
+
log_1.default.warn("text", "Received StopTextDisplayer message but no text displayer exists");
|
|
955
|
+
}
|
|
956
|
+
else {
|
|
957
|
+
textDisplayer.stop();
|
|
958
|
+
}
|
|
959
|
+
break;
|
|
960
|
+
}
|
|
961
|
+
case "reloading-media-source" /* CoreMessageType.ReloadingMediaSource */:
|
|
962
|
+
{
|
|
963
|
+
if (_this._currentContentInfo === null ||
|
|
964
|
+
_this._currentContentInfo.mediaSourceInfo === null) {
|
|
965
|
+
return;
|
|
966
|
+
}
|
|
967
|
+
var mediaSourceId = _this._currentContentInfo.mediaSourceInfo.type === "main"
|
|
968
|
+
? _this._currentContentInfo.mediaSourceInfo.mediaSource.id
|
|
969
|
+
: _this._currentContentInfo.mediaSourceInfo.mediaSourceId;
|
|
970
|
+
if (mediaSourceId !== msgData.mediaSourceId) {
|
|
971
|
+
return;
|
|
972
|
+
}
|
|
973
|
+
reloadMediaSource(msgData.value.timeOffset, msgData.value.minimumPosition, msgData.value.maximumPosition);
|
|
974
|
+
}
|
|
975
|
+
break;
|
|
976
|
+
case "needs-decipherability-flush" /* CoreMessageType.NeedsDecipherabilityFlush */:
|
|
977
|
+
{
|
|
978
|
+
if (((_26 = _this._currentContentInfo) === null || _26 === void 0 ? void 0 : _26.contentId) !== msgData.contentId) {
|
|
979
|
+
return;
|
|
980
|
+
}
|
|
981
|
+
var keySystem = (0, decrypt_1.getKeySystemConfiguration)(mediaElement);
|
|
982
|
+
if ((0, should_reload_media_source_on_decipherability_update_1.default)(keySystem === null || keySystem === void 0 ? void 0 : keySystem[0])) {
|
|
983
|
+
notifyAndStartMediaSourceReload(0, undefined, undefined);
|
|
984
|
+
}
|
|
985
|
+
else {
|
|
986
|
+
var lastObservation = playbackObserver.getReference().getValue();
|
|
987
|
+
var currentPosition = lastObservation.position.getWanted();
|
|
988
|
+
// simple seek close to the current position
|
|
989
|
+
// to flush the buffers
|
|
990
|
+
if (currentPosition + 0.001 < lastObservation.duration) {
|
|
991
|
+
playbackObserver.setCurrentTime(mediaElement.currentTime + 0.001);
|
|
992
|
+
}
|
|
993
|
+
else {
|
|
994
|
+
playbackObserver.setCurrentTime(currentPosition);
|
|
804
995
|
}
|
|
805
996
|
}
|
|
806
997
|
}
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
998
|
+
break;
|
|
999
|
+
case "segment-sink-store-update" /* CoreMessageType.SegmentSinkStoreUpdate */: {
|
|
1000
|
+
if (((_27 = _this._currentContentInfo) === null || _27 === void 0 ? void 0 : _27.contentId) !== msgData.contentId) {
|
|
1001
|
+
return;
|
|
1002
|
+
}
|
|
1003
|
+
var sinkObj = _this._awaitingRequests.pendingSinkMetrics.get(msgData.value.requestId);
|
|
1004
|
+
if (sinkObj !== undefined) {
|
|
1005
|
+
sinkObj.resolve(msgData.value.segmentSinkMetrics);
|
|
1006
|
+
}
|
|
1007
|
+
else {
|
|
1008
|
+
log_1.default.error("Init", "Failed to send segment sink store update");
|
|
1009
|
+
}
|
|
1010
|
+
break;
|
|
1011
|
+
}
|
|
1012
|
+
case "init-success" /* CoreMessageType.InitSuccess */:
|
|
1013
|
+
case "init-error" /* CoreMessageType.InitError */:
|
|
1014
|
+
// Should already be handled by the API
|
|
1015
|
+
break;
|
|
1016
|
+
case "log" /* CoreMessageType.LogMessage */:
|
|
1017
|
+
// Already handled by prepare's handler
|
|
1018
|
+
break;
|
|
1019
|
+
case "thumbnail-response" /* CoreMessageType.ThumbnailDataResponse */: {
|
|
1020
|
+
if (((_28 = _this._currentContentInfo) === null || _28 === void 0 ? void 0 : _28.contentId) !== msgData.contentId) {
|
|
1021
|
+
return;
|
|
1022
|
+
}
|
|
1023
|
+
var tObj = _this._awaitingRequests.pendingThumbnailFetching.get(msgData.value.requestId);
|
|
1024
|
+
if (tObj !== undefined) {
|
|
1025
|
+
if (msgData.value.status === "error") {
|
|
1026
|
+
tObj.reject(formatCoreError(msgData.value.error));
|
|
811
1027
|
}
|
|
812
|
-
|
|
1028
|
+
else {
|
|
1029
|
+
tObj.resolve(msgData.value.data);
|
|
1030
|
+
}
|
|
1031
|
+
}
|
|
1032
|
+
else {
|
|
1033
|
+
log_1.default.error("Init", "Failed to send segment sink store update");
|
|
813
1034
|
}
|
|
1035
|
+
break;
|
|
1036
|
+
}
|
|
1037
|
+
default:
|
|
1038
|
+
(0, assert_1.assertUnreachable)(msgData);
|
|
1039
|
+
}
|
|
1040
|
+
};
|
|
1041
|
+
log_1.default.debug("Init", "addEventListener for core message");
|
|
1042
|
+
if (this._queuedCoreMessages !== null) {
|
|
1043
|
+
var bufferedMessages = this._queuedCoreMessages.slice();
|
|
1044
|
+
log_1.default.debug("Init", "Processing buffered messages", {
|
|
1045
|
+
ammount: bufferedMessages.length,
|
|
1046
|
+
});
|
|
1047
|
+
try {
|
|
1048
|
+
for (var bufferedMessages_1 = __values(bufferedMessages), bufferedMessages_1_1 = bufferedMessages_1.next(); !bufferedMessages_1_1.done; bufferedMessages_1_1 = bufferedMessages_1.next()) {
|
|
1049
|
+
var message = bufferedMessages_1_1.value;
|
|
1050
|
+
onmessage(message);
|
|
1051
|
+
}
|
|
1052
|
+
}
|
|
1053
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
1054
|
+
finally {
|
|
1055
|
+
try {
|
|
1056
|
+
if (bufferedMessages_1_1 && !bufferedMessages_1_1.done && (_a = bufferedMessages_1.return)) _a.call(bufferedMessages_1);
|
|
1057
|
+
}
|
|
1058
|
+
finally { if (e_1) throw e_1.error; }
|
|
1059
|
+
}
|
|
1060
|
+
this._queuedCoreMessages = null;
|
|
1061
|
+
}
|
|
1062
|
+
this._settings.coreInterface.addMessageListener(onmessage);
|
|
1063
|
+
this._initCanceller.signal.register(function () {
|
|
1064
|
+
log_1.default.debug("Init", "removeEventListener for core message");
|
|
1065
|
+
_this._settings.coreInterface.removeMessageListener(onmessage);
|
|
1066
|
+
});
|
|
1067
|
+
};
|
|
1068
|
+
MediaSourceContentInitializer.prototype.dispose = function () {
|
|
1069
|
+
var _a;
|
|
1070
|
+
this._initCanceller.cancel();
|
|
1071
|
+
if (this._currentContentInfo !== null) {
|
|
1072
|
+
if (((_a = this._currentContentInfo.mediaSourceInfo) === null || _a === void 0 ? void 0 : _a.type) === "main") {
|
|
1073
|
+
this._currentContentInfo.mediaSourceInfo.mediaSource.dispose();
|
|
1074
|
+
}
|
|
1075
|
+
this._currentContentInfo = null;
|
|
1076
|
+
}
|
|
1077
|
+
};
|
|
1078
|
+
MediaSourceContentInitializer.prototype._onFatalError = function (err) {
|
|
1079
|
+
if (this._initCanceller.isUsed()) {
|
|
1080
|
+
return;
|
|
1081
|
+
}
|
|
1082
|
+
this._initCanceller.cancel();
|
|
1083
|
+
this.trigger("error", err);
|
|
1084
|
+
};
|
|
1085
|
+
MediaSourceContentInitializer.prototype._initializeContentDecryption = function (mediaElement, lastContentProtection, mediaSourceStatus, reloadMediaSource, cancelSignal) {
|
|
1086
|
+
var _this = this;
|
|
1087
|
+
var _a;
|
|
1088
|
+
var keySystems = this._settings.keySystems;
|
|
1089
|
+
// TODO private?
|
|
1090
|
+
var createEmeDisabledReference = function (errMsg) {
|
|
1091
|
+
mediaSourceStatus.setValue(1 /* MediaSourceInitializationStatus.AttachNow */);
|
|
1092
|
+
lastContentProtection.onUpdate(function (data, stopListening) {
|
|
1093
|
+
if (data === null) {
|
|
1094
|
+
// initial value
|
|
1095
|
+
return;
|
|
1096
|
+
}
|
|
1097
|
+
stopListening();
|
|
1098
|
+
var err = new errors_1.EncryptedMediaError("MEDIA_IS_ENCRYPTED_ERROR", errMsg, {
|
|
1099
|
+
keyStatuses: undefined,
|
|
1100
|
+
keySystemConfiguration: undefined,
|
|
1101
|
+
keySystem: undefined,
|
|
1102
|
+
});
|
|
1103
|
+
_this._onFatalError(err);
|
|
1104
|
+
}, { clearSignal: cancelSignal });
|
|
1105
|
+
var ref = new reference_1.default({
|
|
1106
|
+
initializationState: {
|
|
1107
|
+
type: "initialized",
|
|
1108
|
+
value: null,
|
|
814
1109
|
},
|
|
815
|
-
|
|
816
|
-
|
|
1110
|
+
contentDecryptor: null,
|
|
1111
|
+
drmSystemId: undefined,
|
|
1112
|
+
});
|
|
1113
|
+
ref.finish(); // We know that no new value will be triggered
|
|
1114
|
+
return { statusRef: ref, contentDecryptor: null };
|
|
1115
|
+
};
|
|
1116
|
+
if (keySystems.length === 0) {
|
|
1117
|
+
return createEmeDisabledReference("No `keySystems` option given.");
|
|
817
1118
|
}
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
var
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
1119
|
+
else if (features_1.default.decrypt === null) {
|
|
1120
|
+
return createEmeDisabledReference("EME feature not activated.");
|
|
1121
|
+
}
|
|
1122
|
+
var emeApi = (_a = mediaElement.FORCED_EME_API) !== null && _a !== void 0 ? _a : (0, eme_1.default)("auto");
|
|
1123
|
+
if (emeApi === null) {
|
|
1124
|
+
return createEmeDisabledReference("EME API not available on the current page.");
|
|
1125
|
+
}
|
|
1126
|
+
log_1.default.debug("Init", "Creating ContentDecryptor");
|
|
1127
|
+
var ContentDecryptor = features_1.default.decrypt;
|
|
1128
|
+
var contentDecryptor = new ContentDecryptor(emeApi, mediaElement, keySystems);
|
|
1129
|
+
var drmStatusRef = new reference_1.default({
|
|
1130
|
+
initializationState: { type: "uninitialized", value: null },
|
|
1131
|
+
drmSystemId: undefined,
|
|
1132
|
+
}, cancelSignal);
|
|
1133
|
+
var updateCodecSupportOnStateChange = function (state) {
|
|
1134
|
+
var _a;
|
|
1135
|
+
if (state > decrypt_1.ContentDecryptorState.Initializing) {
|
|
1136
|
+
var manifest = (_a = _this._currentContentInfo) === null || _a === void 0 ? void 0 : _a.manifest;
|
|
1137
|
+
if ((0, is_null_or_undefined_1.default)(manifest)) {
|
|
1138
|
+
return;
|
|
1139
|
+
}
|
|
1140
|
+
_this._updateCodecSupport(manifest, mediaElement);
|
|
1141
|
+
contentDecryptor.removeEventListener("stateChange", updateCodecSupportOnStateChange);
|
|
837
1142
|
}
|
|
838
|
-
|
|
839
|
-
|
|
1143
|
+
};
|
|
1144
|
+
contentDecryptor.addEventListener("stateChange", updateCodecSupportOnStateChange);
|
|
1145
|
+
contentDecryptor.addEventListener("keyIdsCompatibilityUpdate", function (updates) {
|
|
1146
|
+
if (_this._currentContentInfo === null ||
|
|
1147
|
+
_this._currentContentInfo.manifest === null) {
|
|
1148
|
+
return;
|
|
840
1149
|
}
|
|
841
|
-
|
|
1150
|
+
var manUpdates = (0, manifest_1.updateDecipherabilityFromKeyIds)(_this._currentContentInfo.manifest, updates);
|
|
1151
|
+
if ((0, may_media_element_fail_on_undecipherable_data_1.default)() &&
|
|
1152
|
+
manUpdates.some(function (e) { return e.representation.decipherable !== true; })) {
|
|
1153
|
+
reloadMediaSource();
|
|
1154
|
+
}
|
|
1155
|
+
else {
|
|
1156
|
+
_this._settings.coreInterface.sendMessage({
|
|
1157
|
+
type: "decipherability-update" /* MainThreadMessageType.DecipherabilityStatusUpdate */,
|
|
1158
|
+
contentId: _this._currentContentInfo.contentId,
|
|
1159
|
+
value: manUpdates.map(function (s) { return ({
|
|
1160
|
+
representationUniqueId: s.representation.uniqueId,
|
|
1161
|
+
decipherable: s.representation.decipherable,
|
|
1162
|
+
}); }),
|
|
1163
|
+
});
|
|
1164
|
+
}
|
|
1165
|
+
_this.trigger("decipherabilityUpdate", manUpdates);
|
|
1166
|
+
});
|
|
1167
|
+
contentDecryptor.addEventListener("blackListProtectionData", function (protData) {
|
|
1168
|
+
if (_this._currentContentInfo === null ||
|
|
1169
|
+
_this._currentContentInfo.manifest === null) {
|
|
1170
|
+
return;
|
|
1171
|
+
}
|
|
1172
|
+
var manUpdates = (0, manifest_1.updateDecipherabilityFromProtectionData)(_this._currentContentInfo.manifest, protData);
|
|
1173
|
+
if ((0, may_media_element_fail_on_undecipherable_data_1.default)() &&
|
|
1174
|
+
manUpdates.some(function (e) { return e.representation.decipherable !== true; })) {
|
|
1175
|
+
reloadMediaSource();
|
|
1176
|
+
}
|
|
1177
|
+
else {
|
|
1178
|
+
_this._settings.coreInterface.sendMessage({
|
|
1179
|
+
type: "decipherability-update" /* MainThreadMessageType.DecipherabilityStatusUpdate */,
|
|
1180
|
+
contentId: _this._currentContentInfo.contentId,
|
|
1181
|
+
value: manUpdates.map(function (s) { return ({
|
|
1182
|
+
representationUniqueId: s.representation.uniqueId,
|
|
1183
|
+
decipherable: s.representation.decipherable,
|
|
1184
|
+
}); }),
|
|
1185
|
+
});
|
|
1186
|
+
}
|
|
1187
|
+
_this.trigger("decipherabilityUpdate", manUpdates);
|
|
1188
|
+
});
|
|
1189
|
+
contentDecryptor.addEventListener("stateChange", function (state) {
|
|
1190
|
+
if (state === decrypt_1.ContentDecryptorState.WaitingForAttachment) {
|
|
1191
|
+
mediaSourceStatus.onUpdate(function (currStatus, stopListening) {
|
|
1192
|
+
if (currStatus === 0 /* MediaSourceInitializationStatus.Nothing */) {
|
|
1193
|
+
mediaSourceStatus.setValue(1 /* MediaSourceInitializationStatus.AttachNow */);
|
|
1194
|
+
}
|
|
1195
|
+
else if (currStatus === 2 /* MediaSourceInitializationStatus.Attached */) {
|
|
1196
|
+
stopListening();
|
|
1197
|
+
if (state === decrypt_1.ContentDecryptorState.WaitingForAttachment) {
|
|
1198
|
+
contentDecryptor.attach();
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
}, { clearSignal: cancelSignal, emitCurrentValue: true });
|
|
1202
|
+
}
|
|
1203
|
+
else if (state === decrypt_1.ContentDecryptorState.ReadyForContent) {
|
|
1204
|
+
drmStatusRef.setValue({
|
|
1205
|
+
initializationState: { type: "initialized", value: null },
|
|
1206
|
+
drmSystemId: contentDecryptor.systemId,
|
|
1207
|
+
});
|
|
1208
|
+
contentDecryptor.removeEventListener("stateChange");
|
|
1209
|
+
}
|
|
1210
|
+
});
|
|
1211
|
+
contentDecryptor.addEventListener("error", function (error) {
|
|
1212
|
+
_this._onFatalError(error);
|
|
1213
|
+
});
|
|
1214
|
+
contentDecryptor.addEventListener("warning", function (error) {
|
|
1215
|
+
_this.trigger("warning", error);
|
|
1216
|
+
});
|
|
1217
|
+
lastContentProtection.onUpdate(function (data) {
|
|
1218
|
+
if (data === null) {
|
|
1219
|
+
return;
|
|
1220
|
+
}
|
|
1221
|
+
contentDecryptor.onInitializationData(data);
|
|
1222
|
+
}, { clearSignal: cancelSignal });
|
|
1223
|
+
cancelSignal.register(function () {
|
|
1224
|
+
contentDecryptor.dispose();
|
|
1225
|
+
});
|
|
1226
|
+
return { statusRef: drmStatusRef, contentDecryptor: contentDecryptor };
|
|
1227
|
+
};
|
|
1228
|
+
/**
|
|
1229
|
+
* Retrieves all unknown codecs from the current manifest, checks these unknown codecs
|
|
1230
|
+
* to determine if they are supported, updates the manifest with the support
|
|
1231
|
+
* status of these codecs, and forwards the list of supported codecs to core.
|
|
1232
|
+
* @param manifest
|
|
1233
|
+
*/
|
|
1234
|
+
MediaSourceContentInitializer.prototype._updateCodecSupport = function (manifest, mediaElement) {
|
|
1235
|
+
var _a, _b, _c, _d;
|
|
1236
|
+
try {
|
|
1237
|
+
var updatedCodecs = (0, update_manifest_codec_support_1.updateManifestCodecSupport)(manifest, (_b = (_a = this._currentContentInfo) === null || _a === void 0 ? void 0 : _a.contentDecryptor) !== null && _b !== void 0 ? _b : null, mediaElement, (_d = (_c = this._currentContentInfo) === null || _c === void 0 ? void 0 : _c.useMseInWorker) !== null && _d !== void 0 ? _d : false);
|
|
1238
|
+
if (updatedCodecs.length > 0) {
|
|
1239
|
+
this._settings.coreInterface.sendMessage({
|
|
1240
|
+
type: "codec-support-update" /* MainThreadMessageType.CodecSupportUpdate */,
|
|
1241
|
+
value: updatedCodecs,
|
|
1242
|
+
});
|
|
1243
|
+
// TODO what if one day the core updates codec support by itself?
|
|
1244
|
+
// We wouldn't know...
|
|
1245
|
+
this.trigger("codecSupportUpdate", null);
|
|
1246
|
+
}
|
|
1247
|
+
}
|
|
1248
|
+
catch (err) {
|
|
1249
|
+
this._onFatalError(err);
|
|
842
1250
|
}
|
|
843
1251
|
};
|
|
1252
|
+
MediaSourceContentInitializer.prototype._hasTextBufferFeature = function () {
|
|
1253
|
+
return ((this._settings.textTrackOptions.textTrackMode === "html" &&
|
|
1254
|
+
features_1.default.htmlTextDisplayer !== null) ||
|
|
1255
|
+
features_1.default.nativeTextDisplayer !== null);
|
|
1256
|
+
};
|
|
1257
|
+
MediaSourceContentInitializer.prototype._reload = function (mediaElement, textDisplayer, playbackObserver, mediaSourceStatus, position, autoPlay) {
|
|
1258
|
+
var _this = this;
|
|
1259
|
+
this._currentMediaSourceCanceller.cancel();
|
|
1260
|
+
this._currentMediaSourceCanceller = new task_canceller_1.default();
|
|
1261
|
+
this._currentMediaSourceCanceller.linkToSignal(this._initCanceller.signal);
|
|
1262
|
+
mediaSourceStatus.setValue(1 /* MediaSourceInitializationStatus.AttachNow */);
|
|
1263
|
+
this.trigger("reloadingMediaSource", { position: position, autoPlay: autoPlay });
|
|
1264
|
+
mediaSourceStatus.onUpdate(function (status, stopListeningMSStatusUpdates) {
|
|
1265
|
+
if (status !== 2 /* MediaSourceInitializationStatus.Attached */) {
|
|
1266
|
+
return;
|
|
1267
|
+
}
|
|
1268
|
+
stopListeningMSStatusUpdates();
|
|
1269
|
+
var corePlaybackObserver = _this._setUpModulesOnNewMediaSource({
|
|
1270
|
+
initialTime: position,
|
|
1271
|
+
autoPlay: autoPlay,
|
|
1272
|
+
mediaElement: mediaElement,
|
|
1273
|
+
textDisplayer: textDisplayer,
|
|
1274
|
+
playbackObserver: playbackObserver,
|
|
1275
|
+
}, _this._currentMediaSourceCanceller.signal);
|
|
1276
|
+
if (!_this._currentMediaSourceCanceller.isUsed() &&
|
|
1277
|
+
corePlaybackObserver !== null &&
|
|
1278
|
+
_this._currentContentInfo !== null) {
|
|
1279
|
+
var contentId_1 = _this._currentContentInfo.contentId;
|
|
1280
|
+
corePlaybackObserver.listen(function (obs) {
|
|
1281
|
+
_this._settings.coreInterface.sendMessage({
|
|
1282
|
+
type: "observation" /* MainThreadMessageType.PlaybackObservation */,
|
|
1283
|
+
contentId: contentId_1,
|
|
1284
|
+
value: (0, object_assign_1.default)(obs, {
|
|
1285
|
+
position: obs.position.serialize(),
|
|
1286
|
+
}),
|
|
1287
|
+
});
|
|
1288
|
+
}, {
|
|
1289
|
+
includeLastObservation: true,
|
|
1290
|
+
clearSignal: _this._currentMediaSourceCanceller.signal,
|
|
1291
|
+
});
|
|
1292
|
+
}
|
|
1293
|
+
}, {
|
|
1294
|
+
clearSignal: this._currentMediaSourceCanceller.signal,
|
|
1295
|
+
emitCurrentValue: true,
|
|
1296
|
+
});
|
|
1297
|
+
};
|
|
844
1298
|
/**
|
|
845
|
-
*
|
|
846
|
-
*
|
|
1299
|
+
* Start-up modules and mechanisms (initial seek, auto-play etc.) needed each
|
|
1300
|
+
* time a content is loaded AND re-loaded on a `HTMLMediaElement`, when the
|
|
1301
|
+
* manifest is known.
|
|
847
1302
|
*
|
|
848
|
-
*
|
|
849
|
-
*
|
|
1303
|
+
* Note that this does not include reacting to incoming core messages nor
|
|
1304
|
+
* sending them, those actions have to be handled separately.
|
|
850
1305
|
*
|
|
851
|
-
*
|
|
852
|
-
* - emit "stalled" events when stalling situations cannot be prevented,
|
|
853
|
-
* - emit "unstalled" events when we could get out of one,
|
|
854
|
-
* - emit "warning" on various rebuffering-related minor issues
|
|
855
|
-
* like discontinuity skipping.
|
|
856
|
-
* @param {Object} playbackObserver
|
|
857
|
-
* @param {Object} manifest
|
|
858
|
-
* @param {Object} speed
|
|
1306
|
+
* @param {Object} parameters
|
|
859
1307
|
* @param {Object} cancelSignal
|
|
860
|
-
* @returns {Object}
|
|
1308
|
+
* @returns {Object|null} - Playback Observer created for this content. `null`
|
|
1309
|
+
* only if playback initialization failed (most likely because it has been
|
|
1310
|
+
* cancelled).
|
|
861
1311
|
*/
|
|
862
|
-
MediaSourceContentInitializer.prototype.
|
|
1312
|
+
MediaSourceContentInitializer.prototype._setUpModulesOnNewMediaSource = function (parameters, cancelSignal) {
|
|
863
1313
|
var _this = this;
|
|
1314
|
+
if (cancelSignal.isCancelled()) {
|
|
1315
|
+
return null;
|
|
1316
|
+
}
|
|
1317
|
+
if (this._currentContentInfo === null) {
|
|
1318
|
+
log_1.default.error("Init", "Setting up modules without a contentId");
|
|
1319
|
+
return null;
|
|
1320
|
+
}
|
|
1321
|
+
if (this._currentContentInfo.manifest === null) {
|
|
1322
|
+
log_1.default.error("Init", "Setting up modules without a loaded Manifest");
|
|
1323
|
+
return null;
|
|
1324
|
+
}
|
|
1325
|
+
var _a = this._currentContentInfo, manifest = _a.manifest, mediaSourceInfo = _a.mediaSourceInfo;
|
|
1326
|
+
var speed = this._settings.speed;
|
|
1327
|
+
var initialTime = parameters.initialTime, autoPlay = parameters.autoPlay, mediaElement = parameters.mediaElement, textDisplayer = parameters.textDisplayer, playbackObserver = parameters.playbackObserver;
|
|
1328
|
+
this._currentContentInfo.initialTime = initialTime;
|
|
1329
|
+
this._currentContentInfo.autoPlay = autoPlay;
|
|
1330
|
+
var _b = (0, initial_seek_and_play_1.default)({
|
|
1331
|
+
mediaElement: mediaElement,
|
|
1332
|
+
playbackObserver: playbackObserver,
|
|
1333
|
+
startTime: initialTime,
|
|
1334
|
+
mustAutoPlay: autoPlay,
|
|
1335
|
+
onWarning: function (err) { return _this.trigger("warning", err); },
|
|
1336
|
+
isDirectfile: false,
|
|
1337
|
+
}, cancelSignal), autoPlayResult = _b.autoPlayResult, initialPlayPerformed = _b.initialPlayPerformed;
|
|
1338
|
+
this._currentContentInfo.initialPlayPerformed = initialPlayPerformed;
|
|
1339
|
+
var corePlaybackObserver = (0, create_core_playback_observer_1.default)(playbackObserver, {
|
|
1340
|
+
autoPlay: autoPlay,
|
|
1341
|
+
initialPlayPerformed: initialPlayPerformed,
|
|
1342
|
+
manifest: manifest,
|
|
1343
|
+
mediaSource: (mediaSourceInfo === null || mediaSourceInfo === void 0 ? void 0 : mediaSourceInfo.type) === "main" ? mediaSourceInfo.mediaSource : null,
|
|
1344
|
+
speed: speed,
|
|
1345
|
+
textDisplayer: textDisplayer,
|
|
1346
|
+
}, cancelSignal);
|
|
1347
|
+
if (cancelSignal.isCancelled()) {
|
|
1348
|
+
return null;
|
|
1349
|
+
}
|
|
1350
|
+
/**
|
|
1351
|
+
* Class trying to avoid various stalling situations, emitting "stalled"
|
|
1352
|
+
* events when it cannot, as well as "unstalled" events when it get out of one.
|
|
1353
|
+
*/
|
|
864
1354
|
var rebufferingController = new rebuffering_controller_1.default(playbackObserver, manifest, speed);
|
|
865
|
-
// Bubble-up events
|
|
866
1355
|
rebufferingController.addEventListener("stalled", function (evt) {
|
|
867
1356
|
return _this.trigger("stalled", evt);
|
|
868
1357
|
});
|
|
@@ -872,271 +1361,355 @@ var MediaSourceContentInitializer = /** @class */ (function (_super) {
|
|
|
872
1361
|
rebufferingController.addEventListener("warning", function (err) {
|
|
873
1362
|
return _this.trigger("warning", err);
|
|
874
1363
|
});
|
|
875
|
-
cancelSignal.register(function () {
|
|
1364
|
+
cancelSignal.register(function () {
|
|
1365
|
+
rebufferingController.destroy();
|
|
1366
|
+
});
|
|
876
1367
|
rebufferingController.start();
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
codec: codecToCheck.codec,
|
|
895
|
-
supported: false,
|
|
896
|
-
supportedIfEncrypted: false,
|
|
897
|
-
};
|
|
898
|
-
}
|
|
899
|
-
/**
|
|
900
|
-
* `true` if the codec is supported when encrypted, `false` if it is not
|
|
901
|
-
* supported, or `undefined` if we cannot obtain that information.
|
|
902
|
-
*/
|
|
903
|
-
var supportedIfEncrypted;
|
|
904
|
-
if (_this._decryptionCapabilities.status === "uninitialized") {
|
|
905
|
-
supportedIfEncrypted = undefined;
|
|
906
|
-
}
|
|
907
|
-
else if (_this._decryptionCapabilities.status === "disabled") {
|
|
908
|
-
// It's ambiguous here, but let's say that no ContentDecryptor means that
|
|
909
|
-
// the codec is supported by it.
|
|
910
|
-
supportedIfEncrypted = true;
|
|
1368
|
+
this._currentContentInfo.rebufferingController = rebufferingController;
|
|
1369
|
+
var currentContentInfo = this._currentContentInfo;
|
|
1370
|
+
initialPlayPerformed.onUpdate(function (isPerformed, stopListening) {
|
|
1371
|
+
if (isPerformed) {
|
|
1372
|
+
stopListening();
|
|
1373
|
+
var streamEventsEmitter_1 = new stream_events_emitter_1.default(manifest, playbackObserver);
|
|
1374
|
+
currentContentInfo.streamEventsEmitter = streamEventsEmitter_1;
|
|
1375
|
+
streamEventsEmitter_1.addEventListener("event", function (payload) {
|
|
1376
|
+
_this.trigger("streamEvent", payload);
|
|
1377
|
+
}, cancelSignal);
|
|
1378
|
+
streamEventsEmitter_1.addEventListener("eventSkip", function (payload) {
|
|
1379
|
+
_this.trigger("streamEventSkip", payload);
|
|
1380
|
+
}, cancelSignal);
|
|
1381
|
+
streamEventsEmitter_1.start();
|
|
1382
|
+
cancelSignal.register(function () {
|
|
1383
|
+
streamEventsEmitter_1.stop();
|
|
1384
|
+
});
|
|
911
1385
|
}
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
1386
|
+
}, { clearSignal: cancelSignal, emitCurrentValue: true });
|
|
1387
|
+
var _getSegmentSinkMetrics = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1388
|
+
var requestId;
|
|
1389
|
+
var _this = this;
|
|
1390
|
+
return __generator(this, function (_a) {
|
|
1391
|
+
this._awaitingRequests.nextRequestId++;
|
|
1392
|
+
requestId = this._awaitingRequests.nextRequestId;
|
|
1393
|
+
this._settings.coreInterface.sendMessage({
|
|
1394
|
+
type: "pull-segment-sink-store-infos" /* MainThreadMessageType.PullSegmentSinkStoreInfos */,
|
|
1395
|
+
value: { requestId: requestId },
|
|
1396
|
+
});
|
|
1397
|
+
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
1398
|
+
var rejectFn = function (err) {
|
|
1399
|
+
cancelSignal.deregister(rejectFn);
|
|
1400
|
+
_this._awaitingRequests.pendingSinkMetrics.delete(requestId);
|
|
1401
|
+
return reject(err);
|
|
1402
|
+
};
|
|
1403
|
+
_this._awaitingRequests.pendingSinkMetrics.set(requestId, {
|
|
1404
|
+
resolve: function (value) {
|
|
1405
|
+
cancelSignal.deregister(rejectFn);
|
|
1406
|
+
_this._awaitingRequests.pendingSinkMetrics.delete(requestId);
|
|
1407
|
+
resolve(value);
|
|
1408
|
+
},
|
|
1409
|
+
});
|
|
1410
|
+
cancelSignal.register(rejectFn);
|
|
1411
|
+
})];
|
|
1412
|
+
});
|
|
1413
|
+
}); };
|
|
1414
|
+
var _getThumbnailsData = function (periodId, thumbnailTrackId, time) { return __awaiter(_this, void 0, void 0, function () {
|
|
1415
|
+
var requestId;
|
|
1416
|
+
var _this = this;
|
|
1417
|
+
return __generator(this, function (_a) {
|
|
1418
|
+
if (this._currentContentInfo === null) {
|
|
1419
|
+
return [2 /*return*/, Promise.reject(new Error("Cannot fetch thumbnails: No content loaded."))];
|
|
1420
|
+
}
|
|
1421
|
+
this._awaitingRequests.nextRequestId++;
|
|
1422
|
+
requestId = this._awaitingRequests.nextRequestId;
|
|
1423
|
+
this._settings.coreInterface.sendMessage({
|
|
1424
|
+
type: "thumbnail-request" /* MainThreadMessageType.ThumbnailDataRequest */,
|
|
1425
|
+
contentId: this._currentContentInfo.contentId,
|
|
1426
|
+
value: { requestId: requestId, periodId: periodId, thumbnailTrackId: thumbnailTrackId, time: time },
|
|
1427
|
+
});
|
|
1428
|
+
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
1429
|
+
var rejectFn = function (err) {
|
|
1430
|
+
cleanUp();
|
|
1431
|
+
reject(err);
|
|
1432
|
+
};
|
|
1433
|
+
var cleanUp = function () {
|
|
1434
|
+
cancelSignal.deregister(rejectFn);
|
|
1435
|
+
_this._awaitingRequests.pendingThumbnailFetching.delete(requestId);
|
|
1436
|
+
};
|
|
1437
|
+
_this._awaitingRequests.pendingThumbnailFetching.set(requestId, {
|
|
1438
|
+
resolve: function (value) {
|
|
1439
|
+
cleanUp();
|
|
1440
|
+
resolve(value);
|
|
1441
|
+
},
|
|
1442
|
+
reject: function (value) {
|
|
1443
|
+
cleanUp();
|
|
1444
|
+
reject(value);
|
|
1445
|
+
},
|
|
1446
|
+
});
|
|
1447
|
+
cancelSignal.register(rejectFn);
|
|
1448
|
+
})];
|
|
1449
|
+
});
|
|
1450
|
+
}); };
|
|
1451
|
+
/**
|
|
1452
|
+
* Emit a "loaded" events once the initial play has been performed and the
|
|
1453
|
+
* media can begin playback.
|
|
1454
|
+
* Also emits warning events if issues arise when doing so.
|
|
1455
|
+
*/
|
|
1456
|
+
autoPlayResult
|
|
1457
|
+
.then(function () {
|
|
1458
|
+
(0, get_loaded_reference_1.default)(playbackObserver, false, cancelSignal).onUpdate(function (isLoaded, stopListening) {
|
|
1459
|
+
if (isLoaded) {
|
|
1460
|
+
stopListening();
|
|
1461
|
+
_this.trigger("loaded", {
|
|
1462
|
+
getSegmentSinkMetrics: _getSegmentSinkMetrics,
|
|
1463
|
+
getThumbnailData: _getThumbnailsData,
|
|
1464
|
+
});
|
|
919
1465
|
}
|
|
1466
|
+
}, { emitCurrentValue: true, clearSignal: cancelSignal });
|
|
1467
|
+
})
|
|
1468
|
+
.catch(function (err) {
|
|
1469
|
+
if (cancelSignal.isCancelled()) {
|
|
1470
|
+
return;
|
|
920
1471
|
}
|
|
921
|
-
|
|
922
|
-
mimeType: codecToCheck.mimeType,
|
|
923
|
-
codec: codecToCheck.codec,
|
|
924
|
-
supported: isSupported,
|
|
925
|
-
supportedIfEncrypted: supportedIfEncrypted,
|
|
926
|
-
};
|
|
1472
|
+
_this._onFatalError(err);
|
|
927
1473
|
});
|
|
928
|
-
return
|
|
1474
|
+
return corePlaybackObserver;
|
|
929
1475
|
};
|
|
930
1476
|
/**
|
|
931
|
-
*
|
|
1477
|
+
* Initialize content playback if and only if those conditions are filled:
|
|
1478
|
+
* - The Manifest is fetched and stored in `this._currentContentInfo`.
|
|
1479
|
+
* - `drmInitializationStatus` indicates that DRM matters are initialized.
|
|
1480
|
+
* - `mediaSourceStatus` indicates that the MediaSource is attached to the
|
|
1481
|
+
* `mediaElement`.
|
|
1482
|
+
*
|
|
1483
|
+
* In other cases, this method will do nothing.
|
|
1484
|
+
*
|
|
1485
|
+
* To call when any of those conditions might become `true`, to start-up
|
|
1486
|
+
* playback.
|
|
932
1487
|
*
|
|
933
|
-
*
|
|
934
|
-
*
|
|
935
|
-
*
|
|
1488
|
+
* @param {Object} parameters
|
|
1489
|
+
* @returns {boolean} - Returns `true` if all conditions where met for
|
|
1490
|
+
* playback start.
|
|
936
1491
|
*/
|
|
937
|
-
MediaSourceContentInitializer.prototype.
|
|
938
|
-
var
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
1492
|
+
MediaSourceContentInitializer.prototype._startPlaybackIfReady = function (parameters) {
|
|
1493
|
+
var _this = this;
|
|
1494
|
+
if (this._currentContentInfo === null || this._currentContentInfo.manifest === null) {
|
|
1495
|
+
return false;
|
|
1496
|
+
}
|
|
1497
|
+
var drmInitStatus = parameters.drmInitializationStatus.getValue();
|
|
1498
|
+
if (drmInitStatus.initializationState.type !== "initialized") {
|
|
1499
|
+
return false;
|
|
1500
|
+
}
|
|
1501
|
+
var msInitStatus = parameters.mediaSourceStatus.getValue();
|
|
1502
|
+
if (msInitStatus !== 2 /* MediaSourceInitializationStatus.Attached */) {
|
|
1503
|
+
return false;
|
|
1504
|
+
}
|
|
1505
|
+
var _a = this._currentContentInfo, contentId = _a.contentId, manifest = _a.manifest;
|
|
1506
|
+
log_1.default.debug("Init", "Calculating initial time");
|
|
1507
|
+
var initialTime = (0, get_initial_time_1.default)(manifest, this._settings.lowLatencyMode, this._settings.startAt);
|
|
1508
|
+
log_1.default.debug("Init", "Initial time calculated", { initialTime: initialTime });
|
|
1509
|
+
var _b = this._settings.bufferOptions, enableFastSwitching = _b.enableFastSwitching, onCodecSwitch = _b.onCodecSwitch;
|
|
1510
|
+
var corePlaybackObserver = this._setUpModulesOnNewMediaSource({
|
|
1511
|
+
initialTime: initialTime,
|
|
1512
|
+
autoPlay: this._settings.autoPlay,
|
|
1513
|
+
mediaElement: parameters.mediaElement,
|
|
1514
|
+
textDisplayer: parameters.textDisplayer,
|
|
1515
|
+
playbackObserver: parameters.playbackObserver,
|
|
1516
|
+
}, this._currentMediaSourceCanceller.signal);
|
|
1517
|
+
if (this._currentMediaSourceCanceller.isUsed() || corePlaybackObserver === null) {
|
|
1518
|
+
return true;
|
|
947
1519
|
}
|
|
1520
|
+
var initialObservation = corePlaybackObserver.getReference().getValue();
|
|
1521
|
+
var sentInitialObservation = (0, object_assign_1.default)(initialObservation, {
|
|
1522
|
+
position: initialObservation.position.serialize(),
|
|
1523
|
+
});
|
|
1524
|
+
this._settings.coreInterface.sendMessage({
|
|
1525
|
+
type: "start" /* MainThreadMessageType.StartPreparedContent */,
|
|
1526
|
+
contentId: contentId,
|
|
1527
|
+
value: {
|
|
1528
|
+
initialTime: initialTime,
|
|
1529
|
+
initialObservation: sentInitialObservation,
|
|
1530
|
+
drmSystemId: drmInitStatus.drmSystemId,
|
|
1531
|
+
enableFastSwitching: enableFastSwitching,
|
|
1532
|
+
onCodecSwitch: onCodecSwitch,
|
|
1533
|
+
},
|
|
1534
|
+
});
|
|
1535
|
+
corePlaybackObserver.listen(function (obs) {
|
|
1536
|
+
_this._settings.coreInterface.sendMessage({
|
|
1537
|
+
type: "observation" /* MainThreadMessageType.PlaybackObservation */,
|
|
1538
|
+
contentId: contentId,
|
|
1539
|
+
value: (0, object_assign_1.default)(obs, { position: obs.position.serialize() }),
|
|
1540
|
+
});
|
|
1541
|
+
}, {
|
|
1542
|
+
includeLastObservation: false,
|
|
1543
|
+
clearSignal: this._currentMediaSourceCanceller.signal,
|
|
1544
|
+
});
|
|
1545
|
+
this.trigger("manifestReady", manifest);
|
|
1546
|
+
return true;
|
|
948
1547
|
};
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
/**
|
|
962
|
-
* Change the decipherability of Representations which have their key id in one
|
|
963
|
-
* of the given Arrays:
|
|
964
|
-
*
|
|
965
|
-
* - Those who have a key id listed in `whitelistedKeyIds` will have their
|
|
966
|
-
* decipherability updated to `true`
|
|
967
|
-
*
|
|
968
|
-
* - Those who have a key id listed in `blacklistedKeyIds` will have their
|
|
969
|
-
* decipherability updated to `false`
|
|
970
|
-
*
|
|
971
|
-
* - Those who have a key id listed in `delistedKeyIds` will have their
|
|
972
|
-
* decipherability updated to `undefined`.
|
|
973
|
-
*
|
|
974
|
-
* @param {Object} manifest
|
|
975
|
-
* @param {Array.<Uint8Array>} whitelistedKeyIds
|
|
976
|
-
* @param {Array.<Uint8Array>} blacklistedKeyIds
|
|
977
|
-
* @param {Array.<Uint8Array>} delistedKeyIds
|
|
978
|
-
*/
|
|
979
|
-
function updateKeyIdsDecipherabilityOnManifest(manifest, whitelistedKeyIds, blacklistedKeyIds, delistedKeyIds) {
|
|
980
|
-
manifest.updateRepresentationsDeciperability(function (ctx) {
|
|
981
|
-
var e_2, _a, e_3, _b, e_4, _c, e_5, _d;
|
|
982
|
-
var representation = ctx.representation;
|
|
983
|
-
if (representation.contentProtections === undefined) {
|
|
984
|
-
return representation.decipherable;
|
|
1548
|
+
/**
|
|
1549
|
+
* Handles core messages asking to create a MediaSource.
|
|
1550
|
+
* @param {Object} msg - The core's message received.
|
|
1551
|
+
* @param {HTMLMediaElement} mediaElement - HTMLMediaElement on which the
|
|
1552
|
+
* content plays.
|
|
1553
|
+
* @param {Object} coreInterface - The interface to the core.
|
|
1554
|
+
*/
|
|
1555
|
+
MediaSourceContentInitializer.prototype._onCreateMediaSourceMessage = function (msg, mediaElement, mediaSourceStatus, coreInterface) {
|
|
1556
|
+
var _this = this;
|
|
1557
|
+
var _a;
|
|
1558
|
+
if (((_a = this._currentContentInfo) === null || _a === void 0 ? void 0 : _a.contentId) !== msg.contentId) {
|
|
1559
|
+
log_1.default.info("Init", "Ignoring MediaSource attachment due to wrong `contentId`");
|
|
985
1560
|
}
|
|
986
|
-
|
|
987
|
-
|
|
1561
|
+
else {
|
|
1562
|
+
var mediaSourceId_1 = msg.mediaSourceId;
|
|
988
1563
|
try {
|
|
989
|
-
|
|
990
|
-
var
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
if ((0, are_arrays_of_numbers_equal_1.default)(blacklistedKeyId, elt)) {
|
|
995
|
-
return false;
|
|
996
|
-
}
|
|
997
|
-
}
|
|
998
|
-
}
|
|
999
|
-
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
1000
|
-
finally {
|
|
1001
|
-
try {
|
|
1002
|
-
if (blacklistedKeyIds_1_1 && !blacklistedKeyIds_1_1.done && (_b = blacklistedKeyIds_1.return)) _b.call(blacklistedKeyIds_1);
|
|
1003
|
-
}
|
|
1004
|
-
finally { if (e_3) throw e_3.error; }
|
|
1005
|
-
}
|
|
1006
|
-
try {
|
|
1007
|
-
for (var whitelistedKeyIds_1 = (e_4 = void 0, __values(whitelistedKeyIds)), whitelistedKeyIds_1_1 = whitelistedKeyIds_1.next(); !whitelistedKeyIds_1_1.done; whitelistedKeyIds_1_1 = whitelistedKeyIds_1.next()) {
|
|
1008
|
-
var whitelistedKeyId = whitelistedKeyIds_1_1.value;
|
|
1009
|
-
if ((0, are_arrays_of_numbers_equal_1.default)(whitelistedKeyId, elt)) {
|
|
1010
|
-
return true;
|
|
1011
|
-
}
|
|
1012
|
-
}
|
|
1564
|
+
mediaSourceStatus.onUpdate(function (currStatus, stopListening) {
|
|
1565
|
+
var _a;
|
|
1566
|
+
if (_this._currentContentInfo === null) {
|
|
1567
|
+
stopListening();
|
|
1568
|
+
return;
|
|
1013
1569
|
}
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1570
|
+
if (currStatus === 1 /* MediaSourceInitializationStatus.AttachNow */) {
|
|
1571
|
+
stopListening();
|
|
1572
|
+
var mediaSource_3 = new main_media_source_interface_1.default(mediaSourceId_1, "FORCED_MEDIA_SOURCE" in mediaElement
|
|
1573
|
+
? mediaElement.FORCED_MEDIA_SOURCE
|
|
1574
|
+
: undefined);
|
|
1575
|
+
if (((_a = _this._currentContentInfo.mediaSourceInfo) === null || _a === void 0 ? void 0 : _a.type) === "main") {
|
|
1576
|
+
_this._currentContentInfo.mediaSourceInfo.mediaSource.dispose();
|
|
1018
1577
|
}
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1578
|
+
_this._currentContentInfo.mediaSourceInfo = {
|
|
1579
|
+
type: "main",
|
|
1580
|
+
mediaSource: mediaSource_3,
|
|
1581
|
+
};
|
|
1582
|
+
mediaSource_3.addEventListener("mediaSourceOpen", function () {
|
|
1583
|
+
coreInterface.sendMessage({
|
|
1584
|
+
type: "media-source-ready-state-change" /* MainThreadMessageType.MediaSourceReadyStateChange */,
|
|
1585
|
+
mediaSourceId: mediaSourceId_1,
|
|
1586
|
+
value: "open",
|
|
1587
|
+
});
|
|
1588
|
+
});
|
|
1589
|
+
mediaSource_3.addEventListener("mediaSourceEnded", function () {
|
|
1590
|
+
coreInterface.sendMessage({
|
|
1591
|
+
type: "media-source-ready-state-change" /* MainThreadMessageType.MediaSourceReadyStateChange */,
|
|
1592
|
+
mediaSourceId: mediaSourceId_1,
|
|
1593
|
+
value: "ended",
|
|
1594
|
+
});
|
|
1595
|
+
});
|
|
1596
|
+
mediaSource_3.addEventListener("mediaSourceClose", function () {
|
|
1597
|
+
coreInterface.sendMessage({
|
|
1598
|
+
type: "media-source-ready-state-change" /* MainThreadMessageType.MediaSourceReadyStateChange */,
|
|
1599
|
+
mediaSourceId: mediaSourceId_1,
|
|
1600
|
+
value: "closed",
|
|
1601
|
+
});
|
|
1602
|
+
});
|
|
1603
|
+
var url_1 = null;
|
|
1604
|
+
if (mediaSource_3.handle.type === "handle") {
|
|
1605
|
+
mediaElement.srcObject = mediaSource_3.handle.value;
|
|
1027
1606
|
}
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
try {
|
|
1032
|
-
if (delistedKeyIds_1_1 && !delistedKeyIds_1_1.done && (_d = delistedKeyIds_1.return)) _d.call(delistedKeyIds_1);
|
|
1607
|
+
else {
|
|
1608
|
+
url_1 = URL.createObjectURL(mediaSource_3.handle.value);
|
|
1609
|
+
mediaElement.src = url_1;
|
|
1033
1610
|
}
|
|
1034
|
-
|
|
1611
|
+
_this._currentMediaSourceCanceller.signal.register(function () {
|
|
1612
|
+
mediaSource_3.dispose();
|
|
1613
|
+
(0, create_media_source_1.resetMediaElement)(mediaElement, url_1);
|
|
1614
|
+
});
|
|
1615
|
+
mediaSourceStatus.setValue(2 /* MediaSourceInitializationStatus.Attached */);
|
|
1616
|
+
(0, create_media_source_1.disableRemotePlaybackOnManagedMediaSource)(mediaElement, _this._currentMediaSourceCanceller.signal);
|
|
1035
1617
|
}
|
|
1036
|
-
}
|
|
1618
|
+
}, {
|
|
1619
|
+
emitCurrentValue: true,
|
|
1620
|
+
clearSignal: this._currentMediaSourceCanceller.signal,
|
|
1621
|
+
});
|
|
1037
1622
|
}
|
|
1038
|
-
catch (
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
if (contentKIDs_1_1 && !contentKIDs_1_1.done && (_a = contentKIDs_1.return)) _a.call(contentKIDs_1);
|
|
1042
|
-
}
|
|
1043
|
-
finally { if (e_2) throw e_2.error; }
|
|
1623
|
+
catch (_err) {
|
|
1624
|
+
var error = new errors_1.OtherError("NONE", "Unknown error when creating the MediaSource");
|
|
1625
|
+
this._onFatalError(error);
|
|
1044
1626
|
}
|
|
1045
1627
|
}
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
}
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1628
|
+
};
|
|
1629
|
+
return MediaSourceContentInitializer;
|
|
1630
|
+
}(types_1.ContentInitializer));
|
|
1631
|
+
exports.default = MediaSourceContentInitializer;
|
|
1632
|
+
function bindNumberReferencesToCore(coreInterface, cancellationSignal) {
|
|
1633
|
+
var e_2, _a;
|
|
1634
|
+
var refs = [];
|
|
1635
|
+
for (var _i = 2; _i < arguments.length; _i++) {
|
|
1636
|
+
refs[_i - 2] = arguments[_i];
|
|
1637
|
+
}
|
|
1638
|
+
var _loop_1 = function (ref) {
|
|
1639
|
+
ref[0].onUpdate(function (newVal) {
|
|
1640
|
+
// NOTE: The TypeScript checks have already been made by this function's
|
|
1641
|
+
// overload, but the body here is not aware of that.
|
|
1642
|
+
coreInterface.sendMessage({
|
|
1643
|
+
type: "ref-update" /* MainThreadMessageType.ReferenceUpdate */,
|
|
1644
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any
|
|
1645
|
+
value: { name: ref[1], newVal: newVal },
|
|
1646
|
+
});
|
|
1647
|
+
}, { clearSignal: cancellationSignal, emitCurrentValue: true });
|
|
1648
|
+
};
|
|
1649
|
+
try {
|
|
1650
|
+
for (var refs_1 = __values(refs), refs_1_1 = refs_1.next(); !refs_1_1.done; refs_1_1 = refs_1.next()) {
|
|
1651
|
+
var ref = refs_1_1.value;
|
|
1652
|
+
_loop_1(ref);
|
|
1062
1653
|
}
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
var containedInitData = initData.values
|
|
1067
|
-
.getFormattedValues()
|
|
1068
|
-
.every(function (undecipherableVal) {
|
|
1069
|
-
return protection.values.some(function (currVal) {
|
|
1070
|
-
return ((undecipherableVal.systemId === undefined ||
|
|
1071
|
-
currVal.systemId === undecipherableVal.systemId) &&
|
|
1072
|
-
(0, are_arrays_of_numbers_equal_1.default)(currVal.data, undecipherableVal.data));
|
|
1073
|
-
});
|
|
1074
|
-
});
|
|
1075
|
-
if (containedInitData) {
|
|
1076
|
-
return { value: false };
|
|
1077
|
-
}
|
|
1078
|
-
}
|
|
1079
|
-
};
|
|
1654
|
+
}
|
|
1655
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
1656
|
+
finally {
|
|
1080
1657
|
try {
|
|
1081
|
-
|
|
1082
|
-
var protection = segmentProtections_1_1.value;
|
|
1083
|
-
var state_1 = _loop_1(protection);
|
|
1084
|
-
if (typeof state_1 === "object")
|
|
1085
|
-
return state_1.value;
|
|
1086
|
-
}
|
|
1658
|
+
if (refs_1_1 && !refs_1_1.done && (_a = refs_1.return)) _a.call(refs_1);
|
|
1087
1659
|
}
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1660
|
+
finally { if (e_2) throw e_2.error; }
|
|
1661
|
+
}
|
|
1662
|
+
}
|
|
1663
|
+
function formatCoreError(sentError) {
|
|
1664
|
+
switch (sentError.name) {
|
|
1665
|
+
case "NetworkError":
|
|
1666
|
+
return new errors_1.NetworkError(sentError.code, new request_1.RequestError(sentError.baseError.url, sentError.baseError.status, sentError.baseError.type));
|
|
1667
|
+
case "MediaError":
|
|
1668
|
+
// eslint-disable-next-line
|
|
1669
|
+
return new errors_1.MediaError(sentError.code, sentError.reason, {
|
|
1670
|
+
tracks: sentError.tracks,
|
|
1671
|
+
});
|
|
1672
|
+
case "EncryptedMediaError":
|
|
1673
|
+
// We assume that everything have already been checked Worker-side here
|
|
1674
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
1675
|
+
return new errors_1.EncryptedMediaError(sentError.code, sentError.reason, {
|
|
1676
|
+
keyStatuses: sentError.keyStatuses,
|
|
1677
|
+
keySystemConfiguration: sentError.keySystemConfiguration,
|
|
1678
|
+
keySystem: sentError.keySystem,
|
|
1679
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1680
|
+
});
|
|
1681
|
+
case "OtherError":
|
|
1682
|
+
return new errors_1.OtherError(sentError.code, sentError.reason);
|
|
1683
|
+
}
|
|
1684
|
+
}
|
|
1685
|
+
function formatSourceBufferError(error) {
|
|
1686
|
+
if (error instanceof errors_1.SourceBufferError) {
|
|
1687
|
+
return error;
|
|
1688
|
+
}
|
|
1689
|
+
else if (error instanceof Error) {
|
|
1690
|
+
return new errors_1.SourceBufferError(error.name, error.message, error.name === "QuotaExceededError");
|
|
1691
|
+
}
|
|
1692
|
+
else {
|
|
1693
|
+
return new errors_1.SourceBufferError("Error", "Unknown SourceBufferError Error", false);
|
|
1694
|
+
}
|
|
1097
1695
|
}
|
|
1098
1696
|
/**
|
|
1099
|
-
*
|
|
1100
|
-
*
|
|
1101
|
-
*
|
|
1102
|
-
*
|
|
1103
|
-
*
|
|
1104
|
-
*
|
|
1105
|
-
*
|
|
1106
|
-
* @param {
|
|
1107
|
-
*
|
|
1108
|
-
* @param {Boolean} param.enableRepresentationAvoidance - If `true`, this
|
|
1109
|
-
* function is authorized to mark `Representation` as "to avoid" if the
|
|
1110
|
-
* `IFreezeResolution` object suggest it.
|
|
1697
|
+
* The Core might send back logs. In that situation, the message might be
|
|
1698
|
+
* formatted slightly differently to be able to cross threads (so a
|
|
1699
|
+
* serializable format has to be sent).
|
|
1700
|
+
*
|
|
1701
|
+
* This function translates that Core format to what's expected by the
|
|
1702
|
+
* logger.
|
|
1703
|
+
*
|
|
1704
|
+
* @param {*} arg
|
|
1705
|
+
* @returns {*}
|
|
1111
1706
|
*/
|
|
1112
|
-
function
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
break;
|
|
1119
|
-
}
|
|
1120
|
-
case "flush": {
|
|
1121
|
-
log_1.default.info("Init", "Flushing buffer due to freeze");
|
|
1122
|
-
var observation = playbackObserver.getReference().getValue();
|
|
1123
|
-
var currentTime = observation.position.isAwaitingFuturePosition()
|
|
1124
|
-
? observation.position.getWanted()
|
|
1125
|
-
: playbackObserver.getCurrentTime();
|
|
1126
|
-
var relativeResumingPosition = freezeResolution.value.relativeSeek;
|
|
1127
|
-
var wantedSeekingTime = currentTime + relativeResumingPosition;
|
|
1128
|
-
playbackObserver.setCurrentTime(wantedSeekingTime);
|
|
1129
|
-
break;
|
|
1130
|
-
}
|
|
1131
|
-
case "avoid-representations": {
|
|
1132
|
-
var contents = freezeResolution.value;
|
|
1133
|
-
if (enableRepresentationAvoidance) {
|
|
1134
|
-
manifest.addRepresentationsToAvoid(contents);
|
|
1135
|
-
}
|
|
1136
|
-
triggerReload();
|
|
1137
|
-
break;
|
|
1138
|
-
}
|
|
1139
|
-
default:
|
|
1140
|
-
(0, assert_1.assertUnreachable)(freezeResolution);
|
|
1707
|
+
function formatSentLogObject(arg) {
|
|
1708
|
+
if (typeof arg !== "object") {
|
|
1709
|
+
return arg;
|
|
1710
|
+
}
|
|
1711
|
+
if ((arg === null || arg === void 0 ? void 0 : arg.isSerializedError) === true) {
|
|
1712
|
+
return formatCoreError(arg);
|
|
1141
1713
|
}
|
|
1714
|
+
return arg;
|
|
1142
1715
|
}
|