src/demux/chunk-cache.ts
- export default class ChunkCache {
- private chunks: Array<Uint8Array> = [];
- public dataLength: number = 0;
-
- push(chunk: Uint8Array) {
- this.chunks.push(chunk);
- this.dataLength += chunk.length;
- }
-
- flush(): Uint8Array {
- const { chunks, dataLength } = this;
- let result;
- if (!chunks.length) {
- return new Uint8Array(0);
- } else if (chunks.length === 1) {
- result = chunks[0];
- } else {
- result = concatUint8Arrays(chunks, dataLength);
- }
- this.reset();
- return result;
- }
-
- reset() {
- this.chunks.length = 0;
- this.dataLength = 0;
- }
- }
-
- function concatUint8Arrays(
- chunks: Array<Uint8Array>,
- dataLength: number
- ): Uint8Array {
- const result = new Uint8Array(dataLength);
- let offset = 0;
- for (let i = 0; i < chunks.length; i++) {
- const chunk = chunks[i];
- result.set(chunk, offset);
- offset += chunk.length;
- }
- return result;
- }