shaka-player 4.2.6 → 4.2.7
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 +20 -0
- package/dist/deps.js +1 -1
- package/dist/locales.js +32 -32
- package/dist/shaka-player.compiled.d.ts +10 -0
- package/dist/shaka-player.compiled.debug.d.ts +10 -0
- package/dist/shaka-player.compiled.debug.externs.js +12 -0
- package/dist/shaka-player.compiled.debug.js +144 -139
- package/dist/shaka-player.compiled.debug.map +3 -3
- package/dist/shaka-player.compiled.externs.js +12 -0
- package/dist/shaka-player.compiled.js +384 -381
- package/dist/shaka-player.compiled.map +3 -3
- package/dist/shaka-player.ui.d.ts +10 -0
- package/dist/shaka-player.ui.debug.d.ts +10 -0
- package/dist/shaka-player.ui.debug.externs.js +12 -0
- package/dist/shaka-player.ui.debug.js +156 -152
- package/dist/shaka-player.ui.debug.map +3 -3
- package/dist/shaka-player.ui.externs.js +12 -0
- package/dist/shaka-player.ui.js +495 -493
- package/dist/shaka-player.ui.map +3 -3
- package/lib/hls/hls_parser.js +52 -15
- package/lib/media/media_source_engine.js +34 -4
- package/lib/media/segment_index.js +5 -10
- package/lib/media/segment_reference.js +39 -0
- package/lib/media/streaming_engine.js +15 -3
- package/lib/player.js +7 -1
- package/lib/text/ui_text_displayer.js +24 -4
- package/lib/text/web_vtt_generator.js +21 -9
- package/lib/util/dom_utils.js +3 -1
- package/lib/util/stream_utils.js +6 -0
- package/lib/util/timer.js +17 -0
- package/package.json +1 -1
- package/test/hls/hls_live_unit.js +8 -30
- package/test/hls/hls_parser_unit.js +30 -0
- package/test/media/segment_index_unit.js +28 -0
- package/test/player_integration.js +27 -0
- package/test/player_unit.js +4 -2
- package/test/text/ui_text_displayer_unit.js +70 -0
|
@@ -532,6 +532,34 @@ describe('SegmentIndex', /** @suppress {accessControls} */ () => {
|
|
|
532
532
|
goog.asserts.assert(position1 != null, 'Position should not be null!');
|
|
533
533
|
expect(index1.get(position1)).toBe(references2[1]);
|
|
534
534
|
});
|
|
535
|
+
|
|
536
|
+
it('does not duplicate references with rounding errors', () => {
|
|
537
|
+
/** @type {!Array.<!shaka.media.SegmentReference>} */
|
|
538
|
+
const references1 = [
|
|
539
|
+
makeReference(uri(10), 10, 20),
|
|
540
|
+
makeReference(uri(20), 20, 30),
|
|
541
|
+
];
|
|
542
|
+
const index1 = new shaka.media.SegmentIndex(references1);
|
|
543
|
+
|
|
544
|
+
// 0.24 microseconds: an insignificant rounding error.
|
|
545
|
+
const tinyError = 0.24e-6;
|
|
546
|
+
|
|
547
|
+
/** @type {!Array.<!shaka.media.SegmentReference>} */
|
|
548
|
+
const references2 = [
|
|
549
|
+
makeReference(uri(10), 10, 20),
|
|
550
|
+
// The difference between this and the equivalent old reference is an
|
|
551
|
+
// insignificant rounding error.
|
|
552
|
+
makeReference(uri(20), 20 + tinyError, 30 + tinyError),
|
|
553
|
+
makeReference(uri(30), 30 + tinyError, 40),
|
|
554
|
+
];
|
|
555
|
+
|
|
556
|
+
index1.merge(references2);
|
|
557
|
+
expect(index1.references.length).toBe(3);
|
|
558
|
+
expect(index1.references[0]).toEqual(references1[0]);
|
|
559
|
+
// The new references replaced the old one.
|
|
560
|
+
expect(index1.references[1]).toEqual(references2[1]);
|
|
561
|
+
expect(index1.references[2]).toEqual(references2[2]);
|
|
562
|
+
});
|
|
535
563
|
});
|
|
536
564
|
|
|
537
565
|
describe('evict', () => {
|
|
@@ -72,6 +72,33 @@ describe('Player', () => {
|
|
|
72
72
|
});
|
|
73
73
|
}); // describe('attach')
|
|
74
74
|
|
|
75
|
+
describe('destroy', () => {
|
|
76
|
+
// Regression test for:
|
|
77
|
+
// https://github.com/shaka-project/shaka-player/issues/4850
|
|
78
|
+
it('does not leave any lingering timers', async () => {
|
|
79
|
+
shaka.util.Timer.activeTimers.clear();
|
|
80
|
+
|
|
81
|
+
// Unlike the other tests in this file, this uses an uncompiled build of
|
|
82
|
+
// Shaka, so that we don't need to expose shaka.util.Timer.activeTimers.
|
|
83
|
+
player = new shaka.Player(video);
|
|
84
|
+
waiter.setPlayer(player);
|
|
85
|
+
|
|
86
|
+
// Play the video for a little while.
|
|
87
|
+
await player.load('test:sintel');
|
|
88
|
+
video.play();
|
|
89
|
+
await waiter.waitUntilPlayheadReachesOrFailOnTimeout(video, 1, 10);
|
|
90
|
+
|
|
91
|
+
// Destroy the player.
|
|
92
|
+
await player.destroy();
|
|
93
|
+
|
|
94
|
+
// Are there any timers left?
|
|
95
|
+
for (const timer of shaka.util.Timer.activeTimers.keys()) {
|
|
96
|
+
const stackTrace = shaka.util.Timer.activeTimers.get(timer);
|
|
97
|
+
fail('Lingering timer exists! Stack trace of creation: ' + stackTrace);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
|
|
75
102
|
describe('updateStartTime() in manifestparsed event handler', () => {
|
|
76
103
|
it('does not get segments prior to startTime', async () => {
|
|
77
104
|
player.addEventListener('manifestparsed', () => {
|
package/test/player_unit.js
CHANGED
|
@@ -3390,7 +3390,9 @@ describe('Player', () => {
|
|
|
3390
3390
|
variant.addAudio(0, (stream) => {
|
|
3391
3391
|
stream.channelsCount = 6;
|
|
3392
3392
|
stream.audioSamplingRate = 48000;
|
|
3393
|
-
|
|
3393
|
+
// ac-3 is rewritten as ec-3 on Tizen, so for the stability of this
|
|
3394
|
+
// test case, use ec-3.
|
|
3395
|
+
stream.codecs = 'ec-3';
|
|
3394
3396
|
});
|
|
3395
3397
|
});
|
|
3396
3398
|
|
|
@@ -3415,7 +3417,7 @@ describe('Player', () => {
|
|
|
3415
3417
|
expect(abrManager.variants.length).toBe(1);
|
|
3416
3418
|
// It should be the 6-channel variant, based on our preference.
|
|
3417
3419
|
expect(abrManager.variants[0].audio.channelsCount).toBe(6);
|
|
3418
|
-
expect(abrManager.variants[0].audio.codecs).toBe('
|
|
3420
|
+
expect(abrManager.variants[0].audio.codecs).toBe('ec-3');
|
|
3419
3421
|
});
|
|
3420
3422
|
});
|
|
3421
3423
|
|
|
@@ -537,4 +537,74 @@ describe('UITextDisplayer', () => {
|
|
|
537
537
|
'.shaka-text-region');
|
|
538
538
|
expect(allRegionElements.length).toBe(1);
|
|
539
539
|
});
|
|
540
|
+
|
|
541
|
+
it('creates separate regions when dimensions differ but id same', () => {
|
|
542
|
+
const identicalRegionId = 'regionId';
|
|
543
|
+
|
|
544
|
+
const cueRegion1 = new shaka.text.CueRegion();
|
|
545
|
+
const cueRegion2 = new shaka.text.CueRegion();
|
|
546
|
+
cueRegion1.id = identicalRegionId;
|
|
547
|
+
cueRegion2.id = identicalRegionId;
|
|
548
|
+
|
|
549
|
+
cueRegion1.height = 80;
|
|
550
|
+
cueRegion1.heightUnits = shaka.text.CueRegion.units.PERCENTAGE;
|
|
551
|
+
cueRegion1.width = 80;
|
|
552
|
+
cueRegion1.widthUnits = shaka.text.CueRegion.units.PERCENTAGE;
|
|
553
|
+
|
|
554
|
+
cueRegion2.height = 160; // the only difference!
|
|
555
|
+
cueRegion2.heightUnits = shaka.text.CueRegion.units.PERCENTAGE;
|
|
556
|
+
cueRegion2.width = 80;
|
|
557
|
+
cueRegion2.widthUnits = shaka.text.CueRegion.units.PERCENTAGE;
|
|
558
|
+
|
|
559
|
+
cueRegion1.viewportAnchorX = 10;
|
|
560
|
+
cueRegion1.viewportAnchorY = 10;
|
|
561
|
+
cueRegion1.viewportAnchorUnits = shaka.text.CueRegion.units.PERCENTAGE;
|
|
562
|
+
|
|
563
|
+
cueRegion2.viewportAnchorX = 10;
|
|
564
|
+
cueRegion2.viewportAnchorY = 10;
|
|
565
|
+
cueRegion2.viewportAnchorUnits = shaka.text.CueRegion.units.PERCENTAGE;
|
|
566
|
+
|
|
567
|
+
// These all attach to the same region, but only one region element should
|
|
568
|
+
// be created.
|
|
569
|
+
const firstBatchOfCues = [
|
|
570
|
+
new shaka.text.Cue(0, 100, ''),
|
|
571
|
+
new shaka.text.Cue(0, 100, ''),
|
|
572
|
+
new shaka.text.Cue(0, 100, ''),
|
|
573
|
+
];
|
|
574
|
+
for (const cue of firstBatchOfCues) {
|
|
575
|
+
cue.displayAlign = shaka.text.Cue.displayAlign.CENTER;
|
|
576
|
+
cue.region = cueRegion1;
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
// Another batch for the other region
|
|
580
|
+
const secondBatchOfCues = [
|
|
581
|
+
new shaka.text.Cue(0, 100, ''),
|
|
582
|
+
new shaka.text.Cue(0, 100, ''),
|
|
583
|
+
new shaka.text.Cue(0, 100, ''),
|
|
584
|
+
];
|
|
585
|
+
for (const cue of secondBatchOfCues) {
|
|
586
|
+
cue.displayAlign = shaka.text.Cue.displayAlign.CENTER;
|
|
587
|
+
cue.region = cueRegion2;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
textDisplayer.setTextVisibility(true);
|
|
591
|
+
textDisplayer.append(firstBatchOfCues);
|
|
592
|
+
textDisplayer.append(secondBatchOfCues);
|
|
593
|
+
updateCaptions();
|
|
594
|
+
|
|
595
|
+
const textContainer = videoContainer.querySelector('.shaka-text-container');
|
|
596
|
+
const allRegionElements = textContainer.querySelectorAll(
|
|
597
|
+
'.shaka-text-region');
|
|
598
|
+
|
|
599
|
+
// Verify that the nested cues are attached to respective region element.
|
|
600
|
+
expect(allRegionElements.length).toBe(2);
|
|
601
|
+
|
|
602
|
+
const childrenOfOne = Array.from(allRegionElements[0].childNodes).filter(
|
|
603
|
+
(e) => e.nodeType == Node.ELEMENT_NODE);
|
|
604
|
+
expect(childrenOfOne.length).toBe(3);
|
|
605
|
+
|
|
606
|
+
const childrenOfTwo = Array.from(allRegionElements[1].childNodes).filter(
|
|
607
|
+
(e) => e.nodeType == Node.ELEMENT_NODE);
|
|
608
|
+
expect(childrenOfTwo.length).toBe(3);
|
|
609
|
+
});
|
|
540
610
|
});
|