diff --git a/README.md b/README.md index 39fa414..53ae149 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,64 @@ # What Is This? -A set of utilities for working with googlevideo APIs. WIP! \ No newline at end of file +This is a collection of utilities for working with Google Video APIs, with a primary focus on UMP. + +* [Video Streaming Protos](./protos/video_streaming/) +* [UMP (Parser)](./src/core/UMP.ts) +* [ServerAbrStream (SABR Client)](./src/core/ServerAbrStream.ts) +* [ChunkedDataBuffer (Buffer Manager)](./src/core/ChunkedDataBuffer.ts) + +You can find usage examples [here](./examples/). + +## Installation + +```bash +npm install github:LuanRT/googlevideo +``` + +## Basic Usage + +```typescript +import GoogleVideo, { PART, Protos } from 'googlevideo'; + +const streamingUrl = 'https://abcd--a.googlevideo.com/videoplayback?...'; + +const response = await fetch(streamingUrl, { method: 'POST' }); + +const arrayBuffer = await response.arrayBuffer(); + +const dataBuffer = new GoogleVideo.ChunkedDataBuffer(); +dataBuffer.append(new Uint8Array(arrayBuffer)); + +const googUmp = new GoogleVideo.UMP(dataBuffer); + +googUmp.parse((part) => { + switch (part.type) { + case PART.MEDIA_HEADER: { + console.log('[MediaHeader]:', Protos.MediaHeader.decode(part.data.chunks[0])); + break; + } + case PART.MEDIA: { + const headerId = part.data.getUint8(0); + const streamData = part.data.split(1).remainingBuffer; + console.log('[Media]:', `Header ID: ${headerId}`, `length: ${streamData.byteLength}`); + break; + } + case PART.MEDIA_END: { + const headerId = part.data.getUint8(0); + console.log('[MediaEnd]:', `Header ID: ${headerId}`); + break; + } + default: + console.log('Unhandled part:', part.type); + break; + } +}); +``` + +For more advanced examples, including scenarios beyond just parsing responses, check out the [examples](./examples/). + +## License +Distributed under the [MIT](./LICENSE) License. + +
+(back to top) +
\ No newline at end of file