rx-player 3.28.0-dev.2022071100 → 3.29.0-dev.2022090500
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/.github/workflows/checks.yml +20 -18
- package/CHANGELOG.md +24 -2
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/eme/load_session.d.ts +5 -6
- package/dist/_esm5.processed/compat/eme/load_session.js +5 -6
- package/dist/_esm5.processed/compat/event_listeners.d.ts +18 -2
- package/dist/_esm5.processed/compat/event_listeners.js +64 -2
- package/dist/_esm5.processed/compat/on_height_width_change.d.ts +5 -4
- package/dist/_esm5.processed/compat/on_height_width_change.js +43 -34
- package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +1 -1
- package/dist/_esm5.processed/core/api/playback_observer.d.ts +12 -2
- package/dist/_esm5.processed/core/api/playback_observer.js +27 -12
- package/dist/_esm5.processed/core/api/public_api.js +14 -14
- package/dist/_esm5.processed/core/decrypt/create_session.js +33 -4
- package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.d.ts +14 -0
- package/dist/_esm5.processed/core/decrypt/utils/loaded_sessions_store.js +25 -0
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +7 -0
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +10 -2
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +9 -2
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +11 -5
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher_creator.d.ts +7 -0
- package/dist/_esm5.processed/core/init/content_time_boundaries_observer.js +110 -38
- package/dist/_esm5.processed/core/init/initialize_directfile.js +1 -1
- package/dist/_esm5.processed/core/init/load_on_media_source.js +1 -1
- package/dist/_esm5.processed/core/init/stall_avoider.d.ts +4 -2
- package/dist/_esm5.processed/core/init/stall_avoider.js +32 -26
- package/dist/_esm5.processed/core/segment_buffers/garbage_collector.d.ts +12 -6
- package/dist/_esm5.processed/core/segment_buffers/garbage_collector.js +142 -78
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.d.ts +18 -16
- package/dist/_esm5.processed/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.js +53 -41
- package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.d.ts +6 -5
- package/dist/_esm5.processed/core/segment_buffers/implementations/image/image_segment_buffer.js +37 -39
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +23 -22
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.js +84 -72
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +6 -12
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.js +33 -43
- package/dist/_esm5.processed/core/segment_buffers/implementations/types.d.ts +12 -9
- package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.d.ts +7 -6
- package/dist/_esm5.processed/core/segment_buffers/segment_buffers_store.js +17 -10
- package/dist/_esm5.processed/core/stream/orchestrator/stream_orchestrator.js +20 -9
- package/dist/_esm5.processed/core/stream/period/period_stream.js +25 -14
- package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.d.ts +4 -7
- package/dist/_esm5.processed/core/stream/representation/append_segment_to_buffer.js +80 -23
- package/dist/_esm5.processed/core/stream/representation/check_for_discontinuity.js +21 -9
- package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.d.ts +5 -4
- package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +78 -26
- package/dist/_esm5.processed/core/stream/representation/get_buffer_status.js +28 -32
- package/dist/_esm5.processed/core/stream/representation/push_init_segment.js +7 -1
- package/dist/_esm5.processed/core/stream/representation/push_media_segment.js +7 -1
- package/dist/_esm5.processed/core/stream/representation/representation_stream.js +15 -8
- package/dist/_esm5.processed/default_config.js +1 -1
- package/dist/_esm5.processed/errors/custom_loader_error.d.ts +3 -2
- package/dist/_esm5.processed/errors/custom_loader_error.js +3 -2
- package/dist/_esm5.processed/errors/encrypted_media_error.d.ts +1 -2
- package/dist/_esm5.processed/errors/encrypted_media_error.js +0 -1
- package/dist/_esm5.processed/errors/error_codes.d.ts +6 -1
- package/dist/_esm5.processed/errors/media_error.d.ts +1 -2
- package/dist/_esm5.processed/errors/media_error.js +0 -1
- package/dist/_esm5.processed/errors/network_error.d.ts +1 -2
- package/dist/_esm5.processed/errors/network_error.js +0 -1
- package/dist/_esm5.processed/errors/other_error.d.ts +1 -2
- package/dist/_esm5.processed/errors/other_error.js +0 -1
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.js +5 -2
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/push_data.js +5 -2
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/remove_buffer_around_time.js +9 -2
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +3 -1
- package/dist/_esm5.processed/experimental/tools/createMetaplaylist/get_duration_from_manifest.js +4 -3
- package/dist/_esm5.processed/manifest/manifest.d.ts +1 -1
- package/dist/_esm5.processed/manifest/manifest.js +1 -1
- package/dist/_esm5.processed/manifest/representation_index/static.d.ts +21 -6
- package/dist/_esm5.processed/manifest/representation_index/static.js +26 -8
- package/dist/_esm5.processed/manifest/representation_index/types.d.ts +55 -44
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +21 -8
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.js +25 -10
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +26 -12
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.js +26 -13
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +23 -7
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.js +65 -22
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +20 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +57 -7
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/{is_period_fulfilled.d.ts → utils.d.ts} +3 -6
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/{is_period_fulfilled.js → utils.js} +4 -8
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/local/parse_local_manifest.js +5 -8
- package/dist/_esm5.processed/parsers/manifest/local/representation_index.d.ts +21 -8
- package/dist/_esm5.processed/parsers/manifest/local/representation_index.js +49 -14
- package/dist/_esm5.processed/parsers/manifest/local/types.d.ts +16 -0
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.d.ts +20 -6
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/representation_index.js +28 -10
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.js +4 -4
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +21 -12
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.js +39 -14
- package/dist/_esm5.processed/parsers/manifest/utils/get_first_time_from_adaptation.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/utils/get_last_time_from_adaptation.js +1 -1
- package/dist/_esm5.processed/public_types.d.ts +22 -3
- package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +2 -2
- package/dist/_esm5.processed/transports/dash/image_pipelines.d.ts +3 -2
- package/dist/_esm5.processed/transports/dash/image_pipelines.js +3 -1
- package/dist/_esm5.processed/transports/dash/init_segment_loader.d.ts +3 -2
- package/dist/_esm5.processed/transports/dash/init_segment_loader.js +12 -6
- package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.d.ts +3 -2
- package/dist/_esm5.processed/transports/dash/low_latency_segment_loader.js +3 -2
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +6 -2
- package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +3 -2
- package/dist/_esm5.processed/transports/dash/segment_loader.js +12 -9
- package/dist/_esm5.processed/transports/dash/text_loader.js +6 -3
- package/dist/_esm5.processed/transports/local/pipelines.d.ts +2 -2
- package/dist/_esm5.processed/transports/local/pipelines.js +6 -6
- package/dist/_esm5.processed/transports/local/segment_loader.d.ts +3 -2
- package/dist/_esm5.processed/transports/local/segment_loader.js +4 -3
- package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.d.ts +2 -2
- package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.js +5 -2
- package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +15 -12
- package/dist/_esm5.processed/transports/smooth/pipelines.d.ts +1 -1
- package/dist/_esm5.processed/transports/smooth/pipelines.js +18 -14
- package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +2 -2
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +9 -7
- package/dist/_esm5.processed/transports/types.d.ts +26 -3
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.d.ts +2 -2
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +3 -3
- package/dist/_esm5.processed/transports/utils/generate_manifest_loader.d.ts +2 -2
- package/dist/_esm5.processed/transports/utils/generate_manifest_loader.js +9 -6
- package/dist/_esm5.processed/utils/deep_merge.d.ts +1 -1
- package/dist/_esm5.processed/utils/deep_merge.js +6 -5
- package/dist/_esm5.processed/utils/request/fetch.js +7 -8
- package/dist/_esm5.processed/utils/request/xhr.d.ts +1 -1
- package/dist/_esm5.processed/utils/request/xhr.js +28 -14
- package/dist/_esm5.processed/utils/task_canceller.d.ts +1 -5
- package/dist/_esm5.processed/utils/task_canceller.js +1 -5
- package/dist/mpd-parser.wasm +0 -0
- package/dist/rx-player.js +2497 -1752
- package/dist/rx-player.min.js +1 -1
- package/jest.config.js +5 -0
- package/package.json +31 -30
- package/sonar-project.properties +1 -1
- package/src/compat/eme/load_session.ts +5 -6
- package/src/compat/event_listeners.ts +86 -1
- package/src/compat/on_height_width_change.ts +48 -49
- package/src/core/api/media_element_track_choice_manager.ts +1 -1
- package/src/core/api/playback_observer.ts +34 -14
- package/src/core/api/public_api.ts +23 -18
- package/src/core/decrypt/create_session.ts +28 -2
- package/src/core/decrypt/utils/loaded_sessions_store.ts +29 -0
- package/src/core/fetchers/manifest/manifest_fetcher.ts +20 -2
- package/src/core/fetchers/segment/segment_fetcher.ts +24 -4
- package/src/core/fetchers/segment/segment_fetcher_creator.ts +7 -0
- package/src/core/init/content_time_boundaries_observer.ts +116 -42
- package/src/core/init/initialize_directfile.ts +1 -1
- package/src/core/init/load_on_media_source.ts +1 -0
- package/src/core/init/stall_avoider.ts +40 -26
- package/src/core/segment_buffers/garbage_collector.ts +55 -47
- package/src/core/segment_buffers/implementations/audio_video/audio_video_segment_buffer.ts +92 -70
- package/src/core/segment_buffers/implementations/image/image_segment_buffer.ts +37 -42
- package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +103 -105
- package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +35 -46
- package/src/core/segment_buffers/implementations/types.ts +22 -9
- package/src/core/segment_buffers/segment_buffers_store.ts +23 -14
- package/src/core/stream/orchestrator/stream_orchestrator.ts +31 -12
- package/src/core/stream/period/period_stream.ts +31 -18
- package/src/core/stream/representation/append_segment_to_buffer.ts +27 -42
- package/src/core/stream/representation/check_for_discontinuity.ts +28 -10
- package/src/core/stream/representation/force_garbage_collection.ts +28 -32
- package/src/core/stream/representation/get_buffer_status.ts +34 -37
- package/src/core/stream/representation/push_init_segment.ts +12 -6
- package/src/core/stream/representation/push_media_segment.ts +12 -6
- package/src/core/stream/representation/representation_stream.ts +11 -5
- package/src/default_config.ts +17 -17
- package/src/errors/custom_loader_error.ts +3 -2
- package/src/errors/encrypted_media_error.ts +1 -2
- package/src/errors/error_codes.ts +2 -2
- package/src/errors/media_error.ts +1 -2
- package/src/errors/network_error.ts +1 -2
- package/src/errors/other_error.ts +1 -2
- package/src/experimental/tools/VideoThumbnailLoader/get_initialized_source_buffer.ts +7 -2
- package/src/experimental/tools/VideoThumbnailLoader/push_data.ts +6 -2
- package/src/experimental/tools/VideoThumbnailLoader/remove_buffer_around_time.ts +10 -2
- package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +3 -1
- package/src/experimental/tools/createMetaplaylist/get_duration_from_manifest.ts +4 -3
- package/src/manifest/__tests__/adaptation.test.ts +4 -3
- package/src/manifest/__tests__/representation.test.ts +4 -3
- package/src/manifest/manifest.ts +1 -1
- package/src/manifest/representation_index/__tests__/static.test.ts +5 -4
- package/src/manifest/representation_index/static.ts +28 -9
- package/src/manifest/representation_index/types.ts +62 -46
- package/src/parsers/manifest/dash/common/indexes/base.ts +27 -11
- package/src/parsers/manifest/dash/common/indexes/list.ts +32 -15
- package/src/parsers/manifest/dash/common/indexes/template.ts +73 -27
- package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +60 -8
- package/src/parsers/manifest/dash/common/indexes/{is_period_fulfilled.ts → utils.ts} +4 -13
- package/src/parsers/manifest/dash/common/parse_periods.ts +1 -1
- package/src/parsers/manifest/local/parse_local_manifest.ts +8 -20
- package/src/parsers/manifest/local/representation_index.ts +51 -16
- package/src/parsers/manifest/local/types.ts +13 -0
- package/src/parsers/manifest/metaplaylist/representation_index.ts +31 -11
- package/src/parsers/manifest/smooth/create_parser.ts +4 -4
- package/src/parsers/manifest/smooth/representation_index.ts +40 -15
- package/src/parsers/manifest/utils/__tests__/get_first_time_from_adaptations.test.ts +4 -3
- package/src/parsers/manifest/utils/__tests__/get_last_time_from_adaptation.test.ts +4 -3
- package/src/parsers/manifest/utils/get_first_time_from_adaptation.ts +1 -1
- package/src/parsers/manifest/utils/get_last_time_from_adaptation.ts +1 -1
- package/src/public_types.ts +28 -4
- package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +2 -2
- package/src/transports/dash/image_pipelines.ts +4 -0
- package/src/transports/dash/init_segment_loader.ts +8 -0
- package/src/transports/dash/low_latency_segment_loader.ts +4 -0
- package/src/transports/dash/manifest_parser.ts +4 -0
- package/src/transports/dash/segment_loader.ts +21 -5
- package/src/transports/dash/text_loader.ts +7 -2
- package/src/transports/local/pipelines.ts +7 -5
- package/src/transports/local/segment_loader.ts +4 -2
- package/src/transports/metaplaylist/manifest_loader.ts +9 -2
- package/src/transports/metaplaylist/pipelines.ts +16 -8
- package/src/transports/smooth/pipelines.ts +17 -9
- package/src/transports/smooth/segment_loader.ts +9 -1
- package/src/transports/types.ts +28 -1
- package/src/transports/utils/call_custom_manifest_loader.ts +8 -2
- package/src/transports/utils/generate_manifest_loader.ts +18 -5
- package/src/utils/__tests__/initialization_segment_cache.test.ts +7 -0
- package/src/utils/deep_merge.ts +7 -4
- package/src/utils/request/fetch.ts +7 -8
- package/src/utils/request/xhr.ts +31 -15
- package/src/utils/task_canceller.ts +1 -5
|
@@ -54,27 +54,29 @@ jobs:
|
|
|
54
54
|
- run: node tests/integration/run.js --bchromehl
|
|
55
55
|
- run: npm run test:memory
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
# Windows seems to be a lot less stable for some reason.
|
|
58
|
+
# TODO debug?
|
|
59
|
+
# integration_windows:
|
|
58
60
|
|
|
59
|
-
|
|
61
|
+
# runs-on: windows-latest
|
|
60
62
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
# strategy:
|
|
64
|
+
# matrix:
|
|
65
|
+
# node-version: [16.x]
|
|
66
|
+
# # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
|
65
67
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
68
|
+
# steps:
|
|
69
|
+
# - uses: actions/checkout@v2
|
|
70
|
+
# - name: Use Node.js ${{ matrix.node-version }}
|
|
71
|
+
# uses: actions/setup-node@v2
|
|
72
|
+
# with:
|
|
73
|
+
# node-version: ${{ matrix.node-version }}
|
|
74
|
+
# cache: 'npm'
|
|
75
|
+
# - run: npm install
|
|
76
|
+
# # Firefox seems to have issue with integration tests on GitHub actions only
|
|
77
|
+
# # TODO to check
|
|
78
|
+
# - run: node tests/integration/run.js --bchromehl
|
|
79
|
+
# - run: npm run test:memory
|
|
78
80
|
|
|
79
81
|
# MacOS seems to be a lot less stable for some reason.
|
|
80
82
|
# TODO debug?
|
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## v3.
|
|
3
|
+
## v3.29.0-dev.2022090500 (2022-09-05)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- add `networkConfig.segmentRequestTimeout` and `networkConfig.manifestRequestTimeout` options to loadVideo to configure the timeout of respectively segment and manifest requests [#1156]
|
|
8
|
+
- add `timeout` property to the first argument communicated to a `segmentLoader` (from `loadVideo`'s `transportOptions`) [#1156]
|
|
9
|
+
- add `timeout` property to a new third argument communicated to a `manifestLoader` (from `loadVideo`'s `transportOptions`) [#1156]
|
|
10
|
+
|
|
11
|
+
### Bug fixes
|
|
12
|
+
|
|
13
|
+
- Compat/Directfile: Fix an issue with LG TV when playing multiple directfile contents with the `stopAtEnd` player option set to `true` [#1154]
|
|
14
|
+
- Compat: To work around an issue on LG TVs, also specify a request timeout manually through a `setTimeout` call when XMLHttpRequests are created for Manifest and segment requests [#1152]
|
|
15
|
+
- Compat: Fix issue with Samsung TVs where starting playback on a discontinuity could lead to infinite rebuffering [#1140]
|
|
16
|
+
- Better handle valid reverse playback use cases by not skipping gaps when the playback rate has been set to `0` or a negative value [#1138]
|
|
17
|
+
- DRM: When using persistent licenses, create new MediaKeySession when `load` resolves with `false`, instead of relying the same, to fix issues with such persistent sessions [#1139]
|
|
18
|
+
|
|
19
|
+
### Other improvements
|
|
20
|
+
|
|
21
|
+
- In the experimental "local" transport, add `incomingRanges` property to signal the time ranges of remaining data, allowing better discontinuity handling and duration estimates for sill-loading dowloaded contents [#1151]
|
|
22
|
+
|
|
23
|
+
## v3.28.0 (2022-07-12)
|
|
4
24
|
|
|
5
25
|
### Features
|
|
6
26
|
|
|
@@ -10,13 +30,14 @@
|
|
|
10
30
|
### Bug fixes
|
|
11
31
|
|
|
12
32
|
- Use the first **compatible** codec of the current AdaptationSet when creating a SourceBuffer [#1094]
|
|
13
|
-
- DASH/DRM: Fix potential infinite rebuffering when a KID is not
|
|
33
|
+
- DASH/DRM: Fix potential infinite rebuffering when a KID is not announced in the MPD [#1113]
|
|
14
34
|
- DRM: Fix quality fallback when loading a content whose license has been cached under an extended `singleLicensePer` setting and when starting (and staying) with a quality whose key id is not in it [#1133]
|
|
15
35
|
- DASH: Avoid infinite loop due to rounding errors while parsing multi-Periods MPDs [#1111, #1110]
|
|
16
36
|
- After a `RELOADING` state, stay in `PAUSED` if the media element was paused synchronously before the side-effect which triggered the reloading (usually coming from the API) was perform [#1132]
|
|
17
37
|
- Fix issue with `maxVideoBufferSize` setting which could lead to too much data being buffered [#1125]
|
|
18
38
|
- Prevent possibility of requests loops and infinite rebuffering when a pushed segment is always completely and immediately garbage collected by the browser [#1123]
|
|
19
39
|
- DASH: Fix potential rare memory leak when stopping the content after it has reloaded at least once [#1135]
|
|
40
|
+
- Directfile: Properly announce the audio track's `audioDescription` accessibility attribute in directfile mode on Safari [#1136]
|
|
20
41
|
- DASH: Fix issues that could arise if a segment is calculated to start at a negative position [#1122]
|
|
21
42
|
- DASH: Fix possibility of wrong segments being requested when a SegmentTimeline in a given Period (whose Period@end is set) had an S@r set to `-1` at its end [#1098]
|
|
22
43
|
- DASH: If the first `<S>` has its S@t attribute not set, make as if it is set to `0` [#1118]
|
|
@@ -24,6 +45,7 @@
|
|
|
24
45
|
### Other improvements
|
|
25
46
|
|
|
26
47
|
- TTML: Add support for percent based thickness for textOutline in TTML Subtitles [#1108]
|
|
48
|
+
- Improve TypeScript's language servers auto import feature with the RxPlayer by better redirecting to the exported type [#1126]
|
|
27
49
|
- If seeking after the last potential position, load last segments before ending [#1097]
|
|
28
50
|
- The duration set on the media element is now only relative to the current chosen tracks (it was previously relative to all potential track). This allows to seek later when switching e.g. to a longer video track [#1102]
|
|
29
51
|
- Errors coming from an HTMLMediaElement now have the browser's error message if it exists [#1112]
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.
|
|
1
|
+
3.29.0-dev.2022090500
|
|
@@ -18,14 +18,13 @@ import { ICustomMediaKeySession } from "./custom_media_keys";
|
|
|
18
18
|
* Load a persistent session, based on its `sessionId`, on the given
|
|
19
19
|
* MediaKeySession.
|
|
20
20
|
*
|
|
21
|
-
* Returns
|
|
22
|
-
* - true if the persistent MediaKeySession was found and loaded
|
|
23
|
-
* - false if no persistent MediaKeySession was found with that `sessionId`.
|
|
24
|
-
* Then completes.
|
|
21
|
+
* Returns a Promise which resolves with:
|
|
22
|
+
* - `true` if the persistent MediaKeySession was found and loaded
|
|
23
|
+
* - `false` if no persistent MediaKeySession was found with that `sessionId`.
|
|
25
24
|
*
|
|
26
|
-
* The
|
|
25
|
+
* The Promise rejects if anything goes wrong in the process.
|
|
27
26
|
* @param {MediaKeySession} session
|
|
28
27
|
* @param {string} sessionId
|
|
29
|
-
* @returns {
|
|
28
|
+
* @returns {Promise.<boolean>}
|
|
30
29
|
*/
|
|
31
30
|
export default function loadSession(session: MediaKeySession | ICustomMediaKeySession, sessionId: string): Promise<boolean>;
|
|
@@ -55,15 +55,14 @@ var EME_WAITING_DELAY_LOADED_SESSION_EMPTY_KEYSTATUSES = 100;
|
|
|
55
55
|
* Load a persistent session, based on its `sessionId`, on the given
|
|
56
56
|
* MediaKeySession.
|
|
57
57
|
*
|
|
58
|
-
* Returns
|
|
59
|
-
* - true if the persistent MediaKeySession was found and loaded
|
|
60
|
-
* - false if no persistent MediaKeySession was found with that `sessionId`.
|
|
61
|
-
* Then completes.
|
|
58
|
+
* Returns a Promise which resolves with:
|
|
59
|
+
* - `true` if the persistent MediaKeySession was found and loaded
|
|
60
|
+
* - `false` if no persistent MediaKeySession was found with that `sessionId`.
|
|
62
61
|
*
|
|
63
|
-
* The
|
|
62
|
+
* The Promise rejects if anything goes wrong in the process.
|
|
64
63
|
* @param {MediaKeySession} session
|
|
65
64
|
* @param {string} sessionId
|
|
66
|
-
* @returns {
|
|
65
|
+
* @returns {Promise.<boolean>}
|
|
67
66
|
*/
|
|
68
67
|
export default function loadSession(session, sessionId) {
|
|
69
68
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -42,7 +42,8 @@ export interface IPictureInPictureEvent {
|
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
44
|
* Emit when video enters and leaves Picture-In-Picture mode.
|
|
45
|
-
* @param {HTMLMediaElement}
|
|
45
|
+
* @param {HTMLMediaElement} elt
|
|
46
|
+
* @param {Object} stopListening
|
|
46
47
|
* @returns {Observable}
|
|
47
48
|
*/
|
|
48
49
|
declare function getPictureOnPictureStateRef(elt: HTMLMediaElement, stopListening: CancellationSignal): IReadOnlySharedReference<IPictureInPictureEvent>;
|
|
@@ -151,6 +152,21 @@ declare const onKeyError$: (element: IEventTargetLike) => Observable<Event>;
|
|
|
151
152
|
* @returns {Observable}
|
|
152
153
|
*/
|
|
153
154
|
declare const onKeyStatusesChange$: (element: IEventTargetLike) => Observable<Event>;
|
|
155
|
+
/**
|
|
156
|
+
* @param {HTMLMediaElement} mediaElement
|
|
157
|
+
* @returns {Observable}
|
|
158
|
+
*/
|
|
159
|
+
declare const onSeeking: (element: IEventTargetLike, listener: (event?: unknown) => void, cancelSignal: CancellationSignal) => void;
|
|
160
|
+
/**
|
|
161
|
+
* @param {HTMLMediaElement} mediaElement
|
|
162
|
+
* @returns {Observable}
|
|
163
|
+
*/
|
|
164
|
+
declare const onSeeked: (element: IEventTargetLike, listener: (event?: unknown) => void, cancelSignal: CancellationSignal) => void;
|
|
165
|
+
/**
|
|
166
|
+
* @param {HTMLMediaElement} mediaElement
|
|
167
|
+
* @returns {Observable}
|
|
168
|
+
*/
|
|
169
|
+
declare const onEnded: (element: IEventTargetLike, listener: (event?: unknown) => void, cancelSignal: CancellationSignal) => void;
|
|
154
170
|
/**
|
|
155
171
|
* Utilitary function allowing to add an event listener and remove it
|
|
156
172
|
* automatically once the given `CancellationSignal` emits.
|
|
@@ -162,4 +178,4 @@ declare const onKeyStatusesChange$: (element: IEventTargetLike) => Observable<Ev
|
|
|
162
178
|
* emits
|
|
163
179
|
*/
|
|
164
180
|
declare function addEventListener(elt: IEventEmitterLike, evt: string, listener: (x?: unknown) => void, stopListening: CancellationSignal): void;
|
|
165
|
-
export { addEventListener, getPageActivityRef, getPictureOnPictureStateRef, getVideoVisibilityRef, getVideoWidthRef, onEncrypted$, onEnded$, onFullscreenChange$, onKeyAdded$, onKeyError$, onKeyMessage$, onKeyStatusesChange$, onLoadedMetadata$, onRemoveSourceBuffers$, onSeeked$, onSeeking$, onSourceClose$, onSourceEnded$, onSourceOpen$, onTextTrackChanges$, onTimeUpdate$, onUpdate$, };
|
|
181
|
+
export { addEventListener, getPageActivityRef, getPictureOnPictureStateRef, getVideoVisibilityRef, getVideoWidthRef, onEncrypted$, onEnded, onEnded$, onFullscreenChange$, onKeyAdded$, onKeyError$, onKeyMessage$, onKeyStatusesChange$, onLoadedMetadata$, onRemoveSourceBuffers$, onSeeked, onSeeked$, onSeeking, onSeeking$, onSourceClose$, onSourceEnded$, onSourceOpen$, onTextTrackChanges$, onTimeUpdate$, onUpdate$, };
|
|
@@ -70,6 +70,52 @@ function eventPrefixed(eventNames, prefixes) {
|
|
|
70
70
|
.map(function (p) { return p + name; }));
|
|
71
71
|
}, []);
|
|
72
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Returns a function allowing to add event listeners for particular event(s)
|
|
75
|
+
* optionally automatically adding browser prefixes if needed.
|
|
76
|
+
* @param {Array.<string>} eventNames - The event(s) to listen to. If multiple
|
|
77
|
+
* events are set, the event listener will be triggered when any of them emits.
|
|
78
|
+
* @returns {Function} - Returns function allowing to easily add a callback to
|
|
79
|
+
* be triggered when that event is emitted on a given event target.
|
|
80
|
+
*/
|
|
81
|
+
function createCompatibleEventListener(eventNames) {
|
|
82
|
+
var mem;
|
|
83
|
+
var prefixedEvents = eventPrefixed(eventNames);
|
|
84
|
+
return function (element, listener, cancelSignal) {
|
|
85
|
+
if (cancelSignal.isCancelled) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// if the element is a HTMLElement we can detect
|
|
89
|
+
// the supported event, and memoize it in `mem`
|
|
90
|
+
if (element instanceof HTMLElement) {
|
|
91
|
+
if (typeof mem === "undefined") {
|
|
92
|
+
mem = findSupportedEvent(element, prefixedEvents);
|
|
93
|
+
}
|
|
94
|
+
if (isNonEmptyString(mem)) {
|
|
95
|
+
element.addEventListener(mem, listener);
|
|
96
|
+
cancelSignal.register(function () {
|
|
97
|
+
if (mem !== undefined) {
|
|
98
|
+
element.removeEventListener(mem, listener);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
if (0 /* __ENVIRONMENT__.CURRENT_ENV */ === 1 /* __ENVIRONMENT__.DEV */) {
|
|
104
|
+
log.warn("compat: element ".concat(element.tagName) +
|
|
105
|
+
" does not support any of these events: " +
|
|
106
|
+
prefixedEvents.join(", "));
|
|
107
|
+
}
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
prefixedEvents.forEach(function (eventName) {
|
|
112
|
+
element.addEventListener(eventName, listener);
|
|
113
|
+
cancelSignal.register(function () {
|
|
114
|
+
element.removeEventListener(eventName, listener);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
}
|
|
73
119
|
/**
|
|
74
120
|
* @param {Array.<string>} eventNames
|
|
75
121
|
* @param {Array.<string>|undefined} prefixes
|
|
@@ -186,7 +232,8 @@ function getVideoWidthFromPIPWindow(mediaElement, pipWindow) {
|
|
|
186
232
|
}
|
|
187
233
|
/**
|
|
188
234
|
* Emit when video enters and leaves Picture-In-Picture mode.
|
|
189
|
-
* @param {HTMLMediaElement}
|
|
235
|
+
* @param {HTMLMediaElement} elt
|
|
236
|
+
* @param {Object} stopListening
|
|
190
237
|
* @returns {Observable}
|
|
191
238
|
*/
|
|
192
239
|
function getPictureOnPictureStateRef(elt, stopListening) {
|
|
@@ -397,6 +444,21 @@ var onKeyError$ = compatibleListener(["keyerror", "error"]);
|
|
|
397
444
|
* @returns {Observable}
|
|
398
445
|
*/
|
|
399
446
|
var onKeyStatusesChange$ = compatibleListener(["keystatuseschange"]);
|
|
447
|
+
/**
|
|
448
|
+
* @param {HTMLMediaElement} mediaElement
|
|
449
|
+
* @returns {Observable}
|
|
450
|
+
*/
|
|
451
|
+
var onSeeking = createCompatibleEventListener(["seeking"]);
|
|
452
|
+
/**
|
|
453
|
+
* @param {HTMLMediaElement} mediaElement
|
|
454
|
+
* @returns {Observable}
|
|
455
|
+
*/
|
|
456
|
+
var onSeeked = createCompatibleEventListener(["seeked"]);
|
|
457
|
+
/**
|
|
458
|
+
* @param {HTMLMediaElement} mediaElement
|
|
459
|
+
* @returns {Observable}
|
|
460
|
+
*/
|
|
461
|
+
var onEnded = createCompatibleEventListener(["ended"]);
|
|
400
462
|
/**
|
|
401
463
|
* Utilitary function allowing to add an event listener and remove it
|
|
402
464
|
* automatically once the given `CancellationSignal` emits.
|
|
@@ -413,4 +475,4 @@ function addEventListener(elt, evt, listener, stopListening) {
|
|
|
413
475
|
elt.removeEventListener(evt, listener);
|
|
414
476
|
});
|
|
415
477
|
}
|
|
416
|
-
export { addEventListener, getPageActivityRef, getPictureOnPictureStateRef, getVideoVisibilityRef, getVideoWidthRef, onEncrypted$, onEnded$, onFullscreenChange$, onKeyAdded$, onKeyError$, onKeyMessage$, onKeyStatusesChange$, onLoadedMetadata$, onRemoveSourceBuffers$, onSeeked$, onSeeking$, onSourceClose$, onSourceEnded$, onSourceOpen$, onTextTrackChanges$, onTimeUpdate$, onUpdate$, };
|
|
478
|
+
export { addEventListener, getPageActivityRef, getPictureOnPictureStateRef, getVideoVisibilityRef, getVideoWidthRef, onEncrypted$, onEnded, onEnded$, onFullscreenChange$, onKeyAdded$, onKeyError$, onKeyMessage$, onKeyStatusesChange$, onLoadedMetadata$, onRemoveSourceBuffers$, onSeeked, onSeeked$, onSeeking, onSeeking$, onSourceClose$, onSourceEnded$, onSourceOpen$, onTextTrackChanges$, onTimeUpdate$, onUpdate$, };
|
|
@@ -13,14 +13,15 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import {
|
|
16
|
+
import { IReadOnlySharedReference } from "../utils/reference";
|
|
17
|
+
import { CancellationSignal } from "../utils/task_canceller";
|
|
17
18
|
export interface IResolution {
|
|
18
19
|
width: number;
|
|
19
20
|
height: number;
|
|
20
21
|
}
|
|
21
22
|
/**
|
|
22
|
-
* Emit the current height and width of the given `element`
|
|
23
|
-
*
|
|
23
|
+
* Emit the current height and width of the given `element` each time it
|
|
24
|
+
* changes.
|
|
24
25
|
*
|
|
25
26
|
* On some browsers, we might not be able to rely on a native API to know when
|
|
26
27
|
* it changes, the `interval` argument allow us to provide us an inverval in
|
|
@@ -29,4 +30,4 @@ export interface IResolution {
|
|
|
29
30
|
* @param {number} interval
|
|
30
31
|
* @returns {Observable}
|
|
31
32
|
*/
|
|
32
|
-
export default function onHeightWidthChange(element: HTMLElement, interval: number):
|
|
33
|
+
export default function onHeightWidthChange(element: HTMLElement, interval: number, cancellationSignal: CancellationSignal): IReadOnlySharedReference<IResolution>;
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { defer as observableDefer, distinctUntilChanged, interval as observableInterval, map, Observable, startWith, } from "rxjs";
|
|
17
16
|
import log from "../log";
|
|
17
|
+
import createSharedReference from "../utils/reference";
|
|
18
18
|
import isNode from "./is_node";
|
|
19
19
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
20
20
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
@@ -23,8 +23,8 @@ var _ResizeObserver = isNode ? undefined :
|
|
|
23
23
|
/* eslint-enable @typescript-eslint/no-unsafe-member-access */
|
|
24
24
|
/* eslint-enable @typescript-eslint/no-unsafe-assignment */
|
|
25
25
|
/**
|
|
26
|
-
* Emit the current height and width of the given `element`
|
|
27
|
-
*
|
|
26
|
+
* Emit the current height and width of the given `element` each time it
|
|
27
|
+
* changes.
|
|
28
28
|
*
|
|
29
29
|
* On some browsers, we might not be able to rely on a native API to know when
|
|
30
30
|
* it changes, the `interval` argument allow us to provide us an inverval in
|
|
@@ -33,36 +33,45 @@ var _ResizeObserver = isNode ? undefined :
|
|
|
33
33
|
* @param {number} interval
|
|
34
34
|
* @returns {Observable}
|
|
35
35
|
*/
|
|
36
|
-
export default function onHeightWidthChange(element, interval) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return new Observable(function (obs) {
|
|
42
|
-
var resizeObserver = new _ResizeObserver(function (entries) {
|
|
43
|
-
if (entries.length === 0) {
|
|
44
|
-
log.error("Compat: Resized but no observed element.");
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
var entry = entries[0];
|
|
48
|
-
var _a = entry.contentRect, height = _a.height, width = _a.width;
|
|
49
|
-
if (height !== lastHeight_1 || width !== lastWidth_1) {
|
|
50
|
-
lastHeight_1 = height;
|
|
51
|
-
lastWidth_1 = width;
|
|
52
|
-
obs.next({ height: height, width: width });
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
resizeObserver.observe(element);
|
|
56
|
-
return function () {
|
|
57
|
-
resizeObserver.disconnect();
|
|
58
|
-
};
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
return observableInterval(interval).pipe(startWith(null), map(function () {
|
|
62
|
-
var _a = element.getBoundingClientRect(), height = _a.height, width = _a.width;
|
|
63
|
-
return { height: height, width: width };
|
|
64
|
-
}), distinctUntilChanged(function (o, n) {
|
|
65
|
-
return o.height === n.height && o.width === n.width;
|
|
66
|
-
}));
|
|
36
|
+
export default function onHeightWidthChange(element, interval, cancellationSignal) {
|
|
37
|
+
var _a = element.getBoundingClientRect(), initHeight = _a.height, initWidth = _a.width;
|
|
38
|
+
var ref = createSharedReference({
|
|
39
|
+
height: initHeight,
|
|
40
|
+
width: initWidth,
|
|
67
41
|
});
|
|
42
|
+
var lastHeight = initHeight;
|
|
43
|
+
var lastWidth = initWidth;
|
|
44
|
+
if (_ResizeObserver !== undefined) {
|
|
45
|
+
var resizeObserver_1 = new _ResizeObserver(function (entries) {
|
|
46
|
+
if (entries.length === 0) {
|
|
47
|
+
log.error("Compat: Resized but no observed element.");
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
var entry = entries[0];
|
|
51
|
+
var _a = entry.contentRect, height = _a.height, width = _a.width;
|
|
52
|
+
if (height !== lastHeight || width !== lastWidth) {
|
|
53
|
+
lastHeight = height;
|
|
54
|
+
lastWidth = width;
|
|
55
|
+
ref.setValue({ height: height, width: width });
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
resizeObserver_1.observe(element);
|
|
59
|
+
cancellationSignal.register(function () {
|
|
60
|
+
resizeObserver_1.disconnect();
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
var intervalId_1 = setInterval(function () {
|
|
65
|
+
var _a = element.getBoundingClientRect(), height = _a.height, width = _a.width;
|
|
66
|
+
if (height !== lastHeight || width !== lastWidth) {
|
|
67
|
+
lastHeight = height;
|
|
68
|
+
lastWidth = width;
|
|
69
|
+
ref.setValue({ height: height, width: width });
|
|
70
|
+
}
|
|
71
|
+
}, interval);
|
|
72
|
+
cancellationSignal.register(function () {
|
|
73
|
+
clearInterval(intervalId_1);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
return ref;
|
|
68
77
|
}
|
|
@@ -69,7 +69,7 @@ function createAudioTracks(audioTracks) {
|
|
|
69
69
|
occurences.toString();
|
|
70
70
|
languagesOccurences[language] = occurences + 1;
|
|
71
71
|
var track = { language: audioTrack.language, id: id, normalized: normalizeLanguage(audioTrack.language),
|
|
72
|
-
audioDescription:
|
|
72
|
+
audioDescription: audioTrack.kind === "descriptions",
|
|
73
73
|
representations: [] };
|
|
74
74
|
newAudioTracks.push({ track: track, nativeTrack: audioTrack });
|
|
75
75
|
}
|
|
@@ -54,7 +54,7 @@ export default class PlaybackObserver {
|
|
|
54
54
|
* This allows us to correctly characterize seeking events: if the counter is
|
|
55
55
|
* superior to `0`, it is probably due to an internal "seek".
|
|
56
56
|
*/
|
|
57
|
-
private
|
|
57
|
+
private _internalSeeksIncoming;
|
|
58
58
|
/**
|
|
59
59
|
* Stores the last playback observation produced by the `PlaybackObserver`.:
|
|
60
60
|
*/
|
|
@@ -92,6 +92,11 @@ export default class PlaybackObserver {
|
|
|
92
92
|
* @returns {number}
|
|
93
93
|
*/
|
|
94
94
|
getCurrentTime(): number;
|
|
95
|
+
/**
|
|
96
|
+
* Returns the current playback rate advertised by the `HTMLMediaElement`.
|
|
97
|
+
* @returns {number}
|
|
98
|
+
*/
|
|
99
|
+
getPlaybackRate(): number;
|
|
95
100
|
/**
|
|
96
101
|
* Returns the current `paused` status advertised by the `HTMLMediaElement`.
|
|
97
102
|
*
|
|
@@ -272,7 +277,7 @@ export interface IPlaybackObservation extends IMediaInfos {
|
|
|
272
277
|
* If `true`, an "internal seek" (a seeking operation triggered by the
|
|
273
278
|
* RxPlayer code) is currently pending.
|
|
274
279
|
*/
|
|
275
|
-
|
|
280
|
+
pendingInternalSeek: number | null;
|
|
276
281
|
}
|
|
277
282
|
/**
|
|
278
283
|
* Interface providing a generic and read-only version of a `PlaybackObserver`.
|
|
@@ -289,6 +294,11 @@ export interface IPlaybackObservation extends IMediaInfos {
|
|
|
289
294
|
export interface IReadOnlyPlaybackObserver<TObservationType> {
|
|
290
295
|
/** Get the current playing position, in seconds. */
|
|
291
296
|
getCurrentTime(): number;
|
|
297
|
+
/**
|
|
298
|
+
* Returns the current playback rate advertised by the `HTMLMediaElement`.
|
|
299
|
+
* @returns {number}
|
|
300
|
+
*/
|
|
301
|
+
getPlaybackRate(): number;
|
|
292
302
|
/** Get the HTMLMediaElement's current `readyState`. */
|
|
293
303
|
getReadyState(): number;
|
|
294
304
|
/**
|
|
@@ -58,7 +58,7 @@ var PlaybackObserver = /** @class */ (function () {
|
|
|
58
58
|
* @param {Object} options
|
|
59
59
|
*/
|
|
60
60
|
function PlaybackObserver(mediaElement, options) {
|
|
61
|
-
this.
|
|
61
|
+
this._internalSeeksIncoming = [];
|
|
62
62
|
this._mediaElement = mediaElement;
|
|
63
63
|
this._withMediaSource = options.withMediaSource;
|
|
64
64
|
this._lowLatencyMode = options.lowLatencyMode;
|
|
@@ -86,6 +86,13 @@ var PlaybackObserver = /** @class */ (function () {
|
|
|
86
86
|
PlaybackObserver.prototype.getCurrentTime = function () {
|
|
87
87
|
return this._mediaElement.currentTime;
|
|
88
88
|
};
|
|
89
|
+
/**
|
|
90
|
+
* Returns the current playback rate advertised by the `HTMLMediaElement`.
|
|
91
|
+
* @returns {number}
|
|
92
|
+
*/
|
|
93
|
+
PlaybackObserver.prototype.getPlaybackRate = function () {
|
|
94
|
+
return this._mediaElement.playbackRate;
|
|
95
|
+
};
|
|
89
96
|
/**
|
|
90
97
|
* Returns the current `paused` status advertised by the `HTMLMediaElement`.
|
|
91
98
|
*
|
|
@@ -107,7 +114,7 @@ var PlaybackObserver = /** @class */ (function () {
|
|
|
107
114
|
* @param {number} time
|
|
108
115
|
*/
|
|
109
116
|
PlaybackObserver.prototype.setCurrentTime = function (time) {
|
|
110
|
-
this.
|
|
117
|
+
this._internalSeeksIncoming.push(time);
|
|
111
118
|
this._mediaElement.currentTime = time;
|
|
112
119
|
};
|
|
113
120
|
/**
|
|
@@ -180,24 +187,29 @@ var PlaybackObserver = /** @class */ (function () {
|
|
|
180
187
|
var _a = config.getCurrent(), SAMPLING_INTERVAL_MEDIASOURCE = _a.SAMPLING_INTERVAL_MEDIASOURCE, SAMPLING_INTERVAL_LOW_LATENCY = _a.SAMPLING_INTERVAL_LOW_LATENCY, SAMPLING_INTERVAL_NO_MEDIASOURCE = _a.SAMPLING_INTERVAL_NO_MEDIASOURCE;
|
|
181
188
|
var getCurrentObservation = function (event) {
|
|
182
189
|
var tmpEvt = event;
|
|
183
|
-
|
|
190
|
+
var startedInternalSeekTime;
|
|
191
|
+
if (tmpEvt === "seeking" && _this._internalSeeksIncoming.length > 0) {
|
|
184
192
|
tmpEvt = "internal-seeking";
|
|
185
|
-
_this.
|
|
193
|
+
startedInternalSeekTime = _this._internalSeeksIncoming.shift();
|
|
186
194
|
}
|
|
187
195
|
var _lastObservation = lastObservation !== null && lastObservation !== void 0 ? lastObservation : _this._generateInitialObservation();
|
|
188
196
|
var mediaTimings = getMediaInfos(_this._mediaElement, tmpEvt);
|
|
189
|
-
var
|
|
190
|
-
|
|
191
|
-
(
|
|
192
|
-
|
|
193
|
-
|
|
197
|
+
var pendingInternalSeek = null;
|
|
198
|
+
if (mediaTimings.seeking) {
|
|
199
|
+
if (typeof startedInternalSeekTime === "number") {
|
|
200
|
+
pendingInternalSeek = startedInternalSeekTime;
|
|
201
|
+
}
|
|
202
|
+
else if (_lastObservation.pendingInternalSeek !== null && event !== "seeking") {
|
|
203
|
+
pendingInternalSeek = _lastObservation.pendingInternalSeek;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
194
206
|
var rebufferingStatus = getRebufferingStatus(_lastObservation, mediaTimings, { lowLatencyMode: _this._lowLatencyMode,
|
|
195
207
|
withMediaSource: _this._withMediaSource });
|
|
196
208
|
var freezingStatus = getFreezingStatus(_lastObservation, mediaTimings);
|
|
197
209
|
var timings = objectAssign({}, { rebuffering: rebufferingStatus,
|
|
198
|
-
freezing: freezingStatus,
|
|
210
|
+
freezing: freezingStatus, pendingInternalSeek: pendingInternalSeek }, mediaTimings);
|
|
199
211
|
if (log.hasLevel("DEBUG")) {
|
|
200
|
-
log.debug("API: current media element state tick", "event", timings.event, "position", timings.position, "seeking", timings.seeking, "
|
|
212
|
+
log.debug("API: current media element state tick", "event", timings.event, "position", timings.position, "seeking", timings.seeking, "internalSeek", timings.pendingInternalSeek, "rebuffering", timings.rebuffering !== null, "freezing", timings.freezing !== null, "ended", timings.ended, "paused", timings.paused, "playbackRate", timings.playbackRate, "readyState", timings.readyState);
|
|
201
213
|
}
|
|
202
214
|
return timings;
|
|
203
215
|
};
|
|
@@ -242,7 +254,7 @@ var PlaybackObserver = /** @class */ (function () {
|
|
|
242
254
|
PlaybackObserver.prototype._generateInitialObservation = function () {
|
|
243
255
|
return objectAssign(getMediaInfos(this._mediaElement, "init"), { rebuffering: null,
|
|
244
256
|
freezing: null,
|
|
245
|
-
|
|
257
|
+
pendingInternalSeek: null });
|
|
246
258
|
};
|
|
247
259
|
return PlaybackObserver;
|
|
248
260
|
}());
|
|
@@ -504,6 +516,9 @@ function generateReadOnlyObserver(src, transform, cancellationSignal) {
|
|
|
504
516
|
getReadyState: function () {
|
|
505
517
|
return src.getReadyState();
|
|
506
518
|
},
|
|
519
|
+
getPlaybackRate: function () {
|
|
520
|
+
return src.getPlaybackRate();
|
|
521
|
+
},
|
|
507
522
|
getIsPaused: function () {
|
|
508
523
|
return src.getIsPaused();
|
|
509
524
|
},
|
|
@@ -88,7 +88,7 @@ var Player = /** @class */ (function (_super) {
|
|
|
88
88
|
// Workaround to support Firefox autoplay on FF 42.
|
|
89
89
|
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
|
|
90
90
|
videoElement.preload = "auto";
|
|
91
|
-
_this.version = /* PLAYER_VERSION */ "3.
|
|
91
|
+
_this.version = /* PLAYER_VERSION */ "3.29.0-dev.2022090500";
|
|
92
92
|
_this.log = log;
|
|
93
93
|
_this.state = "STOPPED";
|
|
94
94
|
_this.videoElement = videoElement;
|
|
@@ -373,13 +373,15 @@ var Player = /** @class */ (function (_super) {
|
|
|
373
373
|
throw new Error("transport \"".concat(transport, "\" not supported"));
|
|
374
374
|
}
|
|
375
375
|
var transportPipelines = transportFn(transportOptions);
|
|
376
|
-
var offlineRetry = networkConfig.offlineRetry, segmentRetry = networkConfig.segmentRetry, manifestRetry = networkConfig.manifestRetry;
|
|
376
|
+
var offlineRetry = networkConfig.offlineRetry, segmentRetry = networkConfig.segmentRetry, manifestRetry = networkConfig.manifestRetry, manifestRequestTimeout = networkConfig.manifestRequestTimeout, segmentRequestTimeout = networkConfig.segmentRequestTimeout;
|
|
377
377
|
/** Interface used to load and refresh the Manifest. */
|
|
378
378
|
var manifestFetcher = new ManifestFetcher(url, transportPipelines, { lowLatencyMode: lowLatencyMode, maxRetryRegular: manifestRetry,
|
|
379
|
-
maxRetryOffline: offlineRetry
|
|
379
|
+
maxRetryOffline: offlineRetry,
|
|
380
|
+
requestTimeout: manifestRequestTimeout });
|
|
380
381
|
/** Interface used to download segments. */
|
|
381
382
|
var segmentFetcherCreator = new SegmentFetcherCreator(transportPipelines, { lowLatencyMode: lowLatencyMode, maxRetryOffline: offlineRetry,
|
|
382
|
-
maxRetryRegular: segmentRetry
|
|
383
|
+
maxRetryRegular: segmentRetry,
|
|
384
|
+
requestTimeout: segmentRequestTimeout });
|
|
383
385
|
/** Observable emitting the initial Manifest */
|
|
384
386
|
var manifest$ = void 0;
|
|
385
387
|
if (initialManifest instanceof Manifest) {
|
|
@@ -587,15 +589,13 @@ var Player = /** @class */ (function (_super) {
|
|
|
587
589
|
// Handle state updates
|
|
588
590
|
playerState$
|
|
589
591
|
.pipe(takeUntil(stoppedContent$))
|
|
590
|
-
.subscribe(function (
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
.subscribe(function () {
|
|
598
|
-
currentContentCanceller.cancel();
|
|
592
|
+
.subscribe(function (newState) {
|
|
593
|
+
_this._priv_setPlayerState(newState);
|
|
594
|
+
// Previous call could have performed all kind of side-effects, thus,
|
|
595
|
+
// we re-check the current state associated to the RxPlayer
|
|
596
|
+
if (_this.state === "ENDED" && _this._priv_stopAtEnd) {
|
|
597
|
+
currentContentCanceller.cancel();
|
|
598
|
+
}
|
|
599
599
|
});
|
|
600
600
|
// Link playback events to the corresponding callbacks
|
|
601
601
|
playback$.subscribe({
|
|
@@ -2295,5 +2295,5 @@ var Player = /** @class */ (function (_super) {
|
|
|
2295
2295
|
};
|
|
2296
2296
|
return Player;
|
|
2297
2297
|
}(EventEmitter));
|
|
2298
|
-
Player.version = /* PLAYER_VERSION */ "3.
|
|
2298
|
+
Player.version = /* PLAYER_VERSION */ "3.29.0-dev.2022090500";
|
|
2299
2299
|
export default Player;
|