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
|
@@ -163,13 +163,13 @@ interface IPositionUpdateItem {
|
|
|
163
163
|
/** Amount of buffer available for now in front of the current position, in seconds. */
|
|
164
164
|
bufferGap : number;
|
|
165
165
|
/** Current maximum seekable position. */
|
|
166
|
-
maximumBufferTime? : number;
|
|
167
|
-
wallClockTime? : number;
|
|
166
|
+
maximumBufferTime? : number | undefined;
|
|
167
|
+
wallClockTime? : number | undefined;
|
|
168
168
|
/**
|
|
169
169
|
* Only for live contents. Difference between the "live edge" and the current
|
|
170
170
|
* position, in seconds.
|
|
171
171
|
*/
|
|
172
|
-
liveGap? : number;
|
|
172
|
+
liveGap? : number | undefined;
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
/** Payload emitted with a `bitrateEstimationChange` event. */
|
|
@@ -321,7 +321,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
321
321
|
* URL of the Manifest (or just of the content for DirectFile contents)
|
|
322
322
|
* currently being played.
|
|
323
323
|
*/
|
|
324
|
-
url
|
|
324
|
+
url : string | undefined;
|
|
325
325
|
|
|
326
326
|
/** Subject allowing to stop playing that content. */
|
|
327
327
|
stop$ : Subject<void>;
|
|
@@ -494,7 +494,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
494
494
|
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
|
|
495
495
|
videoElement.preload = "auto";
|
|
496
496
|
|
|
497
|
-
this.version = /* PLAYER_VERSION */"3.26.
|
|
497
|
+
this.version = /* PLAYER_VERSION */"3.26.3-dev.2022021400";
|
|
498
498
|
this.log = log;
|
|
499
499
|
this.state = "STOPPED";
|
|
500
500
|
this.videoElement = videoElement;
|
|
@@ -2975,7 +2975,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
2975
2975
|
return activeRepresentations[currentPeriod.id];
|
|
2976
2976
|
}
|
|
2977
2977
|
}
|
|
2978
|
-
Player.version = /* PLAYER_VERSION */"3.26.
|
|
2978
|
+
Player.version = /* PLAYER_VERSION */"3.26.3-dev.2022021400";
|
|
2979
2979
|
|
|
2980
2980
|
export default Player;
|
|
2981
2981
|
export { IStreamEventData };
|
|
@@ -63,7 +63,7 @@ interface IVideoTrackPreferenceObject {
|
|
|
63
63
|
*/
|
|
64
64
|
interface ITMAudioRepresentation { id : string|number;
|
|
65
65
|
bitrate : number;
|
|
66
|
-
codec? : string; }
|
|
66
|
+
codec? : string | undefined; }
|
|
67
67
|
|
|
68
68
|
/** Audio track returned by the TrackChoiceManager. */
|
|
69
69
|
export interface ITMAudioTrack { language : string;
|
|
@@ -85,11 +85,11 @@ export interface ITMTextTrack { language : string;
|
|
|
85
85
|
*/
|
|
86
86
|
interface ITMVideoRepresentation { id : string|number;
|
|
87
87
|
bitrate : number;
|
|
88
|
-
width? : number;
|
|
89
|
-
height? : number;
|
|
90
|
-
codec? : string;
|
|
91
|
-
frameRate? : string;
|
|
92
|
-
hdrInfo?: IHDRInformation; }
|
|
88
|
+
width? : number | undefined;
|
|
89
|
+
height? : number | undefined;
|
|
90
|
+
codec? : string | undefined;
|
|
91
|
+
frameRate? : string | undefined;
|
|
92
|
+
hdrInfo?: IHDRInformation | undefined; }
|
|
93
93
|
|
|
94
94
|
/** Video track returned by the TrackChoiceManager. */
|
|
95
95
|
export interface ITMVideoTrack { id : number|string;
|
|
@@ -134,10 +134,11 @@ type INormalizedPreferredAudioTrack = null |
|
|
|
134
134
|
|
|
135
135
|
/** Audio track preference when it is not set to `null`. */
|
|
136
136
|
interface INormalizedPreferredAudioTrackObject {
|
|
137
|
-
normalized? : string;
|
|
138
|
-
audioDescription? : boolean;
|
|
137
|
+
normalized? : string | undefined;
|
|
138
|
+
audioDescription? : boolean | undefined;
|
|
139
139
|
codec? : { all: boolean;
|
|
140
|
-
test: RegExp; }
|
|
140
|
+
test: RegExp; } |
|
|
141
|
+
undefined;
|
|
141
142
|
}
|
|
142
143
|
|
|
143
144
|
/** Text track preference once normalized by the TrackChoiceManager. */
|
|
@@ -44,20 +44,15 @@ import {
|
|
|
44
44
|
|
|
45
45
|
/** Default MediaKeySystemAccess configuration used by the RxPlayer. */
|
|
46
46
|
export const defaultKSConfig = [{
|
|
47
|
-
audioCapabilities: [ { contentType: "audio/mp4;codecs=\"mp4a.40.2\"",
|
|
48
|
-
|
|
49
|
-
{ contentType: "audio/webm;codecs=opus",
|
|
50
|
-
robustness: undefined } ],
|
|
47
|
+
audioCapabilities: [ { contentType: "audio/mp4;codecs=\"mp4a.40.2\"" },
|
|
48
|
+
{ contentType: "audio/webm;codecs=opus" } ],
|
|
51
49
|
distinctiveIdentifier: "optional" as const,
|
|
52
50
|
initDataTypes: ["cenc"] as const,
|
|
53
51
|
persistentState: "optional" as const,
|
|
54
52
|
sessionTypes: ["temporary"] as const,
|
|
55
|
-
videoCapabilities: [ { contentType: "video/mp4;codecs=\"avc1.4d401e\"",
|
|
56
|
-
|
|
57
|
-
{ contentType: "video/
|
|
58
|
-
robustness: undefined },
|
|
59
|
-
{ contentType: "video/webm;codecs=\"vp8\"",
|
|
60
|
-
robustness: undefined } ],
|
|
53
|
+
videoCapabilities: [ { contentType: "video/mp4;codecs=\"avc1.4d401e\"" },
|
|
54
|
+
{ contentType: "video/mp4;codecs=\"avc1.42e01e\"" },
|
|
55
|
+
{ contentType: "video/webm;codecs=\"vp8\"" } ],
|
|
61
56
|
}];
|
|
62
57
|
|
|
63
58
|
/** Default Widevine MediaKeySystemAccess configuration used by the RxPlayer. */
|
|
@@ -192,21 +192,23 @@ function buildKeySystemConfigurations(
|
|
|
192
192
|
// More details here:
|
|
193
193
|
// https://storage.googleapis.com/wvdocs/Chrome_EME_Changes_and_Best_Practices.pdf
|
|
194
194
|
// https://www.w3.org/TR/encrypted-media/#get-supported-configuration-and-consent
|
|
195
|
+
|
|
195
196
|
const videoCapabilities: IMediaCapability[] =
|
|
196
|
-
flatMap(
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
197
|
+
flatMap(audioRobustnesses, (robustness) =>
|
|
198
|
+
["video/mp4;codecs=\"avc1.4d401e\"",
|
|
199
|
+
"video/mp4;codecs=\"avc1.42e01e\"",
|
|
200
|
+
"video/webm;codecs=\"vp8\""].map(contentType => {
|
|
201
|
+
return robustness !== undefined ? { contentType, robustness } :
|
|
202
|
+
{ contentType };
|
|
203
|
+
}));
|
|
203
204
|
|
|
204
205
|
const audioCapabilities: IMediaCapability[] =
|
|
205
|
-
flatMap(audioRobustnesses,
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
206
|
+
flatMap(audioRobustnesses, (robustness) =>
|
|
207
|
+
["audio/mp4;codecs=\"mp4a.40.2\"",
|
|
208
|
+
"audio/webm;codecs=opus"].map(contentType => {
|
|
209
|
+
return robustness !== undefined ? { contentType, robustness } :
|
|
210
|
+
{ contentType };
|
|
211
|
+
}));
|
|
210
212
|
|
|
211
213
|
// TODO Re-test with a set contentType but an undefined robustness on the
|
|
212
214
|
// STBs on which this problem was found.
|
package/src/core/eme/types.ts
CHANGED
|
@@ -40,7 +40,7 @@ export interface IInitializationDataInfo {
|
|
|
40
40
|
* `undefined` when not known (different from an empty array - which would
|
|
41
41
|
* just mean that there's no key id involved).
|
|
42
42
|
*/
|
|
43
|
-
keyIds? : Uint8Array[];
|
|
43
|
+
keyIds? : Uint8Array[] | undefined;
|
|
44
44
|
/** Every initialization data for that type. */
|
|
45
45
|
values: Array<{
|
|
46
46
|
/**
|
|
@@ -298,7 +298,7 @@ export interface IContentProtection {
|
|
|
298
298
|
* `undefined` when not known (different from an empty array - which would
|
|
299
299
|
* just mean that there's no key id involved).
|
|
300
300
|
*/
|
|
301
|
-
keyIds? : Uint8Array[];
|
|
301
|
+
keyIds? : Uint8Array[] | undefined;
|
|
302
302
|
/** Every initialization data for that type. */
|
|
303
303
|
values: Array<{
|
|
304
304
|
/**
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import PPromise from "pinkie";
|
|
18
17
|
import {
|
|
19
18
|
Observable,
|
|
20
19
|
} from "rxjs";
|
|
@@ -31,6 +30,7 @@ import {
|
|
|
31
30
|
ITransportPipelines,
|
|
32
31
|
} from "../../../transports";
|
|
33
32
|
import assert from "../../../utils/assert";
|
|
33
|
+
import PPromise from "../../../utils/promise";
|
|
34
34
|
import TaskCanceller from "../../../utils/task_canceller";
|
|
35
35
|
import errorSelector from "../utils/error_selector";
|
|
36
36
|
import {
|
|
@@ -54,11 +54,11 @@ export interface IManifestFetcherParsedResult {
|
|
|
54
54
|
* The time (`performance.now()`) at which the request was started (at which
|
|
55
55
|
* the JavaScript call was done).
|
|
56
56
|
*/
|
|
57
|
-
sendingTime? : number;
|
|
57
|
+
sendingTime? : number | undefined;
|
|
58
58
|
/** The time (`performance.now()`) at which the request was fully received. */
|
|
59
|
-
receivedTime? : number;
|
|
59
|
+
receivedTime? : number | undefined;
|
|
60
60
|
/* The time taken to parse the Manifest through the corresponding parse function. */
|
|
61
|
-
parsingTime? : number;
|
|
61
|
+
parsingTime? : number | undefined;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
/** Emitted when a fetching or parsing minor error happened. */
|
|
@@ -86,7 +86,7 @@ export interface IManifestFetcherParserOptions {
|
|
|
86
86
|
* If set, offset to add to `performance.now()` to obtain the current
|
|
87
87
|
* server's time.
|
|
88
88
|
*/
|
|
89
|
-
externalClockOffset? : number;
|
|
89
|
+
externalClockOffset? : number | undefined;
|
|
90
90
|
/** The previous value of the Manifest (when updating). */
|
|
91
91
|
previousManifest : Manifest | null;
|
|
92
92
|
/**
|
|
@@ -119,7 +119,8 @@ export default function createSegmentFetcher<TLoadedFormat, TSegmentDataType>(
|
|
|
119
119
|
/**
|
|
120
120
|
* If the request succeeded, set to the corresponding
|
|
121
121
|
* `IChunkCompleteInformation` object.
|
|
122
|
-
*
|
|
122
|
+
* For any other completion cases: if the request either failed, was
|
|
123
|
+
* cancelled or just if no request was needed, set to `null`.
|
|
123
124
|
*
|
|
124
125
|
* Stays to `undefined` when the request is still pending.
|
|
125
126
|
*/
|
|
@@ -216,6 +217,8 @@ export default function createSegmentFetcher<TLoadedFormat, TSegmentDataType>(
|
|
|
216
217
|
if (res.resultType !== "segment-created") {
|
|
217
218
|
requestInfo = res.resultData;
|
|
218
219
|
sendNetworkMetricsIfAvailable();
|
|
220
|
+
} else {
|
|
221
|
+
requestInfo = null;
|
|
219
222
|
}
|
|
220
223
|
|
|
221
224
|
if (!canceller.isUsed) {
|
|
@@ -439,8 +442,8 @@ export function getSegmentFetcherOptions(
|
|
|
439
442
|
bufferType : string,
|
|
440
443
|
{ maxRetryRegular,
|
|
441
444
|
maxRetryOffline,
|
|
442
|
-
lowLatencyMode } : { maxRetryRegular? : number;
|
|
443
|
-
maxRetryOffline? : number;
|
|
445
|
+
lowLatencyMode } : { maxRetryRegular? : number | undefined;
|
|
446
|
+
maxRetryOffline? : number | undefined;
|
|
444
447
|
lowLatencyMode : boolean; }
|
|
445
448
|
) : ISegmentFetcherOptions {
|
|
446
449
|
return { maxRetryRegular: bufferType === "image" ? 0 :
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import PPromise from "pinkie";
|
|
18
17
|
import { isOffline } from "../../../compat";
|
|
19
18
|
import {
|
|
20
19
|
CustomLoaderError,
|
|
@@ -25,6 +24,7 @@ import {
|
|
|
25
24
|
import log from "../../../log";
|
|
26
25
|
import cancellableSleep from "../../../utils/cancellable_sleep";
|
|
27
26
|
import getFuzzedDelay from "../../../utils/get_fuzzed_delay";
|
|
27
|
+
import PPromise from "../../../utils/promise";
|
|
28
28
|
import TaskCanceller, {
|
|
29
29
|
CancellationSignal,
|
|
30
30
|
} from "../../../utils/task_canceller";
|
|
@@ -100,8 +100,8 @@ export interface IDirectFileOptions { autoPlay : boolean;
|
|
|
100
100
|
mediaElement : HTMLMediaElement;
|
|
101
101
|
playbackObserver : PlaybackObserver;
|
|
102
102
|
speed : IReadOnlySharedReference<number>;
|
|
103
|
-
startAt? : IInitialTimeOptions;
|
|
104
|
-
url? : string; }
|
|
103
|
+
startAt? : IInitialTimeOptions | undefined;
|
|
104
|
+
url? : string | undefined; }
|
|
105
105
|
|
|
106
106
|
/**
|
|
107
107
|
* Launch a content in "Directfile mode".
|
|
@@ -127,7 +127,7 @@ export interface IInitializeArguments {
|
|
|
127
127
|
/** Emit the playback rate (speed) set by the user. */
|
|
128
128
|
speed : IReadOnlySharedReference<number>;
|
|
129
129
|
/** The configured starting position. */
|
|
130
|
-
startAt? : IInitialTimeOptions;
|
|
130
|
+
startAt? : IInitialTimeOptions | undefined;
|
|
131
131
|
/** Configuration specific to the text track. */
|
|
132
132
|
textTrackOptions : ITextTrackSegmentBufferOptions;
|
|
133
133
|
}
|
|
@@ -237,7 +237,7 @@ export default function InitializeOnMediaSource(
|
|
|
237
237
|
* ID identifying the current MediaKeys' system ID. Can be used to only
|
|
238
238
|
* send initialization data linked to that ID as an optimization measure.
|
|
239
239
|
*/
|
|
240
|
-
drmSystemId? : string;
|
|
240
|
+
drmSystemId? : string | undefined;
|
|
241
241
|
},
|
|
242
242
|
evt : IEMEManagerEvent | IEMEDisabledEvent
|
|
243
243
|
) => {
|
|
@@ -48,9 +48,9 @@ export interface IManifestUpdateSchedulerArguments {
|
|
|
48
48
|
manifestFetcher : ManifestFetcher;
|
|
49
49
|
/** Information about the initial load of the manifest */
|
|
50
50
|
initialManifest : { manifest : Manifest;
|
|
51
|
-
sendingTime? : number;
|
|
52
|
-
receivedTime? : number;
|
|
53
|
-
parsingTime? : number; };
|
|
51
|
+
sendingTime? : number | undefined;
|
|
52
|
+
receivedTime? : number | undefined;
|
|
53
|
+
parsingTime? : number | undefined; };
|
|
54
54
|
/** Minimum interval to keep between Manifest updates */
|
|
55
55
|
minimumManifestUpdateInterval : number;
|
|
56
56
|
/** Allows the rest of the code to ask for a Manifest refresh */
|
|
@@ -74,7 +74,7 @@ export interface IManifestRefreshSchedulerEvent {
|
|
|
74
74
|
* Optional wanted refresh delay, which is the minimum time you want to wait
|
|
75
75
|
* before updating the Manifest
|
|
76
76
|
*/
|
|
77
|
-
delay? : number;
|
|
77
|
+
delay? : number | undefined;
|
|
78
78
|
/**
|
|
79
79
|
* Whether the parsing can be done in the more efficient "unsafeMode".
|
|
80
80
|
* This mode is extremely fast but can lead to de-synchronisation with the
|
|
@@ -127,9 +127,9 @@ export default function manifestUpdateScheduler({
|
|
|
127
127
|
* encountered.
|
|
128
128
|
*/
|
|
129
129
|
function handleManifestRefresh$(
|
|
130
|
-
{ sendingTime, parsingTime, updatingTime } : { sendingTime?: number;
|
|
131
|
-
parsingTime? : number;
|
|
132
|
-
updatingTime? : number; }
|
|
130
|
+
{ sendingTime, parsingTime, updatingTime } : { sendingTime?: number | undefined;
|
|
131
|
+
parsingTime? : number | undefined;
|
|
132
|
+
updatingTime? : number | undefined; }
|
|
133
133
|
) : Observable<IWarningEvent> {
|
|
134
134
|
/**
|
|
135
135
|
* Total time taken to fully update the last Manifest, in milliseconds.
|
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
* @param {Object} evt2
|
|
29
29
|
* @returns {Boolean}
|
|
30
30
|
*/
|
|
31
|
-
function areSameStreamEvents(evt1: { id?: string;
|
|
31
|
+
function areSameStreamEvents(evt1: { id?: string | undefined;
|
|
32
32
|
start: number;
|
|
33
|
-
end?: number; },
|
|
34
|
-
evt2: { id?: string;
|
|
33
|
+
end?: number | undefined; },
|
|
34
|
+
evt2: { id?: string | undefined;
|
|
35
35
|
start: number;
|
|
36
|
-
end?: number; }): boolean {
|
|
36
|
+
end?: number | undefined; }): boolean {
|
|
37
37
|
return evt1.id === evt2.id &&
|
|
38
38
|
evt1.start === evt2.start &&
|
|
39
39
|
evt1.end === evt2.end;
|
|
@@ -22,7 +22,7 @@ export interface IStreamEventData {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
export interface IStreamEventPayload {
|
|
25
|
-
id?: string;
|
|
25
|
+
id?: string | undefined;
|
|
26
26
|
start: number;
|
|
27
27
|
end: number;
|
|
28
28
|
data: IStreamEventData;
|
|
@@ -30,7 +30,7 @@ export interface IStreamEventPayload {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
export interface INonFiniteStreamEventPayload {
|
|
33
|
-
id?: string;
|
|
33
|
+
id?: string | undefined;
|
|
34
34
|
start: number;
|
|
35
35
|
data: IStreamEventData;
|
|
36
36
|
publicEvent: IPublicNonFiniteStreamEvent;
|
|
@@ -445,11 +445,11 @@ export interface INativeTextTracksBufferSegmentData {
|
|
|
445
445
|
* This is mostly needed for "sami" subtitles, to know which cues can / should
|
|
446
446
|
* be parsed.
|
|
447
447
|
*/
|
|
448
|
-
language? : string;
|
|
448
|
+
language? : string | undefined;
|
|
449
449
|
/** start time from which the segment apply, in seconds. */
|
|
450
|
-
start? : number;
|
|
450
|
+
start? : number | undefined;
|
|
451
451
|
/** end time until which the segment apply, in seconds. */
|
|
452
|
-
end? : number;
|
|
452
|
+
end? : number | undefined;
|
|
453
453
|
}
|
|
454
454
|
|
|
455
455
|
/**
|
|
@@ -63,8 +63,8 @@ export default class TextTrackCuesStore {
|
|
|
63
63
|
|
|
64
64
|
// begins at the end as most of the time the player will ask for the last
|
|
65
65
|
// CuesGroup
|
|
66
|
-
for (let
|
|
67
|
-
const segment = cuesBuffer[
|
|
66
|
+
for (let cueIdx = cuesBuffer.length - 1; cueIdx >= 0; cueIdx--) {
|
|
67
|
+
const segment = cuesBuffer[cueIdx];
|
|
68
68
|
if (time < segment.end && time >= segment.start) {
|
|
69
69
|
const cues = segment.cues;
|
|
70
70
|
for (let j = 0; j < cues.length; j++) {
|
|
@@ -92,10 +92,10 @@ export default class TextTrackCuesStore {
|
|
|
92
92
|
|
|
93
93
|
const to = Math.max(from, _to);
|
|
94
94
|
const cuesBuffer = this._cuesBuffer;
|
|
95
|
-
for (let
|
|
96
|
-
if (cuesBuffer[
|
|
95
|
+
for (let cueIdx = 0; cueIdx < cuesBuffer.length; cueIdx++) {
|
|
96
|
+
if (cuesBuffer[cueIdx].end > from) {
|
|
97
97
|
// this cuesInfos is concerned by the remove
|
|
98
|
-
const startCuesInfos = cuesBuffer[
|
|
98
|
+
const startCuesInfos = cuesBuffer[cueIdx];
|
|
99
99
|
if (startCuesInfos.start >= to) {
|
|
100
100
|
// our cuesInfos is strictly after this interval, we have nothing to do
|
|
101
101
|
return;
|
|
@@ -112,8 +112,8 @@ export default class TextTrackCuesStore {
|
|
|
112
112
|
cuesInfos2 ] = removeCuesInfosBetween(startCuesInfos,
|
|
113
113
|
from,
|
|
114
114
|
to);
|
|
115
|
-
this._cuesBuffer[
|
|
116
|
-
cuesBuffer.splice(
|
|
115
|
+
this._cuesBuffer[cueIdx] = cuesInfos1;
|
|
116
|
+
cuesBuffer.splice(cueIdx + 1, 0, cuesInfos2);
|
|
117
117
|
}
|
|
118
118
|
// No cuesInfos can be concerned after this one, we can quit
|
|
119
119
|
return;
|
|
@@ -122,8 +122,8 @@ export default class TextTrackCuesStore {
|
|
|
122
122
|
// Else remove all part after `from`
|
|
123
123
|
if (startCuesInfos.start >= from) {
|
|
124
124
|
// all the segment is concerned
|
|
125
|
-
cuesBuffer.splice(
|
|
126
|
-
|
|
125
|
+
cuesBuffer.splice(cueIdx, 1);
|
|
126
|
+
cueIdx--; // one less element, we have to decrement the loop
|
|
127
127
|
} else {
|
|
128
128
|
// only the end is concerned
|
|
129
129
|
startCuesInfos.cues = getCuesBefore(startCuesInfos.cues, from);
|
|
@@ -207,8 +207,8 @@ export default class TextTrackCuesStore {
|
|
|
207
207
|
}
|
|
208
208
|
}
|
|
209
209
|
|
|
210
|
-
for (let
|
|
211
|
-
let cuesInfos = cuesBuffer[
|
|
210
|
+
for (let cueIdx = 0; cueIdx < cuesBuffer.length; cueIdx++) {
|
|
211
|
+
let cuesInfos = cuesBuffer[cueIdx];
|
|
212
212
|
if (start < cuesInfos.end) {
|
|
213
213
|
if (areNearlyEqual(start, cuesInfos.start)) {
|
|
214
214
|
if (areNearlyEqual(end, cuesInfos.end)) {
|
|
@@ -218,7 +218,7 @@ export default class TextTrackCuesStore {
|
|
|
218
218
|
// Result: |AAAAA|
|
|
219
219
|
// Which means:
|
|
220
220
|
// 1. replace the current cue with ours
|
|
221
|
-
cuesBuffer[
|
|
221
|
+
cuesBuffer[cueIdx] = cuesInfosToInsert;
|
|
222
222
|
return;
|
|
223
223
|
} else if (end < cuesInfos.end) {
|
|
224
224
|
// our cue overlaps with the current one:
|
|
@@ -231,7 +231,7 @@ export default class TextTrackCuesStore {
|
|
|
231
231
|
// 3. add ours before the current one
|
|
232
232
|
cuesInfos.cues = getCuesAfter(cuesInfos.cues, end);
|
|
233
233
|
cuesInfos.start = end;
|
|
234
|
-
cuesBuffer.splice(
|
|
234
|
+
cuesBuffer.splice(cueIdx, 0, cuesInfosToInsert);
|
|
235
235
|
return;
|
|
236
236
|
}
|
|
237
237
|
|
|
@@ -242,10 +242,10 @@ export default class TextTrackCuesStore {
|
|
|
242
242
|
// Here we have to delete any cuesInfos which end before ours end,
|
|
243
243
|
// and see about the following one.
|
|
244
244
|
do {
|
|
245
|
-
cuesBuffer.splice(
|
|
246
|
-
cuesInfos = cuesBuffer[
|
|
245
|
+
cuesBuffer.splice(cueIdx, 1);
|
|
246
|
+
cuesInfos = cuesBuffer[cueIdx];
|
|
247
247
|
} while (cuesInfos !== undefined && end > cuesInfos.end);
|
|
248
|
-
onIndexOfNextCueFound(
|
|
248
|
+
onIndexOfNextCueFound(cueIdx);
|
|
249
249
|
return;
|
|
250
250
|
} else if (start < cuesInfos.start) {
|
|
251
251
|
if (end < cuesInfos.start) {
|
|
@@ -255,7 +255,7 @@ export default class TextTrackCuesStore {
|
|
|
255
255
|
// Result: |AAAAAAA| |BBBB|
|
|
256
256
|
// Which means:
|
|
257
257
|
// - add ours before the current one
|
|
258
|
-
cuesBuffer.splice(
|
|
258
|
+
cuesBuffer.splice(cueIdx, 0, cuesInfosToInsert);
|
|
259
259
|
return;
|
|
260
260
|
} else if (areNearlyEqual(end, cuesInfos.start)) {
|
|
261
261
|
// our cue goes just before the current one:
|
|
@@ -266,14 +266,14 @@ export default class TextTrackCuesStore {
|
|
|
266
266
|
// - update start time of the current one to be sure
|
|
267
267
|
// - add ours before the current one
|
|
268
268
|
cuesInfos.start = end;
|
|
269
|
-
cuesBuffer.splice(
|
|
269
|
+
cuesBuffer.splice(cueIdx, 0, cuesInfosToInsert);
|
|
270
270
|
return;
|
|
271
271
|
} else if (areNearlyEqual(end, cuesInfos.end)) {
|
|
272
272
|
// ours: |AAAAAAA|
|
|
273
273
|
// the current one: |BBBB|
|
|
274
274
|
// Result: |AAAAAAA|
|
|
275
275
|
// Replace
|
|
276
|
-
cuesBuffer.splice(
|
|
276
|
+
cuesBuffer.splice(cueIdx, 1, cuesInfosToInsert);
|
|
277
277
|
return;
|
|
278
278
|
} else if (end < cuesInfos.end) {
|
|
279
279
|
// ours: |AAAAAAA|
|
|
@@ -281,7 +281,7 @@ export default class TextTrackCuesStore {
|
|
|
281
281
|
// Result: |AAAAAAABB|
|
|
282
282
|
cuesInfos.cues = getCuesAfter(cuesInfos.cues, end);
|
|
283
283
|
cuesInfos.start = end;
|
|
284
|
-
cuesBuffer.splice(
|
|
284
|
+
cuesBuffer.splice(cueIdx, 0, cuesInfosToInsert);
|
|
285
285
|
return;
|
|
286
286
|
}
|
|
287
287
|
|
|
@@ -289,10 +289,10 @@ export default class TextTrackCuesStore {
|
|
|
289
289
|
// the current one: |BBB|...
|
|
290
290
|
// Result: |AAAAAAA|...
|
|
291
291
|
do {
|
|
292
|
-
cuesBuffer.splice(
|
|
293
|
-
cuesInfos = cuesBuffer[
|
|
292
|
+
cuesBuffer.splice(cueIdx, 1);
|
|
293
|
+
cuesInfos = cuesBuffer[cueIdx];
|
|
294
294
|
} while (cuesInfos !== undefined && end > cuesInfos.end);
|
|
295
|
-
onIndexOfNextCueFound(
|
|
295
|
+
onIndexOfNextCueFound(cueIdx);
|
|
296
296
|
return;
|
|
297
297
|
}
|
|
298
298
|
// else -> start > cuesInfos.start
|
|
@@ -303,7 +303,7 @@ export default class TextTrackCuesStore {
|
|
|
303
303
|
// Result: |BBAAAAAA|
|
|
304
304
|
cuesInfos.cues = getCuesBefore(cuesInfos.cues, start);
|
|
305
305
|
cuesInfos.end = start;
|
|
306
|
-
cuesBuffer.splice(
|
|
306
|
+
cuesBuffer.splice(cueIdx + 1, 0, cuesInfosToInsert);
|
|
307
307
|
return;
|
|
308
308
|
} else if (cuesInfos.end > end) {
|
|
309
309
|
// ours: |AAAAAA|
|
|
@@ -311,9 +311,9 @@ export default class TextTrackCuesStore {
|
|
|
311
311
|
// Result: |BBAAAAAABBB|
|
|
312
312
|
const [ cuesInfos1,
|
|
313
313
|
cuesInfos2 ] = removeCuesInfosBetween(cuesInfos, start, end);
|
|
314
|
-
this._cuesBuffer[
|
|
315
|
-
cuesBuffer.splice(
|
|
316
|
-
cuesBuffer.splice(
|
|
314
|
+
this._cuesBuffer[cueIdx] = cuesInfos1;
|
|
315
|
+
cuesBuffer.splice(cueIdx + 1, 0, cuesInfosToInsert);
|
|
316
|
+
cuesBuffer.splice(cueIdx + 2, 0, cuesInfos2);
|
|
317
317
|
return;
|
|
318
318
|
} else {
|
|
319
319
|
// ours: |AAAAAA|
|
|
@@ -322,12 +322,13 @@ export default class TextTrackCuesStore {
|
|
|
322
322
|
cuesInfos.cues = getCuesBefore(cuesInfos.cues, start);
|
|
323
323
|
cuesInfos.end = start;
|
|
324
324
|
|
|
325
|
-
|
|
325
|
+
const nextCueIdx = cueIdx + 1;
|
|
326
|
+
cuesInfos = cuesBuffer[nextCueIdx];
|
|
326
327
|
while (cuesInfos !== undefined && end > cuesInfos.end) {
|
|
327
|
-
cuesBuffer.splice(
|
|
328
|
-
cuesInfos = cuesBuffer[
|
|
328
|
+
cuesBuffer.splice(nextCueIdx, 1);
|
|
329
|
+
cuesInfos = cuesBuffer[nextCueIdx];
|
|
329
330
|
}
|
|
330
|
-
onIndexOfNextCueFound(
|
|
331
|
+
onIndexOfNextCueFound(nextCueIdx);
|
|
331
332
|
return;
|
|
332
333
|
}
|
|
333
334
|
}
|
|
@@ -45,7 +45,7 @@ export default class NativeTextSegmentBuffer extends SegmentBuffer {
|
|
|
45
45
|
|
|
46
46
|
private readonly _videoElement : HTMLMediaElement;
|
|
47
47
|
private readonly _track : ICompatTextTrack;
|
|
48
|
-
private readonly _trackElement
|
|
48
|
+
private readonly _trackElement : HTMLTrackElement | undefined;
|
|
49
49
|
|
|
50
50
|
private _buffered : ManualTimeRanges;
|
|
51
51
|
|
|
@@ -268,11 +268,11 @@ export interface INativeTextTracksBufferSegmentData {
|
|
|
268
268
|
* This is mostly needed for "sami" subtitles, to know which cues can / should
|
|
269
269
|
* be parsed.
|
|
270
270
|
*/
|
|
271
|
-
language? : string;
|
|
271
|
+
language? : string | undefined;
|
|
272
272
|
/** start time from which the segment apply, in seconds. */
|
|
273
|
-
start? : number;
|
|
273
|
+
start? : number | undefined;
|
|
274
274
|
/** end time until which the segment apply, in seconds. */
|
|
275
|
-
end? : number;
|
|
275
|
+
end? : number | undefined;
|
|
276
276
|
}
|
|
277
277
|
|
|
278
278
|
/**
|
|
@@ -84,19 +84,17 @@ function selectGCedRanges(
|
|
|
84
84
|
|
|
85
85
|
// start by trying to remove all ranges that do not contain the
|
|
86
86
|
// current time and respect the gcGap
|
|
87
|
-
// respect the gcGap? FIXME?
|
|
88
87
|
for (let i = 0; i < outerRanges.length; i++) {
|
|
89
88
|
const outerRange = outerRanges[i];
|
|
90
|
-
if (position - gcGap
|
|
89
|
+
if (position - gcGap > outerRange.end) {
|
|
91
90
|
cleanedupRanges.push(outerRange);
|
|
92
|
-
}
|
|
93
|
-
else if (position + gcGap > outerRange.start) {
|
|
91
|
+
} else if (position + gcGap < outerRange.start) {
|
|
94
92
|
cleanedupRanges.push(outerRange);
|
|
95
93
|
}
|
|
96
94
|
}
|
|
97
95
|
|
|
98
96
|
// try to clean up some space in the current range
|
|
99
|
-
if (innerRange
|
|
97
|
+
if (innerRange !== null) {
|
|
100
98
|
log.debug("Stream: GC removing part of inner range", cleanedupRanges);
|
|
101
99
|
if (position - gcGap > innerRange.start) {
|
|
102
100
|
cleanedupRanges.push({ start: innerRange.start,
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import pinkie from "pinkie";
|
|
18
17
|
import {
|
|
19
18
|
catchError,
|
|
20
19
|
combineLatest,
|
|
@@ -36,6 +35,7 @@ import createSegmentFetcher, {
|
|
|
36
35
|
import log from "../../../log";
|
|
37
36
|
import { ISegment } from "../../../manifest";
|
|
38
37
|
import objectAssign from "../../../utils/object_assign";
|
|
38
|
+
import PPromise from "../../../utils/promise";
|
|
39
39
|
import { freeRequest } from "./create_request";
|
|
40
40
|
import getCompleteSegmentId from "./get_complete_segment_id";
|
|
41
41
|
import getContentInfos from "./get_content_infos";
|
|
@@ -52,9 +52,6 @@ import {
|
|
|
52
52
|
} from "./types";
|
|
53
53
|
import VideoThumbnailLoaderError from "./video_thumbnail_loader_error";
|
|
54
54
|
|
|
55
|
-
const PPromise = typeof Promise === "function" ? Promise :
|
|
56
|
-
pinkie;
|
|
57
|
-
|
|
58
55
|
const MIN_NEEDED_DATA_AFTER_TIME = 2;
|
|
59
56
|
|
|
60
57
|
interface ITimeSettingTask { contentInfos: IContentInfos;
|
|
@@ -75,8 +72,8 @@ export default class VideoThumbnailLoader {
|
|
|
75
72
|
private readonly _videoElement: HTMLVideoElement;
|
|
76
73
|
|
|
77
74
|
private _player: Player;
|
|
78
|
-
private _currentTask
|
|
79
|
-
private _nextTaskSegmentsCompleteIds
|
|
75
|
+
private _currentTask : ITimeSettingTask | undefined;
|
|
76
|
+
private _nextTaskSegmentsCompleteIds : string[] | undefined;
|
|
80
77
|
constructor(videoElement: HTMLVideoElement,
|
|
81
78
|
player: Player) {
|
|
82
79
|
this._videoElement = videoElement;
|