1
0
Fork 0
mirror of https://github.com/DanielnetoDotCom/YouPHPTube synced 2025-10-03 09:49:28 +02:00

Libs updates and new version with option to pin videos on channel

This commit is contained in:
Daniel Neto 2024-08-05 11:37:04 -03:00
parent e1f2188de0
commit 1beab3b1c0
8565 changed files with 149805 additions and 165674 deletions

View file

@ -242,7 +242,7 @@ QUnit.test('parses #EXTM3U tags', function(assert) {
// #EXTINF
QUnit.test('parses minimal #EXTINF tags', function(assert) {
const manifest = '#EXTINF\n';
const manifest = '#EXTINF:\n';
let element;
this.parseStream.on('data', function(elem) {
@ -319,7 +319,7 @@ QUnit.test('parses #EXTINF tags with carriage returns', function(assert) {
// #EXT-X-TARGETDURATION
QUnit.test('parses minimal #EXT-X-TARGETDURATION tags', function(assert) {
const manifest = '#EXT-X-TARGETDURATION\n';
const manifest = '#EXT-X-TARGETDURATION:\n';
let element;
this.parseStream.on('data', function(elem) {
@ -379,7 +379,7 @@ QUnit.test('parses #EXT-X-VERSION with a version', function(assert) {
// #EXT-X-MEDIA-SEQUENCE
QUnit.test('parses minimal #EXT-X-MEDIA-SEQUENCE tags', function(assert) {
const manifest = '#EXT-X-MEDIA-SEQUENCE\n';
const manifest = '#EXT-X-MEDIA-SEQUENCE:\n';
let element;
this.parseStream.on('data', function(elem) {
@ -453,7 +453,7 @@ QUnit.test('parses #EXT-X-PLAYLIST-TYPE with mutability info', function(assert)
// #EXT-X-BYTERANGE
QUnit.test('parses minimal #EXT-X-BYTERANGE tags', function(assert) {
const manifest = '#EXT-X-BYTERANGE\n';
const manifest = '#EXT-X-BYTERANGE:\n';
let element;
this.parseStream.on('data', function(elem) {
@ -589,7 +589,7 @@ QUnit.test('parses #EXT-X-MAP tags with arbitrary attributes', function(assert)
});
// #EXT-X-STREAM-INF
QUnit.test('parses minimal #EXT-X-STREAM-INF tags', function(assert) {
const manifest = '#EXT-X-STREAM-INF\n';
const manifest = '#EXT-X-STREAM-INF:\n';
let element;
this.parseStream.on('data', function(elem) {
@ -604,7 +604,7 @@ QUnit.test('parses minimal #EXT-X-STREAM-INF tags', function(assert) {
});
// #EXT-X-PROGRAM-DATE-TIME
QUnit.test('parses minimal EXT-X-PROGRAM-DATE-TIME tags', function(assert) {
const manifest = '#EXT-X-PROGRAM-DATE-TIME\n';
const manifest = '#EXT-X-PROGRAM-DATE-TIME:\n';
let element;
this.parseStream.on('data', function(elem) {
@ -698,6 +698,14 @@ QUnit.test('parses #EXT-X-STREAM-INF with common attributes', function(assert) {
'avc1.4d400d, mp4a.40.2',
'codecs are parsed'
);
manifest = '#EXT-X-STREAM-INF:PATHWAY-ID="CDN-A"\n';
this.lineStream.push(manifest);
assert.ok(element, 'an event was triggered');
assert.strictEqual(element.type, 'tag', 'the line type is tag');
assert.strictEqual(element.tagType, 'stream-inf', 'the tag type is stream-inf');
assert.strictEqual(element.attributes['PATHWAY-ID'], 'CDN-A', 'pathway-id is parsed');
});
QUnit.test('parses #EXT-X-STREAM-INF with arbitrary attributes', function(assert) {
const manifest = '#EXT-X-STREAM-INF:NUMERIC=24,ALPHA=Value,MIXED=123abc\n';
@ -809,16 +817,6 @@ QUnit.test('parses lightly-broken #EXT-X-KEY tags', function(assert) {
'parsed a single-quoted uri'
);
element = null;
manifest = '#EXT-X-KEYURI="https://example.com/key",METHOD=AES-128\n';
this.lineStream.push(manifest);
assert.strictEqual(element.tagType, 'key', 'parsed the tag type');
assert.strictEqual(
element.attributes.URI,
'https://example.com/key',
'inferred a colon after the tag type'
);
element = null;
manifest = '#EXT-X-KEY: URI = "https://example.com/key",METHOD=AES-128\n';
this.lineStream.push(manifest);
@ -889,6 +887,104 @@ QUnit.test('parses EXT-X-START PRECISE attribute', function(assert) {
assert.strictEqual(element.attributes['TIME-OFFSET'], 1.4, 'parses time offset');
assert.strictEqual(element.attributes.PRECISE, true, 'parses precise attribute');
});
// #EXT-X-DATERANGE:
QUnit.test('parses minimal EXT-X-DATERANGE tag', function(assert) {
const manifest = '#EXT-X-DATERANGE:ID="12345",START-DATE="2023-04-13T15:15:15.840000Z"\n';
let element;
this.parseStream.on('data', function(elem) {
element = elem;
});
this.lineStream.push(manifest);
assert.ok(element, 'an event was triggered');
assert.strictEqual(element.type, 'tag', 'the line type is tag');
assert.strictEqual(element.tagType, 'daterange', 'the tag type is daterange');
assert.strictEqual(element.attributes.ID, '12345');
assert.deepEqual(element.attributes['START-DATE'], new Date('2023-04-13T15:15:15.840000Z'));
});
QUnit.test('parses DURATION and PLANNED-DURATION attributes in EXT-X-DATERANGE tag', function(assert) {
const manifest = '#EXT-X-DATERANGE:ID="54545",START-DATE="2023-04-23T18:17:16.54000Z",PLANNED-DURATION="38.4",DURATION="15.5"\n';
let element;
this.parseStream.on('data', function(elem) {
element = elem;
});
this.lineStream.push(manifest);
assert.ok(element, 'an event was triggered');
assert.strictEqual(element.type, 'tag', 'the line type is tag');
assert.strictEqual(element.tagType, 'daterange', 'the tag type is daterange');
assert.strictEqual(element.attributes.ID, '54545');
assert.deepEqual(element.attributes['START-DATE'], new Date('2023-04-23T18:17:16.540000Z'));
assert.strictEqual(element.attributes.DURATION, 15.5);
assert.strictEqual(element.attributes['PLANNED-DURATION'], 38.4);
});
QUnit.test('parses SCTE35-CMD, SCTE35-OUT, SCTE35-IN EXT-X-DATERANGE tags', function(assert) {
let manifest = '#EXT-X-DATERANGE:ID="splice-6FFFFFF0",START-DATE="2023-04-13T15:15:15.840000Z",SCTE35-OUT="0xFC002F0000000000FF000014056FFFFFFF0"\n';
let element;
this.parseStream.on('data', function(elem) {
element = elem;
});
this.lineStream.push(manifest);
assert.ok(element, 'an event was triggered');
assert.strictEqual(element.attributes['SCTE35-OUT'], '0xFC002F0000000000FF000014056FFFFFFF0');
manifest = '#EXT-X-DATERANGE:ID="12345",START-DATE="2023-04-13T15:15:15.840000Z",SCTE35-IN="0xFC0000425100FFF0140500000300000000E77FEFFE0011FB9EFE0029004D1932E0000100101002A22"\n';
this.lineStream.push(manifest);
assert.ok(element, 'an event was triggered');
assert.strictEqual(element.attributes['SCTE35-IN'], '0xFC0000425100FFF0140500000300000000E77FEFFE0011FB9EFE0029004D1932E0000100101002A22');
manifest = '#EXT-X-DATERANGE:ID="12345",START-DATE="2023-04-13T15:15:15.840000Z",SCTE35-CMD="0xFC0000425100FFF014"\n';
this.lineStream.push(manifest);
assert.ok(element, 'an event was triggered');
assert.strictEqual(element.attributes['SCTE35-CMD'], '0xFC0000425100FFF014');
});
QUnit.test('custom attributes in EXT-X-DATERANGE are parsed', function(assert) {
let manifest = '#EXT-X-DATERANGE:ID="12345",START-DATE="2023-04-13T15:15:15.840000Z",X-CUSTOM-KEY="value"\n';
let element;
this.parseStream.on('data', function(elem) {
element = elem;
});
this.lineStream.push(manifest);
assert.ok(element, 'an event was triggered');
assert.strictEqual(element.attributes['X-CUSTOM-KEY'], 'value');
manifest = '#EXT-X-DATERANGE:ID="12345",START-DATE="2023-04-13T15:15:15.840000Z",X-CUSTOM-KEY="17.8"\n';
this.lineStream.push(manifest);
assert.ok(element, 'an event was triggered');
assert.strictEqual(element.attributes['X-CUSTOM-KEY'], 17.8);
manifest = '#EXT-X-DATERANGE:ID="12345",START-DATE="2023-04-13T15:15:15.840000Z",X-CUSTOM-KEY="0X12345abcde"\n';
this.lineStream.push(manifest);
assert.ok(element, 'an event was triggered');
assert.strictEqual(element.attributes['X-CUSTOM-KEY'], '0X12345abcde');
});
QUnit.test('parses EXT-X-INDEPENDENT-SEGMENTS', function(assert) {
const manifest = '#EXT-X-INDEPENDENT-SEGMENTS\n';
let element;
this.parseStream.on('data', function(elem) {
element = elem;
});
this.lineStream.push(manifest);
assert.ok(element, 'an event was triggered');
assert.strictEqual(element.type, 'tag', 'the line type is tag');
assert.strictEqual(element.tagType, 'independent-segments', 'the tag type is independent-segments');
});
QUnit.test('ignores empty lines', function(assert) {
const manifest = '\n';