shaka-player 3.3.4 → 4.0.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/.github/workflows/build-and-test.yaml +0 -1
- package/.github/workflows/demo-version-index.yaml +8 -0
- package/.github/workflows/release-please.yaml +23 -2
- package/.github/workflows/selenium-lab-tests.yaml +0 -1
- package/.github/workflows/sync-labels.yaml +33 -0
- package/.github/workflows/update-issues.yaml +29 -0
- package/.github/workflows/validate-pr-title.yaml +35 -0
- package/AUTHORS +1 -0
- package/CHANGELOG.md +198 -32
- package/CONTRIBUTORS +1 -0
- package/README.md +10 -7
- package/app-engine/demo-version-index/README.md +3 -3
- package/app-engine/demo-version-index/app.yaml +27 -1
- package/app-engine/demo-version-index/generate.py +164 -0
- package/app-engine/demo-version-index/main.py +4 -155
- package/app-engine/demo-version-index/requirements.txt +0 -1
- package/build/README.md +2 -2
- package/build/compiler.py +1 -1
- package/build/generateTsDefs.py +0 -2
- package/build/shaka-lab.yaml +0 -2
- package/build/test.py +7 -1
- package/build/types/core +0 -1
- package/build/types/polyfill +0 -3
- package/demo/common/asset.js +17 -1
- package/demo/common/assets.js +29 -0
- package/demo/common/message_ids.js +6 -3
- package/demo/config.js +10 -11
- package/demo/custom.js +39 -0
- package/demo/demo_utils.js +0 -1
- package/demo/locales/en.json +6 -3
- package/demo/locales/source.json +22 -10
- package/demo/main.js +9 -6
- package/demo/search.js +2 -1
- package/dist/controls.css +1 -1
- package/dist/demo.compiled.debug.js +71 -64
- package/dist/demo.compiled.debug.map +3 -3
- package/dist/demo.compiled.js +71 -64
- package/dist/demo.compiled.map +3 -3
- package/dist/demo.css +1 -1
- package/dist/demo.css.map +1 -1
- package/dist/deps.js +16 -20
- package/dist/locales.js +31 -29
- package/dist/receiver.compiled.debug.js +32 -28
- package/dist/receiver.compiled.debug.map +3 -3
- package/dist/receiver.compiled.js +32 -28
- package/dist/receiver.compiled.map +3 -3
- package/dist/shaka-player.compiled.d.ts +78 -83
- package/dist/shaka-player.compiled.debug.d.ts +78 -83
- package/dist/shaka-player.compiled.debug.externs.js +126 -126
- package/dist/shaka-player.compiled.debug.js +426 -483
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +126 -126
- package/dist/shaka-player.compiled.js +838 -856
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +80 -83
- package/dist/shaka-player.ui.debug.d.ts +80 -83
- package/dist/shaka-player.ui.debug.externs.js +134 -126
- package/dist/shaka-player.ui.debug.js +488 -543
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +134 -126
- package/dist/shaka-player.ui.js +980 -994
- package/dist/shaka-player.ui.map +4 -4
- package/docs/tutorials/config.md +0 -2
- package/docs/tutorials/drm-config.md +5 -0
- package/docs/tutorials/fairplay.md +7 -22
- package/docs/tutorials/faq.md +0 -11
- package/docs/tutorials/index.json +2 -8
- package/docs/tutorials/plugins.md +1 -3
- package/docs/tutorials/upgrade.md +83 -11
- package/externs/polyfill.js +15 -0
- package/externs/shaka/manifest.js +5 -1
- package/externs/shaka/net.js +12 -0
- package/externs/shaka/offline.js +5 -1
- package/externs/shaka/player.js +39 -32
- package/externs/shaka/text.js +12 -12
- package/externs/sourcebuffer.js +15 -0
- package/lib/ads/client_side_ad.js +13 -2
- package/lib/ads/client_side_ad_manager.js +22 -4
- package/lib/cast/cast_utils.js +0 -1
- package/lib/dash/content_protection.js +85 -5
- package/lib/dash/dash_parser.js +1 -1
- package/lib/hls/hls_parser.js +378 -743
- package/lib/hls/manifest_text_parser.js +2 -3
- package/lib/media/drm_engine.js +102 -53
- package/lib/media/gap_jumping_controller.js +10 -45
- package/lib/media/media_source_engine.js +87 -15
- package/lib/media/playhead.js +2 -5
- package/lib/media/presentation_timeline.js +1 -2
- package/lib/media/segment_index.js +13 -46
- package/lib/media/segment_reference.js +47 -1
- package/lib/media/streaming_engine.js +29 -11
- package/lib/media/time_ranges_utils.js +4 -9
- package/lib/net/networking_engine.js +3 -0
- package/lib/offline/indexeddb/v1_storage_cell.js +1 -0
- package/lib/offline/indexeddb/v2_storage_cell.js +1 -0
- package/lib/offline/manifest_converter.js +1 -0
- package/lib/offline/storage.js +100 -132
- package/lib/player.js +17 -201
- package/lib/polyfill/media_capabilities.js +12 -6
- package/lib/polyfill/mediasource.js +0 -28
- package/lib/polyfill/patchedmediakeys_nop.js +2 -0
- package/lib/polyfill/patchedmediakeys_webkit.js +2 -0
- package/lib/text/cue.js +0 -6
- package/lib/text/lrc_text_parser.js +8 -0
- package/lib/text/mp4_ttml_parser.js +8 -0
- package/lib/text/mp4_vtt_parser.js +8 -0
- package/lib/text/sbv_text_parser.js +8 -0
- package/lib/text/simple_text_displayer.js +1 -7
- package/lib/text/srt_text_parser.js +8 -0
- package/lib/text/ssa_text_parser.js +8 -0
- package/lib/text/text_engine.js +19 -3
- package/lib/text/ttml_text_parser.js +8 -0
- package/lib/text/ui_text_displayer.js +1 -7
- package/lib/text/vtt_text_parser.js +24 -2
- package/lib/text/web_vtt_generator.js +1 -7
- package/lib/util/error.js +9 -13
- package/lib/util/fairplay_utils.js +109 -0
- package/lib/util/functional.js +0 -42
- package/lib/util/mime_utils.js +2 -0
- package/lib/util/platform.js +45 -0
- package/lib/util/player_configuration.js +12 -6
- package/lib/util/pssh.js +23 -4
- package/lib/util/stream_utils.js +92 -22
- package/lib/util/uint8array_utils.js +0 -16
- package/lib/util/xml_utils.js +1 -1
- package/package.json +1 -1
- package/roadmap.md +19 -19
- package/shaka-player.uncompiled.js +0 -3
- package/test/cast/cast_utils_unit.js +1 -0
- package/test/dash/dash_parser_content_protection_unit.js +44 -0
- package/test/dash/dash_parser_manifest_unit.js +0 -24
- package/test/dash/dash_parser_segment_template_unit.js +3 -4
- package/test/demo/demo_unit.js +2 -1
- package/test/hls/hls_live_unit.js +99 -220
- package/test/hls/hls_parser_unit.js +515 -432
- package/test/media/drm_engine_unit.js +86 -120
- package/test/media/media_source_engine_integration.js +26 -3
- package/test/media/media_source_engine_unit.js +7 -6
- package/test/media/playhead_unit.js +27 -191
- package/test/media/segment_index_unit.js +15 -25
- package/test/media/streaming_engine_integration.js +4 -39
- package/test/media/streaming_engine_unit.js +3 -2
- package/test/media/time_ranges_utils_unit.js +0 -5
- package/test/offline/manifest_convert_unit.js +34 -4
- package/test/offline/offline_manifest_parser_unit.js +1 -0
- package/test/offline/storage_integration.js +5 -4
- package/test/player_external.js +0 -6
- package/test/player_integration.js +16 -0
- package/test/player_unit.js +26 -0
- package/test/test/util/fake_media_source_engine.js +11 -4
- package/test/test/util/manifest_generator.js +3 -1
- package/test/test/util/manifest_parser_util.js +4 -1
- package/test/test/util/offline_utils.js +1 -0
- package/test/test/util/streaming_engine_util.js +1 -0
- package/test/test/util/test_scheme.js +24 -1
- package/test/test/util/util.js +4 -4
- package/test/text/cue_integration.js +2 -2
- package/test/text/lrc_text_parser_unit.js +6 -7
- package/test/text/mp4_ttml_parser_unit.js +6 -4
- package/test/text/mp4_vtt_parser_unit.js +6 -5
- package/test/text/sbv_text_parser_unit.js +5 -6
- package/test/text/srt_text_parser_unit.js +5 -6
- package/test/text/ssa_text_parser_unit.js +17 -29
- package/test/text/text_engine_unit.js +45 -5
- package/test/text/ttml_text_parser_unit.js +77 -77
- package/test/text/vtt_text_parser_unit.js +55 -57
- package/test/ui/ui_integration.js +0 -16
- package/test/ui/ui_unit.js +27 -0
- package/test/util/cmcd_manager_unit.js +3 -0
- package/test/util/stream_utils_unit.js +23 -7
- package/ui/controls.js +65 -40
- package/ui/fullscreen_button.js +26 -6
- package/ui/less/containers.less +3 -3
- package/ui/locales/en.json +1 -0
- package/ui/locales/source.json +5 -0
- package/ui/resolution_selection.js +31 -33
- package/ui/ui.js +0 -17
- package/docs/tutorials/upgrade-v2-5.md +0 -441
- package/docs/tutorials/upgrade-v3.md +0 -38
- package/lib/polyfill/mathround.js +0 -49
- package/lib/polyfill/patchedmediakeys_apple.js +0 -744
- package/lib/polyfill/patchedmediakeys_ms.js +0 -698
- package/lib/util/mutex.js +0 -52
- package/test/util/functional_unit.js +0 -82
|
@@ -51,7 +51,8 @@ let ExtraMetadataType;
|
|
|
51
51
|
* textLanguages: (!Array.<string>|undefined),
|
|
52
52
|
* duration: number,
|
|
53
53
|
* licenseServers: (!Object.<string, string>|undefined),
|
|
54
|
-
* licenseRequestHeaders: (!Object.<string, string>|undefined)
|
|
54
|
+
* licenseRequestHeaders: (!Object.<string, string>|undefined),
|
|
55
|
+
* sequenceMode: boolean
|
|
55
56
|
* }}
|
|
56
57
|
*/
|
|
57
58
|
let MetadataType;
|
|
@@ -278,6 +279,7 @@ shaka.test.TestScheme = class {
|
|
|
278
279
|
|
|
279
280
|
const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
280
281
|
manifest.presentationTimeline.setDuration(data.duration);
|
|
282
|
+
manifest.sequenceMode = data.sequenceMode;
|
|
281
283
|
|
|
282
284
|
const videoResolutions = data.videoResolutions || [undefined];
|
|
283
285
|
const audioLanguages = data.audioLanguages ||
|
|
@@ -511,6 +513,16 @@ shaka.test.TestScheme.DATA = {
|
|
|
511
513
|
audio: sintelAudioSegment,
|
|
512
514
|
text: vttSegment,
|
|
513
515
|
duration: 30,
|
|
516
|
+
sequenceMode: false,
|
|
517
|
+
},
|
|
518
|
+
|
|
519
|
+
// Like 'sintel', but flagged as sequence mode.
|
|
520
|
+
'sintel_sequence': {
|
|
521
|
+
video: sintelVideoSegment,
|
|
522
|
+
audio: sintelAudioSegment,
|
|
523
|
+
text: vttSegment,
|
|
524
|
+
duration: 30,
|
|
525
|
+
sequenceMode: true,
|
|
514
526
|
},
|
|
515
527
|
|
|
516
528
|
// Like 'sintel', but much longer to test buffering and seeking.
|
|
@@ -518,6 +530,7 @@ shaka.test.TestScheme.DATA = {
|
|
|
518
530
|
video: sintelVideoSegment,
|
|
519
531
|
audio: sintelAudioSegment,
|
|
520
532
|
duration: 300,
|
|
533
|
+
sequenceMode: false,
|
|
521
534
|
},
|
|
522
535
|
|
|
523
536
|
// Like 'sintel' above, but with languages and delayed setup.
|
|
@@ -534,6 +547,7 @@ shaka.test.TestScheme.DATA = {
|
|
|
534
547
|
language: 'fa', // Necessary to repro #1696
|
|
535
548
|
}),
|
|
536
549
|
duration: 30,
|
|
550
|
+
sequenceMode: false,
|
|
537
551
|
},
|
|
538
552
|
|
|
539
553
|
'sintel_multi_lingual_multi_res': {
|
|
@@ -547,17 +561,20 @@ shaka.test.TestScheme.DATA = {
|
|
|
547
561
|
audioLanguages: ['en', 'es'],
|
|
548
562
|
textLanguages: ['zh', 'fr'],
|
|
549
563
|
duration: 30,
|
|
564
|
+
sequenceMode: false,
|
|
550
565
|
},
|
|
551
566
|
|
|
552
567
|
'sintel_audio_only': {
|
|
553
568
|
audio: sintelAudioSegment,
|
|
554
569
|
duration: 30,
|
|
570
|
+
sequenceMode: false,
|
|
555
571
|
},
|
|
556
572
|
|
|
557
573
|
'sintel_no_text': {
|
|
558
574
|
video: sintelVideoSegment,
|
|
559
575
|
audio: sintelAudioSegment,
|
|
560
576
|
duration: 30,
|
|
577
|
+
sequenceMode: false,
|
|
561
578
|
},
|
|
562
579
|
|
|
563
580
|
// https://github.com/shaka-project/shaka-player/issues/2553
|
|
@@ -566,6 +583,7 @@ shaka.test.TestScheme.DATA = {
|
|
|
566
583
|
text: vttSegment,
|
|
567
584
|
textLanguages: ['de', 'de'], // one of these is the "forced subs" track
|
|
568
585
|
duration: 30,
|
|
586
|
+
sequenceMode: false,
|
|
569
587
|
},
|
|
570
588
|
|
|
571
589
|
'sintel-enc': {
|
|
@@ -574,6 +592,7 @@ shaka.test.TestScheme.DATA = {
|
|
|
574
592
|
text: vttSegment,
|
|
575
593
|
licenseServers: widevineDrmServers,
|
|
576
594
|
duration: 30,
|
|
595
|
+
sequenceMode: false,
|
|
577
596
|
},
|
|
578
597
|
|
|
579
598
|
'multidrm': {
|
|
@@ -583,6 +602,7 @@ shaka.test.TestScheme.DATA = {
|
|
|
583
602
|
licenseServers: axinomDrmServers,
|
|
584
603
|
licenseRequestHeaders: axinomDrmHeaders,
|
|
585
604
|
duration: 30,
|
|
605
|
+
sequenceMode: false,
|
|
586
606
|
},
|
|
587
607
|
|
|
588
608
|
'multidrm_no_init_data': {
|
|
@@ -595,6 +615,7 @@ shaka.test.TestScheme.DATA = {
|
|
|
595
615
|
licenseServers: axinomDrmServers,
|
|
596
616
|
licenseRequestHeaders: axinomDrmHeaders,
|
|
597
617
|
duration: 30,
|
|
618
|
+
sequenceMode: false,
|
|
598
619
|
},
|
|
599
620
|
|
|
600
621
|
'cea-708_ts': {
|
|
@@ -608,6 +629,7 @@ shaka.test.TestScheme.DATA = {
|
|
|
608
629
|
mimeType: 'application/cea-608',
|
|
609
630
|
},
|
|
610
631
|
duration: 30,
|
|
632
|
+
sequenceMode: false,
|
|
611
633
|
},
|
|
612
634
|
|
|
613
635
|
'cea-708_mp4': {
|
|
@@ -622,6 +644,7 @@ shaka.test.TestScheme.DATA = {
|
|
|
622
644
|
closedCaptions: new Map([['CC1', 'en']]),
|
|
623
645
|
},
|
|
624
646
|
duration: 30,
|
|
647
|
+
sequenceMode: false,
|
|
625
648
|
},
|
|
626
649
|
};
|
|
627
650
|
|
package/test/test/util/util.js
CHANGED
|
@@ -453,13 +453,13 @@ shaka.test.Util = class {
|
|
|
453
453
|
*/
|
|
454
454
|
shaka.test.Util.customMatchers_ = {
|
|
455
455
|
// Custom matcher for Element objects.
|
|
456
|
-
toEqualElement: (util
|
|
456
|
+
toEqualElement: (util) => {
|
|
457
457
|
return {
|
|
458
458
|
compare: shaka.test.Util.expectToEqualElementCompare_,
|
|
459
459
|
};
|
|
460
460
|
},
|
|
461
461
|
// Custom matcher for working with spies.
|
|
462
|
-
toHaveBeenCalledOnceMore: (util
|
|
462
|
+
toHaveBeenCalledOnceMore: (util) => {
|
|
463
463
|
return {
|
|
464
464
|
compare: (actual, expected) => {
|
|
465
465
|
const callCount = actual.calls.count();
|
|
@@ -479,7 +479,7 @@ shaka.test.Util.customMatchers_ = {
|
|
|
479
479
|
},
|
|
480
480
|
};
|
|
481
481
|
},
|
|
482
|
-
toHaveBeenCalledOnceMoreWith: (util
|
|
482
|
+
toHaveBeenCalledOnceMoreWith: (util) => {
|
|
483
483
|
return {
|
|
484
484
|
compare: (actual, expected) => {
|
|
485
485
|
const callCount = actual.calls.count();
|
|
@@ -492,7 +492,7 @@ shaka.test.Util.customMatchers_ = {
|
|
|
492
492
|
if (callCount != 1) {
|
|
493
493
|
result.pass = false;
|
|
494
494
|
result.message = 'Expected to be called once, not ' + callCount;
|
|
495
|
-
} else if (!util.equals(callArgs, expected
|
|
495
|
+
} else if (!util.equals(callArgs, expected)) {
|
|
496
496
|
result.pass = false;
|
|
497
497
|
result.message =
|
|
498
498
|
'Expected to be called with ' + expected + ' not ' + callArgs;
|
|
@@ -19,7 +19,7 @@ describe('Cue', () => {
|
|
|
19
19
|
'WEBVTT\n\n' +
|
|
20
20
|
'00:00:20.000 --> 00:00:40.000\n' +
|
|
21
21
|
'Test',
|
|
22
|
-
{periodStart: 7, segmentStart: 10, segmentEnd: 60});
|
|
22
|
+
{periodStart: 7, segmentStart: 10, segmentEnd: 60, vttOffset: 7});
|
|
23
23
|
expect(cues.length).toBe(1);
|
|
24
24
|
expect(cues[0].startTime).toBe(27);
|
|
25
25
|
expect(cues[0].endTime).toBe(47);
|
|
@@ -34,7 +34,7 @@ describe('Cue', () => {
|
|
|
34
34
|
'ID1\n' +
|
|
35
35
|
'00:00:20.000 --> 00:00:40.000 align:middle size:56% vertical:lr\n' +
|
|
36
36
|
'Test',
|
|
37
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
37
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
38
38
|
expect(cues.length).toBe(1);
|
|
39
39
|
});
|
|
40
40
|
|
|
@@ -8,7 +8,7 @@ describe('LrcTextParser', () => {
|
|
|
8
8
|
it('supports no cues', () => {
|
|
9
9
|
verifyHelper([],
|
|
10
10
|
'',
|
|
11
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
11
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
12
12
|
});
|
|
13
13
|
|
|
14
14
|
it('handles a blank line at the start of the file', () => {
|
|
@@ -18,7 +18,7 @@ describe('LrcTextParser', () => {
|
|
|
18
18
|
],
|
|
19
19
|
'\n\n' +
|
|
20
20
|
'[00:00.00]Test',
|
|
21
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
21
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
22
22
|
});
|
|
23
23
|
|
|
24
24
|
it('handles a blank line at the end of the file', () => {
|
|
@@ -28,7 +28,7 @@ describe('LrcTextParser', () => {
|
|
|
28
28
|
],
|
|
29
29
|
'[00:00.00]Test' +
|
|
30
30
|
'\n\n',
|
|
31
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
31
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
32
32
|
});
|
|
33
33
|
|
|
34
34
|
it('handles no blank line at the end of the file', () => {
|
|
@@ -37,8 +37,7 @@ describe('LrcTextParser', () => {
|
|
|
37
37
|
{startTime: 0, endTime: 2, payload: 'Test'},
|
|
38
38
|
],
|
|
39
39
|
'[00:00.00]Test',
|
|
40
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
41
|
-
});
|
|
40
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
42
41
|
});
|
|
43
42
|
|
|
44
43
|
it('supports multiple cues', () => {
|
|
@@ -51,7 +50,7 @@ describe('LrcTextParser', () => {
|
|
|
51
50
|
'[00:00.00]Test\n' +
|
|
52
51
|
'[00:10.00]Test2\n' +
|
|
53
52
|
'[00:20.00]Test3',
|
|
54
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
53
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
55
54
|
});
|
|
56
55
|
|
|
57
56
|
it('supports different time formats', () => {
|
|
@@ -70,7 +69,7 @@ describe('LrcTextParser', () => {
|
|
|
70
69
|
'[00:30,1]Test4\n' +
|
|
71
70
|
'[00:40,001]Test5\n' +
|
|
72
71
|
'[00:50,02]Test6',
|
|
73
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
72
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
74
73
|
});
|
|
75
74
|
|
|
76
75
|
/**
|
|
@@ -41,7 +41,7 @@ describe('Mp4TtmlParser', () => {
|
|
|
41
41
|
it('handles media segments with multiple mdats', () => {
|
|
42
42
|
const parser = new shaka.text.Mp4TtmlParser();
|
|
43
43
|
parser.parseInit(ttmlInitSegment);
|
|
44
|
-
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0};
|
|
44
|
+
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0};
|
|
45
45
|
const ret = parser.parseMedia(ttmlSegmentMultipleMDAT, time);
|
|
46
46
|
// Bodies.
|
|
47
47
|
expect(ret.length).toBe(2);
|
|
@@ -54,8 +54,10 @@ describe('Mp4TtmlParser', () => {
|
|
|
54
54
|
});
|
|
55
55
|
|
|
56
56
|
it('accounts for offset', () => {
|
|
57
|
-
const time1 =
|
|
58
|
-
|
|
57
|
+
const time1 =
|
|
58
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0};
|
|
59
|
+
const time2 =
|
|
60
|
+
{periodStart: 7, segmentStart: 0, segmentEnd: 0, vttOffset: 7};
|
|
59
61
|
|
|
60
62
|
const parser = new shaka.text.Mp4TtmlParser();
|
|
61
63
|
parser.parseInit(ttmlInitSegment);
|
|
@@ -159,7 +161,7 @@ describe('Mp4TtmlParser', () => {
|
|
|
159
161
|
];
|
|
160
162
|
const parser = new shaka.text.Mp4TtmlParser();
|
|
161
163
|
parser.parseInit(ttmlInitSegment);
|
|
162
|
-
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0};
|
|
164
|
+
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0};
|
|
163
165
|
const result = parser.parseMedia(ttmlSegment, time);
|
|
164
166
|
shaka.test.TtmlUtils.verifyHelper(
|
|
165
167
|
cues, result, {startTime: 23, endTime: 53.5});
|
|
@@ -65,7 +65,7 @@ describe('Mp4VttParser', () => {
|
|
|
65
65
|
|
|
66
66
|
const parser = new shaka.text.Mp4VttParser();
|
|
67
67
|
parser.parseInit(vttInitSegment);
|
|
68
|
-
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0};
|
|
68
|
+
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0};
|
|
69
69
|
const result = parser.parseMedia(vttSegment, time);
|
|
70
70
|
verifyHelper(cues, result);
|
|
71
71
|
});
|
|
@@ -93,7 +93,7 @@ describe('Mp4VttParser', () => {
|
|
|
93
93
|
|
|
94
94
|
const parser = new shaka.text.Mp4VttParser();
|
|
95
95
|
parser.parseInit(vttInitSegment);
|
|
96
|
-
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0};
|
|
96
|
+
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0};
|
|
97
97
|
const result = parser.parseMedia(vttSegmentMultiPayload, time);
|
|
98
98
|
verifyHelper(cues, result);
|
|
99
99
|
});
|
|
@@ -121,7 +121,7 @@ describe('Mp4VttParser', () => {
|
|
|
121
121
|
|
|
122
122
|
const parser = new shaka.text.Mp4VttParser();
|
|
123
123
|
parser.parseInit(vttInitSegment);
|
|
124
|
-
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0};
|
|
124
|
+
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0};
|
|
125
125
|
const result = parser.parseMedia(vttSegSettings, time);
|
|
126
126
|
verifyHelper(cues, result);
|
|
127
127
|
});
|
|
@@ -143,7 +143,7 @@ describe('Mp4VttParser', () => {
|
|
|
143
143
|
|
|
144
144
|
const parser = new shaka.text.Mp4VttParser();
|
|
145
145
|
parser.parseInit(vttInitSegment);
|
|
146
|
-
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0};
|
|
146
|
+
const time = {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0};
|
|
147
147
|
const result = parser.parseMedia(vttSegNoDuration, time);
|
|
148
148
|
verifyHelper(cues, result);
|
|
149
149
|
});
|
|
@@ -165,7 +165,8 @@ describe('Mp4VttParser', () => {
|
|
|
165
165
|
|
|
166
166
|
const parser = new shaka.text.Mp4VttParser();
|
|
167
167
|
parser.parseInit(vttInitSegment);
|
|
168
|
-
const time =
|
|
168
|
+
const time =
|
|
169
|
+
{periodStart: 10, segmentStart: 0, segmentEnd: 0, vttOffset: 10};
|
|
169
170
|
const result = parser.parseMedia(vttSegment, time);
|
|
170
171
|
verifyHelper(cues, result);
|
|
171
172
|
});
|
|
@@ -8,7 +8,7 @@ describe('SbvTextParser', () => {
|
|
|
8
8
|
it('supports no cues', () => {
|
|
9
9
|
verifyHelper([],
|
|
10
10
|
'',
|
|
11
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
11
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
12
12
|
});
|
|
13
13
|
|
|
14
14
|
it('handles a blank line at the end of the file', () => {
|
|
@@ -18,7 +18,7 @@ describe('SbvTextParser', () => {
|
|
|
18
18
|
],
|
|
19
19
|
'0:00:20.000,0:00:40.000\n' +
|
|
20
20
|
'Test\n\n',
|
|
21
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
21
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
22
22
|
});
|
|
23
23
|
|
|
24
24
|
it('handles no blank line at the end of the file', () => {
|
|
@@ -28,8 +28,7 @@ describe('SbvTextParser', () => {
|
|
|
28
28
|
],
|
|
29
29
|
'0:00:20.000,0:00:40.000\n' +
|
|
30
30
|
'Test\n',
|
|
31
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
32
|
-
});
|
|
31
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
33
32
|
});
|
|
34
33
|
|
|
35
34
|
it('handles no newline after the final text payload', () => {
|
|
@@ -39,7 +38,7 @@ describe('SbvTextParser', () => {
|
|
|
39
38
|
],
|
|
40
39
|
'0:00:20.000,0:00:40.000\n' +
|
|
41
40
|
'Test',
|
|
42
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
41
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
43
42
|
});
|
|
44
43
|
|
|
45
44
|
it('supports multiple cues', () => {
|
|
@@ -52,7 +51,7 @@ describe('SbvTextParser', () => {
|
|
|
52
51
|
'Test\n\n' +
|
|
53
52
|
'0:00:40.000,0:00:50.000\n' +
|
|
54
53
|
'Test2',
|
|
55
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
54
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
56
55
|
});
|
|
57
56
|
|
|
58
57
|
/**
|
|
@@ -8,7 +8,7 @@ describe('SrtTextParser', () => {
|
|
|
8
8
|
it('supports no cues', () => {
|
|
9
9
|
verifyHelper([],
|
|
10
10
|
'',
|
|
11
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
11
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
12
12
|
});
|
|
13
13
|
|
|
14
14
|
it('handles a blank line at the end of the file', () => {
|
|
@@ -19,7 +19,7 @@ describe('SrtTextParser', () => {
|
|
|
19
19
|
'1\n' +
|
|
20
20
|
'00:00:20,000 --> 00:00:40,000\n' +
|
|
21
21
|
'Test\n\n',
|
|
22
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
22
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
23
23
|
});
|
|
24
24
|
|
|
25
25
|
it('handles no blank line at the end of the file', () => {
|
|
@@ -30,8 +30,7 @@ describe('SrtTextParser', () => {
|
|
|
30
30
|
'1\n' +
|
|
31
31
|
'00:00:20,000 --> 00:00:40,000\n' +
|
|
32
32
|
'Test\n',
|
|
33
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
34
|
-
});
|
|
33
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
35
34
|
});
|
|
36
35
|
|
|
37
36
|
it('handles no newline after the final text payload', () => {
|
|
@@ -42,7 +41,7 @@ describe('SrtTextParser', () => {
|
|
|
42
41
|
'1\n' +
|
|
43
42
|
'00:00:20,000 --> 00:00:40,000\n' +
|
|
44
43
|
'Test',
|
|
45
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
44
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
46
45
|
});
|
|
47
46
|
|
|
48
47
|
it('supports multiple cues', () => {
|
|
@@ -57,7 +56,7 @@ describe('SrtTextParser', () => {
|
|
|
57
56
|
'2\n' +
|
|
58
57
|
'00:00:40,000 --> 00:00:50,000\n' +
|
|
59
58
|
'Test2',
|
|
60
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
59
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
61
60
|
});
|
|
62
61
|
|
|
63
62
|
/**
|
|
@@ -10,7 +10,7 @@ describe('SsaTextParser', () => {
|
|
|
10
10
|
it('supports no cues', () => {
|
|
11
11
|
verifyHelper([],
|
|
12
12
|
'',
|
|
13
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
13
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
14
14
|
});
|
|
15
15
|
|
|
16
16
|
it('handles a blank line at the start of the file', () => {
|
|
@@ -33,7 +33,7 @@ describe('SsaTextParser', () => {
|
|
|
33
33
|
'Effect, Text\n' +
|
|
34
34
|
'Dialogue: 0,0:00:00.00,0:00:02.00,DefaultVCD, NTP,0000,0000,0000' +
|
|
35
35
|
',,{\\pos(400,570)}Test',
|
|
36
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
36
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
37
37
|
});
|
|
38
38
|
|
|
39
39
|
it('handles a blank line at the end of the file', () => {
|
|
@@ -56,7 +56,7 @@ describe('SsaTextParser', () => {
|
|
|
56
56
|
'Dialogue: 0,0:00:00.00,0:00:02.00,DefaultVCD, NTP,0000,0000,0000' +
|
|
57
57
|
',,{\\pos(400,570)}Test' +
|
|
58
58
|
'\n\n',
|
|
59
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
59
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
60
60
|
});
|
|
61
61
|
|
|
62
62
|
it('handles no blank line at the end of the file', () => {
|
|
@@ -78,8 +78,7 @@ describe('SsaTextParser', () => {
|
|
|
78
78
|
'Effect, Text\n' +
|
|
79
79
|
'Dialogue: 0,0:00:00.00,0:00:02.00,DefaultVCD, NTP,0000,0000,0000' +
|
|
80
80
|
',,{\\pos(400,570)}Test',
|
|
81
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
82
|
-
});
|
|
81
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
83
82
|
});
|
|
84
83
|
|
|
85
84
|
it('supports no styles', () => {
|
|
@@ -94,8 +93,7 @@ describe('SsaTextParser', () => {
|
|
|
94
93
|
'Effect, Text\n' +
|
|
95
94
|
'Dialogue: 0,0:00:00.00,0:00:02.00,DefaultVCD, NTP,0000,0000,0000' +
|
|
96
95
|
',,{\\pos(400,570)}Test',
|
|
97
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
98
|
-
});
|
|
96
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
99
97
|
});
|
|
100
98
|
|
|
101
99
|
it('support no script info', () => {
|
|
@@ -115,8 +113,7 @@ describe('SsaTextParser', () => {
|
|
|
115
113
|
'Effect, Text\n' +
|
|
116
114
|
'Dialogue: 0,0:00:00.00,0:00:02.00,DefaultVCD, NTP,0000,0000,0000' +
|
|
117
115
|
',,{\\pos(400,570)}Test',
|
|
118
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
119
|
-
});
|
|
116
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
120
117
|
});
|
|
121
118
|
|
|
122
119
|
it('supports only events', () => {
|
|
@@ -129,8 +126,7 @@ describe('SsaTextParser', () => {
|
|
|
129
126
|
'Effect, Text\n' +
|
|
130
127
|
'Dialogue: 0,0:00:00.00,0:00:02.00,DefaultVCD, NTP,0000,0000,0000' +
|
|
131
128
|
',,{\\pos(400,570)}Test',
|
|
132
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
133
|
-
});
|
|
129
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
134
130
|
});
|
|
135
131
|
|
|
136
132
|
it('supports text with commas', () => {
|
|
@@ -143,8 +139,7 @@ describe('SsaTextParser', () => {
|
|
|
143
139
|
'Effect, Text\n' +
|
|
144
140
|
'Dialogue: 0,0:00:00.00,0:00:02.00,DefaultVCD, NTP,0000,0000,0000' +
|
|
145
141
|
',,{\\pos(400,570)}Test,1,Test2',
|
|
146
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
147
|
-
});
|
|
142
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
148
143
|
});
|
|
149
144
|
|
|
150
145
|
it('supports different time formats', () => {
|
|
@@ -163,7 +158,7 @@ describe('SsaTextParser', () => {
|
|
|
163
158
|
',,{\\pos(400,570)}Test2\n' +
|
|
164
159
|
'Dialogue: 0,0:00:08.01,0:00:10.001,DefaultVCD, NTP,0000,0000,0000' +
|
|
165
160
|
',,{\\pos(400,570)}Test3',
|
|
166
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
161
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
167
162
|
});
|
|
168
163
|
|
|
169
164
|
it('supports multiple cues', () => {
|
|
@@ -182,7 +177,7 @@ describe('SsaTextParser', () => {
|
|
|
182
177
|
',,{\\pos(400,570)}Test2\n' +
|
|
183
178
|
'Dialogue: 0,0:00:08.01,0:00:10.10,DefaultVCD, NTP,0000,0000,0000' +
|
|
184
179
|
',,{\\pos(400,570)}Test3',
|
|
185
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
|
|
180
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
186
181
|
});
|
|
187
182
|
|
|
188
183
|
it('supports fontFamily style', () => {
|
|
@@ -207,8 +202,7 @@ describe('SsaTextParser', () => {
|
|
|
207
202
|
'Effect, Text\n' +
|
|
208
203
|
'Dialogue: 0,0:00:00.00,0:00:02.00,DefaultVCD, NTP,0000,0000,0000' +
|
|
209
204
|
',,{\\pos(400,570)}Test',
|
|
210
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
211
|
-
});
|
|
205
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
212
206
|
});
|
|
213
207
|
|
|
214
208
|
it('supports color & backgroundColor style', () => {
|
|
@@ -234,8 +228,7 @@ describe('SsaTextParser', () => {
|
|
|
234
228
|
'Effect, Text\n' +
|
|
235
229
|
'Dialogue: 0,0:00:00.00,0:00:02.00,DefaultVCD, NTP,0000,0000,0000' +
|
|
236
230
|
',,{\\pos(400,570)}Test',
|
|
237
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
238
|
-
});
|
|
231
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
239
232
|
});
|
|
240
233
|
|
|
241
234
|
it('supports bold style', () => {
|
|
@@ -260,8 +253,7 @@ describe('SsaTextParser', () => {
|
|
|
260
253
|
'Effect, Text\n' +
|
|
261
254
|
'Dialogue: 0,0:00:00.00,0:00:02.00,DefaultVCD, NTP,0000,0000,0000' +
|
|
262
255
|
',,{\\pos(400,570)}Test',
|
|
263
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
264
|
-
});
|
|
256
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
265
257
|
});
|
|
266
258
|
|
|
267
259
|
it('supports italic style', () => {
|
|
@@ -286,8 +278,7 @@ describe('SsaTextParser', () => {
|
|
|
286
278
|
'Effect, Text\n' +
|
|
287
279
|
'Dialogue: 0,0:00:00.00,0:00:02.00,DefaultVCD, NTP,0000,0000,0000' +
|
|
288
280
|
',,{\\pos(400,570)}Test',
|
|
289
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
290
|
-
});
|
|
281
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
291
282
|
});
|
|
292
283
|
|
|
293
284
|
it('supports underline style', () => {
|
|
@@ -312,8 +303,7 @@ describe('SsaTextParser', () => {
|
|
|
312
303
|
'Effect, Text\n' +
|
|
313
304
|
'Dialogue: 0,0:00:00.00,0:00:02.00,DefaultVCD, NTP,0000,0000,0000' +
|
|
314
305
|
',,{\\pos(400,570)}Test',
|
|
315
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
316
|
-
});
|
|
306
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
317
307
|
});
|
|
318
308
|
|
|
319
309
|
it('supports letterSpacing style', () => {
|
|
@@ -338,8 +328,7 @@ describe('SsaTextParser', () => {
|
|
|
338
328
|
'Effect, Text\n' +
|
|
339
329
|
'Dialogue: 0,0:00:00.00,0:00:02.00,DefaultVCD, NTP,0000,0000,0000' +
|
|
340
330
|
',,{\\pos(400,570)}Test',
|
|
341
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
342
|
-
});
|
|
331
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
343
332
|
});
|
|
344
333
|
|
|
345
334
|
it('supports V4 style', () => {
|
|
@@ -364,8 +353,7 @@ describe('SsaTextParser', () => {
|
|
|
364
353
|
'Effect, Text\n' +
|
|
365
354
|
'Dialogue: 0,0:00:00.00,0:00:02.00,DefaultVCD, NTP,0000,0000,0000' +
|
|
366
355
|
',,{\\pos(400,570)}Test',
|
|
367
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0,
|
|
368
|
-
});
|
|
356
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
369
357
|
});
|
|
370
358
|
|
|
371
359
|
/**
|
|
@@ -19,6 +19,9 @@ describe('TextEngine', () => {
|
|
|
19
19
|
/** @type {!jasmine.Spy} */
|
|
20
20
|
let mockParseInit;
|
|
21
21
|
|
|
22
|
+
/** @type {!jasmine.Spy} */
|
|
23
|
+
let mockSetSequenceMode;
|
|
24
|
+
|
|
22
25
|
/** @type {!jasmine.Spy} */
|
|
23
26
|
let mockParseMedia;
|
|
24
27
|
|
|
@@ -27,11 +30,13 @@ describe('TextEngine', () => {
|
|
|
27
30
|
|
|
28
31
|
beforeEach(() => {
|
|
29
32
|
mockParseInit = jasmine.createSpy('mockParseInit');
|
|
33
|
+
mockSetSequenceMode = jasmine.createSpy('mockSetSequenceMode');
|
|
30
34
|
mockParseMedia = jasmine.createSpy('mockParseMedia');
|
|
31
35
|
// eslint-disable-next-line no-restricted-syntax
|
|
32
36
|
mockParserPlugIn = function() {
|
|
33
37
|
return {
|
|
34
38
|
parseInit: mockParseInit,
|
|
39
|
+
setSequenceMode: mockSetSequenceMode,
|
|
35
40
|
parseMedia: mockParseMedia,
|
|
36
41
|
};
|
|
37
42
|
};
|
|
@@ -41,7 +46,10 @@ describe('TextEngine', () => {
|
|
|
41
46
|
|
|
42
47
|
TextEngine.registerParser(dummyMimeType, mockParserPlugIn);
|
|
43
48
|
textEngine = new TextEngine(mockDisplayer);
|
|
44
|
-
textEngine.initParser(
|
|
49
|
+
textEngine.initParser(
|
|
50
|
+
dummyMimeType,
|
|
51
|
+
/* sequenceMode= */ false,
|
|
52
|
+
/* segmentRelativeVttTiming= */ false);
|
|
45
53
|
});
|
|
46
54
|
|
|
47
55
|
afterEach(() => {
|
|
@@ -86,7 +94,7 @@ describe('TextEngine', () => {
|
|
|
86
94
|
await textEngine.appendBuffer(dummyData, 0, 3);
|
|
87
95
|
expect(mockParseMedia).toHaveBeenCalledOnceMoreWith([
|
|
88
96
|
dummyData,
|
|
89
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 3},
|
|
97
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 3, vttOffset: 0},
|
|
90
98
|
]);
|
|
91
99
|
|
|
92
100
|
expect(mockDisplayer.appendSpy).toHaveBeenCalledOnceMoreWith([
|
|
@@ -101,7 +109,7 @@ describe('TextEngine', () => {
|
|
|
101
109
|
|
|
102
110
|
expect(mockParseMedia).toHaveBeenCalledOnceMoreWith([
|
|
103
111
|
dummyData,
|
|
104
|
-
{periodStart: 0, segmentStart: 3, segmentEnd: 5},
|
|
112
|
+
{periodStart: 0, segmentStart: 3, segmentEnd: 5, vttOffset: 0},
|
|
105
113
|
]);
|
|
106
114
|
|
|
107
115
|
expect(mockDisplayer.appendSpy).toHaveBeenCalledOnceMoreWith([
|
|
@@ -253,7 +261,7 @@ describe('TextEngine', () => {
|
|
|
253
261
|
|
|
254
262
|
expect(mockParseMedia).toHaveBeenCalledOnceMoreWith([
|
|
255
263
|
dummyData,
|
|
256
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 3},
|
|
264
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 3, vttOffset: 0},
|
|
257
265
|
]);
|
|
258
266
|
expect(mockDisplayer.appendSpy).toHaveBeenCalledOnceMoreWith([
|
|
259
267
|
[
|
|
@@ -267,7 +275,7 @@ describe('TextEngine', () => {
|
|
|
267
275
|
|
|
268
276
|
expect(mockParseMedia).toHaveBeenCalledOnceMoreWith([
|
|
269
277
|
dummyData,
|
|
270
|
-
{periodStart: 4, segmentStart: 4, segmentEnd: 7},
|
|
278
|
+
{periodStart: 4, segmentStart: 4, segmentEnd: 7, vttOffset: 4},
|
|
271
279
|
]);
|
|
272
280
|
expect(mockDisplayer.appendSpy).toHaveBeenCalledOnceMoreWith([
|
|
273
281
|
[
|
|
@@ -276,6 +284,38 @@ describe('TextEngine', () => {
|
|
|
276
284
|
],
|
|
277
285
|
]);
|
|
278
286
|
});
|
|
287
|
+
|
|
288
|
+
it('vttOffset when segmentRelativeVttTiming is set', async () => {
|
|
289
|
+
textEngine.initParser(
|
|
290
|
+
dummyMimeType,
|
|
291
|
+
/* sequenceMode= */ false,
|
|
292
|
+
/* segmentRelativeVttTiming= */ true);
|
|
293
|
+
|
|
294
|
+
mockParseMedia.and.callFake((data, time) => {
|
|
295
|
+
return [
|
|
296
|
+
createFakeCue(time.periodStart + 0,
|
|
297
|
+
time.periodStart + 1),
|
|
298
|
+
createFakeCue(time.periodStart + 2,
|
|
299
|
+
time.periodStart + 3),
|
|
300
|
+
];
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
await textEngine.appendBuffer(dummyData, 0, 3);
|
|
304
|
+
|
|
305
|
+
expect(mockParseMedia).toHaveBeenCalledOnceMoreWith([
|
|
306
|
+
dummyData,
|
|
307
|
+
{periodStart: 0, segmentStart: 0, segmentEnd: 3, vttOffset: 0},
|
|
308
|
+
]);
|
|
309
|
+
|
|
310
|
+
textEngine.setTimestampOffset(8);
|
|
311
|
+
await textEngine.appendBuffer(dummyData, 4, 7);
|
|
312
|
+
|
|
313
|
+
// vttOffset should equal segmentStart instead of periodStart
|
|
314
|
+
expect(mockParseMedia).toHaveBeenCalledOnceMoreWith([
|
|
315
|
+
dummyData,
|
|
316
|
+
{periodStart: 8, segmentStart: 4, segmentEnd: 7, vttOffset: 4},
|
|
317
|
+
]);
|
|
318
|
+
});
|
|
279
319
|
});
|
|
280
320
|
|
|
281
321
|
describe('bufferStart/bufferEnd', () => {
|