rx-player 4.5.0-dev.2026033100 → 4.5.0-dev.2026041501
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 +22 -5
- 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/can_patch_out_pssh.d.ts +42 -0
- package/dist/commonjs/compat/can_patch_out_pssh.d.ts.map +1 -0
- package/dist/commonjs/compat/can_patch_out_pssh.js +53 -0
- package/dist/commonjs/compat/env_detector.d.ts +2 -0
- package/dist/commonjs/compat/env_detector.d.ts.map +1 -1
- package/dist/commonjs/compat/env_detector.js +5 -0
- package/dist/commonjs/core/adaptive/network_analyzer.d.ts +1 -2
- package/dist/commonjs/core/adaptive/network_analyzer.d.ts.map +1 -1
- package/dist/commonjs/core/adaptive/network_analyzer.js +3 -3
- package/dist/commonjs/core/adaptive/utils/representation_score_calculator.js +2 -2
- package/dist/commonjs/core/cmcd/cmcd_data_builder.d.ts.map +1 -1
- package/dist/commonjs/core/cmcd/cmcd_data_builder.js +9 -3
- package/dist/commonjs/core/entry/content_preparer.d.ts.map +1 -1
- package/dist/commonjs/core/entry/content_preparer.js +5 -7
- package/dist/commonjs/core/entry/core_entry.d.ts.map +1 -1
- package/dist/commonjs/core/entry/core_entry.js +6 -2
- package/dist/commonjs/core/entry/core_text_displayer_interface.js +3 -3
- package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.d.ts.map +1 -1
- package/dist/commonjs/core/fetchers/manifest/manifest_fetcher.js +12 -0
- package/dist/commonjs/core/fetchers/thumbnails/thumbnail_fetcher.js +1 -1
- package/dist/commonjs/core/fetchers/utils/schedule_request.d.ts.map +1 -1
- package/dist/commonjs/core/fetchers/utils/schedule_request.js +4 -3
- package/dist/commonjs/core/segment_sinks/garbage_collector.d.ts +0 -2
- package/dist/commonjs/core/segment_sinks/garbage_collector.d.ts.map +1 -1
- package/dist/commonjs/core/segment_sinks/garbage_collector.js +0 -3
- package/dist/commonjs/core/segment_sinks/implementations/text/text_segment_sink.d.ts +1 -1
- package/dist/commonjs/core/segment_sinks/implementations/text/text_segment_sink.d.ts.map +1 -1
- package/dist/commonjs/core/segment_sinks/implementations/text/text_segment_sink.js +2 -2
- package/dist/commonjs/core/stream/adaptation/adaptation_stream.d.ts.map +1 -1
- package/dist/commonjs/core/stream/adaptation/adaptation_stream.js +6 -6
- package/dist/commonjs/core/stream/orchestrator/stream_orchestrator.d.ts.map +1 -1
- package/dist/commonjs/core/stream/orchestrator/stream_orchestrator.js +37 -40
- package/dist/commonjs/default_config.d.ts +5 -0
- package/dist/commonjs/default_config.d.ts.map +1 -1
- package/dist/commonjs/default_config.js +5 -0
- package/dist/commonjs/main_thread/api/public_api.d.ts.map +1 -1
- package/dist/commonjs/main_thread/api/public_api.js +23 -16
- package/dist/commonjs/main_thread/decrypt/content_decryptor.d.ts.map +1 -1
- package/dist/commonjs/main_thread/decrypt/content_decryptor.js +4 -1
- package/dist/commonjs/main_thread/decrypt/session_events_listener.js +1 -1
- package/dist/commonjs/main_thread/decrypt/set_server_certificate.d.ts +2 -0
- package/dist/commonjs/main_thread/decrypt/set_server_certificate.d.ts.map +1 -1
- package/dist/commonjs/main_thread/decrypt/set_server_certificate.js +4 -0
- package/dist/commonjs/main_thread/init/media_source_content_initializer.d.ts +0 -8
- package/dist/commonjs/main_thread/init/media_source_content_initializer.d.ts.map +1 -1
- package/dist/commonjs/main_thread/init/media_source_content_initializer.js +58 -50
- package/dist/commonjs/main_thread/init/utils/stream_events_emitter/stream_events_emitter.d.ts +35 -5
- package/dist/commonjs/main_thread/init/utils/stream_events_emitter/stream_events_emitter.d.ts.map +1 -1
- package/dist/commonjs/main_thread/init/utils/stream_events_emitter/stream_events_emitter.js +60 -19
- package/dist/commonjs/main_thread/render_thumbnail.d.ts.map +1 -1
- package/dist/commonjs/main_thread/render_thumbnail.js +4 -0
- package/dist/commonjs/main_thread/tracks_store/media_element_tracks_store.d.ts.map +1 -1
- package/dist/commonjs/main_thread/tracks_store/media_element_tracks_store.js +1 -0
- package/dist/commonjs/main_thread/tracks_store/tracks_store.d.ts +1 -1
- package/dist/commonjs/main_thread/tracks_store/tracks_store.js +1 -1
- package/dist/{es2017/parsers/containers/isobmff/take_pssh_out.d.ts → commonjs/parsers/containers/isobmff/extract_pssh.d.ts} +6 -4
- package/dist/commonjs/parsers/containers/isobmff/extract_pssh.d.ts.map +1 -0
- package/dist/commonjs/parsers/containers/isobmff/{take_pssh_out.js → extract_pssh.js} +22 -17
- package/dist/commonjs/parsers/containers/isobmff/index.d.ts +2 -2
- package/dist/commonjs/parsers/containers/isobmff/index.d.ts.map +1 -1
- package/dist/commonjs/parsers/containers/isobmff/index.js +4 -4
- package/dist/commonjs/playback_observer/core_playback_observer.d.ts +4 -4
- package/dist/commonjs/playback_observer/core_playback_observer.d.ts.map +1 -1
- package/dist/commonjs/playback_observer/media_element_playback_observer.d.ts +1 -2
- package/dist/commonjs/playback_observer/media_element_playback_observer.d.ts.map +1 -1
- package/dist/commonjs/transports/dash/segment_parser.js +1 -1
- package/dist/commonjs/transports/local/segment_parser.js +1 -1
- package/dist/commonjs/utils/test-utils.d.ts +30 -0
- package/dist/commonjs/utils/test-utils.d.ts.map +1 -0
- package/dist/commonjs/utils/test-utils.js +79 -0
- 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/can_patch_out_pssh.d.ts +42 -0
- package/dist/es2017/compat/can_patch_out_pssh.d.ts.map +1 -0
- package/dist/es2017/compat/can_patch_out_pssh.js +50 -0
- package/dist/es2017/compat/env_detector.d.ts +2 -0
- package/dist/es2017/compat/env_detector.d.ts.map +1 -1
- package/dist/es2017/compat/env_detector.js +5 -0
- package/dist/es2017/core/adaptive/network_analyzer.d.ts +1 -2
- package/dist/es2017/core/adaptive/network_analyzer.d.ts.map +1 -1
- package/dist/es2017/core/adaptive/network_analyzer.js +3 -3
- package/dist/es2017/core/adaptive/utils/representation_score_calculator.js +2 -2
- package/dist/es2017/core/cmcd/cmcd_data_builder.d.ts.map +1 -1
- package/dist/es2017/core/cmcd/cmcd_data_builder.js +9 -3
- package/dist/es2017/core/entry/content_preparer.d.ts.map +1 -1
- package/dist/es2017/core/entry/content_preparer.js +3 -5
- package/dist/es2017/core/entry/core_entry.d.ts.map +1 -1
- package/dist/es2017/core/entry/core_entry.js +6 -2
- package/dist/es2017/core/entry/core_text_displayer_interface.js +3 -3
- package/dist/es2017/core/fetchers/manifest/manifest_fetcher.d.ts.map +1 -1
- package/dist/es2017/core/fetchers/manifest/manifest_fetcher.js +12 -0
- package/dist/es2017/core/fetchers/thumbnails/thumbnail_fetcher.js +1 -1
- package/dist/es2017/core/fetchers/utils/schedule_request.d.ts.map +1 -1
- package/dist/es2017/core/fetchers/utils/schedule_request.js +2 -3
- package/dist/es2017/core/segment_sinks/garbage_collector.d.ts +0 -2
- package/dist/es2017/core/segment_sinks/garbage_collector.d.ts.map +1 -1
- package/dist/es2017/core/segment_sinks/garbage_collector.js +0 -3
- package/dist/es2017/core/segment_sinks/implementations/text/text_segment_sink.d.ts +1 -1
- package/dist/es2017/core/segment_sinks/implementations/text/text_segment_sink.d.ts.map +1 -1
- package/dist/es2017/core/segment_sinks/implementations/text/text_segment_sink.js +2 -2
- package/dist/es2017/core/stream/adaptation/adaptation_stream.d.ts.map +1 -1
- package/dist/es2017/core/stream/adaptation/adaptation_stream.js +6 -6
- package/dist/es2017/core/stream/orchestrator/stream_orchestrator.d.ts.map +1 -1
- package/dist/es2017/core/stream/orchestrator/stream_orchestrator.js +40 -39
- package/dist/es2017/default_config.d.ts +5 -0
- package/dist/es2017/default_config.d.ts.map +1 -1
- package/dist/es2017/default_config.js +5 -0
- package/dist/es2017/main_thread/api/public_api.d.ts.map +1 -1
- package/dist/es2017/main_thread/api/public_api.js +20 -13
- package/dist/es2017/main_thread/decrypt/content_decryptor.d.ts.map +1 -1
- package/dist/es2017/main_thread/decrypt/content_decryptor.js +4 -1
- package/dist/es2017/main_thread/decrypt/session_events_listener.js +1 -1
- package/dist/es2017/main_thread/decrypt/set_server_certificate.d.ts +2 -0
- package/dist/es2017/main_thread/decrypt/set_server_certificate.d.ts.map +1 -1
- package/dist/es2017/main_thread/decrypt/set_server_certificate.js +4 -0
- package/dist/es2017/main_thread/init/media_source_content_initializer.d.ts +0 -8
- package/dist/es2017/main_thread/init/media_source_content_initializer.d.ts.map +1 -1
- package/dist/es2017/main_thread/init/media_source_content_initializer.js +58 -50
- package/dist/es2017/main_thread/init/utils/stream_events_emitter/stream_events_emitter.d.ts +35 -5
- package/dist/es2017/main_thread/init/utils/stream_events_emitter/stream_events_emitter.d.ts.map +1 -1
- package/dist/es2017/main_thread/init/utils/stream_events_emitter/stream_events_emitter.js +60 -19
- package/dist/es2017/main_thread/render_thumbnail.d.ts.map +1 -1
- package/dist/es2017/main_thread/render_thumbnail.js +4 -0
- package/dist/es2017/main_thread/tracks_store/media_element_tracks_store.d.ts.map +1 -1
- package/dist/es2017/main_thread/tracks_store/media_element_tracks_store.js +1 -0
- package/dist/es2017/main_thread/tracks_store/tracks_store.d.ts +1 -1
- package/dist/es2017/main_thread/tracks_store/tracks_store.js +1 -1
- package/dist/{commonjs/parsers/containers/isobmff/take_pssh_out.d.ts → es2017/parsers/containers/isobmff/extract_pssh.d.ts} +6 -4
- package/dist/es2017/parsers/containers/isobmff/extract_pssh.d.ts.map +1 -0
- package/dist/es2017/parsers/containers/isobmff/{take_pssh_out.js → extract_pssh.js} +21 -16
- package/dist/es2017/parsers/containers/isobmff/index.d.ts +2 -2
- package/dist/es2017/parsers/containers/isobmff/index.d.ts.map +1 -1
- package/dist/es2017/parsers/containers/isobmff/index.js +2 -2
- package/dist/es2017/playback_observer/core_playback_observer.d.ts +4 -4
- package/dist/es2017/playback_observer/core_playback_observer.d.ts.map +1 -1
- package/dist/es2017/playback_observer/media_element_playback_observer.d.ts +1 -2
- package/dist/es2017/playback_observer/media_element_playback_observer.d.ts.map +1 -1
- package/dist/es2017/transports/dash/segment_parser.js +2 -2
- package/dist/es2017/transports/local/segment_parser.js +2 -2
- package/dist/es2017/utils/test-utils.d.ts +30 -0
- package/dist/es2017/utils/test-utils.d.ts.map +1 -0
- package/dist/es2017/utils/test-utils.js +36 -0
- package/dist/mpd-parser.wasm +0 -0
- package/dist/worker.js +6 -6
- package/package.json +4 -2
- package/src/README.md +7 -7
- package/src/__GENERATED_CODE/embedded_dash_wasm.ts +1 -1
- package/src/__GENERATED_CODE/embedded_worker.ts +1 -1
- package/src/compat/__tests__/can_patch_out_pssh.test.ts +40 -0
- package/src/compat/can_patch_out_pssh.ts +53 -0
- package/src/compat/env_detector.ts +4 -0
- package/src/core/README.md +1 -1
- package/src/core/adaptive/README.md +3 -3
- package/src/core/adaptive/__tests__/adaptive_representation_selector.test.ts +181 -110
- package/src/core/adaptive/__tests__/guess_based_chooser.test.ts +229 -123
- package/src/core/adaptive/__tests__/mocks.ts +100 -0
- package/src/core/adaptive/__tests__/network_analyzer.test.ts +152 -59
- package/src/core/adaptive/network_analyzer.ts +4 -4
- package/src/core/adaptive/utils/__tests__/filter_by_bitrate.test.ts +11 -19
- package/src/core/adaptive/utils/__tests__/filter_by_resolution.test.ts +12 -12
- package/src/core/adaptive/utils/__tests__/last_estimate_storage.test.ts +25 -12
- package/src/core/adaptive/utils/__tests__/pending_requests_store.test.ts +13 -9
- package/src/core/adaptive/utils/__tests__/representation_score_calculator.test.ts +11 -11
- package/src/core/adaptive/utils/__tests__/select_optimal_representation.test.ts +13 -23
- package/src/core/adaptive/utils/representation_score_calculator.ts +2 -2
- package/src/core/cmcd/__tests__/cmcd_data_builder.test.ts +60 -15
- package/src/core/cmcd/cmcd_data_builder.ts +9 -3
- package/src/core/entry/README.md +2 -2
- package/src/core/entry/__tests__/core_text_displayer_interface.test.ts +20 -0
- package/src/core/entry/content_preparer.ts +2 -5
- package/src/core/entry/core_entry.ts +6 -2
- package/src/core/entry/core_text_displayer_interface.ts +3 -3
- package/src/core/fetchers/manifest/__tests__/manifest_fetcher.test.ts +52 -3
- package/src/core/fetchers/manifest/manifest_fetcher.ts +12 -0
- package/src/core/fetchers/thumbnails/__tests__/thumbnail_fetcher.test.ts +70 -0
- package/src/core/fetchers/thumbnails/thumbnail_fetcher.ts +1 -1
- package/src/core/fetchers/utils/schedule_request.ts +5 -3
- package/src/core/segment_sinks/__tests__/garbage_collector.test.ts +434 -0
- package/src/core/segment_sinks/__tests__/mocks.ts +49 -0
- package/src/core/segment_sinks/garbage_collector.ts +0 -3
- package/src/core/segment_sinks/implementations/text/__tests__/text_segment_sink.test.ts +177 -0
- package/src/core/segment_sinks/implementations/text/text_segment_sink.ts +2 -2
- package/src/core/segment_sinks/inventory/__tests__/buffered_history.test.ts +215 -0
- package/src/core/segment_sinks/inventory/__tests__/segment_inventory.test.ts +448 -0
- package/src/core/stream/adaptation/__tests__/adaptation_stream.test.ts +973 -0
- package/src/core/stream/adaptation/__tests__/get_representations_switch_strategy.test.ts +283 -374
- package/src/core/stream/adaptation/adaptation_stream.ts +6 -8
- package/src/core/stream/orchestrator/README.md +4 -4
- package/src/core/stream/orchestrator/__tests__/stream_orchestrator.test.ts +707 -0
- package/src/core/stream/orchestrator/stream_orchestrator.ts +41 -46
- package/src/core/stream/period/utils/__tests__/get_adaptation_switch_strategy.test.ts +290 -220
- package/src/core/stream/representation/__tests__/encryption_data_notifier.test.ts +93 -63
- package/src/core/stream/representation/utils/__tests__/append_segment_to_buffer.test.ts +106 -63
- package/src/core/stream/representation/utils/__tests__/check_for_discontinuity.test.ts +179 -204
- package/src/core/stream/representation/utils/__tests__/get_segment_priority.test.ts +7 -7
- package/src/core/stream/representation/utils/__tests__/push_init_segment.test.ts +103 -60
- package/src/core/stream/representation/utils/__tests__/push_media_segment.test.ts +231 -165
- package/src/default_config.ts +6 -0
- package/src/experimental/README.md +1 -1
- package/src/features/README.md +3 -3
- package/src/main_thread/api/README.md +6 -7
- package/src/main_thread/api/public_api.ts +16 -10
- package/src/main_thread/decrypt/README.md +4 -4
- package/src/main_thread/decrypt/__tests__/__global__/content_decryptor.test.ts +135 -0
- package/src/main_thread/decrypt/__tests__/__global__/get_license.test.ts +70 -0
- package/src/main_thread/decrypt/__tests__/__global__/server_certificate.test.ts +44 -0
- package/src/main_thread/decrypt/__tests__/__global__/utils.ts +2 -2
- package/src/main_thread/decrypt/content_decryptor.ts +6 -1
- package/src/main_thread/decrypt/session_events_listener.ts +1 -1
- package/src/main_thread/decrypt/set_server_certificate.ts +5 -0
- package/src/main_thread/init/media_source_content_initializer.ts +69 -55
- package/src/main_thread/init/utils/__tests__/stream_events_emitter.test.ts +175 -0
- package/src/main_thread/init/utils/stream_events_emitter/stream_events_emitter.ts +90 -26
- package/src/main_thread/render_thumbnail.ts +4 -0
- package/src/main_thread/tracks_store/README.md +12 -0
- package/src/main_thread/tracks_store/__tests__/media_element_tracks_store.test.ts +25 -18
- package/src/main_thread/tracks_store/media_element_tracks_store.ts +1 -0
- package/src/main_thread/tracks_store/tracks_store.ts +1 -1
- package/src/manifest/classes/__tests__/mocks.ts +202 -0
- package/src/parsers/containers/isobmff/__tests__/extract_pssh.test.ts +199 -0
- package/src/parsers/containers/isobmff/{take_pssh_out.ts → extract_pssh.ts} +21 -17
- package/src/parsers/containers/isobmff/index.ts +2 -2
- package/src/parsers/manifest/dash/wasm-parser/README.md +9 -9
- package/src/playback_observer/__tests__/mocks.ts +152 -0
- package/src/playback_observer/core_playback_observer.ts +4 -4
- package/src/playback_observer/media_element_playback_observer.ts +1 -1
- package/src/tools/README.md +2 -2
- package/src/transports/README.md +5 -5
- package/src/transports/dash/segment_parser.ts +2 -2
- package/src/transports/local/segment_parser.ts +2 -2
- package/src/transports/metaplaylist/README.md +4 -4
- package/src/utils/README.md +3 -3
- package/src/utils/test-utils.ts +50 -0
- package/dist/commonjs/core/entry/synchronize_sinks_on_observation.d.ts +0 -11
- package/dist/commonjs/core/entry/synchronize_sinks_on_observation.d.ts.map +0 -1
- package/dist/commonjs/core/entry/synchronize_sinks_on_observation.js +0 -20
- package/dist/commonjs/parsers/containers/isobmff/take_pssh_out.d.ts.map +0 -1
- package/dist/es2017/core/entry/synchronize_sinks_on_observation.d.ts +0 -11
- package/dist/es2017/core/entry/synchronize_sinks_on_observation.d.ts.map +0 -1
- package/dist/es2017/core/entry/synchronize_sinks_on_observation.js +0 -17
- package/dist/es2017/parsers/containers/isobmff/take_pssh_out.d.ts.map +0 -1
- package/src/core/adaptive/utils/__tests__/bandwith_estimator.test.ts +0 -117
- package/src/core/entry/synchronize_sinks_on_observation.ts +0 -22
|
@@ -1,55 +1,70 @@
|
|
|
1
1
|
import { describe, it, expect, vi } from "vitest";
|
|
2
|
-
import
|
|
2
|
+
import {
|
|
3
|
+
type Adaptation,
|
|
4
|
+
type Period,
|
|
5
|
+
type Representation,
|
|
6
|
+
} from "../../../../../manifest/classes";
|
|
7
|
+
import type Manifest from "../../../../../manifest/classes";
|
|
8
|
+
import {
|
|
9
|
+
DummyPeriod,
|
|
10
|
+
DummyManifest,
|
|
11
|
+
DummyAdaptation,
|
|
12
|
+
createSegment,
|
|
13
|
+
DummyRepresentation,
|
|
14
|
+
} from "../../../../../manifest/classes/__tests__/mocks";
|
|
15
|
+
import { ChunkStatus, type IBufferedChunk } from "../../../../segment_sinks";
|
|
3
16
|
import checkForDiscontinuity from "../check_for_discontinuity";
|
|
4
17
|
|
|
5
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
6
|
-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
7
|
-
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
8
|
-
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
9
|
-
|
|
10
|
-
// Minimal type setup for tests
|
|
11
|
-
interface TestContent {
|
|
12
|
-
adaptation: { type: string };
|
|
13
|
-
manifest: any;
|
|
14
|
-
period: { end?: number };
|
|
15
|
-
representation: {
|
|
16
|
-
index: {
|
|
17
|
-
checkDiscontinuity: (time: number) => number | null;
|
|
18
|
-
awaitSegmentBetween: (start: number, end: number) => boolean | undefined;
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
|
|
23
18
|
describe("checkForDiscontinuity", () => {
|
|
24
|
-
const createMockContent = (
|
|
25
|
-
adaptation:
|
|
26
|
-
manifest:
|
|
27
|
-
period:
|
|
28
|
-
representation:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
...overrides,
|
|
19
|
+
const createMockContent = (): {
|
|
20
|
+
adaptation: Adaptation;
|
|
21
|
+
manifest: Manifest;
|
|
22
|
+
period: Period;
|
|
23
|
+
representation: Representation;
|
|
24
|
+
} => ({
|
|
25
|
+
adaptation: new DummyAdaptation({ type: "video" }),
|
|
26
|
+
manifest: new DummyManifest(),
|
|
27
|
+
period: new DummyPeriod(),
|
|
28
|
+
representation: new DummyRepresentation(),
|
|
35
29
|
});
|
|
36
30
|
|
|
37
|
-
|
|
38
|
-
start
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
31
|
+
function makeBufferedChunk({
|
|
32
|
+
start,
|
|
33
|
+
end,
|
|
34
|
+
bufferedStart = start,
|
|
35
|
+
bufferedEnd = end,
|
|
36
|
+
segmentTime,
|
|
37
|
+
segmentEnd,
|
|
38
|
+
}: {
|
|
39
|
+
start: number;
|
|
40
|
+
end: number;
|
|
41
|
+
bufferedStart?: number | undefined;
|
|
42
|
+
bufferedEnd?: number | undefined;
|
|
43
|
+
segmentTime: number;
|
|
44
|
+
segmentEnd: number;
|
|
45
|
+
}): IBufferedChunk {
|
|
46
|
+
return {
|
|
46
47
|
infos: {
|
|
47
|
-
|
|
48
|
+
period: new DummyPeriod(),
|
|
49
|
+
adaptation: new DummyAdaptation(),
|
|
50
|
+
representation: new DummyRepresentation(),
|
|
51
|
+
segment: createSegment({
|
|
48
52
|
time: segmentTime,
|
|
49
53
|
end: segmentEnd,
|
|
50
|
-
},
|
|
54
|
+
}),
|
|
51
55
|
},
|
|
52
|
-
|
|
56
|
+
bufferedStart,
|
|
57
|
+
bufferedEnd,
|
|
58
|
+
start,
|
|
59
|
+
end,
|
|
60
|
+
insertionTs: 0,
|
|
61
|
+
chunkSize: 1024,
|
|
62
|
+
precizeStart: true,
|
|
63
|
+
precizeEnd: true,
|
|
64
|
+
status: ChunkStatus.FullyLoaded,
|
|
65
|
+
splitted: false,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
53
68
|
|
|
54
69
|
describe("when no segments are buffered in range", () => {
|
|
55
70
|
it("should return null when nextSegmentStart is provided", () => {
|
|
@@ -61,14 +76,12 @@ describe("checkForDiscontinuity", () => {
|
|
|
61
76
|
false,
|
|
62
77
|
[],
|
|
63
78
|
);
|
|
64
|
-
|
|
65
79
|
expect(result).toBeNull();
|
|
66
80
|
});
|
|
67
81
|
|
|
68
82
|
it("should return discontinuity to period end when finished loading and at period end", () => {
|
|
69
|
-
const content = createMockContent(
|
|
70
|
-
|
|
71
|
-
});
|
|
83
|
+
const content = createMockContent();
|
|
84
|
+
content.period.end = 100;
|
|
72
85
|
const result = checkForDiscontinuity(
|
|
73
86
|
content,
|
|
74
87
|
{ start: 90, end: 105 },
|
|
@@ -76,20 +89,17 @@ describe("checkForDiscontinuity", () => {
|
|
|
76
89
|
true, // hasFinishedLoading
|
|
77
90
|
[],
|
|
78
91
|
);
|
|
79
|
-
|
|
80
92
|
expect(result).toEqual({ start: undefined, end: null });
|
|
81
93
|
});
|
|
82
94
|
|
|
83
95
|
it("should return manifest discontinuity when no next segment", () => {
|
|
84
|
-
const content = createMockContent(
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
});
|
|
92
|
-
|
|
96
|
+
const content = createMockContent();
|
|
97
|
+
const mockCheckDiscontinuity = vi
|
|
98
|
+
.spyOn(content.representation.index, "checkDiscontinuity")
|
|
99
|
+
.mockReturnValue(25);
|
|
100
|
+
vi.spyOn(content.representation.index, "awaitSegmentBetween").mockReturnValue(
|
|
101
|
+
false,
|
|
102
|
+
);
|
|
93
103
|
const result = checkForDiscontinuity(
|
|
94
104
|
content,
|
|
95
105
|
{ start: 10, end: 30 },
|
|
@@ -97,22 +107,17 @@ describe("checkForDiscontinuity", () => {
|
|
|
97
107
|
false,
|
|
98
108
|
[],
|
|
99
109
|
);
|
|
100
|
-
|
|
101
110
|
expect(result).toEqual({ start: undefined, end: 25 });
|
|
102
|
-
expect(
|
|
111
|
+
expect(mockCheckDiscontinuity).toHaveBeenCalledWith(10);
|
|
103
112
|
});
|
|
104
113
|
|
|
105
114
|
it("should return discontinuity to Period's end when has finished loading without segment and range after Period's end", () => {
|
|
106
|
-
const content = createMockContent(
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
},
|
|
113
|
-
},
|
|
114
|
-
});
|
|
115
|
-
|
|
115
|
+
const content = createMockContent();
|
|
116
|
+
content.period.end = 29;
|
|
117
|
+
vi.spyOn(content.representation.index, "checkDiscontinuity").mockReturnValue(null);
|
|
118
|
+
vi.spyOn(content.representation.index, "awaitSegmentBetween").mockReturnValue(
|
|
119
|
+
false,
|
|
120
|
+
);
|
|
116
121
|
const result = checkForDiscontinuity(
|
|
117
122
|
content,
|
|
118
123
|
{ start: 10, end: 30 },
|
|
@@ -120,21 +125,16 @@ describe("checkForDiscontinuity", () => {
|
|
|
120
125
|
true, // hasFinishedLoading
|
|
121
126
|
[],
|
|
122
127
|
);
|
|
123
|
-
|
|
124
128
|
expect(result).toEqual({ start: undefined, end: null });
|
|
125
129
|
});
|
|
126
130
|
|
|
127
131
|
it("should return discontinuity to Period's end when has finished loading without segment and range equal to Period's end", () => {
|
|
128
|
-
const content = createMockContent(
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
},
|
|
135
|
-
},
|
|
136
|
-
});
|
|
137
|
-
|
|
132
|
+
const content = createMockContent();
|
|
133
|
+
vi.spyOn(content.representation.index, "checkDiscontinuity").mockReturnValue(null);
|
|
134
|
+
vi.spyOn(content.representation.index, "awaitSegmentBetween").mockReturnValue(
|
|
135
|
+
false,
|
|
136
|
+
);
|
|
137
|
+
content.period.end = 30;
|
|
138
138
|
const result = checkForDiscontinuity(
|
|
139
139
|
content,
|
|
140
140
|
{ start: 10, end: 30 },
|
|
@@ -142,21 +142,16 @@ describe("checkForDiscontinuity", () => {
|
|
|
142
142
|
true, // hasFinishedLoading
|
|
143
143
|
[],
|
|
144
144
|
);
|
|
145
|
-
|
|
146
145
|
expect(result).toEqual({ start: undefined, end: null });
|
|
147
146
|
});
|
|
148
147
|
|
|
149
148
|
it("should not return discontinuity when has finished loading without segment and range before Period's end", () => {
|
|
150
|
-
const content = createMockContent(
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
},
|
|
157
|
-
},
|
|
158
|
-
});
|
|
159
|
-
|
|
149
|
+
const content = createMockContent();
|
|
150
|
+
content.period.end = 31;
|
|
151
|
+
vi.spyOn(content.representation.index, "checkDiscontinuity").mockReturnValue(null);
|
|
152
|
+
vi.spyOn(content.representation.index, "awaitSegmentBetween").mockReturnValue(
|
|
153
|
+
false,
|
|
154
|
+
);
|
|
160
155
|
const result = checkForDiscontinuity(
|
|
161
156
|
content,
|
|
162
157
|
{ start: 10, end: 30 },
|
|
@@ -164,7 +159,6 @@ describe("checkForDiscontinuity", () => {
|
|
|
164
159
|
true, // hasFinishedLoading
|
|
165
160
|
[],
|
|
166
161
|
);
|
|
167
|
-
|
|
168
162
|
expect(result).toEqual(null);
|
|
169
163
|
});
|
|
170
164
|
});
|
|
@@ -172,8 +166,9 @@ describe("checkForDiscontinuity", () => {
|
|
|
172
166
|
describe("when there's a hole before the first buffered segment", () => {
|
|
173
167
|
it("should detect discontinuity when hole won't be filled", () => {
|
|
174
168
|
const content = createMockContent();
|
|
175
|
-
const bufferedSegments = [
|
|
176
|
-
|
|
169
|
+
const bufferedSegments = [
|
|
170
|
+
makeBufferedChunk({ start: 15, end: 20, segmentTime: 15, segmentEnd: 20 }),
|
|
171
|
+
];
|
|
177
172
|
const result = checkForDiscontinuity(
|
|
178
173
|
content,
|
|
179
174
|
{ start: 10, end: 25 },
|
|
@@ -181,14 +176,14 @@ describe("checkForDiscontinuity", () => {
|
|
|
181
176
|
true,
|
|
182
177
|
bufferedSegments,
|
|
183
178
|
);
|
|
184
|
-
|
|
185
179
|
expect(result).toEqual({ start: undefined, end: 15 });
|
|
186
180
|
});
|
|
187
181
|
|
|
188
182
|
it("should detect discontinuity when next segment won't fill the hole", () => {
|
|
189
183
|
const content = createMockContent();
|
|
190
|
-
const bufferedSegments = [
|
|
191
|
-
|
|
184
|
+
const bufferedSegments = [
|
|
185
|
+
makeBufferedChunk({ start: 15, end: 20, segmentTime: 15, segmentEnd: 20 }),
|
|
186
|
+
];
|
|
192
187
|
const result = checkForDiscontinuity(
|
|
193
188
|
content,
|
|
194
189
|
{ start: 10, end: 25 },
|
|
@@ -196,14 +191,14 @@ describe("checkForDiscontinuity", () => {
|
|
|
196
191
|
true,
|
|
197
192
|
bufferedSegments,
|
|
198
193
|
);
|
|
199
|
-
|
|
200
194
|
expect(result).toEqual({ start: undefined, end: 15 });
|
|
201
195
|
});
|
|
202
196
|
|
|
203
197
|
it("should return null when a segment is expected to fill the hole", () => {
|
|
204
198
|
const content = createMockContent();
|
|
205
|
-
const bufferedSegments = [
|
|
206
|
-
|
|
199
|
+
const bufferedSegments = [
|
|
200
|
+
makeBufferedChunk({ start: 15, end: 20, segmentTime: 15, segmentEnd: 20 }),
|
|
201
|
+
];
|
|
207
202
|
const result = checkForDiscontinuity(
|
|
208
203
|
content,
|
|
209
204
|
{ start: 10, end: 25 },
|
|
@@ -211,21 +206,18 @@ describe("checkForDiscontinuity", () => {
|
|
|
211
206
|
false,
|
|
212
207
|
bufferedSegments,
|
|
213
208
|
);
|
|
214
|
-
|
|
215
209
|
expect(result).toBeNull();
|
|
216
210
|
});
|
|
217
211
|
|
|
218
212
|
it("should return null when awaiting segment between start and hole", () => {
|
|
219
|
-
const content = createMockContent(
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
},
|
|
226
|
-
|
|
227
|
-
const bufferedSegments = [createBufferedChunk(15, 20, 15, 20)];
|
|
228
|
-
|
|
213
|
+
const content = createMockContent();
|
|
214
|
+
vi.spyOn(content.representation.index, "checkDiscontinuity").mockReturnValue(null);
|
|
215
|
+
const mockAwaitSegmentBetween = vi
|
|
216
|
+
.spyOn(content.representation.index, "awaitSegmentBetween")
|
|
217
|
+
.mockReturnValue(true);
|
|
218
|
+
const bufferedSegments = [
|
|
219
|
+
makeBufferedChunk({ start: 15, end: 20, segmentTime: 15, segmentEnd: 20 }),
|
|
220
|
+
];
|
|
229
221
|
const result = checkForDiscontinuity(
|
|
230
222
|
content,
|
|
231
223
|
{ start: 10, end: 25 },
|
|
@@ -233,12 +225,8 @@ describe("checkForDiscontinuity", () => {
|
|
|
233
225
|
false, // not finished loading
|
|
234
226
|
bufferedSegments,
|
|
235
227
|
);
|
|
236
|
-
|
|
237
228
|
expect(result).toBeNull();
|
|
238
|
-
expect(
|
|
239
|
-
10,
|
|
240
|
-
15,
|
|
241
|
-
);
|
|
229
|
+
expect(mockAwaitSegmentBetween).toHaveBeenCalledWith(10, 15);
|
|
242
230
|
});
|
|
243
231
|
});
|
|
244
232
|
|
|
@@ -246,10 +234,9 @@ describe("checkForDiscontinuity", () => {
|
|
|
246
234
|
it("should detect discontinuity between consecutive segments", () => {
|
|
247
235
|
const content = createMockContent();
|
|
248
236
|
const bufferedSegments = [
|
|
249
|
-
|
|
250
|
-
|
|
237
|
+
makeBufferedChunk({ start: 10, end: 15, segmentTime: 10, segmentEnd: 15 }),
|
|
238
|
+
makeBufferedChunk({ start: 20, end: 25, segmentTime: 20, segmentEnd: 25 }), // hole from 15 to 20
|
|
251
239
|
];
|
|
252
|
-
|
|
253
240
|
const result = checkForDiscontinuity(
|
|
254
241
|
content,
|
|
255
242
|
{ start: 10, end: 30 },
|
|
@@ -257,17 +244,15 @@ describe("checkForDiscontinuity", () => {
|
|
|
257
244
|
true,
|
|
258
245
|
bufferedSegments,
|
|
259
246
|
);
|
|
260
|
-
|
|
261
247
|
expect(result).toEqual({ start: 15, end: 20 });
|
|
262
248
|
});
|
|
263
249
|
|
|
264
250
|
it("should detect discontinuity when next segment comes after the hole", () => {
|
|
265
251
|
const content = createMockContent();
|
|
266
252
|
const bufferedSegments = [
|
|
267
|
-
|
|
268
|
-
|
|
253
|
+
makeBufferedChunk({ start: 10, end: 15, segmentTime: 10, segmentEnd: 15 }),
|
|
254
|
+
makeBufferedChunk({ start: 20, end: 25, segmentTime: 20, segmentEnd: 25 }),
|
|
269
255
|
];
|
|
270
|
-
|
|
271
256
|
const result = checkForDiscontinuity(
|
|
272
257
|
content,
|
|
273
258
|
{ start: 10, end: 30 },
|
|
@@ -275,17 +260,15 @@ describe("checkForDiscontinuity", () => {
|
|
|
275
260
|
true,
|
|
276
261
|
bufferedSegments,
|
|
277
262
|
);
|
|
278
|
-
|
|
279
263
|
expect(result).toEqual({ start: 15, end: 20 });
|
|
280
264
|
});
|
|
281
265
|
|
|
282
266
|
it("should return null when next segment will fill the hole", () => {
|
|
283
267
|
const content = createMockContent();
|
|
284
268
|
const bufferedSegments = [
|
|
285
|
-
|
|
286
|
-
|
|
269
|
+
makeBufferedChunk({ start: 10, end: 15, segmentTime: 10, segmentEnd: 15 }),
|
|
270
|
+
makeBufferedChunk({ start: 20, end: 25, segmentTime: 20, segmentEnd: 25 }),
|
|
287
271
|
];
|
|
288
|
-
|
|
289
272
|
const result = checkForDiscontinuity(
|
|
290
273
|
content,
|
|
291
274
|
{ start: 10, end: 30 },
|
|
@@ -293,24 +276,19 @@ describe("checkForDiscontinuity", () => {
|
|
|
293
276
|
false,
|
|
294
277
|
bufferedSegments,
|
|
295
278
|
);
|
|
296
|
-
|
|
297
279
|
expect(result).toBeNull();
|
|
298
280
|
});
|
|
299
281
|
|
|
300
282
|
it("should return null when awaiting segment between holes", () => {
|
|
301
|
-
const content = createMockContent(
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
},
|
|
307
|
-
},
|
|
308
|
-
});
|
|
283
|
+
const content = createMockContent();
|
|
284
|
+
vi.spyOn(content.representation.index, "checkDiscontinuity").mockReturnValue(null);
|
|
285
|
+
const mockAwaitSegmentBetween = vi
|
|
286
|
+
.spyOn(content.representation.index, "awaitSegmentBetween")
|
|
287
|
+
.mockReturnValue(true);
|
|
309
288
|
const bufferedSegments = [
|
|
310
|
-
|
|
311
|
-
|
|
289
|
+
makeBufferedChunk({ start: 10, end: 15, segmentTime: 10, segmentEnd: 15 }),
|
|
290
|
+
makeBufferedChunk({ start: 20, end: 25, segmentTime: 20, segmentEnd: 25 }),
|
|
312
291
|
];
|
|
313
|
-
|
|
314
292
|
const result = checkForDiscontinuity(
|
|
315
293
|
content,
|
|
316
294
|
{ start: 10, end: 30 },
|
|
@@ -318,24 +296,18 @@ describe("checkForDiscontinuity", () => {
|
|
|
318
296
|
false, // not finished loading
|
|
319
297
|
bufferedSegments,
|
|
320
298
|
);
|
|
321
|
-
|
|
322
299
|
expect(result).toBeNull();
|
|
323
|
-
expect(
|
|
324
|
-
15,
|
|
325
|
-
20,
|
|
326
|
-
);
|
|
300
|
+
expect(mockAwaitSegmentBetween).toHaveBeenCalledWith(15, 20);
|
|
327
301
|
});
|
|
328
302
|
});
|
|
329
303
|
|
|
330
304
|
describe("when checking for discontinuity at period end", () => {
|
|
331
305
|
it("should detect discontinuity when last segment ends before period end", () => {
|
|
332
|
-
const content = createMockContent(
|
|
333
|
-
|
|
334
|
-
});
|
|
306
|
+
const content = createMockContent();
|
|
307
|
+
content.period.end = 100;
|
|
335
308
|
const bufferedSegments = [
|
|
336
|
-
|
|
309
|
+
makeBufferedChunk({ start: 80, end: 90, segmentTime: 80, segmentEnd: 90 }), // ends before period end
|
|
337
310
|
];
|
|
338
|
-
|
|
339
311
|
const result = checkForDiscontinuity(
|
|
340
312
|
content,
|
|
341
313
|
{ start: 80, end: 105 },
|
|
@@ -343,16 +315,15 @@ describe("checkForDiscontinuity", () => {
|
|
|
343
315
|
true, // hasFinishedLoading
|
|
344
316
|
bufferedSegments,
|
|
345
317
|
);
|
|
346
|
-
|
|
347
318
|
expect(result).toEqual({ start: 90, end: null });
|
|
348
319
|
});
|
|
349
320
|
|
|
350
321
|
it("should return null when checked range doesn't reach period end", () => {
|
|
351
|
-
const content = createMockContent(
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
322
|
+
const content = createMockContent();
|
|
323
|
+
content.period.end = 100;
|
|
324
|
+
const bufferedSegments = [
|
|
325
|
+
makeBufferedChunk({ start: 80, end: 90, segmentTime: 80, segmentEnd: 90 }),
|
|
326
|
+
];
|
|
356
327
|
const result = checkForDiscontinuity(
|
|
357
328
|
content,
|
|
358
329
|
{ start: 80, end: 95 }, // doesn't reach period end
|
|
@@ -360,16 +331,15 @@ describe("checkForDiscontinuity", () => {
|
|
|
360
331
|
true,
|
|
361
332
|
bufferedSegments,
|
|
362
333
|
);
|
|
363
|
-
|
|
364
334
|
expect(result).toBeNull();
|
|
365
335
|
});
|
|
366
336
|
|
|
367
337
|
it("should return null when last segment reaches period end", () => {
|
|
368
|
-
const content = createMockContent(
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
338
|
+
const content = createMockContent();
|
|
339
|
+
content.period.end = 100;
|
|
340
|
+
const bufferedSegments = [
|
|
341
|
+
makeBufferedChunk({ start: 80, end: 100, segmentTime: 80, segmentEnd: 100 }),
|
|
342
|
+
];
|
|
373
343
|
const result = checkForDiscontinuity(
|
|
374
344
|
content,
|
|
375
345
|
{ start: 80, end: 105 },
|
|
@@ -377,23 +347,22 @@ describe("checkForDiscontinuity", () => {
|
|
|
377
347
|
true,
|
|
378
348
|
bufferedSegments,
|
|
379
349
|
);
|
|
380
|
-
|
|
381
350
|
expect(result).toBeNull();
|
|
382
351
|
});
|
|
383
352
|
});
|
|
384
353
|
|
|
385
354
|
describe("when checking for manifest discontinuity at range end", () => {
|
|
386
355
|
it("should detect manifest discontinuity at end of range", () => {
|
|
387
|
-
const content = createMockContent(
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
356
|
+
const content = createMockContent();
|
|
357
|
+
const mockCheckDiscontinuity = vi
|
|
358
|
+
.spyOn(content.representation.index, "checkDiscontinuity")
|
|
359
|
+
.mockImplementation((time) => (time === 50 ? 60 : null));
|
|
360
|
+
vi.spyOn(content.representation.index, "awaitSegmentBetween").mockReturnValue(
|
|
361
|
+
undefined,
|
|
362
|
+
);
|
|
363
|
+
const bufferedSegments = [
|
|
364
|
+
makeBufferedChunk({ start: 30, end: 40, segmentTime: 30, segmentEnd: 40 }),
|
|
365
|
+
];
|
|
397
366
|
const result = checkForDiscontinuity(
|
|
398
367
|
content,
|
|
399
368
|
{ start: 30, end: 50 },
|
|
@@ -401,22 +370,19 @@ describe("checkForDiscontinuity", () => {
|
|
|
401
370
|
false,
|
|
402
371
|
bufferedSegments,
|
|
403
372
|
);
|
|
404
|
-
|
|
405
373
|
expect(result).toEqual({ start: 40, end: 60 });
|
|
406
|
-
expect(
|
|
374
|
+
expect(mockCheckDiscontinuity).toHaveBeenCalledWith(50);
|
|
407
375
|
});
|
|
408
376
|
|
|
409
377
|
it("should return null when no manifest discontinuity at range end", () => {
|
|
410
|
-
const content = createMockContent(
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
},
|
|
417
|
-
|
|
418
|
-
const bufferedSegments = [createBufferedChunk(30, 40, 30, 40)];
|
|
419
|
-
|
|
378
|
+
const content = createMockContent();
|
|
379
|
+
vi.spyOn(content.representation.index, "checkDiscontinuity").mockReturnValue(null);
|
|
380
|
+
vi.spyOn(content.representation.index, "awaitSegmentBetween").mockReturnValue(
|
|
381
|
+
false,
|
|
382
|
+
);
|
|
383
|
+
const bufferedSegments = [
|
|
384
|
+
makeBufferedChunk({ start: 30, end: 40, segmentTime: 30, segmentEnd: 40 }),
|
|
385
|
+
];
|
|
420
386
|
const result = checkForDiscontinuity(
|
|
421
387
|
content,
|
|
422
388
|
{ start: 30, end: 50 },
|
|
@@ -424,7 +390,6 @@ describe("checkForDiscontinuity", () => {
|
|
|
424
390
|
false,
|
|
425
391
|
bufferedSegments,
|
|
426
392
|
);
|
|
427
|
-
|
|
428
393
|
expect(result).toBeNull();
|
|
429
394
|
});
|
|
430
395
|
});
|
|
@@ -432,14 +397,20 @@ describe("checkForDiscontinuity", () => {
|
|
|
432
397
|
describe("edge cases", () => {
|
|
433
398
|
it("should handle segments with undefined bufferedStart", () => {
|
|
434
399
|
const content = createMockContent();
|
|
400
|
+
vi.spyOn(content.representation.index, "checkDiscontinuity").mockReturnValue(null);
|
|
401
|
+
vi.spyOn(content.representation.index, "awaitSegmentBetween").mockReturnValue(
|
|
402
|
+
undefined,
|
|
403
|
+
);
|
|
435
404
|
const bufferedSegments = [
|
|
436
|
-
{
|
|
405
|
+
makeBufferedChunk({
|
|
437
406
|
bufferedStart: undefined,
|
|
438
407
|
bufferedEnd: 15,
|
|
439
|
-
|
|
440
|
-
|
|
408
|
+
segmentTime: 10,
|
|
409
|
+
segmentEnd: 15,
|
|
410
|
+
start: 10,
|
|
411
|
+
end: 15,
|
|
412
|
+
}),
|
|
441
413
|
];
|
|
442
|
-
|
|
443
414
|
const result = checkForDiscontinuity(
|
|
444
415
|
content,
|
|
445
416
|
{ start: 10, end: 20 },
|
|
@@ -447,20 +418,25 @@ describe("checkForDiscontinuity", () => {
|
|
|
447
418
|
false,
|
|
448
419
|
bufferedSegments,
|
|
449
420
|
);
|
|
450
|
-
|
|
451
421
|
expect(result).toBeNull();
|
|
452
422
|
});
|
|
453
423
|
|
|
454
424
|
it("should handle segments with undefined bufferedEnd", () => {
|
|
455
425
|
const content = createMockContent();
|
|
426
|
+
vi.spyOn(content.representation.index, "checkDiscontinuity").mockReturnValue(null);
|
|
427
|
+
vi.spyOn(content.representation.index, "awaitSegmentBetween").mockReturnValue(
|
|
428
|
+
undefined,
|
|
429
|
+
);
|
|
456
430
|
const bufferedSegments = [
|
|
457
|
-
{
|
|
431
|
+
makeBufferedChunk({
|
|
458
432
|
bufferedStart: 10,
|
|
459
433
|
bufferedEnd: undefined,
|
|
460
|
-
|
|
461
|
-
|
|
434
|
+
segmentTime: 10,
|
|
435
|
+
segmentEnd: 15,
|
|
436
|
+
start: 10,
|
|
437
|
+
end: 15,
|
|
438
|
+
}),
|
|
462
439
|
];
|
|
463
|
-
|
|
464
440
|
const result = checkForDiscontinuity(
|
|
465
441
|
content,
|
|
466
442
|
{ start: 10, end: 20 },
|
|
@@ -468,18 +444,16 @@ describe("checkForDiscontinuity", () => {
|
|
|
468
444
|
false,
|
|
469
445
|
bufferedSegments,
|
|
470
446
|
);
|
|
471
|
-
|
|
472
447
|
expect(result).toBeNull();
|
|
473
448
|
});
|
|
474
449
|
|
|
475
450
|
it("should handle multiple segments where only some overlap with range", () => {
|
|
476
451
|
const content = createMockContent();
|
|
477
452
|
const bufferedSegments = [
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
453
|
+
makeBufferedChunk({ start: 5, end: 8, segmentTime: 5, segmentEnd: 8 }), // before range
|
|
454
|
+
makeBufferedChunk({ start: 10, end: 15, segmentTime: 10, segmentEnd: 15 }), // in range
|
|
455
|
+
makeBufferedChunk({ start: 20, end: 25, segmentTime: 20, segmentEnd: 25 }), // in range
|
|
481
456
|
];
|
|
482
|
-
|
|
483
457
|
const result = checkForDiscontinuity(
|
|
484
458
|
content,
|
|
485
459
|
{ start: 10, end: 30 },
|
|
@@ -487,18 +461,20 @@ describe("checkForDiscontinuity", () => {
|
|
|
487
461
|
true,
|
|
488
462
|
bufferedSegments,
|
|
489
463
|
);
|
|
490
|
-
|
|
491
464
|
expect(result).toEqual({ start: 15, end: 20 });
|
|
492
465
|
});
|
|
493
466
|
|
|
494
467
|
it("should handle consecutive segments without gaps", () => {
|
|
495
468
|
const content = createMockContent();
|
|
469
|
+
vi.spyOn(content.representation.index, "checkDiscontinuity").mockReturnValue(null);
|
|
470
|
+
vi.spyOn(content.representation.index, "awaitSegmentBetween").mockReturnValue(
|
|
471
|
+
undefined,
|
|
472
|
+
);
|
|
496
473
|
const bufferedSegments = [
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
474
|
+
makeBufferedChunk({ start: 10, end: 15, segmentTime: 10, segmentEnd: 15 }),
|
|
475
|
+
makeBufferedChunk({ start: 15, end: 20, segmentTime: 15, segmentEnd: 20 }),
|
|
476
|
+
makeBufferedChunk({ start: 20, end: 25, segmentTime: 20, segmentEnd: 25 }),
|
|
500
477
|
];
|
|
501
|
-
|
|
502
478
|
const result = checkForDiscontinuity(
|
|
503
479
|
content,
|
|
504
480
|
{ start: 10, end: 30 },
|
|
@@ -506,7 +482,6 @@ describe("checkForDiscontinuity", () => {
|
|
|
506
482
|
false,
|
|
507
483
|
bufferedSegments,
|
|
508
484
|
);
|
|
509
|
-
|
|
510
485
|
expect(result).toBeNull();
|
|
511
486
|
});
|
|
512
487
|
});
|