mirror of
https://github.com/DanielnetoDotCom/YouPHPTube
synced 2025-10-05 02:39:46 +02:00
Improving the get restream credentials
This commit is contained in:
parent
654dda115a
commit
56cb1fd5cb
6058 changed files with 1166166 additions and 1430809 deletions
21632
node_modules/mux.js/test/utils/cc708-pink-underscore.js
generated
vendored
21632
node_modules/mux.js/test/utils/cc708-pink-underscore.js
generated
vendored
File diff suppressed because it is too large
Load diff
148
node_modules/mux.js/test/utils/id3-generator.js
generated
vendored
148
node_modules/mux.js/test/utils/id3-generator.js
generated
vendored
|
@ -1,74 +1,74 @@
|
|||
/**
|
||||
* Helper functions for creating ID3 metadata.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
var stringToInts, stringToCString, id3Tag, id3Frame;
|
||||
|
||||
stringToInts = function(string) {
|
||||
var result = [], i;
|
||||
for (i = 0; i < string.length; i++) {
|
||||
result[i] = string.charCodeAt(i);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
stringToCString = function(string) {
|
||||
return stringToInts(string).concat([0x00]);
|
||||
};
|
||||
|
||||
id3Tag = function() {
|
||||
var
|
||||
frames = Array.prototype.concat.apply([], Array.prototype.slice.call(arguments)),
|
||||
result = stringToInts('ID3').concat([
|
||||
0x03, 0x00, // version 3.0 of ID3v2 (aka ID3v.2.3.0)
|
||||
0x40, // flags. include an extended header
|
||||
0x00, 0x00, 0x00, 0x00, // size. set later
|
||||
|
||||
// extended header
|
||||
0x00, 0x00, 0x00, 0x06, // extended header size. no CRC
|
||||
0x00, 0x00, // extended flags
|
||||
0x00, 0x00, 0x00, 0x02 // size of padding
|
||||
], frames),
|
||||
size;
|
||||
|
||||
// size is stored as a sequence of four 7-bit integers with the
|
||||
// high bit of each byte set to zero
|
||||
size = result.length - 10;
|
||||
|
||||
result[6] = (size >>> 21) & 0x7f;
|
||||
result[7] = (size >>> 14) & 0x7f;
|
||||
result[8] = (size >>> 7) & 0x7f;
|
||||
result[9] = size & 0x7f;
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
id3Frame = function(type) {
|
||||
var result = stringToInts(type).concat([
|
||||
0x00, 0x00, 0x00, 0x00, // size
|
||||
0xe0, 0x00 // flags. tag/file alter preservation, read-only
|
||||
]),
|
||||
size = result.length - 10;
|
||||
|
||||
// append the fields of the ID3 frame
|
||||
result = result.concat.apply(result, Array.prototype.slice.call(arguments, 1));
|
||||
|
||||
// set the size
|
||||
size = result.length - 10;
|
||||
|
||||
result[4] = (size >>> 21) & 0x7f;
|
||||
result[5] = (size >>> 14) & 0x7f;
|
||||
result[6] = (size >>> 7) & 0x7f;
|
||||
result[7] = size & 0x7f;
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
stringToInts: stringToInts,
|
||||
stringToCString: stringToCString,
|
||||
id3Tag: id3Tag,
|
||||
id3Frame: id3Frame
|
||||
};
|
||||
/**
|
||||
* Helper functions for creating ID3 metadata.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
var stringToInts, stringToCString, id3Tag, id3Frame;
|
||||
|
||||
stringToInts = function(string) {
|
||||
var result = [], i;
|
||||
for (i = 0; i < string.length; i++) {
|
||||
result[i] = string.charCodeAt(i);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
stringToCString = function(string) {
|
||||
return stringToInts(string).concat([0x00]);
|
||||
};
|
||||
|
||||
id3Tag = function() {
|
||||
var
|
||||
frames = Array.prototype.concat.apply([], Array.prototype.slice.call(arguments)),
|
||||
result = stringToInts('ID3').concat([
|
||||
0x03, 0x00, // version 3.0 of ID3v2 (aka ID3v.2.3.0)
|
||||
0x40, // flags. include an extended header
|
||||
0x00, 0x00, 0x00, 0x00, // size. set later
|
||||
|
||||
// extended header
|
||||
0x00, 0x00, 0x00, 0x06, // extended header size. no CRC
|
||||
0x00, 0x00, // extended flags
|
||||
0x00, 0x00, 0x00, 0x02 // size of padding
|
||||
], frames),
|
||||
size;
|
||||
|
||||
// size is stored as a sequence of four 7-bit integers with the
|
||||
// high bit of each byte set to zero
|
||||
size = result.length - 10;
|
||||
|
||||
result[6] = (size >>> 21) & 0x7f;
|
||||
result[7] = (size >>> 14) & 0x7f;
|
||||
result[8] = (size >>> 7) & 0x7f;
|
||||
result[9] = size & 0x7f;
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
id3Frame = function(type) {
|
||||
var result = stringToInts(type).concat([
|
||||
0x00, 0x00, 0x00, 0x00, // size
|
||||
0xe0, 0x00 // flags. tag/file alter preservation, read-only
|
||||
]),
|
||||
size = result.length - 10;
|
||||
|
||||
// append the fields of the ID3 frame
|
||||
result = result.concat.apply(result, Array.prototype.slice.call(arguments, 1));
|
||||
|
||||
// set the size
|
||||
size = result.length - 10;
|
||||
|
||||
result[4] = (size >>> 21) & 0x7f;
|
||||
result[5] = (size >>> 14) & 0x7f;
|
||||
result[6] = (size >>> 7) & 0x7f;
|
||||
result[7] = size & 0x7f;
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
stringToInts: stringToInts,
|
||||
stringToCString: stringToCString,
|
||||
id3Tag: id3Tag,
|
||||
id3Frame: id3Frame
|
||||
};
|
||||
|
|
1992
node_modules/mux.js/test/utils/mixed-608-708-captions.js
generated
vendored
1992
node_modules/mux.js/test/utils/mixed-608-708-captions.js
generated
vendored
File diff suppressed because it is too large
Load diff
634
node_modules/mux.js/test/utils/mp4-helpers.js
generated
vendored
634
node_modules/mux.js/test/utils/mp4-helpers.js
generated
vendored
|
@ -1,315 +1,319 @@
|
|||
/**
|
||||
* Helper functions for creating test MP4 data.
|
||||
*/
|
||||
'use strict';
|
||||
var box, typeBytes, unityMatrix;
|
||||
|
||||
module.exports = {};
|
||||
|
||||
// ----------------------
|
||||
// Box Generation Helpers
|
||||
// ----------------------
|
||||
|
||||
module.exports.typeBytes = typeBytes = function(type) {
|
||||
return [
|
||||
type.charCodeAt(0),
|
||||
type.charCodeAt(1),
|
||||
type.charCodeAt(2),
|
||||
type.charCodeAt(3)
|
||||
];
|
||||
};
|
||||
|
||||
module.exports.box = box = function(type) {
|
||||
var
|
||||
array = Array.prototype.slice.call(arguments, 1),
|
||||
result = [],
|
||||
size,
|
||||
i;
|
||||
|
||||
// "unwrap" any arrays that were passed as arguments
|
||||
// e.g. box('etc', 1, [2, 3], 4) -> box('etc', 1, 2, 3, 4)
|
||||
for (i = 0; i < array.length; i++) {
|
||||
if (array[i] instanceof Array) {
|
||||
array.splice.apply(array, [i, 1].concat(array[i]));
|
||||
}
|
||||
}
|
||||
|
||||
size = 8 + array.length;
|
||||
|
||||
result[0] = (size & 0xFF000000) >> 24;
|
||||
result[1] = (size & 0x00FF0000) >> 16;
|
||||
result[2] = (size & 0x0000FF00) >> 8;
|
||||
result[3] = size & 0xFF;
|
||||
result = result.concat(typeBytes(type));
|
||||
result = result.concat(array);
|
||||
return result;
|
||||
};
|
||||
|
||||
module.exports.unityMatrix = unityMatrix = [
|
||||
0, 0, 0x10, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0x10, 0,
|
||||
0, 0, 0, 0,
|
||||
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0x40, 0, 0, 0
|
||||
];
|
||||
|
||||
// ------------
|
||||
// Example Data
|
||||
// ------------
|
||||
|
||||
module.exports.sampleMoov =
|
||||
box('moov',
|
||||
box('mvhd',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, // creation_time
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x02, // modification_time
|
||||
0x00, 0x00, 0x03, 0xe8, // timescale = 1000
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x02, 0x58, // 600 = 0x258 duration
|
||||
0x00, 0x01, 0x00, 0x00, // 1.0 rate
|
||||
0x01, 0x00, // 1.0 volume
|
||||
0x00, 0x00, // reserved
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
unityMatrix,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, // pre_defined
|
||||
0x00, 0x00, 0x00, 0x02), // next_track_ID
|
||||
box('trak',
|
||||
box('tkhd',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x02, // creation_time
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x03, // modification_time
|
||||
0x00, 0x00, 0x00, 0x01, // track_ID
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x02, 0x58, // 600 = 0x258 duration
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, // layer
|
||||
0x00, 0x00, // alternate_group
|
||||
0x00, 0x00, // non-audio track volume
|
||||
0x00, 0x00, // reserved
|
||||
unityMatrix,
|
||||
0x01, 0x2c, 0x00, 0x00, // 300 in 16.16 fixed-point
|
||||
0x00, 0x96, 0x00, 0x00), // 150 in 16.16 fixed-point
|
||||
box('edts',
|
||||
box('elst',
|
||||
0x00, // version
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x00, // segment_duration
|
||||
0x00, 0x00, 0x04, 0x00, // media_time
|
||||
0x00, 0x01, 0x80, 0x00)), // media_rate
|
||||
box('mdia',
|
||||
box('mdhd',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x02, // creation_time
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x03, // modification_time
|
||||
0x00, 0x01, 0x5f, 0x90, // timescale = 90000
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x02, 0x58, // 600 = 0x258 duration
|
||||
0x15, 0xc7, // 'eng' language
|
||||
0x00, 0x00),
|
||||
box('hdlr',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00, // pre_defined
|
||||
typeBytes('vide'), // handler_type
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
typeBytes('one'), 0x00), // name
|
||||
box('minf',
|
||||
box('dinf',
|
||||
box('dref',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
box('url ',
|
||||
0x00, // version
|
||||
0x00, 0x00, 0x01))), // flags
|
||||
box('stbl',
|
||||
box('stsd',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00, // entry_count
|
||||
box('avc1',
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, // box content
|
||||
typeBytes('avcC'), // codec profile type
|
||||
0x00, 0x4d, 0x40, 0x0d)), // codec parameters
|
||||
box('stts',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x01, // sample_count
|
||||
0x00, 0x00, 0x00, 0x01), // sample_delta
|
||||
box('stsc',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x02, // first_chunk
|
||||
0x00, 0x00, 0x00, 0x03, // samples_per_chunk
|
||||
0x00, 0x00, 0x00, 0x01), // sample_description_index
|
||||
box('stco',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x01), // chunk_offset
|
||||
box('stss',
|
||||
0x00, // version 0
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x01), // sync_sample
|
||||
box('ctts',
|
||||
0x00, // version 0
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x01, // sample_count
|
||||
0x00, 0x00, 0x00, 0x01))))), // sample_offset
|
||||
box('trak',
|
||||
box('tkhd',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x02, // creation_time
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x03, // modification_time
|
||||
0x00, 0x00, 0x00, 0x02, // track_ID
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x02, 0x58, // 600 = 0x258 duration
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, // layer
|
||||
0x00, 0x00, // alternate_group
|
||||
0x00, 0x00, // non-audio track volume
|
||||
0x00, 0x00, // reserved
|
||||
unityMatrix,
|
||||
0x01, 0x2c, 0x00, 0x00, // 300 in 16.16 fixed-point
|
||||
0x00, 0x96, 0x00, 0x00), // 150 in 16.16 fixed-point
|
||||
box('edts',
|
||||
box('elst',
|
||||
0x01, // version
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // segment_duration
|
||||
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // media_time
|
||||
0x00, 0x01, 0x80, 0x00)), // media_rate
|
||||
box('mdia',
|
||||
box('mdhd',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x02, // creation_time
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x03, // modification_time
|
||||
0x00, 0x01, 0x5f, 0x90, // timescale = 90000
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x02, 0x58, // 600 = 0x258 duration
|
||||
0x15, 0xc7, // 'eng' language
|
||||
0x00, 0x00),
|
||||
box('hdlr',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00, // pre_defined
|
||||
typeBytes('soun'), // handler_type
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
typeBytes('one'), 0x00), // name
|
||||
box('minf',
|
||||
box('dinf',
|
||||
box('dref',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
box('url ',
|
||||
0x00, // version
|
||||
0x00, 0x00, 0x01))), // flags
|
||||
box('stbl',
|
||||
box('stsd',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00, // entry_count
|
||||
box('mp4a',
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
typeBytes('esds'), // codec profile type
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, // box content
|
||||
0x40, 0x0a, // codec params
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00)), // codec params
|
||||
box('stts',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x01, // sample_count
|
||||
0x00, 0x00, 0x00, 0x01), // sample_delta
|
||||
box('stsc',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x02, // first_chunk
|
||||
0x00, 0x00, 0x00, 0x03, // samples_per_chunk
|
||||
0x00, 0x00, 0x00, 0x01), // sample_description_index
|
||||
box('ctts',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x01, // sample_count
|
||||
0xff, 0xff, 0xff, 0xff), // sample_offset
|
||||
box('stco',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x01)))))); // chunk_offset
|
||||
/**
|
||||
* Helper functions for creating test MP4 data.
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
// ----------------------
|
||||
// Box Generation Helpers
|
||||
// ----------------------
|
||||
|
||||
var typeBytes = function(type) {
|
||||
return [
|
||||
type.charCodeAt(0),
|
||||
type.charCodeAt(1),
|
||||
type.charCodeAt(2),
|
||||
type.charCodeAt(3)
|
||||
];
|
||||
};
|
||||
|
||||
var box = function(type) {
|
||||
var
|
||||
array = Array.prototype.slice.call(arguments, 1),
|
||||
result = [],
|
||||
size,
|
||||
i;
|
||||
|
||||
// "unwrap" any arrays that were passed as arguments
|
||||
// e.g. box('etc', 1, [2, 3], 4) -> box('etc', 1, 2, 3, 4)
|
||||
for (i = 0; i < array.length; i++) {
|
||||
if (array[i] instanceof Array) {
|
||||
array.splice.apply(array, [i, 1].concat(array[i]));
|
||||
}
|
||||
}
|
||||
|
||||
size = 8 + array.length;
|
||||
|
||||
result[0] = (size & 0xFF000000) >> 24;
|
||||
result[1] = (size & 0x00FF0000) >> 16;
|
||||
result[2] = (size & 0x0000FF00) >> 8;
|
||||
result[3] = size & 0xFF;
|
||||
result = result.concat(typeBytes(type));
|
||||
result = result.concat(array);
|
||||
return result;
|
||||
};
|
||||
|
||||
var unityMatrix = unityMatrix = [
|
||||
0, 0, 0x10, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0x10, 0,
|
||||
0, 0, 0, 0,
|
||||
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0x40, 0, 0, 0
|
||||
];
|
||||
|
||||
// ------------
|
||||
// Example Data
|
||||
// ------------
|
||||
|
||||
var sampleMoov =
|
||||
box('moov',
|
||||
box('mvhd',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, // creation_time
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x02, // modification_time
|
||||
0x00, 0x00, 0x03, 0xe8, // timescale = 1000
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x02, 0x58, // 600 = 0x258 duration
|
||||
0x00, 0x01, 0x00, 0x00, // 1.0 rate
|
||||
0x01, 0x00, // 1.0 volume
|
||||
0x00, 0x00, // reserved
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
unityMatrix,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, // pre_defined
|
||||
0x00, 0x00, 0x00, 0x02), // next_track_ID
|
||||
box('trak',
|
||||
box('tkhd',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x02, // creation_time
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x03, // modification_time
|
||||
0x00, 0x00, 0x00, 0x01, // track_ID
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x02, 0x58, // 600 = 0x258 duration
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, // layer
|
||||
0x00, 0x00, // alternate_group
|
||||
0x00, 0x00, // non-audio track volume
|
||||
0x00, 0x00, // reserved
|
||||
unityMatrix,
|
||||
0x01, 0x2c, 0x00, 0x00, // 300 in 16.16 fixed-point
|
||||
0x00, 0x96, 0x00, 0x00), // 150 in 16.16 fixed-point
|
||||
box('edts',
|
||||
box('elst',
|
||||
0x00, // version
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x00, // segment_duration
|
||||
0x00, 0x00, 0x04, 0x00, // media_time
|
||||
0x00, 0x01, 0x80, 0x00)), // media_rate
|
||||
box('mdia',
|
||||
box('mdhd',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x02, // creation_time
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x03, // modification_time
|
||||
0x00, 0x01, 0x5f, 0x90, // timescale = 90000
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x02, 0x58, // 600 = 0x258 duration
|
||||
0x15, 0xc7, // 'eng' language
|
||||
0x00, 0x00),
|
||||
box('hdlr',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00, // pre_defined
|
||||
typeBytes('vide'), // handler_type
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
typeBytes('one'), 0x00), // name
|
||||
box('minf',
|
||||
box('dinf',
|
||||
box('dref',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
box('url ',
|
||||
0x00, // version
|
||||
0x00, 0x00, 0x01))), // flags
|
||||
box('stbl',
|
||||
box('stsd',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00, // entry_count
|
||||
box('avc1',
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, // box content
|
||||
typeBytes('avcC'), // codec profile type
|
||||
0x00, 0x4d, 0x40, 0x0d)), // codec parameters
|
||||
box('stts',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x01, // sample_count
|
||||
0x00, 0x00, 0x00, 0x01), // sample_delta
|
||||
box('stsc',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x02, // first_chunk
|
||||
0x00, 0x00, 0x00, 0x03, // samples_per_chunk
|
||||
0x00, 0x00, 0x00, 0x01), // sample_description_index
|
||||
box('stco',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x01), // chunk_offset
|
||||
box('stss',
|
||||
0x00, // version 0
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x01), // sync_sample
|
||||
box('ctts',
|
||||
0x00, // version 0
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x01, // sample_count
|
||||
0x00, 0x00, 0x00, 0x01))))), // sample_offset
|
||||
box('trak',
|
||||
box('tkhd',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x02, // creation_time
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x03, // modification_time
|
||||
0x00, 0x00, 0x00, 0x02, // track_ID
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x02, 0x58, // 600 = 0x258 duration
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, // layer
|
||||
0x00, 0x00, // alternate_group
|
||||
0x00, 0x00, // non-audio track volume
|
||||
0x00, 0x00, // reserved
|
||||
unityMatrix,
|
||||
0x01, 0x2c, 0x00, 0x00, // 300 in 16.16 fixed-point
|
||||
0x00, 0x96, 0x00, 0x00), // 150 in 16.16 fixed-point
|
||||
box('edts',
|
||||
box('elst',
|
||||
0x01, // version
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // segment_duration
|
||||
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // media_time
|
||||
0x00, 0x01, 0x80, 0x00)), // media_rate
|
||||
box('mdia',
|
||||
box('mdhd',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x02, // creation_time
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x03, // modification_time
|
||||
0x00, 0x01, 0x5f, 0x90, // timescale = 90000
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x02, 0x58, // 600 = 0x258 duration
|
||||
0x15, 0xc7, // 'eng' language
|
||||
0x00, 0x00),
|
||||
box('hdlr',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00, // pre_defined
|
||||
typeBytes('soun'), // handler_type
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
0x00, 0x00, 0x00, 0x00, // reserved
|
||||
typeBytes('one'), 0x00), // name
|
||||
box('minf',
|
||||
box('dinf',
|
||||
box('dref',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
box('url ',
|
||||
0x00, // version
|
||||
0x00, 0x00, 0x01))), // flags
|
||||
box('stbl',
|
||||
box('stsd',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x00, // entry_count
|
||||
box('mp4a',
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
typeBytes('esds'), // codec profile type
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, 0x00, // box content
|
||||
0x00, 0x00, 0x00, // box content
|
||||
0x40, 0x0a, // codec params
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00)), // codec params
|
||||
box('stts',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x01, // sample_count
|
||||
0x00, 0x00, 0x00, 0x01), // sample_delta
|
||||
box('stsc',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x02, // first_chunk
|
||||
0x00, 0x00, 0x00, 0x03, // samples_per_chunk
|
||||
0x00, 0x00, 0x00, 0x01), // sample_description_index
|
||||
box('ctts',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x01, // sample_count
|
||||
0xff, 0xff, 0xff, 0xff), // sample_offset
|
||||
box('stco',
|
||||
0x01, // version 1
|
||||
0x00, 0x00, 0x00, // flags
|
||||
0x00, 0x00, 0x00, 0x01, // entry_count
|
||||
0x00, 0x00, 0x00, 0x01)))))); // chunk_offset
|
||||
|
||||
module.exports = {
|
||||
typeBytes,
|
||||
sampleMoov,
|
||||
unityMatrix,
|
||||
box
|
||||
};
|
||||
|
|
274
node_modules/mux.js/test/utils/sei-nal-unit-generator.js
generated
vendored
274
node_modules/mux.js/test/utils/sei-nal-unit-generator.js
generated
vendored
|
@ -1,137 +1,137 @@
|
|||
/**
|
||||
* Helper functions for creating 608/708 SEI NAL units
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
var box = require('./mp4-helpers').box;
|
||||
|
||||
// Create SEI nal-units from Caption packets
|
||||
var makeSeiFromCaptionPacket = function(caption) {
|
||||
return {
|
||||
pts: caption.pts,
|
||||
dts: caption.dts,
|
||||
nalUnitType: 'sei_rbsp',
|
||||
escapedRBSP: new Uint8Array([
|
||||
0x04, // payload_type === user_data_registered_itu_t_t35
|
||||
|
||||
0x0e, // payload_size
|
||||
|
||||
181, // itu_t_t35_country_code
|
||||
0x00, 0x31, // itu_t_t35_provider_code
|
||||
0x47, 0x41, 0x39, 0x34, // user_identifier, "GA94"
|
||||
0x03, // user_data_type_code, 0x03 is cc_data
|
||||
|
||||
// 110 00001
|
||||
0xc1, // process_cc_data, cc_count
|
||||
0xff, // reserved
|
||||
// 1111 1100
|
||||
(0xfc | caption.type), // cc_valid, cc_type (608, field 1)
|
||||
(caption.ccData & 0xff00) >> 8, // cc_data_1
|
||||
caption.ccData & 0xff, // cc_data_2 without parity bit set
|
||||
|
||||
0xff // marker_bits
|
||||
])
|
||||
};
|
||||
};
|
||||
|
||||
// Create SEI nal-units from Caption packets
|
||||
var makeSeiFromMultipleCaptionPackets = function(captionHash) {
|
||||
var pts = captionHash.pts,
|
||||
dts = captionHash.dts,
|
||||
captions = captionHash.captions;
|
||||
|
||||
var data = [];
|
||||
captions.forEach(function(caption) {
|
||||
data.push(0xfc | caption.type);
|
||||
data.push((caption.ccData & 0xff00) >> 8);
|
||||
data.push(caption.ccData & 0xff);
|
||||
});
|
||||
|
||||
return {
|
||||
pts: pts,
|
||||
dts: dts,
|
||||
nalUnitType: 'sei_rbsp',
|
||||
escapedRBSP: new Uint8Array([
|
||||
0x04, // payload_type === user_data_registered_itu_t_t35
|
||||
|
||||
(0x0b + (captions.length * 3)), // payload_size
|
||||
|
||||
181, // itu_t_t35_country_code
|
||||
0x00, 0x31, // itu_t_t35_provider_code
|
||||
0x47, 0x41, 0x39, 0x34, // user_identifier, "GA94"
|
||||
0x03, // user_data_type_code, 0x03 is cc_data
|
||||
|
||||
// 110 00001
|
||||
(0x6 << 5) | captions.length, // process_cc_data, cc_count
|
||||
0xff // reserved
|
||||
].concat(data).concat([0xff /* marker bits */])
|
||||
)
|
||||
};
|
||||
};
|
||||
|
||||
var makeMdatFromCaptionPackets = function(packets) {
|
||||
var mdat = ['mdat'];
|
||||
var seis = packets.map(makeSeiFromCaptionPacket);
|
||||
|
||||
seis.forEach(function(sei) {
|
||||
mdat.push(0x00);
|
||||
mdat.push(0x00);
|
||||
mdat.push(0x00);
|
||||
mdat.push(sei.escapedRBSP.length + 1); // nal length
|
||||
mdat.push(0x06); // declare nal type as SEI
|
||||
// SEI message
|
||||
for (var i = 0; i < sei.escapedRBSP.length; i++) {
|
||||
var byte = sei.escapedRBSP[i];
|
||||
|
||||
mdat.push(byte);
|
||||
}
|
||||
});
|
||||
|
||||
return box.apply(null, mdat);
|
||||
};
|
||||
|
||||
// Returns a ccData byte-pair for a two character string. That is,
|
||||
// it converts a string like 'hi' into the two-byte number that
|
||||
// would be parsed back as 'hi' when provided as ccData.
|
||||
var characters = function(text) {
|
||||
if (text.length !== 2) {
|
||||
throw new Error('ccdata must be specified two characters at a time');
|
||||
}
|
||||
return (text.charCodeAt(0) << 8) | text.charCodeAt(1);
|
||||
};
|
||||
|
||||
// Returns a ccData byte-pair including
|
||||
// Header for 708 packet
|
||||
// Header for the first service block
|
||||
// seq should increment by 1 for each byte pair mod 3 (0,1,2,0,1,2,...)
|
||||
// sizeCode is the number of byte pairs in the packet (including header)
|
||||
// serviceNum is the service number of the first service block
|
||||
// blockSize is the size of the first service block in bytes (no header)
|
||||
// If there's only one service block, the blockSize should be (sizeCode-1)*2
|
||||
var packetHeader708 = function(seq, sizeCode, serviceNum, blockSize) {
|
||||
var b1 = (seq << 6) | sizeCode;
|
||||
var b2 = (serviceNum << 5) | blockSize;
|
||||
return (b1 << 8) | b2;
|
||||
};
|
||||
|
||||
// Returns a ccData byte-pair to execute a 708 DSW command
|
||||
// Takes an array of window indicies to display
|
||||
var displayWindows708 = function(windows) {
|
||||
var cmd = 0x8900;
|
||||
|
||||
windows.forEach(function(winIdx) {
|
||||
cmd |= (0x01 << winIdx);
|
||||
});
|
||||
|
||||
return cmd;
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
makeSeiFromCaptionPacket: makeSeiFromCaptionPacket,
|
||||
makeSeiFromMultipleCaptionPackets: makeSeiFromMultipleCaptionPackets,
|
||||
makeMdatFromCaptionPackets: makeMdatFromCaptionPackets,
|
||||
characters: characters,
|
||||
packetHeader708: packetHeader708,
|
||||
displayWindows708: displayWindows708
|
||||
};
|
||||
/**
|
||||
* Helper functions for creating 608/708 SEI NAL units
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
var box = require('./mp4-helpers').box;
|
||||
|
||||
// Create SEI nal-units from Caption packets
|
||||
var makeSeiFromCaptionPacket = function(caption) {
|
||||
return {
|
||||
pts: caption.pts,
|
||||
dts: caption.dts,
|
||||
nalUnitType: 'sei_rbsp',
|
||||
escapedRBSP: new Uint8Array([
|
||||
0x04, // payload_type === user_data_registered_itu_t_t35
|
||||
|
||||
0x0e, // payload_size
|
||||
|
||||
181, // itu_t_t35_country_code
|
||||
0x00, 0x31, // itu_t_t35_provider_code
|
||||
0x47, 0x41, 0x39, 0x34, // user_identifier, "GA94"
|
||||
0x03, // user_data_type_code, 0x03 is cc_data
|
||||
|
||||
// 110 00001
|
||||
0xc1, // process_cc_data, cc_count
|
||||
0xff, // reserved
|
||||
// 1111 1100
|
||||
(0xfc | caption.type), // cc_valid, cc_type (608, field 1)
|
||||
(caption.ccData & 0xff00) >> 8, // cc_data_1
|
||||
caption.ccData & 0xff, // cc_data_2 without parity bit set
|
||||
|
||||
0xff // marker_bits
|
||||
])
|
||||
};
|
||||
};
|
||||
|
||||
// Create SEI nal-units from Caption packets
|
||||
var makeSeiFromMultipleCaptionPackets = function(captionHash) {
|
||||
var pts = captionHash.pts,
|
||||
dts = captionHash.dts,
|
||||
captions = captionHash.captions;
|
||||
|
||||
var data = [];
|
||||
captions.forEach(function(caption) {
|
||||
data.push(0xfc | caption.type);
|
||||
data.push((caption.ccData & 0xff00) >> 8);
|
||||
data.push(caption.ccData & 0xff);
|
||||
});
|
||||
|
||||
return {
|
||||
pts: pts,
|
||||
dts: dts,
|
||||
nalUnitType: 'sei_rbsp',
|
||||
escapedRBSP: new Uint8Array([
|
||||
0x04, // payload_type === user_data_registered_itu_t_t35
|
||||
|
||||
(0x0b + (captions.length * 3)), // payload_size
|
||||
|
||||
181, // itu_t_t35_country_code
|
||||
0x00, 0x31, // itu_t_t35_provider_code
|
||||
0x47, 0x41, 0x39, 0x34, // user_identifier, "GA94"
|
||||
0x03, // user_data_type_code, 0x03 is cc_data
|
||||
|
||||
// 110 00001
|
||||
(0x6 << 5) | captions.length, // process_cc_data, cc_count
|
||||
0xff // reserved
|
||||
].concat(data).concat([0xff /* marker bits */])
|
||||
)
|
||||
};
|
||||
};
|
||||
|
||||
var makeMdatFromCaptionPackets = function(packets) {
|
||||
var mdat = ['mdat'];
|
||||
var seis = packets.map(makeSeiFromCaptionPacket);
|
||||
|
||||
seis.forEach(function(sei) {
|
||||
mdat.push(0x00);
|
||||
mdat.push(0x00);
|
||||
mdat.push(0x00);
|
||||
mdat.push(sei.escapedRBSP.length + 1); // nal length
|
||||
mdat.push(0x06); // declare nal type as SEI
|
||||
// SEI message
|
||||
for (var i = 0; i < sei.escapedRBSP.length; i++) {
|
||||
var byte = sei.escapedRBSP[i];
|
||||
|
||||
mdat.push(byte);
|
||||
}
|
||||
});
|
||||
|
||||
return box.apply(null, mdat);
|
||||
};
|
||||
|
||||
// Returns a ccData byte-pair for a two character string. That is,
|
||||
// it converts a string like 'hi' into the two-byte number that
|
||||
// would be parsed back as 'hi' when provided as ccData.
|
||||
var characters = function(text) {
|
||||
if (text.length !== 2) {
|
||||
throw new Error('ccdata must be specified two characters at a time');
|
||||
}
|
||||
return (text.charCodeAt(0) << 8) | text.charCodeAt(1);
|
||||
};
|
||||
|
||||
// Returns a ccData byte-pair including
|
||||
// Header for 708 packet
|
||||
// Header for the first service block
|
||||
// seq should increment by 1 for each byte pair mod 3 (0,1,2,0,1,2,...)
|
||||
// sizeCode is the number of byte pairs in the packet (including header)
|
||||
// serviceNum is the service number of the first service block
|
||||
// blockSize is the size of the first service block in bytes (no header)
|
||||
// If there's only one service block, the blockSize should be (sizeCode-1)*2
|
||||
var packetHeader708 = function(seq, sizeCode, serviceNum, blockSize) {
|
||||
var b1 = (seq << 6) | sizeCode;
|
||||
var b2 = (serviceNum << 5) | blockSize;
|
||||
return (b1 << 8) | b2;
|
||||
};
|
||||
|
||||
// Returns a ccData byte-pair to execute a 708 DSW command
|
||||
// Takes an array of window indicies to display
|
||||
var displayWindows708 = function(windows) {
|
||||
var cmd = 0x8900;
|
||||
|
||||
windows.forEach(function(winIdx) {
|
||||
cmd |= (0x01 << winIdx);
|
||||
});
|
||||
|
||||
return cmd;
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
makeSeiFromCaptionPacket: makeSeiFromCaptionPacket,
|
||||
makeSeiFromMultipleCaptionPackets: makeSeiFromMultipleCaptionPackets,
|
||||
makeMdatFromCaptionPackets: makeMdatFromCaptionPackets,
|
||||
characters: characters,
|
||||
packetHeader708: packetHeader708,
|
||||
displayWindows708: displayWindows708
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue