| 120 | |
| 121 | // Generate a box |
| 122 | static box(type) { |
| 123 | let size = 8; |
| 124 | let result = null; |
| 125 | let datas = Array.prototype.slice.call(arguments, 1); |
| 126 | let arrayCount = datas.length; |
| 127 | |
| 128 | for (let i = 0; i < arrayCount; i++) { |
| 129 | size += datas[i].byteLength; |
| 130 | } |
| 131 | |
| 132 | result = new Uint8Array(size); |
| 133 | result[0] = (size >>> 24) & 0xFF; // size |
| 134 | result[1] = (size >>> 16) & 0xFF; |
| 135 | result[2] = (size >>> 8) & 0xFF; |
| 136 | result[3] = (size) & 0xFF; |
| 137 | |
| 138 | result.set(type, 4); // type |
| 139 | |
| 140 | let offset = 8; |
| 141 | for (let i = 0; i < arrayCount; i++) { // data body |
| 142 | result.set(datas[i], offset); |
| 143 | offset += datas[i].byteLength; |
| 144 | } |
| 145 | |
| 146 | return result; |
| 147 | } |
| 148 | |
| 149 | // emit ftyp & moov |
| 150 | static generateInitSegment(meta) { |