mirror of
https://github.com/LuanRT/YouTube.js.git
synced 2026-06-20 04:51:16 +00:00
refactor: Remove old UMP parser (#753)
This commit is contained in:
@@ -1,60 +0,0 @@
|
||||
export interface UMPPart {
|
||||
type: number;
|
||||
size: number;
|
||||
data: Uint8Array;
|
||||
}
|
||||
|
||||
export default class UMP {
|
||||
buffer: Uint8Array;
|
||||
offset: number;
|
||||
|
||||
constructor(buffer: Uint8Array) {
|
||||
this.buffer = buffer;
|
||||
this.offset = 0;
|
||||
}
|
||||
|
||||
readVarInt(): number {
|
||||
const prefix = this.buffer[this.offset];
|
||||
const size = this.varintSize(prefix);
|
||||
let result = 0;
|
||||
let shift = 0;
|
||||
|
||||
if (size !== 5) {
|
||||
shift = 8 - size;
|
||||
const mask = (1 << shift) - 1;
|
||||
result |= prefix & mask;
|
||||
}
|
||||
|
||||
for (let i = 1; i < size; i++) {
|
||||
const byte = this.buffer[this.offset + i];
|
||||
result |= byte << shift;
|
||||
shift += 8;
|
||||
}
|
||||
|
||||
this.offset += size;
|
||||
return result;
|
||||
}
|
||||
|
||||
varintSize(byte: number): number {
|
||||
let lo = 0;
|
||||
for (let i = 7; i >= 4; i--) {
|
||||
if (byte & (1 << i)) lo++;
|
||||
else break;
|
||||
}
|
||||
return Math.min(lo + 1, 5);
|
||||
}
|
||||
|
||||
parse(): UMPPart[] {
|
||||
const parts = [];
|
||||
|
||||
while (this.offset < this.buffer.length) {
|
||||
const part_type = this.readVarInt();
|
||||
const part_size = this.readVarInt();
|
||||
const part_data = this.buffer.slice(this.offset, this.offset + part_size);
|
||||
this.offset += part_size;
|
||||
parts.push({ type: part_type, size: part_size, data: part_data });
|
||||
}
|
||||
|
||||
return parts;
|
||||
}
|
||||
}
|
||||
@@ -15,7 +15,4 @@ export * as Utils from './Utils.js';
|
||||
export { default as Log } from './Log.js';
|
||||
export * as LZW from './LZW.js';
|
||||
|
||||
export * as ProtoUtils from './ProtoUtils.js';
|
||||
|
||||
export { default as UMP } from './UMP.js';
|
||||
export * from './UMP.js';
|
||||
export * as ProtoUtils from './ProtoUtils.js';
|
||||
Reference in New Issue
Block a user