blob: 386e7cb31d61ea16f4d46e06fa05bfe6625a75c0 [file] [log] [blame]
var TRACK_KIND = {
AUDIO: 0,
VIDEO: 1,
TEXT: 2,
};
function stringToArray(string) {
return string.split("").map(function(c){ return c.charCodeAt(0); });
}
var SAMPLE_FLAG = {
NONE: 0,
SYNC: 1 << 0,
};
function makeASample(presentationTime, decodeTime, duration, trackID, flags) {
var byteLength = 29;
var buffer = new ArrayBuffer(byteLength);
var array = new Uint8Array(buffer);
array.set(stringToArray('smpl'));
var view = new DataView(buffer);
view.setUint32(4, byteLength, true);
var timeScale = 1000;
view.setInt32(8, timeScale, true);
view.setInt32(12, presentationTime * timeScale, true);
view.setInt32(16, decodeTime * timeScale, true);
view.setInt32(20, duration * timeScale, true);
view.setInt32(24, trackID, true);
view.setUint8(28, flags);
return buffer;
}
function concatenateSamples(samples) {
var byteLength = 0;
samples.forEach(function(sample) { byteLength += sample.byteLength; });
var buffer = new ArrayBuffer(byteLength);
var offset = 0;
samples.forEach(function(sample){
var sourceArray = new Uint8Array(sample);
var destArray = new Uint8Array(buffer, offset, sourceArray.byteLength);
destArray.set(sourceArray);
offset += sourceArray.byteLength;
});
return buffer;
}
function makeATrack(trackID, codec, flags) {
var byteLength = 17;
var buffer = new ArrayBuffer(byteLength);
var array = new Uint8Array(buffer);
array.set(stringToArray('trak'));
var view = new DataView(buffer);
view.setUint32(4, byteLength, true);
view.setInt32(8, trackID, true);
var codecArray = new Uint8Array(buffer, 12, 4);
codecArray.set(stringToArray(codec));
view.setUint8(16, flags, true);
return buffer;
}
function makeAInit(duration, tracks) {
var byteLength = 16 + (17 * tracks.length);
var buffer = new ArrayBuffer(byteLength);
var array = new Uint8Array(buffer);
array.set(stringToArray('init'));
var view = new DataView(buffer);
var timeScale = 1000;
view.setUint32(4, byteLength, true);
view.setInt32(8, duration * timeScale, true);
view.setInt32(12, timeScale, true);
var offset = 16;
tracks.forEach(function(track){
var sourceArray = new Uint8Array(track);
var destArray = new Uint8Array(buffer, offset, sourceArray.byteLength);
destArray.set(sourceArray);
offset += sourceArray.byteLength;
});
return buffer;
}
function makeAnInvalidBox() {
var byteLength = 12;
var buffer = new ArrayBuffer(byteLength);
var array = new Uint8Array(buffer);
array.set(stringToArray('invl'));
var view = new DataView(buffer);
view.setUint32(8, 0xFFFF, true);
return buffer;
}