rx-player 4.3.0-dev.2025031700 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -1
- package/VERSION +1 -1
- package/dist/commonjs/__GENERATED_CODE/embedded_dash_wasm.d.ts.map +1 -1
- package/dist/commonjs/__GENERATED_CODE/embedded_dash_wasm.js +1 -1
- package/dist/commonjs/__GENERATED_CODE/embedded_worker.d.ts.map +1 -1
- package/dist/commonjs/__GENERATED_CODE/embedded_worker.js +1 -1
- package/dist/commonjs/compat/add_class_name.d.ts.map +1 -1
- package/dist/commonjs/compat/add_class_name.js +1 -4
- package/dist/commonjs/compat/browser_compatibility_types.d.ts.map +1 -1
- package/dist/commonjs/compat/browser_compatibility_types.js +0 -1
- package/dist/commonjs/compat/eme/custom_media_keys/webkit_media_keys.d.ts.map +1 -1
- package/dist/commonjs/compat/eme/custom_media_keys/webkit_media_keys.js +0 -2
- package/dist/commonjs/compat/eme/eme-api-implementation.js +0 -1
- package/dist/commonjs/compat/eme/generate_key_request.d.ts +2 -2
- package/dist/commonjs/compat/eme/generate_key_request.js +2 -2
- package/dist/commonjs/compat/is_vtt_cue.d.ts.map +1 -1
- package/dist/commonjs/compat/is_vtt_cue.js +0 -1
- package/dist/commonjs/compat/patch_webkit_source_buffer.js +1 -1
- package/dist/commonjs/core/main/worker/content_preparer.d.ts.map +1 -1
- package/dist/commonjs/core/main/worker/content_preparer.js +82 -0
- package/dist/commonjs/core/segment_sinks/garbage_collector.d.ts.map +1 -1
- package/dist/commonjs/core/segment_sinks/garbage_collector.js +4 -0
- package/dist/commonjs/core/stream/representation/representation_stream.d.ts.map +1 -1
- package/dist/commonjs/core/stream/representation/representation_stream.js +29 -45
- package/dist/commonjs/core/stream/representation/utils/push_init_segment.d.ts.map +1 -1
- package/dist/commonjs/core/stream/representation/utils/push_init_segment.js +0 -3
- package/dist/commonjs/core/stream/representation/utils/push_media_segment.d.ts.map +1 -1
- package/dist/commonjs/core/stream/representation/utils/push_media_segment.js +0 -3
- package/dist/commonjs/experimental/tools/mediaCapabilitiesProber/api/index.js +1 -1
- package/dist/commonjs/experimental/tools/mediaCapabilitiesProber/capabilities.d.ts +2 -2
- package/dist/commonjs/experimental/tools/mediaCapabilitiesProber/capabilities.js +2 -2
- package/dist/commonjs/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.d.ts.map +1 -1
- package/dist/commonjs/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.js +0 -1
- package/dist/commonjs/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.d.ts.map +1 -1
- package/dist/commonjs/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +0 -1
- package/dist/commonjs/main_thread/api/public_api.d.ts.map +1 -1
- package/dist/commonjs/main_thread/api/public_api.js +2 -3
- package/dist/commonjs/main_thread/decrypt/session_events_listener.d.ts.map +1 -1
- package/dist/commonjs/main_thread/decrypt/session_events_listener.js +26 -18
- package/dist/commonjs/main_thread/decrypt/utils/loaded_sessions_store.d.ts +1 -1
- package/dist/commonjs/main_thread/decrypt/utils/loaded_sessions_store.js +1 -1
- package/dist/commonjs/main_thread/init/multi_thread_content_initializer.d.ts.map +1 -1
- package/dist/commonjs/main_thread/init/multi_thread_content_initializer.js +5 -3
- package/dist/commonjs/main_thread/init/utils/update_manifest_codec_support.d.ts +5 -4
- package/dist/commonjs/main_thread/init/utils/update_manifest_codec_support.d.ts.map +1 -1
- package/dist/commonjs/main_thread/init/utils/update_manifest_codec_support.js +10 -4
- package/dist/commonjs/manifest/classes/manifest.js +1 -1
- package/dist/commonjs/manifest/classes/representation.d.ts +2 -0
- package/dist/commonjs/manifest/classes/representation.d.ts.map +1 -1
- package/dist/commonjs/manifest/classes/representation.js +1 -0
- package/dist/commonjs/manifest/types.d.ts +2 -0
- package/dist/commonjs/manifest/types.d.ts.map +1 -1
- package/dist/commonjs/parsers/manifest/dash/common/convert_supplemental_codecs.d.ts +1 -1
- package/dist/commonjs/parsers/manifest/dash/common/convert_supplemental_codecs.js +1 -1
- package/dist/commonjs/parsers/manifest/dash/common/indexes/tokens.js +3 -3
- package/dist/commonjs/parsers/manifest/dash/common/parse_representations.js +1 -1
- package/dist/commonjs/parsers/manifest/dash/fast-js-parser/node_parsers/utils.d.ts.map +1 -1
- package/dist/commonjs/parsers/manifest/dash/native-parser/node_parsers/utils.d.ts.map +1 -1
- package/dist/commonjs/parsers/texttracks/ttml/parse_ttml.d.ts +1 -1
- package/dist/commonjs/parsers/texttracks/ttml/regexps.d.ts.map +1 -1
- package/dist/commonjs/parsers/texttracks/ttml/regexps.js +1 -1
- package/dist/commonjs/parsers/texttracks/webvtt/native/set_settings_on_cue.js +1 -1
- package/dist/commonjs/transports/smooth/segment_loader.d.ts.map +1 -1
- package/dist/commonjs/utils/array_find.js +1 -1
- package/dist/commonjs/utils/array_find_index.js +1 -1
- package/dist/commonjs/utils/array_includes.js +1 -1
- package/dist/commonjs/utils/assert.js +1 -1
- package/dist/commonjs/utils/flat_map.d.ts.map +1 -1
- package/dist/commonjs/utils/flat_map.js +0 -1
- package/dist/commonjs/utils/logger.d.ts.map +1 -1
- package/dist/commonjs/utils/logger.js +0 -2
- package/dist/commonjs/utils/noop.js +1 -1
- package/dist/commonjs/utils/object_assign.d.ts.map +1 -1
- package/dist/commonjs/utils/object_assign.js +3 -4
- package/dist/commonjs/utils/object_values.js +1 -1
- package/dist/commonjs/utils/request/xhr.js +1 -1
- package/dist/commonjs/utils/starts_with.d.ts.map +1 -1
- package/dist/commonjs/utils/starts_with.js +0 -1
- package/dist/commonjs/utils/string_parsing.js +1 -1
- package/dist/commonjs/utils/url-utils.js +2 -2
- package/dist/commonjs/utils/weak_map_memory.d.ts.map +1 -1
- package/dist/commonjs/utils/weak_map_memory.js +0 -1
- package/dist/es2017/__GENERATED_CODE/embedded_dash_wasm.d.ts.map +1 -1
- package/dist/es2017/__GENERATED_CODE/embedded_dash_wasm.js +1 -1
- package/dist/es2017/__GENERATED_CODE/embedded_worker.d.ts.map +1 -1
- package/dist/es2017/__GENERATED_CODE/embedded_worker.js +1 -1
- package/dist/es2017/compat/add_class_name.d.ts.map +1 -1
- package/dist/es2017/compat/add_class_name.js +1 -4
- package/dist/es2017/compat/browser_compatibility_types.d.ts.map +1 -1
- package/dist/es2017/compat/browser_compatibility_types.js +0 -1
- package/dist/es2017/compat/eme/custom_media_keys/webkit_media_keys.d.ts.map +1 -1
- package/dist/es2017/compat/eme/custom_media_keys/webkit_media_keys.js +0 -2
- package/dist/es2017/compat/eme/eme-api-implementation.js +0 -1
- package/dist/es2017/compat/eme/generate_key_request.d.ts +2 -2
- package/dist/es2017/compat/eme/generate_key_request.js +2 -2
- package/dist/es2017/compat/is_vtt_cue.d.ts.map +1 -1
- package/dist/es2017/compat/is_vtt_cue.js +0 -1
- package/dist/es2017/compat/patch_webkit_source_buffer.js +1 -1
- package/dist/es2017/core/main/worker/content_preparer.d.ts.map +1 -1
- package/dist/es2017/core/main/worker/content_preparer.js +34 -0
- package/dist/es2017/core/segment_sinks/garbage_collector.d.ts.map +1 -1
- package/dist/es2017/core/segment_sinks/garbage_collector.js +4 -0
- package/dist/es2017/core/stream/representation/representation_stream.d.ts.map +1 -1
- package/dist/es2017/core/stream/representation/representation_stream.js +29 -45
- package/dist/es2017/core/stream/representation/utils/push_init_segment.d.ts.map +1 -1
- package/dist/es2017/core/stream/representation/utils/push_init_segment.js +0 -3
- package/dist/es2017/core/stream/representation/utils/push_media_segment.d.ts.map +1 -1
- package/dist/es2017/core/stream/representation/utils/push_media_segment.js +0 -3
- package/dist/es2017/experimental/tools/mediaCapabilitiesProber/api/index.js +1 -1
- package/dist/es2017/experimental/tools/mediaCapabilitiesProber/capabilities.d.ts +2 -2
- package/dist/es2017/experimental/tools/mediaCapabilitiesProber/capabilities.js +2 -2
- package/dist/es2017/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.d.ts.map +1 -1
- package/dist/es2017/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.js +0 -1
- package/dist/es2017/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.d.ts.map +1 -1
- package/dist/es2017/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.js +0 -1
- package/dist/es2017/main_thread/api/public_api.d.ts.map +1 -1
- package/dist/es2017/main_thread/api/public_api.js +2 -3
- package/dist/es2017/main_thread/decrypt/session_events_listener.d.ts.map +1 -1
- package/dist/es2017/main_thread/decrypt/session_events_listener.js +4 -6
- package/dist/es2017/main_thread/decrypt/utils/loaded_sessions_store.d.ts +1 -1
- package/dist/es2017/main_thread/decrypt/utils/loaded_sessions_store.js +1 -1
- package/dist/es2017/main_thread/init/multi_thread_content_initializer.d.ts.map +1 -1
- package/dist/es2017/main_thread/init/multi_thread_content_initializer.js +5 -3
- package/dist/es2017/main_thread/init/utils/update_manifest_codec_support.d.ts +5 -4
- package/dist/es2017/main_thread/init/utils/update_manifest_codec_support.d.ts.map +1 -1
- package/dist/es2017/main_thread/init/utils/update_manifest_codec_support.js +10 -4
- package/dist/es2017/manifest/classes/manifest.js +1 -1
- package/dist/es2017/manifest/classes/representation.d.ts +2 -0
- package/dist/es2017/manifest/classes/representation.d.ts.map +1 -1
- package/dist/es2017/manifest/classes/representation.js +1 -0
- package/dist/es2017/manifest/types.d.ts +2 -0
- package/dist/es2017/manifest/types.d.ts.map +1 -1
- package/dist/es2017/parsers/manifest/dash/common/convert_supplemental_codecs.d.ts +1 -1
- package/dist/es2017/parsers/manifest/dash/common/convert_supplemental_codecs.js +1 -1
- package/dist/es2017/parsers/manifest/dash/common/indexes/tokens.js +3 -3
- package/dist/es2017/parsers/manifest/dash/common/parse_representations.js +1 -1
- package/dist/es2017/parsers/manifest/dash/fast-js-parser/node_parsers/utils.d.ts.map +1 -1
- package/dist/es2017/parsers/manifest/dash/native-parser/node_parsers/utils.d.ts.map +1 -1
- package/dist/es2017/parsers/texttracks/ttml/parse_ttml.d.ts +1 -1
- package/dist/es2017/parsers/texttracks/ttml/regexps.d.ts.map +1 -1
- package/dist/es2017/parsers/texttracks/ttml/regexps.js +1 -1
- package/dist/es2017/parsers/texttracks/webvtt/native/set_settings_on_cue.js +1 -1
- package/dist/es2017/transports/smooth/segment_loader.d.ts.map +1 -1
- package/dist/es2017/utils/array_find.js +1 -1
- package/dist/es2017/utils/array_find_index.js +1 -1
- package/dist/es2017/utils/array_includes.js +1 -1
- package/dist/es2017/utils/assert.js +1 -1
- package/dist/es2017/utils/flat_map.d.ts.map +1 -1
- package/dist/es2017/utils/flat_map.js +0 -1
- package/dist/es2017/utils/logger.d.ts.map +1 -1
- package/dist/es2017/utils/logger.js +0 -2
- package/dist/es2017/utils/noop.js +1 -1
- package/dist/es2017/utils/object_assign.d.ts.map +1 -1
- package/dist/es2017/utils/object_assign.js +3 -4
- package/dist/es2017/utils/object_values.js +1 -1
- package/dist/es2017/utils/request/xhr.js +1 -1
- package/dist/es2017/utils/starts_with.d.ts.map +1 -1
- package/dist/es2017/utils/starts_with.js +0 -1
- package/dist/es2017/utils/string_parsing.js +1 -1
- package/dist/es2017/utils/url-utils.js +2 -2
- package/dist/es2017/utils/weak_map_memory.d.ts.map +1 -1
- package/dist/es2017/utils/weak_map_memory.js +0 -1
- package/dist/mpd-parser.wasm +0 -0
- package/dist/rx-player.js +80 -107
- package/dist/rx-player.min.js +13 -13
- package/dist/worker.js +4 -4
- package/eslint.config.mjs +423 -0
- package/package.json +25 -20
- package/src/__GENERATED_CODE/embedded_dash_wasm.ts +1 -1
- package/src/__GENERATED_CODE/embedded_worker.ts +1 -1
- package/src/compat/__tests__/should_wait_for_data_before_loaded.test.ts +0 -1
- package/src/compat/add_class_name.ts +1 -4
- package/src/compat/browser_compatibility_types.ts +0 -1
- package/src/compat/eme/custom_media_keys/webkit_media_keys.ts +0 -2
- package/src/compat/eme/eme-api-implementation.ts +0 -1
- package/src/compat/eme/generate_key_request.ts +2 -2
- package/src/compat/is_vtt_cue.ts +0 -1
- package/src/compat/patch_webkit_source_buffer.ts +1 -1
- package/src/core/main/worker/content_preparer.ts +35 -1
- package/src/core/segment_sinks/garbage_collector.ts +4 -0
- package/src/core/stream/representation/representation_stream.ts +29 -64
- package/src/core/stream/representation/utils/push_init_segment.ts +0 -3
- package/src/core/stream/representation/utils/push_media_segment.ts +0 -3
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/DRMInfos.test.ts +0 -3
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/HDCPPolicy.test.ts +0 -2
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/decodingInfos.test.ts +0 -2
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaContentType.test.ts +0 -2
- package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaDisplayInfos.test.ts +0 -7
- package/src/experimental/tools/mediaCapabilitiesProber/api/index.ts +1 -1
- package/src/experimental/tools/mediaCapabilitiesProber/capabilities.ts +2 -2
- package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaContentType.ts +0 -1
- package/src/experimental/tools/mediaCapabilitiesProber/probers/mediaDisplayInfos.ts +0 -1
- package/src/main_thread/api/public_api.ts +2 -3
- package/src/main_thread/decrypt/session_events_listener.ts +9 -8
- package/src/main_thread/decrypt/utils/loaded_sessions_store.ts +1 -1
- package/src/main_thread/init/multi_thread_content_initializer.ts +5 -2
- package/src/main_thread/init/utils/__tests__/update_manifest_codec_support.test.ts +45 -2
- package/src/main_thread/init/utils/update_manifest_codec_support.ts +13 -3
- package/src/manifest/classes/manifest.ts +1 -1
- package/src/manifest/classes/representation.ts +3 -0
- package/src/manifest/types.ts +2 -0
- package/src/parsers/manifest/dash/common/convert_supplemental_codecs.ts +1 -1
- package/src/parsers/manifest/dash/common/indexes/tokens.ts +3 -3
- package/src/parsers/manifest/dash/common/parse_representations.ts +1 -1
- package/src/parsers/manifest/dash/fast-js-parser/node_parsers/__tests__/AdaptationSet.test.ts +3 -7
- package/src/parsers/manifest/dash/fast-js-parser/node_parsers/__tests__/ContentComponent.test.ts +1 -1
- package/src/parsers/manifest/dash/fast-js-parser/node_parsers/__tests__/ContentProtection.test.ts +1 -1
- package/src/parsers/manifest/dash/native-parser/node_parsers/__tests__/AdaptationSet.test.ts +3 -3
- package/src/parsers/manifest/dash/native-parser/node_parsers/__tests__/ContentComponent.test.ts +1 -1
- package/src/parsers/manifest/dash/native-parser/node_parsers/__tests__/ContentProtection.test.ts +2 -2
- package/src/parsers/texttracks/ttml/parse_ttml.ts +1 -1
- package/src/parsers/texttracks/ttml/regexps.ts +1 -1
- package/src/parsers/texttracks/webvtt/native/set_settings_on_cue.ts +1 -1
- package/src/utils/__tests__/array_find.test.ts +1 -1
- package/src/utils/__tests__/array_find_index.test.ts +0 -1
- package/src/utils/__tests__/array_includes.test.ts +1 -1
- package/src/utils/__tests__/id_generator.test.ts +0 -2
- package/src/utils/array_find.ts +1 -1
- package/src/utils/array_find_index.ts +1 -1
- package/src/utils/array_includes.ts +1 -1
- package/src/utils/assert.ts +1 -1
- package/src/utils/flat_map.ts +0 -1
- package/src/utils/logger.ts +0 -2
- package/src/utils/noop.ts +1 -1
- package/src/utils/object_assign.ts +3 -4
- package/src/utils/object_values.ts +1 -1
- package/src/utils/request/xhr.ts +2 -2
- package/src/utils/starts_with.ts +0 -1
- package/src/utils/string_parsing.ts +1 -1
- package/src/utils/url-utils.ts +2 -2
- package/src/utils/weak_map_memory.ts +0 -1
- package/vitest.config.mjs +34 -28
|
@@ -42,7 +42,6 @@ describe("compat - shouldWaitForDataBeforeLoaded", () => {
|
|
|
42
42
|
expect(shouldWaitForDataBeforeLoaded(false)).toBe(true);
|
|
43
43
|
});
|
|
44
44
|
|
|
45
|
-
// eslint-disable-next-line max-len
|
|
46
45
|
it("should return false if we are on the Safari browser and in directfile mode", async () => {
|
|
47
46
|
vi.doMock("../browser_detection", () => {
|
|
48
47
|
return {
|
|
@@ -24,10 +24,7 @@ let hasClassList: boolean | undefined;
|
|
|
24
24
|
*/
|
|
25
25
|
export default function addClassName(elt: HTMLElement, className: string): void {
|
|
26
26
|
if (hasClassList === undefined) {
|
|
27
|
-
hasClassList =
|
|
28
|
-
elt.classList !== undefined &&
|
|
29
|
-
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
30
|
-
typeof elt.classList.add === "function";
|
|
27
|
+
hasClassList = elt.classList !== undefined && typeof elt.classList.add === "function";
|
|
31
28
|
}
|
|
32
29
|
|
|
33
30
|
if (hasClassList) {
|
|
@@ -441,7 +441,6 @@ const MediaSource_:
|
|
|
441
441
|
|
|
442
442
|
const isManagedMediaSource =
|
|
443
443
|
MediaSource_ !== undefined && MediaSource_ === gs?.ManagedMediaSource;
|
|
444
|
-
/* eslint-enable */
|
|
445
444
|
|
|
446
445
|
/** List an HTMLMediaElement's possible values for its readyState property. */
|
|
447
446
|
const READY_STATES = {
|
|
@@ -118,7 +118,6 @@ class WebkitMediaKeySession
|
|
|
118
118
|
} else {
|
|
119
119
|
uInt8Arraylicense = new Uint8Array(license.buffer);
|
|
120
120
|
}
|
|
121
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
122
121
|
resolve(this._nativeSession.update(uInt8Arraylicense));
|
|
123
122
|
} catch (err) {
|
|
124
123
|
reject(err);
|
|
@@ -150,7 +149,6 @@ class WebkitMediaKeySession
|
|
|
150
149
|
throw new Error("Impossible to get the key sessions");
|
|
151
150
|
}
|
|
152
151
|
this._listenEvent(keySession);
|
|
153
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
154
152
|
this._nativeSession = keySession;
|
|
155
153
|
resolve();
|
|
156
154
|
});
|
|
@@ -257,7 +257,6 @@ function getEmeApiImplementation(
|
|
|
257
257
|
keySystemConfigurationResponse.audioCapabilities = audioCapabilities;
|
|
258
258
|
}
|
|
259
259
|
|
|
260
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
261
260
|
const customMediaKeys = createCustomMediaKeys(keyType);
|
|
262
261
|
return Promise.resolve(
|
|
263
262
|
new CustomMediaKeySystemAccess(
|
|
@@ -120,11 +120,11 @@ export function patchInitData(initData: Uint8Array): Uint8Array {
|
|
|
120
120
|
|
|
121
121
|
/**
|
|
122
122
|
* Generate a request from session.
|
|
123
|
-
* @param {MediaKeySession}
|
|
123
|
+
* @param {MediaKeySession} session - MediaKeySession on which the request will
|
|
124
124
|
* be done.
|
|
125
125
|
* @param {string} initializationDataType - Initialization data type given e.g.
|
|
126
126
|
* by the "encrypted" event for the corresponding request.
|
|
127
|
-
* @param {Uint8Array}
|
|
127
|
+
* @param {Uint8Array} initializationData - Initialization data given e.g. by
|
|
128
128
|
* the "encrypted" event for the corresponding request.
|
|
129
129
|
* @returns {Promise} - Emit when done. Errors if fails.
|
|
130
130
|
*/
|
package/src/compat/is_vtt_cue.ts
CHANGED
|
@@ -25,6 +25,5 @@ import type { ICompatVTTCue } from "./browser_compatibility_types";
|
|
|
25
25
|
export default function isVTTCue(
|
|
26
26
|
cue: ICompatVTTCue | TextTrackCue,
|
|
27
27
|
): cue is ICompatVTTCue {
|
|
28
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
29
28
|
return typeof globalScope.VTTCue === "function" && cue instanceof globalScope.VTTCue;
|
|
30
29
|
}
|
|
@@ -67,7 +67,7 @@ export default function patchWebkitSourceBuffer(): void {
|
|
|
67
67
|
const sourceBufferWebkitProto = sourceBufferWebkitRef.prototype;
|
|
68
68
|
|
|
69
69
|
for (const fnName in EventEmitter.prototype) {
|
|
70
|
-
if (
|
|
70
|
+
if (Object.prototype.hasOwnProperty.call(EventEmitter.prototype, fnName)) {
|
|
71
71
|
(sourceBufferWebkitProto as unknown as Record<string, unknown>)[fnName] = (
|
|
72
72
|
EventEmitter.prototype as unknown as Record<string, unknown>
|
|
73
73
|
)[fnName];
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { MediaSource_ } from "../../../compat/browser_compatibility_types";
|
|
1
2
|
import features from "../../../features";
|
|
2
3
|
import log from "../../../log";
|
|
3
4
|
import type { IManifest, IManifestMetadata } from "../../../manifest";
|
|
4
5
|
import { createRepresentationFilterFromFnString } from "../../../manifest";
|
|
6
|
+
import type Manifest from "../../../manifest/classes";
|
|
5
7
|
import type { IMediaSourceInterface } from "../../../mse";
|
|
6
8
|
import MainMediaSourceInterface from "../../../mse/main_media_source_interface";
|
|
7
9
|
import WorkerMediaSourceInterface from "../../../mse/worker_media_source_interface";
|
|
@@ -13,6 +15,7 @@ import { WorkerMessageType } from "../../../multithread_types";
|
|
|
13
15
|
import type { IPlayerError } from "../../../public_types";
|
|
14
16
|
import assert from "../../../utils/assert";
|
|
15
17
|
import idGenerator from "../../../utils/id_generator";
|
|
18
|
+
import isNullOrUndefined from "../../../utils/is_null_or_undefined";
|
|
16
19
|
import objectAssign from "../../../utils/object_assign";
|
|
17
20
|
import type {
|
|
18
21
|
CancellationError,
|
|
@@ -278,7 +281,7 @@ export default class ContentPreparer {
|
|
|
278
281
|
) {
|
|
279
282
|
return;
|
|
280
283
|
}
|
|
281
|
-
|
|
284
|
+
updateCodecSupportInWorkerMode(manifest);
|
|
282
285
|
const sentManifest = manifest.getMetadataSnapshot();
|
|
283
286
|
manifest.addEventListener(
|
|
284
287
|
"manifestUpdate",
|
|
@@ -534,3 +537,34 @@ function createMediaSourceInterfaceAndSegmentSinksStore(
|
|
|
534
537
|
|
|
535
538
|
return [mediaSourceInterface, segmentSinksStore, textSender];
|
|
536
539
|
}
|
|
540
|
+
|
|
541
|
+
/**
|
|
542
|
+
* Set Representation.isCodecSupportedInWebWorker to true or false
|
|
543
|
+
* If the codec is supported in the current context.
|
|
544
|
+
* If MSE in worker is not available, the attribute is not set.
|
|
545
|
+
*/
|
|
546
|
+
function updateCodecSupportInWorkerMode(manifestToUpdate: Manifest) {
|
|
547
|
+
if (isNullOrUndefined(MediaSource_)) {
|
|
548
|
+
return;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
const codecsMap = new Map<string, boolean>();
|
|
552
|
+
for (const period of manifestToUpdate.periods) {
|
|
553
|
+
const checkedAdaptations = [
|
|
554
|
+
...(period.adaptations.video ?? []),
|
|
555
|
+
...(period.adaptations.audio ?? []),
|
|
556
|
+
];
|
|
557
|
+
for (const adaptation of checkedAdaptations) {
|
|
558
|
+
for (const representation of adaptation.representations) {
|
|
559
|
+
const codec = `${representation.mimeType};codecs="${representation.codecs[0]}"`;
|
|
560
|
+
if (codecsMap.has(codec)) {
|
|
561
|
+
representation.isCodecSupportedInWebWorker = codecsMap.get(codec);
|
|
562
|
+
} else {
|
|
563
|
+
const supported = MediaSource_.isTypeSupported(codec);
|
|
564
|
+
representation.isCodecSupportedInWebWorker = supported;
|
|
565
|
+
codecsMap.set(codec, supported);
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
}
|
|
@@ -21,6 +21,7 @@ import type { IRange } from "../../utils/ranges";
|
|
|
21
21
|
import { getInnerAndOuterRanges } from "../../utils/ranges";
|
|
22
22
|
import type { IReadOnlySharedReference } from "../../utils/reference";
|
|
23
23
|
import type { CancellationSignal } from "../../utils/task_canceller";
|
|
24
|
+
import TaskCanceller from "../../utils/task_canceller";
|
|
24
25
|
import type { IStreamOrchestratorPlaybackObservation } from "../stream";
|
|
25
26
|
import type { SegmentSink } from "./implementations";
|
|
26
27
|
|
|
@@ -80,6 +81,9 @@ export default function BufferGarbageCollector(
|
|
|
80
81
|
maxBufferAhead.getValue(),
|
|
81
82
|
cancellationSignal,
|
|
82
83
|
).catch((e) => {
|
|
84
|
+
if (cancellationSignal.isCancelled() && TaskCanceller.isCancellationError(e)) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
83
87
|
const errMsg = e instanceof Error ? e.message : "Unknown error";
|
|
84
88
|
log.error("Could not run BufferGarbageCollector:", errMsg);
|
|
85
89
|
});
|
|
@@ -99,17 +99,9 @@ export default function RepresentationStream<TSegmentDataType>(
|
|
|
99
99
|
const { bufferGoal, maxBufferSize, drmSystemId, fastSwitchThreshold } = options;
|
|
100
100
|
const bufferType = adaptation.type;
|
|
101
101
|
|
|
102
|
-
/** `TaskCanceller` stopping
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* `TaskCanceller` allowing to only stop segment loading and checking operations.
|
|
108
|
-
* This allows to stop only tasks linked to network resource usage, which is
|
|
109
|
-
* often a limited resource, while still letting buffer operations to finish.
|
|
110
|
-
*/
|
|
111
|
-
const segmentsLoadingCanceller = new TaskCanceller();
|
|
112
|
-
segmentsLoadingCanceller.linkToSignal(globalCanceller.signal);
|
|
102
|
+
/** `TaskCanceller` stopping operations performed by the `RepresentationStream` */
|
|
103
|
+
const canceller = new TaskCanceller();
|
|
104
|
+
canceller.linkToSignal(parentCancelSignal);
|
|
113
105
|
|
|
114
106
|
/** Saved initialization segment state for this representation. */
|
|
115
107
|
const initSegmentState: IInitSegmentState = {
|
|
@@ -117,7 +109,7 @@ export default function RepresentationStream<TSegmentDataType>(
|
|
|
117
109
|
uniqueId: null,
|
|
118
110
|
isLoaded: false,
|
|
119
111
|
};
|
|
120
|
-
|
|
112
|
+
canceller.signal.register(() => {
|
|
121
113
|
// Free initialization segment if one has been declared
|
|
122
114
|
if (initSegmentState.uniqueId !== null) {
|
|
123
115
|
segmentSink.freeInitSegment(initSegmentState.uniqueId);
|
|
@@ -154,39 +146,27 @@ export default function RepresentationStream<TSegmentDataType>(
|
|
|
154
146
|
callbacks.encryptionDataEncountered(
|
|
155
147
|
encryptionData.map((d) => objectAssign({ content }, d)),
|
|
156
148
|
);
|
|
157
|
-
if (
|
|
149
|
+
if (canceller.isUsed()) {
|
|
158
150
|
return; // previous callback has stopped everything by side-effect
|
|
159
151
|
}
|
|
160
152
|
}
|
|
161
153
|
}
|
|
162
154
|
|
|
163
155
|
segmentQueue.addEventListener("error", (err) => {
|
|
164
|
-
if (
|
|
156
|
+
if (canceller.signal.isCancelled()) {
|
|
165
157
|
return; // ignore post requests-cancellation loading-related errors,
|
|
166
158
|
}
|
|
167
|
-
|
|
159
|
+
canceller.cancel(); // Stop every operations
|
|
168
160
|
callbacks.error(err);
|
|
169
161
|
});
|
|
170
|
-
segmentQueue.addEventListener(
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
segmentsLoadingCanceller.signal,
|
|
174
|
-
);
|
|
175
|
-
segmentQueue.addEventListener(
|
|
176
|
-
"parsedMediaSegment",
|
|
177
|
-
onParsedChunk,
|
|
178
|
-
segmentsLoadingCanceller.signal,
|
|
179
|
-
);
|
|
180
|
-
segmentQueue.addEventListener(
|
|
181
|
-
"emptyQueue",
|
|
182
|
-
checkStatus,
|
|
183
|
-
segmentsLoadingCanceller.signal,
|
|
184
|
-
);
|
|
162
|
+
segmentQueue.addEventListener("parsedInitSegment", onParsedChunk, canceller.signal);
|
|
163
|
+
segmentQueue.addEventListener("parsedMediaSegment", onParsedChunk, canceller.signal);
|
|
164
|
+
segmentQueue.addEventListener("emptyQueue", checkStatus, canceller.signal);
|
|
185
165
|
segmentQueue.addEventListener(
|
|
186
166
|
"requestRetry",
|
|
187
167
|
(payload) => {
|
|
188
168
|
callbacks.warning(payload.error);
|
|
189
|
-
if (
|
|
169
|
+
if (canceller.signal.isCancelled()) {
|
|
190
170
|
return; // If the previous callback led to loading operations being stopped, skip
|
|
191
171
|
}
|
|
192
172
|
const retriedSegment = payload.segment;
|
|
@@ -197,7 +177,7 @@ export default function RepresentationStream<TSegmentDataType>(
|
|
|
197
177
|
callbacks.manifestMightBeOufOfSync();
|
|
198
178
|
}
|
|
199
179
|
},
|
|
200
|
-
|
|
180
|
+
canceller.signal,
|
|
201
181
|
);
|
|
202
182
|
segmentQueue.addEventListener(
|
|
203
183
|
"fullyLoadedSegment",
|
|
@@ -206,36 +186,32 @@ export default function RepresentationStream<TSegmentDataType>(
|
|
|
206
186
|
.signalSegmentComplete(objectAssign({ segment }, content))
|
|
207
187
|
.catch(onFatalBufferError);
|
|
208
188
|
},
|
|
209
|
-
|
|
189
|
+
canceller.signal,
|
|
210
190
|
);
|
|
211
191
|
|
|
212
192
|
/** Emit the last scheduled downloading queue for segments. */
|
|
213
193
|
const segmentsToLoadRef = segmentQueue.resetForContent(content, hasInitSegment);
|
|
214
194
|
|
|
215
|
-
|
|
195
|
+
canceller.signal.register(() => {
|
|
216
196
|
segmentQueue.stop();
|
|
217
197
|
});
|
|
218
198
|
|
|
219
199
|
playbackObserver.listen(checkStatus, {
|
|
220
200
|
includeLastObservation: false,
|
|
221
|
-
clearSignal:
|
|
201
|
+
clearSignal: canceller.signal,
|
|
222
202
|
});
|
|
223
|
-
content.manifest.addEventListener(
|
|
224
|
-
"manifestUpdate",
|
|
225
|
-
checkStatus,
|
|
226
|
-
segmentsLoadingCanceller.signal,
|
|
227
|
-
);
|
|
203
|
+
content.manifest.addEventListener("manifestUpdate", checkStatus, canceller.signal);
|
|
228
204
|
bufferGoal.onUpdate(checkStatus, {
|
|
229
205
|
emitCurrentValue: false,
|
|
230
|
-
clearSignal:
|
|
206
|
+
clearSignal: canceller.signal,
|
|
231
207
|
});
|
|
232
208
|
maxBufferSize.onUpdate(checkStatus, {
|
|
233
209
|
emitCurrentValue: false,
|
|
234
|
-
clearSignal:
|
|
210
|
+
clearSignal: canceller.signal,
|
|
235
211
|
});
|
|
236
212
|
terminate.onUpdate(checkStatus, {
|
|
237
213
|
emitCurrentValue: false,
|
|
238
|
-
clearSignal:
|
|
214
|
+
clearSignal: canceller.signal,
|
|
239
215
|
});
|
|
240
216
|
checkStatus();
|
|
241
217
|
return;
|
|
@@ -246,7 +222,7 @@ export default function RepresentationStream<TSegmentDataType>(
|
|
|
246
222
|
* issues at the current time, calling the right callbacks if necessary.
|
|
247
223
|
*/
|
|
248
224
|
function checkStatus(): void {
|
|
249
|
-
if (
|
|
225
|
+
if (canceller.isUsed()) {
|
|
250
226
|
return; // Stop all buffer status checking if load operations are stopped
|
|
251
227
|
}
|
|
252
228
|
const observation = playbackObserver.getReference().getValue();
|
|
@@ -302,7 +278,7 @@ export default function RepresentationStream<TSegmentDataType>(
|
|
|
302
278
|
log.debug("Stream: Urgent switch, terminate now.", bufferType);
|
|
303
279
|
segmentsToLoadRef.setValue({ initSegment: null, segmentQueue: [] });
|
|
304
280
|
segmentsToLoadRef.finish();
|
|
305
|
-
|
|
281
|
+
canceller.cancel();
|
|
306
282
|
callbacks.terminating();
|
|
307
283
|
return;
|
|
308
284
|
} else {
|
|
@@ -330,7 +306,7 @@ export default function RepresentationStream<TSegmentDataType>(
|
|
|
330
306
|
if (nextQueue.length === 0 && nextInit === null) {
|
|
331
307
|
log.debug("Stream: No request left, terminate", bufferType);
|
|
332
308
|
segmentsToLoadRef.finish();
|
|
333
|
-
|
|
309
|
+
canceller.cancel();
|
|
334
310
|
callbacks.terminating();
|
|
335
311
|
return;
|
|
336
312
|
}
|
|
@@ -345,7 +321,7 @@ export default function RepresentationStream<TSegmentDataType>(
|
|
|
345
321
|
hasFinishedLoading: status.hasFinishedLoading,
|
|
346
322
|
neededSegments: status.neededSegments,
|
|
347
323
|
});
|
|
348
|
-
if (
|
|
324
|
+
if (canceller.signal.isCancelled()) {
|
|
349
325
|
return; // previous callback has stopped loading operations by side-effect
|
|
350
326
|
}
|
|
351
327
|
const { UPTO_CURRENT_POSITION_CLEANUP } = config.getCurrent();
|
|
@@ -370,12 +346,6 @@ export default function RepresentationStream<TSegmentDataType>(
|
|
|
370
346
|
| IParsedInitSegmentPayload<TSegmentDataType>
|
|
371
347
|
| IParsedSegmentPayload<TSegmentDataType>,
|
|
372
348
|
): void {
|
|
373
|
-
if (globalCanceller.isUsed()) {
|
|
374
|
-
// We should not do anything with segments if the `RepresentationStream`
|
|
375
|
-
// is not running anymore.
|
|
376
|
-
return;
|
|
377
|
-
}
|
|
378
|
-
|
|
379
349
|
// Supplementary encryption information might have been parsed.
|
|
380
350
|
for (const protInfo of evt.protectionData) {
|
|
381
351
|
// TODO better handle use cases like key rotation by not always grouping
|
|
@@ -397,11 +367,6 @@ export default function RepresentationStream<TSegmentDataType>(
|
|
|
397
367
|
allEncryptionData.map((p) => objectAssign({ content }, p)),
|
|
398
368
|
);
|
|
399
369
|
hasSentEncryptionData = true;
|
|
400
|
-
|
|
401
|
-
// previous callback could have lead to cancellation
|
|
402
|
-
if (globalCanceller.isUsed()) {
|
|
403
|
-
return;
|
|
404
|
-
}
|
|
405
370
|
}
|
|
406
371
|
}
|
|
407
372
|
|
|
@@ -425,7 +390,7 @@ export default function RepresentationStream<TSegmentDataType>(
|
|
|
425
390
|
segmentData: evt.initializationData,
|
|
426
391
|
segmentSink,
|
|
427
392
|
},
|
|
428
|
-
|
|
393
|
+
canceller.signal,
|
|
429
394
|
)
|
|
430
395
|
.then((result) => {
|
|
431
396
|
if (result !== null) {
|
|
@@ -447,13 +412,13 @@ export default function RepresentationStream<TSegmentDataType>(
|
|
|
447
412
|
|
|
448
413
|
if (needsManifestRefresh === true) {
|
|
449
414
|
callbacks.needsManifestRefresh();
|
|
450
|
-
if (
|
|
415
|
+
if (canceller.isUsed()) {
|
|
451
416
|
return; // previous callback has stopped everything by side-effect
|
|
452
417
|
}
|
|
453
418
|
}
|
|
454
419
|
if (inbandEvents !== undefined && inbandEvents.length > 0) {
|
|
455
420
|
callbacks.inbandEvent(inbandEvents);
|
|
456
|
-
if (
|
|
421
|
+
if (canceller.isUsed()) {
|
|
457
422
|
return; // previous callback has stopped everything by side-effect
|
|
458
423
|
}
|
|
459
424
|
}
|
|
@@ -469,7 +434,7 @@ export default function RepresentationStream<TSegmentDataType>(
|
|
|
469
434
|
segment: evt.segment,
|
|
470
435
|
segmentSink,
|
|
471
436
|
},
|
|
472
|
-
|
|
437
|
+
canceller.signal,
|
|
473
438
|
)
|
|
474
439
|
.then((result) => {
|
|
475
440
|
if (result !== null) {
|
|
@@ -487,7 +452,7 @@ export default function RepresentationStream<TSegmentDataType>(
|
|
|
487
452
|
* @param {*} err
|
|
488
453
|
*/
|
|
489
454
|
function onFatalBufferError(err: unknown): void {
|
|
490
|
-
if (
|
|
455
|
+
if (canceller.isUsed() && err instanceof CancellationError) {
|
|
491
456
|
// The error is linked to cancellation AND we explicitely cancelled buffer
|
|
492
457
|
// operations.
|
|
493
458
|
// We can thus ignore it, it is very unlikely to lead to true buffer issues.
|
|
@@ -499,7 +464,7 @@ export default function RepresentationStream<TSegmentDataType>(
|
|
|
499
464
|
representation.bitrate,
|
|
500
465
|
err instanceof Error ? err : null,
|
|
501
466
|
);
|
|
502
|
-
|
|
467
|
+
canceller.cancel();
|
|
503
468
|
callbacks.error(err);
|
|
504
469
|
}
|
|
505
470
|
}
|
|
@@ -62,9 +62,6 @@ export default async function pushInitSegment<T>(
|
|
|
62
62
|
},
|
|
63
63
|
cancelSignal: CancellationSignal,
|
|
64
64
|
): Promise<IStreamEventAddedSegmentPayload | null> {
|
|
65
|
-
if (cancelSignal.cancellationError !== null) {
|
|
66
|
-
throw cancelSignal.cancellationError;
|
|
67
|
-
}
|
|
68
65
|
const codec = content.representation.getMimeTypeString();
|
|
69
66
|
const data: IPushedChunkData<T> = {
|
|
70
67
|
initSegmentUniqueId,
|
|
@@ -68,9 +68,6 @@ export default async function pushMediaSegment<T>(
|
|
|
68
68
|
if (parsedSegment.chunkData === null) {
|
|
69
69
|
return null;
|
|
70
70
|
}
|
|
71
|
-
if (cancelSignal.cancellationError !== null) {
|
|
72
|
-
throw cancelSignal.cancellationError;
|
|
73
|
-
}
|
|
74
71
|
const { chunkData, chunkInfos, chunkOffset, chunkSize, appendWindow } = parsedSegment;
|
|
75
72
|
const codec = content.representation.getMimeTypeString();
|
|
76
73
|
const { APPEND_WINDOW_SECURITIES } = config.getCurrent();
|
|
@@ -11,7 +11,6 @@ describe("MediaCapabilitiesProber probers - DRMInfos", () => {
|
|
|
11
11
|
const configuration = {};
|
|
12
12
|
const probeDRMInfos = (await vi.importActual("../../probers/DRMInfos"))
|
|
13
13
|
.default as typeof IProbeDRMInfos;
|
|
14
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
15
14
|
await expect(probeDRMInfos(configuration)).rejects.toEqual(
|
|
16
15
|
"MediaCapabilitiesProber >>> API_CALL: " +
|
|
17
16
|
"Missing a type argument to request a media key system access.",
|
|
@@ -24,7 +23,6 @@ describe("MediaCapabilitiesProber probers - DRMInfos", () => {
|
|
|
24
23
|
};
|
|
25
24
|
const probeDRMInfos = (await vi.importActual("../../probers/DRMInfos"))
|
|
26
25
|
.default as typeof IProbeDRMInfos;
|
|
27
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
28
26
|
await expect(probeDRMInfos(configuration)).rejects.toEqual(
|
|
29
27
|
"MediaCapabilitiesProber >>> API_CALL: " +
|
|
30
28
|
"Missing a type argument to request a media key system access.",
|
|
@@ -42,7 +40,6 @@ describe("MediaCapabilitiesProber probers - DRMInfos", () => {
|
|
|
42
40
|
}));
|
|
43
41
|
const probeDRMInfos = (await vi.importActual("../../probers/DRMInfos"))
|
|
44
42
|
.default as typeof IProbeDRMInfos;
|
|
45
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
46
43
|
await expect(probeDRMInfos(configuration)).resolves.toEqual([
|
|
47
44
|
ProberStatus.NotSupported,
|
|
48
45
|
{ configuration: {}, type: "clearkick" },
|
|
@@ -13,7 +13,6 @@ describe("MediaCapabilitiesProber probers - HDCPPolicy", () => {
|
|
|
13
13
|
}));
|
|
14
14
|
const probeHDCPPolicy = (await vi.importActual("../../probers/HDCPPolicy"))
|
|
15
15
|
.default as typeof IProbeHDCPPolicy;
|
|
16
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
17
16
|
await expect(probeHDCPPolicy({})).rejects.toEqual(
|
|
18
17
|
"MediaCapabilitiesProber >>> API_CALL: API not available",
|
|
19
18
|
);
|
|
@@ -32,7 +31,6 @@ describe("MediaCapabilitiesProber probers - HDCPPolicy", () => {
|
|
|
32
31
|
}));
|
|
33
32
|
const probeHDCPPolicy = (await vi.importActual("../../probers/HDCPPolicy"))
|
|
34
33
|
.default as typeof IProbeHDCPPolicy;
|
|
35
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
36
34
|
await expect(probeHDCPPolicy({})).rejects.toEqual(
|
|
37
35
|
"MediaCapabilitiesProber >>> API_CALL: " +
|
|
38
36
|
"Missing policy argument for calling getStatusForPolicy.",
|
package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/decodingInfos.test.ts
CHANGED
|
@@ -166,7 +166,6 @@ describe("MediaCapabilitiesProber probers - decodingInfo", () => {
|
|
|
166
166
|
// @ts-expect-error: `navigator.mediaCapabilities` is read-only normally, for
|
|
167
167
|
// now, we're going through JSDom through so that's OK.
|
|
168
168
|
delete navigator.mediaCapabilities;
|
|
169
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
170
169
|
await expect(probeDecodingInfos({})).rejects.toThrowError(
|
|
171
170
|
"MediaCapabilitiesProber >>> API_CALL: MediaCapabilities API not available",
|
|
172
171
|
);
|
|
@@ -182,7 +181,6 @@ describe("MediaCapabilitiesProber probers - decodingInfo", () => {
|
|
|
182
181
|
// now, we're going through JSDom through so that's OK.
|
|
183
182
|
navigator.mediaCapabilities = {};
|
|
184
183
|
}
|
|
185
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
186
184
|
await expect(probeDecodingInfos({})).rejects.toThrowError(
|
|
187
185
|
"MediaCapabilitiesProber >>> API_CALL: Decoding Info not available",
|
|
188
186
|
);
|
package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaContentType.test.ts
CHANGED
|
@@ -15,7 +15,6 @@ describe("MediaCapabilitiesProber - probers probeMediaContentType", () => {
|
|
|
15
15
|
const probeMediaContentType = (
|
|
16
16
|
await vi.importActual("../../probers/mediaContentType")
|
|
17
17
|
).default as typeof IProbeMediaContentType;
|
|
18
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
19
18
|
await expect(probeMediaContentType({})).rejects.toThrowError(
|
|
20
19
|
"MediaCapabilitiesProber >>> API_CALL: " + "MediaSource API not available",
|
|
21
20
|
);
|
|
@@ -30,7 +29,6 @@ describe("MediaCapabilitiesProber - probers probeMediaContentType", () => {
|
|
|
30
29
|
const probeMediaContentType = (
|
|
31
30
|
await vi.importActual("../../probers/mediaContentType")
|
|
32
31
|
).default as typeof IProbeMediaContentType;
|
|
33
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
34
32
|
await expect(probeMediaContentType({})).rejects.toThrowError(
|
|
35
33
|
"MediaCapabilitiesProber >>> API_CALL: " + "isTypeSupported not available",
|
|
36
34
|
);
|
package/src/experimental/tools/mediaCapabilitiesProber/__tests__/probers/mediaDisplayInfos.test.ts
CHANGED
|
@@ -5,7 +5,6 @@ import { ProberStatus } from "../../types";
|
|
|
5
5
|
|
|
6
6
|
describe("MediaCapabilitiesProber probers probeMediaDisplayInfos", () => {
|
|
7
7
|
it("should throw if matchMedia is undefined", async () => {
|
|
8
|
-
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
9
8
|
const origMatchMedia = globalScope.matchMedia;
|
|
10
9
|
(
|
|
11
10
|
globalScope as { matchMedia: typeof globalScope.matchMedia | undefined }
|
|
@@ -14,7 +13,6 @@ describe("MediaCapabilitiesProber probers probeMediaDisplayInfos", () => {
|
|
|
14
13
|
const probeMediaDisplayInfos = (
|
|
15
14
|
await vi.importActual("../../probers/mediaDisplayInfos")
|
|
16
15
|
).default as typeof IProbeMediaDisplayInfos;
|
|
17
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
18
16
|
await expect(probeMediaDisplayInfos({})).rejects.toThrowError(
|
|
19
17
|
"MediaCapabilitiesProber >>> API_CALL: matchMedia not available",
|
|
20
18
|
);
|
|
@@ -24,7 +22,6 @@ describe("MediaCapabilitiesProber probers probeMediaDisplayInfos", () => {
|
|
|
24
22
|
});
|
|
25
23
|
|
|
26
24
|
it("should throw if no colorSpace in display configuration", async () => {
|
|
27
|
-
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
28
25
|
const origMatchMedia = globalScope.matchMedia;
|
|
29
26
|
const mockMatchMedia = vi.fn(() => true);
|
|
30
27
|
globalScope.matchMedia = mockMatchMedia as unknown as typeof globalScope.matchMedia;
|
|
@@ -55,7 +52,6 @@ describe("MediaCapabilitiesProber probers probeMediaDisplayInfos", () => {
|
|
|
55
52
|
});
|
|
56
53
|
|
|
57
54
|
it("should throw if no display in configuration", async () => {
|
|
58
|
-
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
59
55
|
const origMatchMedia = globalScope.matchMedia;
|
|
60
56
|
const mockMatchMedia = vi.fn(() => true);
|
|
61
57
|
globalScope.matchMedia = mockMatchMedia as unknown as typeof globalScope.matchMedia;
|
|
@@ -84,7 +80,6 @@ describe("MediaCapabilitiesProber probers probeMediaDisplayInfos", () => {
|
|
|
84
80
|
});
|
|
85
81
|
|
|
86
82
|
it("should throw if mediaMatch called with bad arguments", async () => {
|
|
87
|
-
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
88
83
|
const origMatchMedia = globalScope.matchMedia;
|
|
89
84
|
const mockMatchMedia = vi.fn(() => ({
|
|
90
85
|
media: "not all",
|
|
@@ -120,7 +115,6 @@ describe("MediaCapabilitiesProber probers probeMediaDisplayInfos", () => {
|
|
|
120
115
|
});
|
|
121
116
|
|
|
122
117
|
it("should resolves with `Supported` if color space is supported", async () => {
|
|
123
|
-
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
124
118
|
const origMatchMedia = globalScope.matchMedia;
|
|
125
119
|
const mockMatchMedia = vi.fn(() => ({
|
|
126
120
|
matches: true,
|
|
@@ -153,7 +147,6 @@ describe("MediaCapabilitiesProber probers probeMediaDisplayInfos", () => {
|
|
|
153
147
|
});
|
|
154
148
|
|
|
155
149
|
it("should resolves with `NotSupported` if color space is not supported", async () => {
|
|
156
|
-
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
157
150
|
const origMatchMedia = globalScope.matchMedia;
|
|
158
151
|
const mockMatchMedia = vi.fn(() => ({
|
|
159
152
|
matches: false,
|
|
@@ -29,7 +29,7 @@ import probeMediaConfiguration from "./probeMediaConfiguration";
|
|
|
29
29
|
/**
|
|
30
30
|
* Probe configuration and get status from result.
|
|
31
31
|
* @param {Object} config
|
|
32
|
-
* @param {Array.<Object>}
|
|
32
|
+
* @param {Array.<Object>} browserAPIS
|
|
33
33
|
* @returns {Promise.<string>}
|
|
34
34
|
*/
|
|
35
35
|
function getStatusFromConfiguration(
|
|
@@ -112,8 +112,8 @@ const capabilites: { [key: string]: ICapabilities } = {
|
|
|
112
112
|
|
|
113
113
|
/**
|
|
114
114
|
* Get probed configuration.
|
|
115
|
-
* @param {Object}
|
|
116
|
-
* @param {Array<string>}
|
|
115
|
+
* @param {Object} config
|
|
116
|
+
* @param {Array<string>} probers
|
|
117
117
|
* @returns {Object}
|
|
118
118
|
*/
|
|
119
119
|
export default function getProbedConfiguration(
|
|
@@ -32,7 +32,6 @@ export default function probeContentType(
|
|
|
32
32
|
"MediaCapabilitiesProber >>> API_CALL: " + "MediaSource API not available",
|
|
33
33
|
);
|
|
34
34
|
}
|
|
35
|
-
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
36
35
|
if (typeof MediaSource_.isTypeSupported !== "function") {
|
|
37
36
|
throw new Error(
|
|
38
37
|
"MediaCapabilitiesProber >>> API_CALL: " + "isTypeSupported not available",
|
|
@@ -27,7 +27,6 @@ export default function probeMatchMedia(
|
|
|
27
27
|
config: IMediaConfiguration,
|
|
28
28
|
): Promise<[ProberStatus]> {
|
|
29
29
|
return new Promise((resolve) => {
|
|
30
|
-
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
31
30
|
if (typeof globalScope.matchMedia !== "function") {
|
|
32
31
|
throw new Error(
|
|
33
32
|
"MediaCapabilitiesProber >>> API_CALL: " + "matchMedia not available",
|
|
@@ -408,7 +408,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
408
408
|
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
|
|
409
409
|
videoElement.preload = "auto";
|
|
410
410
|
|
|
411
|
-
this.version = /* PLAYER_VERSION */ "4.3.0
|
|
411
|
+
this.version = /* PLAYER_VERSION */ "4.3.0";
|
|
412
412
|
this.log = log;
|
|
413
413
|
this.state = "STOPPED";
|
|
414
414
|
this.videoElement = videoElement;
|
|
@@ -1725,7 +1725,6 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
1725
1725
|
}
|
|
1726
1726
|
|
|
1727
1727
|
const playPromise = this.videoElement.play();
|
|
1728
|
-
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
1729
1728
|
if (isNullOrUndefined(playPromise) || typeof playPromise.catch !== "function") {
|
|
1730
1729
|
return Promise.resolve();
|
|
1731
1730
|
}
|
|
@@ -3416,7 +3415,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
|
|
|
3416
3415
|
}
|
|
3417
3416
|
}
|
|
3418
3417
|
}
|
|
3419
|
-
Player.version = /* PLAYER_VERSION */ "4.3.0
|
|
3418
|
+
Player.version = /* PLAYER_VERSION */ "4.3.0";
|
|
3420
3419
|
|
|
3421
3420
|
/** Every events sent by the RxPlayer's public API. */
|
|
3422
3421
|
interface IPublicAPIEvent {
|