rx-player 4.0.0-beta.0 → 4.0.0-beta.2
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/.eslintrc.js +8 -0
- package/CHANGELOG.md +93 -0
- package/CONTRIBUTING.md +48 -168
- package/FILES.md +40 -92
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/browser_detection.d.ts +25 -12
- package/dist/_esm5.processed/compat/browser_detection.js +85 -38
- package/dist/_esm5.processed/compat/can_reuse_media_keys.js +2 -2
- package/dist/_esm5.processed/compat/eme/close_session.js +2 -2
- package/dist/_esm5.processed/compat/eme/load_session.js +1 -1
- package/dist/_esm5.processed/compat/event_listeners.js +1 -1
- package/dist/_esm5.processed/compat/has_issues_with_high_media_source_duration.d.ts +21 -0
- package/dist/_esm5.processed/compat/has_issues_with_high_media_source_duration.js +26 -0
- package/dist/_esm5.processed/config.d.ts +4 -0
- package/dist/_esm5.processed/core/adaptive/adaptive_representation_selector.js +9 -6
- package/dist/_esm5.processed/core/adaptive/buffer_based_chooser.d.ts +18 -1
- package/dist/_esm5.processed/core/adaptive/buffer_based_chooser.js +106 -25
- package/dist/_esm5.processed/core/adaptive/guess_based_chooser.js +6 -6
- package/dist/_esm5.processed/core/adaptive/network_analyzer.js +8 -5
- package/dist/_esm5.processed/core/adaptive/utils/representation_score_calculator.d.ts +19 -1
- package/dist/_esm5.processed/core/adaptive/utils/representation_score_calculator.js +1 -1
- package/dist/_esm5.processed/core/api/debug/buffer_graph.d.ts +28 -0
- package/dist/_esm5.processed/core/api/debug/buffer_graph.js +175 -0
- package/dist/_esm5.processed/core/api/debug/buffer_size_graph.d.ts +10 -0
- package/dist/_esm5.processed/core/api/debug/buffer_size_graph.js +104 -0
- package/dist/_esm5.processed/core/api/debug/constants.d.ts +2 -0
- package/dist/_esm5.processed/core/api/debug/constants.js +2 -0
- package/dist/_esm5.processed/core/api/debug/index.d.ts +2 -0
- package/dist/_esm5.processed/core/api/debug/index.js +2 -0
- package/dist/_esm5.processed/core/api/debug/modules/general_info.d.ts +3 -0
- package/dist/_esm5.processed/core/api/debug/modules/general_info.js +180 -0
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.d.ts +4 -0
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_content.js +121 -0
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.d.ts +3 -0
- package/dist/_esm5.processed/core/api/debug/modules/segment_buffer_size.js +35 -0
- package/dist/_esm5.processed/core/api/debug/render.d.ts +3 -0
- package/dist/_esm5.processed/core/api/debug/render.js +32 -0
- package/dist/_esm5.processed/core/api/debug/utils.d.ts +39 -0
- package/dist/_esm5.processed/core/api/debug/utils.js +57 -0
- package/dist/_esm5.processed/core/api/playback_observer.js +4 -2
- package/dist/_esm5.processed/core/api/public_api.d.ts +60 -3
- package/dist/_esm5.processed/core/api/public_api.js +280 -60
- package/dist/_esm5.processed/core/api/track_management/media_element_tracks_store.js +10 -1
- package/dist/_esm5.processed/core/api/track_management/track_dispatcher.d.ts +13 -1
- package/dist/_esm5.processed/core/api/track_management/track_dispatcher.js +30 -15
- package/dist/_esm5.processed/core/api/track_management/tracks_store.d.ts +3 -1
- package/dist/_esm5.processed/core/api/track_management/tracks_store.js +67 -152
- package/dist/_esm5.processed/core/api/utils.d.ts +10 -0
- package/dist/_esm5.processed/core/api/utils.js +23 -3
- package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.d.ts +27 -8
- package/dist/_esm5.processed/core/decrypt/__tests__/__global__/utils.js +28 -7
- package/dist/_esm5.processed/core/decrypt/attach_media_keys.js +1 -1
- package/dist/_esm5.processed/core/decrypt/content_decryptor.js +1 -1
- package/dist/_esm5.processed/core/decrypt/find_key_system.js +29 -6
- package/dist/_esm5.processed/core/decrypt/session_events_listener.js +42 -32
- package/dist/_esm5.processed/core/decrypt/utils/check_key_statuses.js +4 -0
- package/dist/_esm5.processed/core/decrypt/utils/clean_old_loaded_sessions.js +2 -0
- package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +5 -1
- package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.d.ts +17 -8
- package/dist/_esm5.processed/core/fetchers/cdn_prioritizer.js +10 -6
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +5 -4
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +22 -5
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +37 -21
- package/dist/_esm5.processed/core/fetchers/segment/task_prioritizer.js +21 -23
- package/dist/_esm5.processed/core/fetchers/utils/schedule_request.js +17 -7
- package/dist/_esm5.processed/core/init/directfile_content_initializer.js +2 -2
- package/dist/_esm5.processed/core/init/media_source_content_initializer.js +74 -41
- package/dist/_esm5.processed/core/init/types.d.ts +9 -1
- package/dist/_esm5.processed/core/init/utils/content_time_boundaries_observer.d.ts +28 -1
- package/dist/_esm5.processed/core/init/utils/content_time_boundaries_observer.js +24 -11
- package/dist/_esm5.processed/core/init/utils/create_media_source.js +3 -12
- package/dist/_esm5.processed/core/init/utils/end_of_stream.js +6 -3
- package/dist/_esm5.processed/core/init/utils/get_loaded_reference.js +2 -1
- package/dist/_esm5.processed/core/init/utils/initial_seek_and_play.js +9 -5
- package/dist/_esm5.processed/core/init/utils/initialize_content_decryption.js +2 -1
- package/dist/_esm5.processed/core/init/utils/media_source_duration_updater.d.ts +58 -0
- package/dist/_esm5.processed/core/init/utils/{media_duration_updater.js → media_source_duration_updater.js} +87 -86
- package/dist/_esm5.processed/core/init/utils/rebuffering_controller.d.ts +36 -2
- package/dist/_esm5.processed/core/init/utils/rebuffering_controller.js +83 -3
- package/dist/_esm5.processed/core/init/utils/stream_events_emitter/stream_events_emitter.js +6 -4
- package/dist/_esm5.processed/core/init/utils/throw_on_media_error.js +1 -1
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.d.ts +18 -7
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +38 -50
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +8 -0
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +16 -2
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +8 -0
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +12 -0
- package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +11 -4
- package/dist/_esm5.processed/core/segment_buffers/index.d.ts +2 -2
- package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +13 -9
- package/dist/_esm5.processed/core/stream/adaptation/adaptation_stream.js +30 -16
- package/dist/_esm5.processed/core/stream/adaptation/utils/create_representation_estimator.d.ts +47 -0
- package/dist/_esm5.processed/core/stream/adaptation/utils/create_representation_estimator.js +70 -0
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +41 -20
- package/dist/_esm5.processed/core/stream/period/period_stream.js +12 -11
- package/dist/_esm5.processed/core/stream/representation/representation_stream.js +37 -28
- package/dist/_esm5.processed/core/stream/representation/utils/append_segment_to_buffer.d.ts +4 -2
- package/dist/_esm5.processed/core/stream/representation/utils/append_segment_to_buffer.js +3 -3
- package/dist/_esm5.processed/core/stream/representation/utils/downloading_queue.js +16 -6
- package/dist/_esm5.processed/core/stream/representation/utils/push_init_segment.d.ts +3 -2
- package/dist/_esm5.processed/core/stream/representation/utils/push_init_segment.js +8 -8
- package/dist/_esm5.processed/core/stream/representation/utils/push_media_segment.d.ts +2 -2
- package/dist/_esm5.processed/core/stream/representation/utils/push_media_segment.js +2 -3
- package/dist/_esm5.processed/core/stream/utils/create_reload_request.js +1 -1
- package/dist/_esm5.processed/default_config.d.ts +41 -0
- package/dist/_esm5.processed/default_config.js +46 -2
- package/dist/_esm5.processed/errors/index.d.ts +2 -2
- package/dist/_esm5.processed/errors/media_error.d.ts +23 -1
- package/dist/_esm5.processed/errors/media_error.js +18 -5
- package/dist/_esm5.processed/experimental/features/debug_element.d.ts +8 -0
- package/dist/_esm5.processed/experimental/features/debug_element.js +10 -0
- package/dist/_esm5.processed/experimental/features/index.d.ts +1 -0
- package/dist/_esm5.processed/experimental/features/index.js +1 -0
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_and_push_segment.d.ts +1 -1
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/load_and_push_segment.js +8 -7
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.js +7 -4
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.js +24 -12
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/index.js +0 -2
- package/dist/_esm5.processed/features/features_object.js +1 -0
- package/dist/_esm5.processed/features/initialize_features.js +13 -10
- package/dist/_esm5.processed/features/types.d.ts +3 -0
- package/dist/_esm5.processed/manifest/adaptation.d.ts +21 -2
- package/dist/_esm5.processed/manifest/adaptation.js +80 -1
- package/dist/_esm5.processed/manifest/manifest.js +2 -0
- package/dist/_esm5.processed/manifest/period.js +2 -2
- package/dist/_esm5.processed/manifest/representation.d.ts +33 -2
- package/dist/_esm5.processed/manifest/representation.js +32 -4
- package/dist/_esm5.processed/manifest/utils.js +1 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +105 -137
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +25 -5
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.d.ts +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/js-parser/parse_from_document.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -0
- package/dist/_esm5.processed/public_types.d.ts +13 -3
- package/dist/_esm5.processed/tools/TextTrackRenderer/text_track_renderer.js +1 -1
- package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +15 -11
- package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.js +2 -2
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
- package/dist/_esm5.processed/transports/dash/segment_loader.js +4 -4
- package/dist/_esm5.processed/transports/local/segment_loader.js +13 -26
- package/dist/_esm5.processed/transports/smooth/isobmff/create_boxes.d.ts +4 -6
- package/dist/_esm5.processed/transports/smooth/isobmff/create_boxes.js +4 -6
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +4 -4
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
- package/dist/_esm5.processed/utils/cancellable_sleep.js +4 -10
- package/dist/_esm5.processed/utils/create_cancellable_promise.d.ts +26 -0
- package/dist/_esm5.processed/utils/create_cancellable_promise.js +52 -0
- package/dist/_esm5.processed/utils/is_null_or_undefined.d.ts +1 -1
- package/dist/_esm5.processed/utils/is_null_or_undefined.js +1 -1
- package/dist/_esm5.processed/utils/reference.js +6 -0
- package/dist/_esm5.processed/utils/request/xhr.js +1 -1
- package/dist/_esm5.processed/utils/task_canceller.d.ts +34 -15
- package/dist/_esm5.processed/utils/task_canceller.js +55 -22
- package/dist/mpd-parser.wasm +0 -0
- package/dist/rx-player.js +5424 -4712
- package/dist/rx-player.min.js +1 -1
- package/jest.config.js +1 -5
- package/package.json +44 -40
- package/scripts/build/constants.d.ts +1 -0
- package/scripts/build/generate_build.js +1 -1
- package/scripts/fast_demo_build.js +40 -40
- package/scripts/generate_full_demo.js +1 -1
- package/sonar-project.properties +1 -1
- package/src/compat/browser_detection.ts +105 -52
- package/src/compat/can_reuse_media_keys.ts +5 -2
- package/src/compat/eme/close_session.ts +2 -2
- package/src/compat/eme/load_session.ts +1 -1
- package/src/compat/event_listeners.ts +1 -1
- package/src/compat/has_issues_with_high_media_source_duration.ts +27 -0
- package/src/core/adaptive/__tests__/buffer_based_chooser.test.ts +147 -48
- package/src/core/adaptive/adaptive_representation_selector.ts +11 -6
- package/src/core/adaptive/buffer_based_chooser.ts +144 -26
- package/src/core/adaptive/guess_based_chooser.ts +9 -8
- package/src/core/adaptive/network_analyzer.ts +9 -4
- package/src/core/adaptive/utils/representation_score_calculator.ts +22 -2
- package/src/core/api/debug/buffer_graph.ts +247 -0
- package/src/core/api/debug/buffer_size_graph.ts +130 -0
- package/src/core/api/debug/constants.ts +2 -0
- package/src/core/api/debug/index.ts +3 -0
- package/src/core/api/debug/modules/general_info.ts +184 -0
- package/src/core/api/debug/modules/segment_buffer_content.ts +155 -0
- package/src/core/api/debug/modules/segment_buffer_size.ts +48 -0
- package/src/core/api/debug/render.ts +40 -0
- package/src/core/api/debug/utils.ts +103 -0
- package/src/core/api/playback_observer.ts +5 -2
- package/src/core/api/public_api.ts +334 -73
- package/src/core/api/track_management/media_element_tracks_store.ts +17 -8
- package/src/core/api/track_management/track_dispatcher.ts +37 -14
- package/src/core/api/track_management/tracks_store.ts +77 -167
- package/src/core/api/utils.ts +29 -3
- package/src/core/decrypt/__tests__/__global__/utils.ts +61 -40
- package/src/core/decrypt/attach_media_keys.ts +1 -1
- package/src/core/decrypt/content_decryptor.ts +1 -1
- package/src/core/decrypt/find_key_system.ts +25 -11
- package/src/core/decrypt/session_events_listener.ts +45 -39
- package/src/core/decrypt/utils/check_key_statuses.ts +6 -0
- package/src/core/decrypt/utils/clean_old_loaded_sessions.ts +2 -1
- package/src/core/decrypt/utils/loaded_sessions_store.ts +8 -1
- package/src/core/fetchers/cdn_prioritizer.ts +18 -9
- package/src/core/fetchers/manifest/manifest_fetcher.ts +5 -4
- package/src/core/fetchers/segment/segment_fetcher.ts +36 -14
- package/src/core/fetchers/segment/task_prioritizer.ts +25 -30
- package/src/core/fetchers/utils/schedule_request.ts +18 -7
- package/src/core/init/directfile_content_initializer.ts +2 -1
- package/src/core/init/media_source_content_initializer.ts +89 -50
- package/src/core/init/types.ts +9 -1
- package/src/core/init/utils/content_time_boundaries_observer.ts +48 -12
- package/src/core/init/utils/create_media_source.ts +4 -16
- package/src/core/init/utils/end_of_stream.ts +6 -3
- package/src/core/init/utils/get_loaded_reference.ts +2 -1
- package/src/core/init/utils/initial_seek_and_play.ts +9 -5
- package/src/core/init/utils/initialize_content_decryption.ts +2 -1
- package/src/core/init/utils/{media_duration_updater.ts → media_source_duration_updater.ts} +103 -110
- package/src/core/init/utils/rebuffering_controller.ts +115 -4
- package/src/core/init/utils/stream_events_emitter/stream_events_emitter.ts +6 -4
- package/src/core/init/utils/throw_on_media_error.ts +1 -1
- package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +63 -66
- package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +20 -2
- package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +16 -0
- package/src/core/segment_buffers/implementations/types.ts +16 -4
- package/src/core/segment_buffers/index.ts +2 -0
- package/src/core/segment_buffers/segment_buffers_store.ts +16 -13
- package/src/core/stream/adaptation/adaptation_stream.ts +33 -19
- package/src/core/stream/adaptation/utils/create_representation_estimator.ts +114 -0
- package/src/core/stream/orchestrator/stream_orchestrator.ts +42 -20
- package/src/core/stream/period/period_stream.ts +13 -11
- package/src/core/stream/representation/representation_stream.ts +49 -37
- package/src/core/stream/representation/utils/append_segment_to_buffer.ts +9 -4
- package/src/core/stream/representation/utils/downloading_queue.ts +16 -4
- package/src/core/stream/representation/utils/push_init_segment.ts +11 -6
- package/src/core/stream/representation/utils/push_media_segment.ts +3 -3
- package/src/core/stream/utils/create_reload_request.ts +1 -1
- package/src/default_config.ts +59 -11
- package/src/errors/__tests__/media_error.test.ts +6 -6
- package/src/errors/index.ts +4 -1
- package/src/errors/media_error.ts +67 -1
- package/src/experimental/features/__tests__/debug_element.test.ts +26 -0
- package/src/experimental/features/debug_element.ts +13 -0
- package/src/experimental/features/index.ts +1 -0
- package/src/experimental/tools/VideoThumbnailLoader/load_and_push_segment.ts +10 -7
- package/src/experimental/tools/VideoThumbnailLoader/prepare_source_buffer.ts +7 -4
- package/src/experimental/tools/VideoThumbnailLoader/video_thumbnail_loader.ts +25 -10
- package/src/experimental/tools/mediaCapabilitiesProber/index.ts +0 -4
- package/src/features/__tests__/initialize_features.test.ts +11 -0
- package/src/features/features_object.ts +1 -0
- package/src/features/initialize_features.ts +15 -10
- package/src/features/types.ts +9 -0
- package/src/manifest/__tests__/manifest.test.ts +7 -7
- package/src/manifest/__tests__/period.test.ts +90 -45
- package/src/manifest/adaptation.ts +96 -1
- package/src/manifest/manifest.ts +4 -0
- package/src/manifest/period.ts +4 -2
- package/src/manifest/representation.ts +77 -5
- package/src/manifest/utils.ts +1 -3
- package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +116 -151
- package/src/parsers/manifest/dash/common/parse_representations.ts +21 -4
- package/src/parsers/manifest/dash/js-parser/parse_from_document.ts +1 -1
- package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +1 -0
- package/src/parsers/texttracks/ttml/parse_ttml.ts +1 -1
- package/src/public_types.ts +16 -1
- package/src/tools/TextTrackRenderer/text_track_renderer.ts +1 -1
- package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +31 -22
- package/src/transports/dash/low_latency_segment_loader.ts +2 -2
- package/src/transports/dash/manifest_parser.ts +1 -1
- package/src/transports/dash/segment_loader.ts +4 -4
- package/src/transports/local/segment_loader.ts +14 -30
- package/src/transports/smooth/isobmff/create_boxes.ts +4 -6
- package/src/transports/smooth/segment_loader.ts +4 -4
- package/src/transports/utils/call_custom_manifest_loader.ts +3 -3
- package/src/typings/globals.d.ts +21 -19
- package/src/utils/cancellable_sleep.ts +5 -14
- package/src/utils/create_cancellable_promise.ts +69 -0
- package/src/utils/is_null_or_undefined.ts +1 -1
- package/src/utils/reference.ts +6 -0
- package/src/utils/request/xhr.ts +1 -1
- package/src/utils/task_canceller.ts +63 -34
- package/tsconfig.json +1 -1
- package/tsconfig.modules.json +1 -1
- package/dist/_esm5.processed/core/init/utils/media_duration_updater.d.ts +0 -56
- package/locked_reps.js +0 -46
- package/scripts/doc-generator/construct_table_of_contents.js +0 -76
- package/scripts/doc-generator/convert_MD_to_HMTL.js +0 -26
- package/scripts/doc-generator/create_documentation.js +0 -331
- package/scripts/doc-generator/create_documentation_page.js +0 -209
- package/scripts/doc-generator/create_page.js +0 -210
- package/scripts/doc-generator/generate_header_html.js +0 -147
- package/scripts/doc-generator/generate_page_html.js +0 -115
- package/scripts/doc-generator/generate_page_list_html.js +0 -92
- package/scripts/doc-generator/generate_sidebar_html.js +0 -85
- package/scripts/doc-generator/get_search_data_for_content.js +0 -137
- package/scripts/doc-generator/index.js +0 -34
- package/scripts/doc-generator/parse_doc_configs.js +0 -327
- package/scripts/doc-generator/scripts/lunr.js +0 -10
- package/scripts/doc-generator/scripts/script.js +0 -451
- package/scripts/doc-generator/styles/code.css +0 -99
- package/scripts/doc-generator/styles/style.css +0 -835
- package/scripts/doc-generator/utils.js +0 -74
package/jest.config.js
CHANGED
|
@@ -6,11 +6,6 @@ module.exports = {
|
|
|
6
6
|
roots: ["<rootDir>/src"],
|
|
7
7
|
preset: "ts-jest",
|
|
8
8
|
testEnvironment: "jsdom",
|
|
9
|
-
// Without this, Jest just fails when importing rxjs, for some arcane
|
|
10
|
-
// ESM-vs-CommonJS reasons linked to how it works internally.
|
|
11
|
-
moduleNameMapper: {
|
|
12
|
-
"^rxjs$": require.resolve("rxjs"),
|
|
13
|
-
},
|
|
14
9
|
testMatch: ["**/?(*.)+(spec|test).[jt]s?(x)"],
|
|
15
10
|
collectCoverageFrom: [
|
|
16
11
|
"src/**/*.ts",
|
|
@@ -59,6 +54,7 @@ module.exports = {
|
|
|
59
54
|
HTML_VTT: 1,
|
|
60
55
|
LOCAL_MANIFEST: 1,
|
|
61
56
|
METAPLAYLIST: 1,
|
|
57
|
+
DEBUG_ELEMENT: 1,
|
|
62
58
|
NATIVE_SAMI: 1,
|
|
63
59
|
NATIVE_SRT: 1,
|
|
64
60
|
NATIVE_TTML: 1,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rx-player",
|
|
3
3
|
"author": "Canal+",
|
|
4
|
-
"version": "4.0.0-beta.
|
|
4
|
+
"version": "4.0.0-beta.2",
|
|
5
5
|
"description": "Canal+ HTML5 Video Player",
|
|
6
6
|
"main": "./dist/rx-player.js",
|
|
7
7
|
"keywords": [
|
|
@@ -12,8 +12,6 @@
|
|
|
12
12
|
"mediasource",
|
|
13
13
|
"mse",
|
|
14
14
|
"reactive",
|
|
15
|
-
"rx",
|
|
16
|
-
"rxjs",
|
|
17
15
|
"smooth",
|
|
18
16
|
"streaming",
|
|
19
17
|
"typescript",
|
|
@@ -42,12 +40,14 @@
|
|
|
42
40
|
"check:appveyor": "npm run check:types && npm run lint && npm run lint:demo && npm run lint:tests && npm run test:appveyor",
|
|
43
41
|
"check:types": "tsc --noEmit --project .",
|
|
44
42
|
"check:types:watch": "tsc --noEmit --watch --project .",
|
|
43
|
+
"check:demo": "npm run check:demo:types && npm run lint:demo",
|
|
44
|
+
"check:demo:types": "tsc --noEmit --project demo/full",
|
|
45
45
|
"demo": "node ./scripts/generate_full_demo.js --production-mode",
|
|
46
46
|
"demo:min": "node ./scripts/generate_full_demo.js --production-mode --minify",
|
|
47
47
|
"demo:watch": "node ./scripts/generate_full_demo.js --watch --production-mode",
|
|
48
|
-
"doc": "
|
|
48
|
+
"doc": "docgen.ico doc/ doc/generated \"$(cat VERSION)\"",
|
|
49
49
|
"lint": "eslint src -c .eslintrc.js",
|
|
50
|
-
"lint:demo": "eslint demo/full/scripts",
|
|
50
|
+
"lint:demo": "eslint -c demo/full/.eslintrc.js demo/full/scripts",
|
|
51
51
|
"lint:tests": "eslint tests/**/*.js --ignore-pattern '/tests/performance/bundle*'",
|
|
52
52
|
"list": "node scripts/list-npm-scripts.js",
|
|
53
53
|
"prepublishOnly": "npm run build:modular",
|
|
@@ -80,58 +80,59 @@
|
|
|
80
80
|
"next-tick": "1.1.0"
|
|
81
81
|
},
|
|
82
82
|
"devDependencies": {
|
|
83
|
-
"@babel/core": "7.
|
|
84
|
-
"@babel/plugin-transform-runtime": "7.
|
|
85
|
-
"@babel/preset-env": "7.
|
|
86
|
-
"@babel/preset-react": "7.
|
|
87
|
-
"@types/chai": "4.3.
|
|
88
|
-
"@types/jest": "29.
|
|
83
|
+
"@babel/core": "7.22.5",
|
|
84
|
+
"@babel/plugin-transform-runtime": "7.22.5",
|
|
85
|
+
"@babel/preset-env": "7.22.5",
|
|
86
|
+
"@babel/preset-react": "7.22.5",
|
|
87
|
+
"@types/chai": "4.3.5",
|
|
88
|
+
"@types/jest": "29.5.2",
|
|
89
89
|
"@types/mocha": "10.0.1",
|
|
90
|
-
"@types/node": "
|
|
91
|
-
"@types/
|
|
92
|
-
"@
|
|
93
|
-
"@
|
|
94
|
-
"@typescript-eslint/
|
|
90
|
+
"@types/node": "20.3.1",
|
|
91
|
+
"@types/react": "18.2.12",
|
|
92
|
+
"@types/react-dom": "18.2.5",
|
|
93
|
+
"@types/sinon": "10.0.15",
|
|
94
|
+
"@typescript-eslint/eslint-plugin": "5.59.11",
|
|
95
|
+
"@typescript-eslint/eslint-plugin-tslint": "5.59.11",
|
|
96
|
+
"@typescript-eslint/parser": "5.59.11",
|
|
95
97
|
"arraybuffer-loader": "1.0.8",
|
|
96
98
|
"babel-loader": "9.1.2",
|
|
97
99
|
"chai": "4.3.7",
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"esbuild": "0.
|
|
101
|
-
"eslint": "8.
|
|
100
|
+
"core-js": "3.31.0",
|
|
101
|
+
"docgen.ico": "^0.2.3",
|
|
102
|
+
"esbuild": "0.18.2",
|
|
103
|
+
"eslint": "8.42.0",
|
|
104
|
+
"eslint-plugin-ban": "1.6.0",
|
|
102
105
|
"eslint-plugin-import": "2.27.5",
|
|
103
|
-
"eslint-plugin-jsdoc": "
|
|
104
|
-
"eslint-plugin-react": "7.32.
|
|
106
|
+
"eslint-plugin-jsdoc": "46.2.6",
|
|
107
|
+
"eslint-plugin-react": "7.32.2",
|
|
105
108
|
"esm": "3.2.25",
|
|
106
109
|
"express": "4.18.2",
|
|
107
|
-
"
|
|
108
|
-
"html-entities": "2.3.
|
|
109
|
-
"jest": "29.
|
|
110
|
-
"jest-environment-jsdom": "29.
|
|
111
|
-
"karma": "6.4.
|
|
112
|
-
"karma-chrome-launcher": "3.
|
|
110
|
+
"github-buttons": "2.27.0",
|
|
111
|
+
"html-entities": "2.3.6",
|
|
112
|
+
"jest": "29.5.0",
|
|
113
|
+
"jest-environment-jsdom": "29.5.0",
|
|
114
|
+
"karma": "6.4.2",
|
|
115
|
+
"karma-chrome-launcher": "3.2.0",
|
|
113
116
|
"karma-firefox-launcher": "2.1.2",
|
|
114
117
|
"karma-mocha": "2.0.1",
|
|
115
118
|
"karma-webpack": "5.0.0",
|
|
116
|
-
"markdown-it": "13.0.1",
|
|
117
119
|
"mocha": "10.2.0",
|
|
118
120
|
"mocha-loader": "5.1.5",
|
|
119
121
|
"raw-loader": "4.0.2",
|
|
120
122
|
"react": "18.2.0",
|
|
121
123
|
"react-dom": "18.2.0",
|
|
122
124
|
"regenerator-runtime": "0.13.11",
|
|
123
|
-
"rimraf": "
|
|
124
|
-
"
|
|
125
|
-
"
|
|
126
|
-
"
|
|
127
|
-
"
|
|
128
|
-
"ts-
|
|
129
|
-
"ts-loader": "9.4.2",
|
|
125
|
+
"rimraf": "5.0.1",
|
|
126
|
+
"semver": "7.5.1",
|
|
127
|
+
"sinon": "15.1.2",
|
|
128
|
+
"terser-webpack-plugin": "5.3.9",
|
|
129
|
+
"ts-jest": "29.1.0",
|
|
130
|
+
"ts-loader": "9.4.3",
|
|
130
131
|
"tslint": "6.1.3",
|
|
131
|
-
"typescript": "
|
|
132
|
-
"webpack": "5.
|
|
133
|
-
"webpack-bundle-analyzer": "4.
|
|
134
|
-
"webpack-cli": "5.
|
|
132
|
+
"typescript": "5.1.3",
|
|
133
|
+
"webpack": "5.86.0",
|
|
134
|
+
"webpack-bundle-analyzer": "4.9.0",
|
|
135
|
+
"webpack-cli": "5.1.4"
|
|
135
136
|
},
|
|
136
137
|
"scripts-list": {
|
|
137
138
|
"Build a demo page (e.g. to test a code change)": {
|
|
@@ -142,6 +143,9 @@
|
|
|
142
143
|
"demo": "Build the demo in demo/bundle.js",
|
|
143
144
|
"demo:min": "Build the demo and minify it in demo/bundle.js",
|
|
144
145
|
"demo:watch": "Build the demo in demo/bundle.js each times the files update.",
|
|
146
|
+
"check:demo": "Check the validity of the full demo directory by running the type checker and linter on it",
|
|
147
|
+
"check:demo:types": "Check TypeScript types in full demo files",
|
|
148
|
+
"lint:demo": "Run linter on the full demo files",
|
|
145
149
|
"standalone": "Build and launch the \"standalone\" demo (without any UI) on a local server. Re-build on file updates.",
|
|
146
150
|
"certificate": "Generate a certificate to be able to use HTTPS locally for the demo pages (`npm run start` and `npm run standalone` will then listen to HTTPS requests through a communicated port)"
|
|
147
151
|
},
|
|
@@ -22,7 +22,7 @@ const { spawn } = require("child_process");
|
|
|
22
22
|
const fs = require("fs/promises");
|
|
23
23
|
const os = require("os");
|
|
24
24
|
const path = require("path");
|
|
25
|
-
const rimraf = require("rimraf");
|
|
25
|
+
const { rimraf } = require("rimraf");
|
|
26
26
|
|
|
27
27
|
const BUILD_DIR_FROM_ROOT = "dist/_esm5.processed";
|
|
28
28
|
|
|
@@ -52,34 +52,40 @@ function fastDemoBuild(options) {
|
|
|
52
52
|
const watch = !!options.watch;
|
|
53
53
|
const isDevMode = !options.production;
|
|
54
54
|
const includeWasmParser = !!options.includeWasmParser;
|
|
55
|
-
let beforeTime = process.hrtime.bigint();
|
|
56
55
|
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
/** Declare a plugin to anounce when a build begins and ends */
|
|
57
|
+
const consolePlugin = {
|
|
58
|
+
name: "onEnd",
|
|
59
|
+
setup(build) {
|
|
60
|
+
build.onStart(() => {
|
|
61
|
+
console.log(`\x1b[33m[${getHumanReadableHours()}]\x1b[0m ` +
|
|
62
|
+
"New demo build started");
|
|
63
|
+
})
|
|
64
|
+
build.onEnd(result => {
|
|
65
|
+
if (result.errors.length > 0 || result.warnings.length > 0) {
|
|
66
|
+
const { errors, warnings } = result;
|
|
67
|
+
console.log(`\x1b[33m[${getHumanReadableHours()}]\x1b[0m ` +
|
|
68
|
+
`Demo re-built with ${errors.length} error(s) and ` +
|
|
69
|
+
` ${warnings.length} warning(s) `);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
console.log(`\x1b[32m[${getHumanReadableHours()}]\x1b[0m ` +
|
|
73
|
+
"Demo built!");
|
|
74
|
+
});
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
// Create a context for incremental builds
|
|
79
|
+
esbuild.context({
|
|
80
|
+
entryPoints: [path.join(__dirname, "../demo/full/scripts/index.tsx")],
|
|
59
81
|
bundle: true,
|
|
82
|
+
target: "es2017",
|
|
60
83
|
minify,
|
|
61
84
|
outfile: path.join(__dirname, "../demo/full/bundle.js"),
|
|
62
|
-
|
|
63
|
-
onRebuild(error, result) {
|
|
64
|
-
if (error) {
|
|
65
|
-
console.error(`\x1b[31m[${getHumanReadableHours()}]\x1b[0m Demo re-build failed:`,
|
|
66
|
-
err);
|
|
67
|
-
} else {
|
|
68
|
-
if (result.errors > 0 || result.warnings > 0) {
|
|
69
|
-
const { errors, warnings } = result;
|
|
70
|
-
console.log(`\x1b[33m[${getHumanReadableHours()}]\x1b[0m ` +
|
|
71
|
-
`Demo re-built with ${errors.length} error(s) and ` +
|
|
72
|
-
` ${warnings.length} warning(s) ` +
|
|
73
|
-
`(in ${stats.endTime - stats.startTime} ms).`);
|
|
74
|
-
}
|
|
75
|
-
console.log(`\x1b[32m[${getHumanReadableHours()}]\x1b[0m ` +
|
|
76
|
-
"Demo re-built!");
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
},
|
|
85
|
+
plugins: [consolePlugin],
|
|
80
86
|
define: {
|
|
81
87
|
"process.env.NODE_ENV": JSON.stringify(isDevMode ? "development" : "production"),
|
|
82
|
-
__INCLUDE_WASM_PARSER__: includeWasmParser,
|
|
88
|
+
__INCLUDE_WASM_PARSER__: JSON.stringify(includeWasmParser),
|
|
83
89
|
__ENVIRONMENT__: JSON.stringify({
|
|
84
90
|
PRODUCTION: 0,
|
|
85
91
|
DEV: 1,
|
|
@@ -89,24 +95,18 @@ function fastDemoBuild(options) {
|
|
|
89
95
|
CURRENT_LEVEL: "INFO",
|
|
90
96
|
}),
|
|
91
97
|
}
|
|
92
|
-
})
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
},
|
|
105
|
-
(err) => {
|
|
106
|
-
console.error(`\x1b[31m[${getHumanReadableHours()}]\x1b[0m Demo build failed:`,
|
|
107
|
-
err);
|
|
108
|
-
process.exit(1);
|
|
109
|
-
});
|
|
98
|
+
})
|
|
99
|
+
.then((context) => {
|
|
100
|
+
if (watch) {
|
|
101
|
+
return context.watch();
|
|
102
|
+
}
|
|
103
|
+
})
|
|
104
|
+
.catch((err) => {
|
|
105
|
+
console.error(
|
|
106
|
+
`\x1b[31m[${getHumanReadableHours()}]\x1b[0m Demo build failed:`,
|
|
107
|
+
err);
|
|
108
|
+
process.exit(1);
|
|
109
|
+
});
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
/**
|
|
@@ -60,7 +60,7 @@ function generateFullDemo(options) {
|
|
|
60
60
|
|
|
61
61
|
const webpackDemoConfig = {
|
|
62
62
|
mode: isDevMode ? "development" : "production",
|
|
63
|
-
entry: path.join(__dirname, "../demo/full/scripts/index.
|
|
63
|
+
entry: path.join(__dirname, "../demo/full/scripts/index.tsx"),
|
|
64
64
|
resolve: {
|
|
65
65
|
extensions: [".ts", ".tsx", ".js", ".jsx", ".json"],
|
|
66
66
|
},
|
package/sonar-project.properties
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
sonar.projectKey=rx-player
|
|
2
2
|
sonar.organization=rx-player
|
|
3
3
|
sonar.projectName=rx-player
|
|
4
|
-
sonar.projectVersion=4.0.0-beta.
|
|
4
|
+
sonar.projectVersion=4.0.0-beta.2
|
|
5
5
|
sonar.sources=./src,./demo,./tests
|
|
6
6
|
sonar.exclusions=demo/full/bundle.js,demo/standalone/lib.js,demo/bundle.js
|
|
7
7
|
sonar.host.url=https://sonarcloud.io
|
|
@@ -24,71 +24,124 @@ interface IIE11Document extends Document {
|
|
|
24
24
|
documentMode? : unknown;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const isIE11 : boolean =
|
|
30
|
-
!isNode &&
|
|
31
|
-
typeof (window as IIE11WindowObject).MSInputMethodContext !== "undefined" &&
|
|
32
|
-
typeof (document as IIE11Document).documentMode !== "undefined";
|
|
33
|
-
|
|
34
|
-
// true for IE / Edge
|
|
35
|
-
const isIEOrEdge : boolean = isNode ?
|
|
36
|
-
false :
|
|
37
|
-
navigator.appName === "Microsoft Internet Explorer" ||
|
|
38
|
-
navigator.appName === "Netscape" &&
|
|
39
|
-
/(Trident|Edge)\//.test(navigator.userAgent);
|
|
40
|
-
|
|
41
|
-
const isEdgeChromium: boolean = !isNode &&
|
|
42
|
-
navigator.userAgent.toLowerCase().indexOf("edg/") !== -1;
|
|
43
|
-
|
|
44
|
-
const isFirefox : boolean = !isNode &&
|
|
45
|
-
navigator.userAgent.toLowerCase().indexOf("firefox") !== -1;
|
|
46
|
-
|
|
47
|
-
const isSamsungBrowser : boolean = !isNode &&
|
|
48
|
-
/SamsungBrowser/.test(navigator.userAgent);
|
|
49
|
-
|
|
50
|
-
const isTizen : boolean = !isNode &&
|
|
51
|
-
/Tizen/.test(navigator.userAgent);
|
|
52
|
-
|
|
53
|
-
const isWebOs : boolean = !isNode &&
|
|
54
|
-
navigator.userAgent.indexOf("Web0S") >= 0;
|
|
55
|
-
|
|
56
|
-
// Inspired form: http://webostv.developer.lge.com/discover/specifications/web-engine/
|
|
57
|
-
// Note: even that page doesn't correspond to what we've actually seen in the
|
|
58
|
-
// wild
|
|
59
|
-
const isWebOs2021 : boolean = isWebOs &&
|
|
60
|
-
(
|
|
61
|
-
/[Ww]eb[O0]S.TV-2021/.test(navigator.userAgent) ||
|
|
62
|
-
/[Cc]hr[o0]me\/79/.test(navigator.userAgent)
|
|
63
|
-
);
|
|
64
|
-
const isWebOs2022 : boolean = isWebOs &&
|
|
65
|
-
(
|
|
66
|
-
/[Ww]eb[O0]S.TV-2022/.test(navigator.userAgent) ||
|
|
67
|
-
/[Cc]hr[o0]me\/87/.test(navigator.userAgent)
|
|
68
|
-
);
|
|
27
|
+
/** Edge Chromium, regardless of the device */
|
|
28
|
+
let isEdgeChromium = false;
|
|
69
29
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
30
|
+
/** IE11, regardless of the device */
|
|
31
|
+
let isIE11 = false;
|
|
32
|
+
|
|
33
|
+
/** IE11 or Edge __Legacy__ (not Edge Chromium), regardless of the device */
|
|
34
|
+
let isIEOrEdge = false;
|
|
35
|
+
|
|
36
|
+
/** Firefox, regardless of the device */
|
|
37
|
+
let isFirefox = false;
|
|
73
38
|
|
|
74
39
|
/** `true` on Safari on a PC platform (i.e. not iPhone / iPad etc.) */
|
|
75
|
-
|
|
76
|
-
|
|
40
|
+
let isSafariDesktop = false;
|
|
41
|
+
|
|
42
|
+
/** `true` on Safari on an iPhone, iPad & iPod platform */
|
|
43
|
+
let isSafariMobile = false;
|
|
44
|
+
|
|
45
|
+
/** Samsung's own browser application */
|
|
46
|
+
let isSamsungBrowser = false;
|
|
47
|
+
|
|
48
|
+
/** `true` on devices where Tizen is the OS (e.g. Samsung TVs). */
|
|
49
|
+
let isTizen = false;
|
|
50
|
+
|
|
51
|
+
/** `true` on devices where WebOS is the OS (e.g. LG TVs). */
|
|
52
|
+
let isWebOs = false;
|
|
53
|
+
|
|
54
|
+
/** `true` specifically for WebOS 2021 version. */
|
|
55
|
+
let isWebOs2021 = false;
|
|
56
|
+
|
|
57
|
+
/** `true` specifically for WebOS 2022 version. */
|
|
58
|
+
let isWebOs2022 = false;
|
|
59
|
+
|
|
60
|
+
/** `true` for Panasonic devices. */
|
|
61
|
+
let isPanasonic = false;
|
|
62
|
+
|
|
63
|
+
/** `true` for the PlayStation 5 game console. */
|
|
64
|
+
let isPlayStation5 = false;
|
|
65
|
+
|
|
66
|
+
((function findCurrentBrowser() : void {
|
|
67
|
+
if (isNode) {
|
|
68
|
+
return ;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// 1 - Find out browser between IE/Edge Legacy/Edge Chromium/Firefox/Safari
|
|
72
|
+
|
|
73
|
+
if (typeof (window as IIE11WindowObject).MSInputMethodContext !== "undefined" &&
|
|
74
|
+
typeof (document as IIE11Document).documentMode !== "undefined")
|
|
75
|
+
{
|
|
76
|
+
isIE11 = true;
|
|
77
|
+
isIEOrEdge = true;
|
|
78
|
+
} else if (
|
|
79
|
+
navigator.appName === "Microsoft Internet Explorer" ||
|
|
80
|
+
navigator.appName === "Netscape" &&
|
|
81
|
+
/(Trident|Edge)\//.test(navigator.userAgent)
|
|
82
|
+
) {
|
|
83
|
+
isIEOrEdge = true;
|
|
84
|
+
} else if (navigator.userAgent.toLowerCase().indexOf("edg/") !== -1) {
|
|
85
|
+
isEdgeChromium = true;
|
|
86
|
+
} else if (navigator.userAgent.toLowerCase().indexOf("firefox") !== -1) {
|
|
87
|
+
isFirefox = true;
|
|
88
|
+
} else if (typeof navigator.platform === "string" &&
|
|
89
|
+
/iPad|iPhone|iPod/.test(navigator.platform))
|
|
90
|
+
{
|
|
91
|
+
isSafariMobile = true;
|
|
92
|
+
} else if (
|
|
77
93
|
Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor") >= 0 ||
|
|
78
94
|
(window as ISafariWindowObject).safari?.pushNotification?.toString() ===
|
|
79
95
|
"[object SafariRemoteNotification]"
|
|
80
|
-
)
|
|
96
|
+
) {
|
|
97
|
+
isSafariDesktop = true;
|
|
98
|
+
}
|
|
81
99
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
100
|
+
// 2 - Find out specific device/platform information
|
|
101
|
+
|
|
102
|
+
// Samsung browser e.g. on Android
|
|
103
|
+
if (/SamsungBrowser/.test(navigator.userAgent)) {
|
|
104
|
+
isSamsungBrowser = true;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (navigator.userAgent.indexOf("PlayStation 5") !== -1) {
|
|
108
|
+
isPlayStation5 = true;
|
|
109
|
+
} else if (/Tizen/.test(navigator.userAgent)) {
|
|
110
|
+
isTizen = true;
|
|
111
|
+
|
|
112
|
+
// Inspired form: http://webostv.developer.lge.com/discover/specifications/web-engine/
|
|
113
|
+
// Note: even that page doesn't correspond to what we've actually seen in the
|
|
114
|
+
// wild
|
|
115
|
+
} else if (/[Ww]eb[O0]S/.test(navigator.userAgent)) {
|
|
116
|
+
isWebOs = true;
|
|
117
|
+
|
|
118
|
+
if (
|
|
119
|
+
/[Ww]eb[O0]S.TV-2022/.test(navigator.userAgent) ||
|
|
120
|
+
/[Cc]hr[o0]me\/87/.test(navigator.userAgent)
|
|
121
|
+
) {
|
|
122
|
+
isWebOs2022 = true;
|
|
123
|
+
} else if (
|
|
124
|
+
/[Ww]eb[O0]S.TV-2021/.test(navigator.userAgent) ||
|
|
125
|
+
/[Cc]hr[o0]me\/79/.test(navigator.userAgent)
|
|
126
|
+
) {
|
|
127
|
+
isWebOs2021 = true;
|
|
128
|
+
}
|
|
129
|
+
} else if (/[Pp]anasonic/.test(navigator.userAgent)) {
|
|
130
|
+
isPanasonic = true;
|
|
131
|
+
}
|
|
132
|
+
})());
|
|
133
|
+
|
|
134
|
+
interface ISafariWindowObject extends Window {
|
|
135
|
+
safari? : { pushNotification? : { toString() : string } };
|
|
136
|
+
}
|
|
86
137
|
|
|
87
138
|
export {
|
|
88
139
|
isEdgeChromium,
|
|
89
140
|
isIE11,
|
|
90
141
|
isIEOrEdge,
|
|
91
142
|
isFirefox,
|
|
143
|
+
isPanasonic,
|
|
144
|
+
isPlayStation5,
|
|
92
145
|
isSafariDesktop,
|
|
93
146
|
isSafariMobile,
|
|
94
147
|
isSamsungBrowser,
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
isPanasonic,
|
|
3
|
+
isWebOs,
|
|
4
|
+
} from "./browser_detection";
|
|
2
5
|
|
|
3
6
|
/**
|
|
4
7
|
* Returns `true` if a `MediaKeys` instance (the `Encrypted Media Extension`
|
|
@@ -13,5 +16,5 @@ import { isWebOs } from "./browser_detection";
|
|
|
13
16
|
* @returns {boolean}
|
|
14
17
|
*/
|
|
15
18
|
export default function canReuseMediaKeys() : boolean {
|
|
16
|
-
return !isWebOs;
|
|
19
|
+
return !isWebOs && !isPanasonic;
|
|
17
20
|
}
|
|
@@ -86,7 +86,7 @@ export default function closeSession(
|
|
|
86
86
|
try {
|
|
87
87
|
await session.update(new Uint8Array(1));
|
|
88
88
|
} catch (err) {
|
|
89
|
-
if (timeoutCanceller.isUsed) { // Reminder: cancelled == session closed
|
|
89
|
+
if (timeoutCanceller.isUsed()) { // Reminder: cancelled == session closed
|
|
90
90
|
return;
|
|
91
91
|
}
|
|
92
92
|
|
|
@@ -102,7 +102,7 @@ export default function closeSession(
|
|
|
102
102
|
await cancellableSleep(1000, timeoutCanceller.signal);
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
if (timeoutCanceller.isUsed) { // Reminder: cancelled == session closed
|
|
105
|
+
if (timeoutCanceller.isUsed()) { // Reminder: cancelled == session closed
|
|
106
106
|
return;
|
|
107
107
|
}
|
|
108
108
|
|
|
@@ -36,7 +36,7 @@ export default async function loadSession(
|
|
|
36
36
|
session : MediaKeySession | ICustomMediaKeySession,
|
|
37
37
|
sessionId : string
|
|
38
38
|
) : Promise<boolean> {
|
|
39
|
-
log.info("
|
|
39
|
+
log.info("DRM: Load persisted session", sessionId);
|
|
40
40
|
const isLoaded = await session.load(sessionId);
|
|
41
41
|
|
|
42
42
|
if (!isLoaded || session.keyStatuses.size > 0) {
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { isPlayStation5 } from "./browser_detection";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Some platforms have issues when the `MediaSource`'s `duration` property
|
|
5
|
+
* is set to a very high value (playback freezes) but not when setting it
|
|
6
|
+
* to `Infinity`, which is what the HTML spec as of now (2023-05-15) recommends
|
|
7
|
+
* for live contents.
|
|
8
|
+
*
|
|
9
|
+
* However setting the `MediaSource`'s `duration` property to `Infinity` seems
|
|
10
|
+
* more risky, considering all platforms we now support, than setting it at a
|
|
11
|
+
* relatively high ~2**32 value which is what we do generally.
|
|
12
|
+
*
|
|
13
|
+
* Moreover, setting it to `Infinity` require us to use another MSE API,
|
|
14
|
+
* `setLiveSeekableRange` to properly allow seeking. We're used to MSE issues so
|
|
15
|
+
* I'm not too confident of using another MSE API for all platforms directly.
|
|
16
|
+
*
|
|
17
|
+
* So this methods just return `true` based on a whitelist of platform for which
|
|
18
|
+
* it has been detected that high `duration` values cause issues but setting it
|
|
19
|
+
* to Infinity AND playing with `setLiveSeekableRange` does not.
|
|
20
|
+
*
|
|
21
|
+
* @returns {boolean}
|
|
22
|
+
*/
|
|
23
|
+
export default function hasIssuesWithHighMediaSourceDuration(): boolean {
|
|
24
|
+
// For now only seen on the Webkit present in the PlayStation 5, for which the
|
|
25
|
+
// alternative is known to work.
|
|
26
|
+
return isPlayStation5;
|
|
27
|
+
}
|