Files
googlevideo/src/utils/helpers.ts
2024-09-13 13:52:28 -03:00

65 lines
1.9 KiB
TypeScript

export enum PART {
ONESIE_HEADER = 10,
ONESIE_DATA = 11,
MEDIA_HEADER = 20,
MEDIA = 21,
MEDIA_END = 22,
LIVE_METADATA = 31,
HOSTNAME_CHANGE_HINT = 32,
LIVE_METADATA_PROMISE = 33,
LIVE_METADATA_PROMISE_CANCELLATION = 34,
NEXT_REQUEST_POLICY = 35,
USTREAMER_VIDEO_AND_FORMAT_DATA = 36,
FORMAT_SELECTION_CONFIG = 37,
USTREAMER_SELECTED_MEDIA_STREAM = 38,
FORMAT_INITIALIZATION_METADATA = 42,
SABR_REDIRECT = 43,
SABR_ERROR = 44,
SABR_SEEK = 45,
RELOAD_PLAYER_RESPONSE = 46,
PLAYBACK_START_POLICY = 47,
ALLOWED_CACHED_FORMATS = 48,
START_BW_SAMPLING_HINT = 49,
PAUSE_BW_SAMPLING_HINT = 50,
SELECTABLE_FORMATS = 51,
REQUEST_IDENTIFIER = 52,
REQUEST_CANCELLATION_POLICY = 53,
ONESIE_PREFETCH_REJECTION = 54,
TIMELINE_CONTEXT = 55,
REQUEST_PIPELINING = 56,
SABR_CONTEXT_UPDATE = 57,
STREAM_PROTECTION_STATUS = 58,
SABR_CONTEXT_SENDING_POLICY = 59,
LAWNMOWER_POLICY = 60,
SABR_ACK = 61,
END_OF_TRACK = 62,
CACHE_LOAD_POLICY = 63,
LAWNMOWER_MESSAGING_POLICY = 64,
PREWARM_CONNECTION = 65
}
export { MediaInfo_MediaType as MediaType } from '../../protos/generated/video_streaming/video_playback_abr_request.js';
export function u8ToBase64(u8: Uint8Array): string {
return btoa(String.fromCharCode.apply(null, Array.from(u8)));
}
export function base64ToU8(base64: string): Uint8Array {
const standard_base64 = base64.replace(/-/g, '+').replace(/_/g, '/');
const padded_base64 = standard_base64.padEnd(standard_base64.length + (4 - standard_base64.length % 4) % 4, '=');
return new Uint8Array(atob(padded_base64).split('').map((char) => char.charCodeAt(0)));
}
// See https://github.com/nodejs/node/issues/40678#issuecomment-1126944677
export class CustomEvent extends Event {
#detail;
constructor(type: string, options?: CustomEventInit<any[]>) {
super(type, options);
this.#detail = options?.detail ?? null;
}
get detail() {
return this.#detail;
}
}