rx-player 3.26.2 → 3.26.3-dev.2022021400
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/perfs.yml +22 -0
- package/CHANGELOG.md +19 -1
- package/VERSION +1 -1
- package/dist/_esm5.processed/compat/eme/custom_media_keys/index.js +6 -2
- package/dist/_esm5.processed/core/abr/buffer_based_chooser.d.ts +28 -6
- package/dist/_esm5.processed/core/abr/buffer_based_chooser.js +63 -12
- package/dist/_esm5.processed/core/abr/network_analyzer.d.ts +1 -1
- package/dist/_esm5.processed/core/abr/pending_requests_store.js +3 -5
- package/dist/_esm5.processed/core/abr/representation_estimator.d.ts +1 -1
- package/dist/_esm5.processed/core/abr/representation_estimator.js +2 -2
- package/dist/_esm5.processed/core/api/media_element_track_choice_manager.d.ts +6 -0
- package/dist/_esm5.processed/core/api/media_element_track_choice_manager.js +20 -3
- package/dist/_esm5.processed/core/api/public_api.d.ts +3 -3
- package/dist/_esm5.processed/core/api/public_api.js +2 -2
- package/dist/_esm5.processed/core/api/track_choice_manager.d.ts +6 -6
- package/dist/_esm5.processed/core/eme/__tests__/__global__/utils.d.ts +0 -2
- package/dist/_esm5.processed/core/eme/__tests__/__global__/utils.js +5 -10
- package/dist/_esm5.processed/core/eme/find_key_system.js +15 -5
- package/dist/_esm5.processed/core/eme/types.d.ts +2 -2
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.d.ts +4 -4
- package/dist/_esm5.processed/core/fetchers/manifest/manifest_fetcher.js +1 -1
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.d.ts +2 -2
- package/dist/_esm5.processed/core/fetchers/segment/segment_fetcher.js +5 -1
- package/dist/_esm5.processed/core/fetchers/utils/try_urls_with_backoff.js +1 -1
- package/dist/_esm5.processed/core/init/initialize_directfile.d.ts +2 -2
- package/dist/_esm5.processed/core/init/initialize_media_source.d.ts +1 -1
- package/dist/_esm5.processed/core/init/manifest_update_scheduler.d.ts +4 -4
- package/dist/_esm5.processed/core/init/stream_events_emitter/are_same_stream_events.d.ts +4 -4
- package/dist/_esm5.processed/core/init/stream_events_emitter/types.d.ts +2 -2
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/html_text_segment_buffer.d.ts +3 -3
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/html/text_track_cues_store.js +32 -31
- package/dist/_esm5.processed/core/segment_buffers/implementations/text/native/native_text_segment_buffer.d.ts +4 -4
- package/dist/_esm5.processed/core/stream/representation/force_garbage_collection.js +3 -4
- package/dist/_esm5.processed/errors/request_error.js +3 -1
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.d.ts +2 -2
- package/dist/_esm5.processed/experimental/tools/VideoThumbnailLoader/thumbnail_loader.js +1 -3
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.d.ts +1 -1
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.js +1 -1
- package/dist/_esm5.processed/experimental/tools/mediaCapabilitiesProber/types.d.ts +3 -3
- package/dist/_esm5.processed/manifest/adaptation.d.ts +2 -2
- package/dist/_esm5.processed/manifest/adaptation.js +3 -1
- package/dist/_esm5.processed/manifest/manifest.d.ts +9 -9
- package/dist/_esm5.processed/manifest/period.d.ts +3 -3
- package/dist/_esm5.processed/manifest/representation.d.ts +2 -2
- package/dist/_esm5.processed/manifest/representation_index/types.d.ts +18 -18
- package/dist/_esm5.processed/manifest/types.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_hdr_information.d.ts +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/get_periods_time_infos.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/base.d.ts +6 -6
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_init_segment.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/get_segments_from_timeline.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/list.d.ts +14 -14
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/template.d.ts +17 -17
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.d.ts +28 -20
- package/dist/_esm5.processed/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.js +19 -4
- package/dist/_esm5.processed/parsers/manifest/dash/common/infer_adaptation_type.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/dash/common/manifest_bounds_calculator.d.ts +1 -1
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.d.ts +17 -35
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_adaptation_sets.js +24 -23
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_mpd.d.ts +8 -8
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.d.ts +18 -27
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_periods.js +25 -23
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.d.ts +21 -15
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representation_index.js +19 -19
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.d.ts +15 -38
- package/dist/_esm5.processed/parsers/manifest/dash/common/parse_representations.js +8 -8
- package/dist/_esm5.processed/parsers/manifest/dash/node_parser_types.d.ts +30 -30
- package/dist/_esm5.processed/parsers/manifest/dash/parsers_types.d.ts +3 -3
- package/dist/_esm5.processed/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.js +1 -1
- package/dist/_esm5.processed/parsers/manifest/metaplaylist/metaplaylist_parser.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/smooth/create_parser.d.ts +7 -7
- package/dist/_esm5.processed/parsers/manifest/smooth/representation_index.d.ts +8 -8
- package/dist/_esm5.processed/parsers/manifest/types.d.ts +28 -28
- package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.d.ts +3 -2
- package/dist/_esm5.processed/parsers/manifest/utils/clear_timeline_from_position.js +15 -5
- package/dist/_esm5.processed/parsers/manifest/utils/index_helpers.d.ts +2 -2
- package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.d.ts +11 -1
- package/dist/_esm5.processed/parsers/manifest/utils/update_segment_timeline.js +31 -19
- package/dist/_esm5.processed/parsers/texttracks/webvtt/html/to_html.d.ts +2 -2
- package/dist/_esm5.processed/parsers/texttracks/webvtt/parse_cue_block.d.ts +1 -1
- package/dist/_esm5.processed/transports/dash/add_segment_integrity_checks_to_loader.js +2 -1
- package/dist/_esm5.processed/transports/dash/image_pipelines.js +1 -1
- package/dist/_esm5.processed/transports/dash/init_segment_loader.js +1 -1
- package/dist/_esm5.processed/transports/dash/manifest_parser.js +1 -1
- package/dist/_esm5.processed/transports/dash/segment_loader.d.ts +2 -2
- package/dist/_esm5.processed/transports/dash/segment_loader.js +2 -2
- package/dist/_esm5.processed/transports/dash/segment_parser.d.ts +1 -1
- package/dist/_esm5.processed/transports/dash/text_loader.d.ts +1 -1
- package/dist/_esm5.processed/transports/dash/text_loader.js +1 -1
- package/dist/_esm5.processed/transports/dash/text_parser.d.ts +1 -1
- package/dist/_esm5.processed/transports/local/segment_loader.d.ts +1 -2
- package/dist/_esm5.processed/transports/local/segment_loader.js +1 -1
- package/dist/_esm5.processed/transports/metaplaylist/manifest_loader.d.ts +1 -1
- package/dist/_esm5.processed/transports/metaplaylist/pipelines.js +1 -1
- package/dist/_esm5.processed/transports/smooth/pipelines.js +1 -1
- package/dist/_esm5.processed/transports/smooth/segment_loader.d.ts +0 -1
- package/dist/_esm5.processed/transports/smooth/segment_loader.js +2 -2
- package/dist/_esm5.processed/transports/types.d.ts +36 -30
- package/dist/_esm5.processed/transports/utils/call_custom_manifest_loader.js +1 -1
- package/dist/_esm5.processed/transports/utils/generate_manifest_loader.d.ts +1 -1
- package/dist/_esm5.processed/utils/cancellable_sleep.js +1 -1
- package/dist/_esm5.processed/utils/cast_to_observable.d.ts +1 -2
- package/dist/_esm5.processed/utils/cast_to_observable.js +1 -1
- package/dist/_esm5.processed/utils/request/fetch.d.ts +4 -5
- package/dist/_esm5.processed/utils/request/fetch.js +7 -4
- package/dist/_esm5.processed/utils/request/xhr.d.ts +6 -6
- package/dist/_esm5.processed/utils/request/xhr.js +2 -1
- package/dist/_esm5.processed/utils/rx-from_cancellable_promise.d.ts +1 -2
- package/dist/rx-player.js +404 -321
- package/dist/rx-player.min.js +1 -1
- package/package.json +3 -4
- package/scripts/doc-generator/generate_header_html.js +6 -7
- package/scripts/doc-generator/generate_page_html.js +3 -4
- package/scripts/doc-generator/generate_page_list_html.js +4 -5
- package/scripts/doc-generator/generate_sidebar_html.js +4 -7
- package/scripts/doc-generator/utils.js +0 -11
- package/scripts/generate_demo_list.js +3 -3
- package/scripts/generate_documentation_list.js +3 -3
- package/scripts/launch_static_server.js +127 -67
- package/scripts/run_standalone_demo.js +1 -0
- package/scripts/start_demo_web_server.js +1 -0
- package/sonar-project.properties +1 -1
- package/src/compat/__tests__/fullscreen.test.ts +7 -7
- package/src/compat/__tests__/is_vtt_cue.test.ts +1 -1
- package/src/compat/eme/custom_media_keys/ie11_media_keys.ts +1 -1
- package/src/compat/eme/custom_media_keys/index.ts +7 -3
- package/src/core/abr/__tests__/{get_estimate_from_buffer_levels.test.ts → buffer_based_chooser.test.ts} +94 -123
- package/src/core/abr/buffer_based_chooser.ts +85 -20
- package/src/core/abr/network_analyzer.ts +1 -1
- package/src/core/abr/pending_requests_store.ts +3 -5
- package/src/core/abr/representation_estimator.ts +6 -3
- package/src/core/api/media_element_track_choice_manager.ts +22 -3
- package/src/core/api/public_api.ts +6 -6
- package/src/core/api/track_choice_manager.ts +10 -9
- package/src/core/eme/__tests__/__global__/utils.ts +5 -10
- package/src/core/eme/find_key_system.ts +14 -12
- package/src/core/eme/types.ts +2 -2
- package/src/core/fetchers/manifest/manifest_fetcher.ts +5 -5
- package/src/core/fetchers/segment/segment_fetcher.ts +6 -3
- package/src/core/fetchers/utils/try_urls_with_backoff.ts +1 -1
- package/src/core/init/initialize_directfile.ts +2 -2
- package/src/core/init/initialize_media_source.ts +2 -2
- package/src/core/init/manifest_update_scheduler.ts +7 -7
- package/src/core/init/stream_events_emitter/are_same_stream_events.ts +4 -4
- package/src/core/init/stream_events_emitter/types.ts +2 -2
- package/src/core/segment_buffers/implementations/text/html/html_text_segment_buffer.ts +3 -3
- package/src/core/segment_buffers/implementations/text/html/text_track_cues_store.ts +32 -31
- package/src/core/segment_buffers/implementations/text/native/native_text_segment_buffer.ts +4 -4
- package/src/core/stream/representation/force_garbage_collection.ts +3 -5
- package/src/errors/request_error.ts +4 -1
- package/src/experimental/tools/VideoThumbnailLoader/thumbnail_loader.ts +3 -6
- package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +1 -1
- package/src/experimental/tools/mediaCapabilitiesProber/api/probeMediaConfiguration.ts +3 -3
- package/src/experimental/tools/mediaCapabilitiesProber/types.ts +3 -3
- package/src/manifest/adaptation.ts +6 -4
- package/src/manifest/manifest.ts +10 -10
- package/src/manifest/period.ts +3 -3
- package/src/manifest/representation.ts +2 -2
- package/src/manifest/representation_index/types.ts +18 -18
- package/src/manifest/types.ts +3 -3
- package/src/parsers/manifest/dash/common/__tests__/manifest_bounds_calculator.test.ts +1 -0
- package/src/parsers/manifest/dash/common/get_hdr_information.ts +1 -1
- package/src/parsers/manifest/dash/common/get_periods_time_infos.ts +3 -3
- package/src/parsers/manifest/dash/common/indexes/base.ts +6 -6
- package/src/parsers/manifest/dash/common/indexes/get_init_segment.ts +4 -2
- package/src/parsers/manifest/dash/common/indexes/get_segments_from_timeline.ts +2 -2
- package/src/parsers/manifest/dash/common/indexes/list.ts +14 -14
- package/src/parsers/manifest/dash/common/indexes/template.ts +17 -16
- package/src/parsers/manifest/dash/common/indexes/timeline/construct_timeline_from_elements.ts +1 -1
- package/src/parsers/manifest/dash/common/indexes/timeline/timeline_representation_index.ts +50 -22
- package/src/parsers/manifest/dash/common/infer_adaptation_type.ts +2 -2
- package/src/parsers/manifest/dash/common/manifest_bounds_calculator.ts +1 -1
- package/src/parsers/manifest/dash/common/parse_adaptation_sets.ts +58 -70
- package/src/parsers/manifest/dash/common/parse_mpd.ts +8 -8
- package/src/parsers/manifest/dash/common/parse_periods.ts +80 -79
- package/src/parsers/manifest/dash/common/parse_representation_index.ts +83 -75
- package/src/parsers/manifest/dash/common/parse_representations.ts +44 -63
- package/src/parsers/manifest/dash/node_parser_types.ts +30 -30
- package/src/parsers/manifest/dash/parsers_types.ts +3 -3
- package/src/parsers/manifest/dash/wasm-parser/ts/dash-wasm-parser.ts +1 -1
- package/src/parsers/manifest/metaplaylist/metaplaylist_parser.ts +4 -4
- package/src/parsers/manifest/smooth/create_parser.ts +23 -21
- package/src/parsers/manifest/smooth/representation_index.ts +14 -14
- package/src/parsers/manifest/types.ts +28 -28
- package/src/parsers/manifest/utils/__tests__/update_segment_timeline.test.ts +31 -33
- package/src/parsers/manifest/utils/clear_timeline_from_position.ts +15 -6
- package/src/parsers/manifest/utils/index_helpers.ts +2 -2
- package/src/parsers/manifest/utils/update_segment_timeline.ts +32 -21
- package/src/parsers/texttracks/webvtt/html/to_html.ts +2 -2
- package/src/parsers/texttracks/webvtt/parse_cue_block.ts +1 -1
- package/src/transports/dash/add_segment_integrity_checks_to_loader.ts +2 -2
- package/src/transports/dash/image_pipelines.ts +1 -1
- package/src/transports/dash/init_segment_loader.ts +1 -1
- package/src/transports/dash/manifest_parser.ts +1 -1
- package/src/transports/dash/segment_loader.ts +7 -7
- package/src/transports/dash/segment_parser.ts +3 -1
- package/src/transports/dash/text_loader.ts +2 -2
- package/src/transports/dash/text_parser.ts +3 -1
- package/src/transports/local/segment_loader.ts +4 -4
- package/src/transports/metaplaylist/manifest_loader.ts +1 -1
- package/src/transports/metaplaylist/pipelines.ts +1 -1
- package/src/transports/smooth/pipelines.ts +7 -7
- package/src/transports/smooth/segment_loader.ts +8 -8
- package/src/transports/types.ts +37 -30
- package/src/transports/utils/call_custom_manifest_loader.ts +6 -6
- package/src/transports/utils/generate_manifest_loader.ts +1 -1
- package/src/utils/__tests__/flat_map.test.ts +12 -7
- package/src/utils/cancellable_sleep.ts +1 -1
- package/src/utils/cast_to_observable.ts +1 -2
- package/src/utils/request/fetch.ts +16 -13
- package/src/utils/request/xhr.ts +9 -7
- package/src/utils/rx-from_cancellable_promise.ts +1 -2
- package/tsconfig.json +1 -2
- package/tsconfig.modules.json +1 -2
- package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.d.ts +0 -29
- package/dist/_esm5.processed/core/abr/get_estimate_from_buffer_levels.js +0 -67
- package/src/core/abr/get_estimate_from_buffer_levels.ts +0 -85
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: Performance tests
|
|
2
|
+
on:
|
|
3
|
+
pull_request:
|
|
4
|
+
types: [ labeled ]
|
|
5
|
+
|
|
6
|
+
jobs:
|
|
7
|
+
perf-tests:
|
|
8
|
+
if: ${{ github.event.label.name == 'Performance checks' }}
|
|
9
|
+
runs-on: [ubuntu-latest]
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v2
|
|
12
|
+
- name: Use Node.js ${{ matrix.node-version }}
|
|
13
|
+
uses: actions/setup-node@v2
|
|
14
|
+
with:
|
|
15
|
+
node-version: ${{ matrix.node-version }}
|
|
16
|
+
cache: 'npm'
|
|
17
|
+
# needed for integration & memory tests codecs support
|
|
18
|
+
- run: sudo add-apt-repository multiverse && sudo apt update && sudo apt install -y ubuntu-restricted-extras
|
|
19
|
+
- run: npm install
|
|
20
|
+
- run: export DISPLAY=:99
|
|
21
|
+
- run: sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 & # optional
|
|
22
|
+
- run: node tests/performance/run.js
|
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## v3.26.
|
|
3
|
+
## v3.26.3-dev.2022021400 (2022-02-14)
|
|
4
|
+
|
|
5
|
+
### Bug fixes
|
|
6
|
+
|
|
7
|
+
- subtitles: Fix rare issue where subtitles could be skipped due to a rounding error [#1064]
|
|
8
|
+
- DASH: fix issue where the wrong segments would be requested on $Number$-based MPD with a SegmentTimeline older than the `timeShiftBufferDepth` [#1052, #1060]
|
|
9
|
+
- directfile: disable all audio tracks before enabling one to work-around Safari issue on MacOS Monterey [#1067]
|
|
10
|
+
- avoid unnecessary warning logs when loading some initialization segments [#1049]
|
|
11
|
+
- TypeScript: Add forgotten TypeScript types in the exposed segment and manifest loader APIs [#1057]
|
|
12
|
+
|
|
13
|
+
### Other improvements
|
|
14
|
+
|
|
15
|
+
- DASH: always consider that the non-last Period is finished when it contains SegmentTimeline elements [#1047]
|
|
16
|
+
- add better buffer cleaning logic on a browser's `QuotaExceededError` to better handle memory limitations [#1065]
|
|
17
|
+
- avoid mistakenly relying on pinkie's Promise implementation when a native one is already available [#1058]
|
|
18
|
+
- tests: add performance tests, to better catch and avoid performance regressions [#1053, #1062]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
## v3.26.2 (2022-01-11)
|
|
4
22
|
|
|
5
23
|
### Bug fixes
|
|
6
24
|
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.26.
|
|
1
|
+
3.26.3-dev.2022021400
|
|
@@ -129,13 +129,17 @@ else {
|
|
|
129
129
|
supported = supported && (distinctiveIdentifier !== "required");
|
|
130
130
|
if (supported) {
|
|
131
131
|
var keySystemConfigurationResponse = {
|
|
132
|
-
videoCapabilities: videoCapabilities,
|
|
133
|
-
audioCapabilities: audioCapabilities,
|
|
134
132
|
initDataTypes: ["cenc"],
|
|
135
133
|
distinctiveIdentifier: "not-allowed",
|
|
136
134
|
persistentState: "required",
|
|
137
135
|
sessionTypes: ["temporary", "persistent-license"],
|
|
138
136
|
};
|
|
137
|
+
if (videoCapabilities !== undefined) {
|
|
138
|
+
keySystemConfigurationResponse.videoCapabilities = videoCapabilities;
|
|
139
|
+
}
|
|
140
|
+
if (audioCapabilities !== undefined) {
|
|
141
|
+
keySystemConfigurationResponse.audioCapabilities = audioCapabilities;
|
|
142
|
+
}
|
|
139
143
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
140
144
|
var customMediaKeys = createCustomMediaKeys_1(keyType);
|
|
141
145
|
return observableOf(new CustomMediaKeySystemAccess(keyType, customMediaKeys, keySystemConfigurationResponse));
|
|
@@ -13,8 +13,6 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { Observable } from "rxjs";
|
|
17
|
-
import { IBufferBasedChooserPlaybackObservation } from "./get_estimate_from_buffer_levels";
|
|
18
16
|
/**
|
|
19
17
|
* Choose a bitrate based on the currently available buffer.
|
|
20
18
|
*
|
|
@@ -26,8 +24,32 @@ import { IBufferBasedChooserPlaybackObservation } from "./get_estimate_from_buff
|
|
|
26
24
|
* "maintanable" or not.
|
|
27
25
|
* If so, we may switch to a better quality, or conversely to a worse quality.
|
|
28
26
|
*
|
|
29
|
-
* @
|
|
30
|
-
* @param {Array.<number>} bitrates
|
|
31
|
-
* @returns {Observable}
|
|
27
|
+
* @class BufferBasedChooser
|
|
32
28
|
*/
|
|
33
|
-
export default
|
|
29
|
+
export default class BufferBasedChooser {
|
|
30
|
+
private _levelsMap;
|
|
31
|
+
private _bitrates;
|
|
32
|
+
/**
|
|
33
|
+
* @param {Array.<number>} number;
|
|
34
|
+
*/
|
|
35
|
+
constructor(bitrates: number[]);
|
|
36
|
+
/**
|
|
37
|
+
* @param {Object} playbackObservation
|
|
38
|
+
* @returns {number|undefined}
|
|
39
|
+
*/
|
|
40
|
+
getEstimate(playbackObservation: IBufferBasedChooserPlaybackObservation): number | undefined;
|
|
41
|
+
}
|
|
42
|
+
/** Playback observation needed by the `BufferBasedChooser`. */
|
|
43
|
+
export interface IBufferBasedChooserPlaybackObservation {
|
|
44
|
+
/**
|
|
45
|
+
* Difference in seconds between the current position and the next
|
|
46
|
+
* non-buffered position
|
|
47
|
+
*/
|
|
48
|
+
bufferGap: number;
|
|
49
|
+
/** The bitrate of the currently downloaded segments, in bps. */
|
|
50
|
+
currentBitrate?: number | undefined;
|
|
51
|
+
/** The "maintainability score" of the currently downloaded segments. */
|
|
52
|
+
currentScore?: number | undefined;
|
|
53
|
+
/** Playback rate wanted */
|
|
54
|
+
speed: number;
|
|
55
|
+
}
|
|
@@ -13,10 +13,9 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { map, } from "rxjs";
|
|
17
16
|
import log from "../../log";
|
|
17
|
+
import arrayFindIndex from "../../utils/array_find_index";
|
|
18
18
|
import getBufferLevels from "./get_buffer_levels";
|
|
19
|
-
import getEstimateFromBufferLevels from "./get_estimate_from_buffer_levels";
|
|
20
19
|
/**
|
|
21
20
|
* Choose a bitrate based on the currently available buffer.
|
|
22
21
|
*
|
|
@@ -28,14 +27,66 @@ import getEstimateFromBufferLevels from "./get_estimate_from_buffer_levels";
|
|
|
28
27
|
* "maintanable" or not.
|
|
29
28
|
* If so, we may switch to a better quality, or conversely to a worse quality.
|
|
30
29
|
*
|
|
31
|
-
* @
|
|
32
|
-
* @param {Array.<number>} bitrates
|
|
33
|
-
* @returns {Observable}
|
|
30
|
+
* @class BufferBasedChooser
|
|
34
31
|
*/
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
32
|
+
var BufferBasedChooser = /** @class */ (function () {
|
|
33
|
+
/**
|
|
34
|
+
* @param {Array.<number>} number;
|
|
35
|
+
*/
|
|
36
|
+
function BufferBasedChooser(bitrates) {
|
|
37
|
+
this._levelsMap = getBufferLevels(bitrates);
|
|
38
|
+
this._bitrates = bitrates;
|
|
39
|
+
log.debug("ABR: Steps for buffer based chooser.", this._levelsMap.map(function (l, i) { return ({ bufferLevel: l, bitrate: bitrates[i] }); }));
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @param {Object} playbackObservation
|
|
43
|
+
* @returns {number|undefined}
|
|
44
|
+
*/
|
|
45
|
+
BufferBasedChooser.prototype.getEstimate = function (playbackObservation) {
|
|
46
|
+
var bufferLevels = this._levelsMap;
|
|
47
|
+
var bitrates = this._bitrates;
|
|
48
|
+
var bufferGap = playbackObservation.bufferGap, currentBitrate = playbackObservation.currentBitrate, currentScore = playbackObservation.currentScore, speed = playbackObservation.speed;
|
|
49
|
+
if (currentBitrate == null) {
|
|
50
|
+
return bitrates[0];
|
|
51
|
+
}
|
|
52
|
+
var currentBitrateIndex = arrayFindIndex(bitrates, function (b) { return b === currentBitrate; });
|
|
53
|
+
if (currentBitrateIndex < 0 || bitrates.length !== bufferLevels.length) {
|
|
54
|
+
log.error("ABR: Current Bitrate not found in the calculated levels");
|
|
55
|
+
return bitrates[0];
|
|
56
|
+
}
|
|
57
|
+
var scaledScore;
|
|
58
|
+
if (currentScore != null) {
|
|
59
|
+
scaledScore = speed === 0 ? currentScore : (currentScore / speed);
|
|
60
|
+
}
|
|
61
|
+
if (scaledScore != null && scaledScore > 1) {
|
|
62
|
+
var currentBufferLevel_1 = bufferLevels[currentBitrateIndex];
|
|
63
|
+
var nextIndex = (function () {
|
|
64
|
+
for (var i = currentBitrateIndex + 1; i < bufferLevels.length; i++) {
|
|
65
|
+
if (bufferLevels[i] > currentBufferLevel_1) {
|
|
66
|
+
return i;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
})();
|
|
70
|
+
if (nextIndex != null) {
|
|
71
|
+
var nextBufferLevel = bufferLevels[nextIndex];
|
|
72
|
+
if (bufferGap >= nextBufferLevel) {
|
|
73
|
+
return bitrates[nextIndex];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (scaledScore == null || scaledScore < 1.15) {
|
|
78
|
+
var currentBufferLevel = bufferLevels[currentBitrateIndex];
|
|
79
|
+
if (bufferGap < currentBufferLevel) {
|
|
80
|
+
for (var i = currentBitrateIndex - 1; i >= 0; i--) {
|
|
81
|
+
if (bitrates[i] < currentBitrate) {
|
|
82
|
+
return bitrates[i];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return currentBitrate;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return currentBitrate;
|
|
89
|
+
};
|
|
90
|
+
return BufferBasedChooser;
|
|
91
|
+
}());
|
|
92
|
+
export default BufferBasedChooser;
|
|
@@ -69,7 +69,7 @@ export default class NetworkAnalyzer {
|
|
|
69
69
|
* @returns {Object}
|
|
70
70
|
*/
|
|
71
71
|
getBandwidthEstimate(playbackInfo: IPlaybackConditionsInfo, bandwidthEstimator: BandwidthEstimator, currentRepresentation: Representation | null, currentRequests: IRequestInfo[], lastEstimatedBitrate: number | undefined): {
|
|
72
|
-
bandwidthEstimate?: number;
|
|
72
|
+
bandwidthEstimate?: number | undefined;
|
|
73
73
|
bitrateChosen: number;
|
|
74
74
|
};
|
|
75
75
|
/**
|
|
@@ -55,11 +55,9 @@ var PendingRequestsStore = /** @class */ (function () {
|
|
|
55
55
|
*/
|
|
56
56
|
PendingRequestsStore.prototype.remove = function (id) {
|
|
57
57
|
if (this._currentRequests[id] == null) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
// throw new Error("ABR: can't remove unknown request");
|
|
62
|
-
// }
|
|
58
|
+
if (0 /* CURRENT_ENV */ === 1 /* DEV */) {
|
|
59
|
+
throw new Error("ABR: can't remove unknown request");
|
|
60
|
+
}
|
|
63
61
|
log.warn("ABR: can't remove unknown request");
|
|
64
62
|
}
|
|
65
63
|
delete this._currentRequests[id];
|
|
@@ -79,7 +79,7 @@ export interface IABREstimate {
|
|
|
79
79
|
* have, you will most likely only want to do it when the Representation is
|
|
80
80
|
* known to be maintaninable.
|
|
81
81
|
*/
|
|
82
|
-
knownStableBitrate?: number;
|
|
82
|
+
knownStableBitrate?: number | undefined;
|
|
83
83
|
}
|
|
84
84
|
/** Media properties the `RepresentationEstimator` will need to keep track of. */
|
|
85
85
|
export interface IRepresentationEstimatorPlaybackObservation {
|
|
@@ -137,8 +137,8 @@ export default function RepresentationEstimator(_a) {
|
|
|
137
137
|
return { bufferGap: bufferGap, currentBitrate: currentBitrate, currentScore: currentScore, speed: speed };
|
|
138
138
|
}));
|
|
139
139
|
var bitrates = representations.map(function (r) { return r.bitrate; });
|
|
140
|
-
var
|
|
141
|
-
|
|
140
|
+
var bufferBasedChooser = new BufferBasedChooser(bitrates);
|
|
141
|
+
var bufferBasedEstimation$ = bufferBasedobservation$.pipe(map(function (bbo) { return bufferBasedChooser.getEstimate(bbo); }), startWith(undefined));
|
|
142
142
|
return observableCombineLatest([observation$,
|
|
143
143
|
minAutoBitrate$,
|
|
144
144
|
maxAutoBitrate$,
|
|
@@ -247,5 +247,11 @@ export default class MediaElementTrackChoiceManager extends EventEmitter<IMediaE
|
|
|
247
247
|
* change events.
|
|
248
248
|
*/
|
|
249
249
|
private _handleNativeTracksCallbacks;
|
|
250
|
+
/**
|
|
251
|
+
* Enable an audio track (and disable all others), based on its index in the
|
|
252
|
+
* `this._audioTracks` array.
|
|
253
|
+
* @param {number} index}
|
|
254
|
+
*/
|
|
255
|
+
private _enableAudioTrackFromIndex;
|
|
250
256
|
}
|
|
251
257
|
export {};
|
|
@@ -28,6 +28,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
28
28
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
29
29
|
};
|
|
30
30
|
})();
|
|
31
|
+
import assert from "../../utils/assert";
|
|
31
32
|
import EventEmitter from "../../utils/event_emitter";
|
|
32
33
|
import normalizeLanguage from "../../utils/languages";
|
|
33
34
|
/**
|
|
@@ -205,7 +206,7 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
|
|
|
205
206
|
for (var i = 0; i < this._audioTracks.length; i++) {
|
|
206
207
|
var _a = this._audioTracks[i], track = _a.track, nativeTrack = _a.nativeTrack;
|
|
207
208
|
if (track.id === id) {
|
|
208
|
-
|
|
209
|
+
this._enableAudioTrackFromIndex(i);
|
|
209
210
|
this._audioTrackLockedOn = nativeTrack;
|
|
210
211
|
return;
|
|
211
212
|
}
|
|
@@ -433,7 +434,7 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
|
|
|
433
434
|
for (var i = 0; i < this._audioTracks.length; i++) {
|
|
434
435
|
var nativeTrack = this._audioTracks[i].nativeTrack;
|
|
435
436
|
if (nativeTrack === this._audioTrackLockedOn) {
|
|
436
|
-
|
|
437
|
+
this._enableAudioTrackFromIndex(i);
|
|
437
438
|
return;
|
|
438
439
|
}
|
|
439
440
|
}
|
|
@@ -457,7 +458,7 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
|
|
|
457
458
|
var audioTrack = this._audioTracks[j];
|
|
458
459
|
if (audioTrack.track.normalized === normalized &&
|
|
459
460
|
audioTrack.track.audioDescription === track.audioDescription) {
|
|
460
|
-
|
|
461
|
+
this._enableAudioTrackFromIndex(j);
|
|
461
462
|
return;
|
|
462
463
|
}
|
|
463
464
|
}
|
|
@@ -736,6 +737,22 @@ var MediaElementTrackChoiceManager = /** @class */ (function (_super) {
|
|
|
736
737
|
};
|
|
737
738
|
}
|
|
738
739
|
};
|
|
740
|
+
/**
|
|
741
|
+
* Enable an audio track (and disable all others), based on its index in the
|
|
742
|
+
* `this._audioTracks` array.
|
|
743
|
+
* @param {number} index}
|
|
744
|
+
*/
|
|
745
|
+
MediaElementTrackChoiceManager.prototype._enableAudioTrackFromIndex = function (index) {
|
|
746
|
+
assert(index < this._audioTracks.length);
|
|
747
|
+
// Seen on Safari MacOS only (2022-02-14), not disabling ALL audio tracks
|
|
748
|
+
// first (even the wanted one), can lead to the media not playing.
|
|
749
|
+
for (var _i = 0, _a = this._audioTracks; _i < _a.length; _i++) {
|
|
750
|
+
var audioTrack = _a[_i];
|
|
751
|
+
audioTrack.nativeTrack.enabled = false;
|
|
752
|
+
}
|
|
753
|
+
this._audioTracks[index].nativeTrack.enabled = true;
|
|
754
|
+
return;
|
|
755
|
+
};
|
|
739
756
|
return MediaElementTrackChoiceManager;
|
|
740
757
|
}(EventEmitter));
|
|
741
758
|
export default MediaElementTrackChoiceManager;
|
|
@@ -35,13 +35,13 @@ interface IPositionUpdateItem {
|
|
|
35
35
|
/** Amount of buffer available for now in front of the current position, in seconds. */
|
|
36
36
|
bufferGap: number;
|
|
37
37
|
/** Current maximum seekable position. */
|
|
38
|
-
maximumBufferTime?: number;
|
|
39
|
-
wallClockTime?: number;
|
|
38
|
+
maximumBufferTime?: number | undefined;
|
|
39
|
+
wallClockTime?: number | undefined;
|
|
40
40
|
/**
|
|
41
41
|
* Only for live contents. Difference between the "live edge" and the current
|
|
42
42
|
* position, in seconds.
|
|
43
43
|
*/
|
|
44
|
-
liveGap?: number;
|
|
44
|
+
liveGap?: number | undefined;
|
|
45
45
|
}
|
|
46
46
|
/** Payload emitted with a `bitrateEstimationChange` event. */
|
|
47
47
|
interface IBitrateEstimate {
|
|
@@ -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.26.
|
|
91
|
+
_this.version = /* PLAYER_VERSION */ "3.26.3-dev.2022021400";
|
|
92
92
|
_this.log = log;
|
|
93
93
|
_this.state = "STOPPED";
|
|
94
94
|
_this.videoElement = videoElement;
|
|
@@ -2264,5 +2264,5 @@ var Player = /** @class */ (function (_super) {
|
|
|
2264
2264
|
};
|
|
2265
2265
|
return Player;
|
|
2266
2266
|
}(EventEmitter));
|
|
2267
|
-
Player.version = /* PLAYER_VERSION */ "3.26.
|
|
2267
|
+
Player.version = /* PLAYER_VERSION */ "3.26.3-dev.2022021400";
|
|
2268
2268
|
export default Player;
|
|
@@ -50,7 +50,7 @@ interface IVideoTrackPreferenceObject {
|
|
|
50
50
|
interface ITMAudioRepresentation {
|
|
51
51
|
id: string | number;
|
|
52
52
|
bitrate: number;
|
|
53
|
-
codec?: string;
|
|
53
|
+
codec?: string | undefined;
|
|
54
54
|
}
|
|
55
55
|
/** Audio track returned by the TrackChoiceManager. */
|
|
56
56
|
export interface ITMAudioTrack {
|
|
@@ -75,11 +75,11 @@ export interface ITMTextTrack {
|
|
|
75
75
|
interface ITMVideoRepresentation {
|
|
76
76
|
id: string | number;
|
|
77
77
|
bitrate: number;
|
|
78
|
-
width?: number;
|
|
79
|
-
height?: number;
|
|
80
|
-
codec?: string;
|
|
81
|
-
frameRate?: string;
|
|
82
|
-
hdrInfo?: IHDRInformation;
|
|
78
|
+
width?: number | undefined;
|
|
79
|
+
height?: number | undefined;
|
|
80
|
+
codec?: string | undefined;
|
|
81
|
+
frameRate?: string | undefined;
|
|
82
|
+
hdrInfo?: IHDRInformation | undefined;
|
|
83
83
|
}
|
|
84
84
|
/** Video track returned by the TrackChoiceManager. */
|
|
85
85
|
export interface ITMVideoTrack {
|
|
@@ -21,7 +21,6 @@ import EventEmitter from "../../../../utils/event_emitter";
|
|
|
21
21
|
export declare const defaultKSConfig: {
|
|
22
22
|
audioCapabilities: {
|
|
23
23
|
contentType: string;
|
|
24
|
-
robustness: undefined;
|
|
25
24
|
}[];
|
|
26
25
|
distinctiveIdentifier: "optional";
|
|
27
26
|
initDataTypes: readonly ["cenc"];
|
|
@@ -29,7 +28,6 @@ export declare const defaultKSConfig: {
|
|
|
29
28
|
sessionTypes: readonly ["temporary"];
|
|
30
29
|
videoCapabilities: {
|
|
31
30
|
contentType: string;
|
|
32
|
-
robustness: undefined;
|
|
33
31
|
}[];
|
|
34
32
|
}[];
|
|
35
33
|
/** Default Widevine MediaKeySystemAccess configuration used by the RxPlayer. */
|
|
@@ -55,20 +55,15 @@ import flatMap from "../../../../utils/flat_map";
|
|
|
55
55
|
import { strToUtf8, utf8ToStr, } from "../../../../utils/string_parsing";
|
|
56
56
|
/** Default MediaKeySystemAccess configuration used by the RxPlayer. */
|
|
57
57
|
export var defaultKSConfig = [{
|
|
58
|
-
audioCapabilities: [{ contentType: "audio/mp4;codecs=\"mp4a.40.2\"",
|
|
59
|
-
|
|
60
|
-
{ contentType: "audio/webm;codecs=opus",
|
|
61
|
-
robustness: undefined }],
|
|
58
|
+
audioCapabilities: [{ contentType: "audio/mp4;codecs=\"mp4a.40.2\"" },
|
|
59
|
+
{ contentType: "audio/webm;codecs=opus" }],
|
|
62
60
|
distinctiveIdentifier: "optional",
|
|
63
61
|
initDataTypes: ["cenc"],
|
|
64
62
|
persistentState: "optional",
|
|
65
63
|
sessionTypes: ["temporary"],
|
|
66
|
-
videoCapabilities: [{ contentType: "video/mp4;codecs=\"avc1.4d401e\"",
|
|
67
|
-
|
|
68
|
-
{ contentType: "video/
|
|
69
|
-
robustness: undefined },
|
|
70
|
-
{ contentType: "video/webm;codecs=\"vp8\"",
|
|
71
|
-
robustness: undefined }],
|
|
64
|
+
videoCapabilities: [{ contentType: "video/mp4;codecs=\"avc1.4d401e\"" },
|
|
65
|
+
{ contentType: "video/mp4;codecs=\"avc1.42e01e\"" },
|
|
66
|
+
{ contentType: "video/webm;codecs=\"vp8\"" }],
|
|
72
67
|
}];
|
|
73
68
|
/** Default Widevine MediaKeySystemAccess configuration used by the RxPlayer. */
|
|
74
69
|
export var defaultWidevineConfig = (function () {
|
|
@@ -121,11 +121,21 @@ function buildKeySystemConfigurations(ksName, keySystem) {
|
|
|
121
121
|
// More details here:
|
|
122
122
|
// https://storage.googleapis.com/wvdocs/Chrome_EME_Changes_and_Best_Practices.pdf
|
|
123
123
|
// https://www.w3.org/TR/encrypted-media/#get-supported-configuration-and-consent
|
|
124
|
-
var videoCapabilities = flatMap(
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
124
|
+
var videoCapabilities = flatMap(audioRobustnesses, function (robustness) {
|
|
125
|
+
return ["video/mp4;codecs=\"avc1.4d401e\"",
|
|
126
|
+
"video/mp4;codecs=\"avc1.42e01e\"",
|
|
127
|
+
"video/webm;codecs=\"vp8\""].map(function (contentType) {
|
|
128
|
+
return robustness !== undefined ? { contentType: contentType, robustness: robustness } :
|
|
129
|
+
{ contentType: contentType };
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
var audioCapabilities = flatMap(audioRobustnesses, function (robustness) {
|
|
133
|
+
return ["audio/mp4;codecs=\"mp4a.40.2\"",
|
|
134
|
+
"audio/webm;codecs=opus"].map(function (contentType) {
|
|
135
|
+
return robustness !== undefined ? { contentType: contentType, robustness: robustness } :
|
|
136
|
+
{ contentType: contentType };
|
|
137
|
+
});
|
|
138
|
+
});
|
|
129
139
|
// TODO Re-test with a set contentType but an undefined robustness on the
|
|
130
140
|
// STBs on which this problem was found.
|
|
131
141
|
//
|
|
@@ -34,7 +34,7 @@ export interface IInitializationDataInfo {
|
|
|
34
34
|
* `undefined` when not known (different from an empty array - which would
|
|
35
35
|
* just mean that there's no key id involved).
|
|
36
36
|
*/
|
|
37
|
-
keyIds?: Uint8Array[];
|
|
37
|
+
keyIds?: Uint8Array[] | undefined;
|
|
38
38
|
/** Every initialization data for that type. */
|
|
39
39
|
values: Array<{
|
|
40
40
|
/**
|
|
@@ -272,7 +272,7 @@ export interface IContentProtection {
|
|
|
272
272
|
* `undefined` when not known (different from an empty array - which would
|
|
273
273
|
* just mean that there's no key id involved).
|
|
274
274
|
*/
|
|
275
|
-
keyIds?: Uint8Array[];
|
|
275
|
+
keyIds?: Uint8Array[] | undefined;
|
|
276
276
|
/** Every initialization data for that type. */
|
|
277
277
|
values: Array<{
|
|
278
278
|
/**
|
|
@@ -27,10 +27,10 @@ export interface IManifestFetcherParsedResult {
|
|
|
27
27
|
* The time (`performance.now()`) at which the request was started (at which
|
|
28
28
|
* the JavaScript call was done).
|
|
29
29
|
*/
|
|
30
|
-
sendingTime?: number;
|
|
30
|
+
sendingTime?: number | undefined;
|
|
31
31
|
/** The time (`performance.now()`) at which the request was fully received. */
|
|
32
|
-
receivedTime?: number;
|
|
33
|
-
parsingTime?: number;
|
|
32
|
+
receivedTime?: number | undefined;
|
|
33
|
+
parsingTime?: number | undefined;
|
|
34
34
|
}
|
|
35
35
|
/** Emitted when a fetching or parsing minor error happened. */
|
|
36
36
|
export interface IManifestFetcherWarningEvent {
|
|
@@ -51,7 +51,7 @@ export interface IManifestFetcherParserOptions {
|
|
|
51
51
|
* If set, offset to add to `performance.now()` to obtain the current
|
|
52
52
|
* server's time.
|
|
53
53
|
*/
|
|
54
|
-
externalClockOffset?: number;
|
|
54
|
+
externalClockOffset?: number | undefined;
|
|
55
55
|
/** The previous value of the Manifest (when updating). */
|
|
56
56
|
previousManifest: Manifest | null;
|
|
57
57
|
/**
|
|
@@ -49,12 +49,12 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
49
49
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
50
50
|
}
|
|
51
51
|
};
|
|
52
|
-
import PPromise from "pinkie";
|
|
53
52
|
import { Observable, } from "rxjs";
|
|
54
53
|
import config from "../../../config";
|
|
55
54
|
import { formatError, } from "../../../errors";
|
|
56
55
|
import log from "../../../log";
|
|
57
56
|
import assert from "../../../utils/assert";
|
|
57
|
+
import PPromise from "../../../utils/promise";
|
|
58
58
|
import TaskCanceller from "../../../utils/task_canceller";
|
|
59
59
|
import errorSelector from "../utils/error_selector";
|
|
60
60
|
import { tryRequestPromiseWithBackoff, } from "../utils/try_urls_with_backoff";
|
|
@@ -130,7 +130,7 @@ export interface ISegmentFetcherOptions {
|
|
|
130
130
|
* @returns {Object}
|
|
131
131
|
*/
|
|
132
132
|
export declare function getSegmentFetcherOptions(bufferType: string, { maxRetryRegular, maxRetryOffline, lowLatencyMode }: {
|
|
133
|
-
maxRetryRegular?: number;
|
|
134
|
-
maxRetryOffline?: number;
|
|
133
|
+
maxRetryRegular?: number | undefined;
|
|
134
|
+
maxRetryOffline?: number | undefined;
|
|
135
135
|
lowLatencyMode: boolean;
|
|
136
136
|
}): ISegmentFetcherOptions;
|
|
@@ -76,7 +76,8 @@ export default function createSegmentFetcher(bufferType, pipeline, callbacks, op
|
|
|
76
76
|
/**
|
|
77
77
|
* If the request succeeded, set to the corresponding
|
|
78
78
|
* `IChunkCompleteInformation` object.
|
|
79
|
-
*
|
|
79
|
+
* For any other completion cases: if the request either failed, was
|
|
80
|
+
* cancelled or just if no request was needed, set to `null`.
|
|
80
81
|
*
|
|
81
82
|
* Stays to `undefined` when the request is still pending.
|
|
82
83
|
*/
|
|
@@ -162,6 +163,9 @@ export default function createSegmentFetcher(bufferType, pipeline, callbacks, op
|
|
|
162
163
|
requestInfo = res.resultData;
|
|
163
164
|
sendNetworkMetricsIfAvailable();
|
|
164
165
|
}
|
|
166
|
+
else {
|
|
167
|
+
requestInfo = null;
|
|
168
|
+
}
|
|
165
169
|
if (!canceller.isUsed) {
|
|
166
170
|
// The current Observable could have been canceled as a result of one
|
|
167
171
|
// of the previous `next` calls. In that case, we don't want to send
|
|
@@ -49,12 +49,12 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
49
49
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
50
50
|
}
|
|
51
51
|
};
|
|
52
|
-
import PPromise from "pinkie";
|
|
53
52
|
import { isOffline } from "../../../compat";
|
|
54
53
|
import { CustomLoaderError, isKnownError, NetworkErrorTypes, RequestError, } from "../../../errors";
|
|
55
54
|
import log from "../../../log";
|
|
56
55
|
import cancellableSleep from "../../../utils/cancellable_sleep";
|
|
57
56
|
import getFuzzedDelay from "../../../utils/get_fuzzed_delay";
|
|
57
|
+
import PPromise from "../../../utils/promise";
|
|
58
58
|
import TaskCanceller from "../../../utils/task_canceller";
|
|
59
59
|
/**
|
|
60
60
|
* Called on a loader error.
|
|
@@ -29,8 +29,8 @@ export interface IDirectFileOptions {
|
|
|
29
29
|
mediaElement: HTMLMediaElement;
|
|
30
30
|
playbackObserver: PlaybackObserver;
|
|
31
31
|
speed: IReadOnlySharedReference<number>;
|
|
32
|
-
startAt?: IInitialTimeOptions;
|
|
33
|
-
url?: string;
|
|
32
|
+
startAt?: IInitialTimeOptions | undefined;
|
|
33
|
+
url?: string | undefined;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
36
|
* Launch a content in "Directfile mode".
|
|
@@ -67,7 +67,7 @@ export interface IInitializeArguments {
|
|
|
67
67
|
/** Emit the playback rate (speed) set by the user. */
|
|
68
68
|
speed: IReadOnlySharedReference<number>;
|
|
69
69
|
/** The configured starting position. */
|
|
70
|
-
startAt?: IInitialTimeOptions;
|
|
70
|
+
startAt?: IInitialTimeOptions | undefined;
|
|
71
71
|
/** Configuration specific to the text track. */
|
|
72
72
|
textTrackOptions: ITextTrackSegmentBufferOptions;
|
|
73
73
|
}
|
|
@@ -24,9 +24,9 @@ export interface IManifestUpdateSchedulerArguments {
|
|
|
24
24
|
/** Information about the initial load of the manifest */
|
|
25
25
|
initialManifest: {
|
|
26
26
|
manifest: Manifest;
|
|
27
|
-
sendingTime?: number;
|
|
28
|
-
receivedTime?: number;
|
|
29
|
-
parsingTime?: number;
|
|
27
|
+
sendingTime?: number | undefined;
|
|
28
|
+
receivedTime?: number | undefined;
|
|
29
|
+
parsingTime?: number | undefined;
|
|
30
30
|
};
|
|
31
31
|
/** Minimum interval to keep between Manifest updates */
|
|
32
32
|
minimumManifestUpdateInterval: number;
|
|
@@ -47,7 +47,7 @@ export interface IManifestRefreshSchedulerEvent {
|
|
|
47
47
|
* Optional wanted refresh delay, which is the minimum time you want to wait
|
|
48
48
|
* before updating the Manifest
|
|
49
49
|
*/
|
|
50
|
-
delay?: number;
|
|
50
|
+
delay?: number | undefined;
|
|
51
51
|
/**
|
|
52
52
|
* Whether the parsing can be done in the more efficient "unsafeMode".
|
|
53
53
|
* This mode is extremely fast but can lead to de-synchronisation with the
|
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
* @returns {Boolean}
|
|
29
29
|
*/
|
|
30
30
|
declare function areSameStreamEvents(evt1: {
|
|
31
|
-
id?: string;
|
|
31
|
+
id?: string | undefined;
|
|
32
32
|
start: number;
|
|
33
|
-
end?: number;
|
|
33
|
+
end?: number | undefined;
|
|
34
34
|
}, evt2: {
|
|
35
|
-
id?: string;
|
|
35
|
+
id?: string | undefined;
|
|
36
36
|
start: number;
|
|
37
|
-
end?: number;
|
|
37
|
+
end?: number | undefined;
|
|
38
38
|
}): boolean;
|
|
39
39
|
export default areSameStreamEvents;
|