wrapbox 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,199 @@
1
+ import * as mp4boxModule from 'mp4box';
2
+ export default mp4boxModule;
3
+ export * from 'mp4box';
4
+ export declare const esdsBox: any;
5
+ export interface MP4MediaTrack {
6
+ id: number;
7
+ created: Date;
8
+ modified: Date;
9
+ movie_duration: number;
10
+ layer: number;
11
+ alternate_group: number;
12
+ volume: number;
13
+ track_width: number;
14
+ track_height: number;
15
+ timescale: number;
16
+ duration: number;
17
+ bitrate: number;
18
+ codec: string;
19
+ language: string;
20
+ nb_samples: number;
21
+ }
22
+ export interface MP4VideoTrack extends MP4MediaTrack {
23
+ matrix: Int32Array;
24
+ video: {
25
+ width: number;
26
+ height: number;
27
+ };
28
+ }
29
+ export interface MP4AudioTrack extends MP4MediaTrack {
30
+ audio: {
31
+ sample_rate: number;
32
+ channel_count: number;
33
+ sample_size?: number;
34
+ };
35
+ }
36
+ export interface MP4Info {
37
+ duration: number;
38
+ timescale: number;
39
+ fragment_duration: number;
40
+ isFragmented: boolean;
41
+ isProgressive: boolean;
42
+ hasIOD: boolean;
43
+ brands: string[];
44
+ created: Date;
45
+ modified: Date;
46
+ tracks: Array<MP4VideoTrack | MP4AudioTrack>;
47
+ videoTracks: MP4VideoTrack[];
48
+ audioTracks: MP4AudioTrack[];
49
+ }
50
+ export type MP4ArrayBuffer = ArrayBuffer & {
51
+ fileStart: number;
52
+ };
53
+ export interface DataStream {
54
+ buffer: ArrayBuffer;
55
+ endianness: boolean;
56
+ getPosition(): number;
57
+ writeUint8(v: number): void;
58
+ writeUint16(v: number): void;
59
+ writeUint24(v: number): void;
60
+ writeUint32(v: number): void;
61
+ writeUint8Array(v: Uint8Array): void;
62
+ writeString(s: string, type?: string, len?: number): void;
63
+ }
64
+ export interface VideoTrackOpts {
65
+ timescale: number;
66
+ duration?: number;
67
+ type?: any;
68
+ width: number;
69
+ height: number;
70
+ brands: string[];
71
+ description_boxes?: any[];
72
+ avcDecoderConfigRecord?: any;
73
+ hevcDecoderConfigRecord?: any;
74
+ vpcCDecoderConfigRecord?: any;
75
+ [key: string]: any;
76
+ }
77
+ export interface AudioTrackOpts {
78
+ timescale: number;
79
+ media_duration?: number;
80
+ duration?: number;
81
+ samplerate: number;
82
+ channel_count: number;
83
+ samplesize?: number;
84
+ description?: any;
85
+ hdlr: string;
86
+ type: any;
87
+ name?: string;
88
+ }
89
+ export interface SampleOpts {
90
+ duration?: number;
91
+ dts?: number;
92
+ cts?: number;
93
+ sample_description_index?: number;
94
+ is_sync?: boolean;
95
+ description?: any;
96
+ data?: ArrayBuffer;
97
+ }
98
+ export interface MP4Sample {
99
+ track_id: number;
100
+ description: any;
101
+ is_rap?: boolean;
102
+ is_sync?: boolean;
103
+ timescale: number;
104
+ dts: number;
105
+ cts: number;
106
+ duration: number;
107
+ offset: number;
108
+ size: number;
109
+ data?: any;
110
+ }
111
+ export interface BoxParser {
112
+ boxes?: BoxParser[];
113
+ size?: number;
114
+ hdr_size?: number;
115
+ start?: number;
116
+ type: string;
117
+ data?: any;
118
+ box_name?: string;
119
+ flags?: number;
120
+ version?: number;
121
+ writeHeader?: (ds: any) => void;
122
+ write: (dataStream: any) => void;
123
+ parse: (dataStream: any) => void;
124
+ add?: (name: string) => BoxParser;
125
+ addEntry?: (value: any, name?: string) => BoxParser;
126
+ }
127
+ export interface TrakBoxParser extends BoxParser {
128
+ type: string;
129
+ samples: MP4Sample[];
130
+ nextSample?: number;
131
+ sample_size?: number;
132
+ samples_duration?: number;
133
+ mdia?: any;
134
+ tkhd?: any;
135
+ }
136
+ export interface ESDSBoxParser extends BoxParser {
137
+ type: string;
138
+ version?: number;
139
+ flags?: number;
140
+ esd?: any;
141
+ }
142
+ export interface AVC1BoxParser extends BoxParser {
143
+ type: string;
144
+ boxes: BoxParser[];
145
+ avcC: any;
146
+ compressorname?: string;
147
+ frame_count?: number;
148
+ height?: number;
149
+ width?: number;
150
+ }
151
+ export interface HVCBoxParser extends BoxParser {
152
+ type: string;
153
+ boxes: BoxParser[];
154
+ hvcC: any;
155
+ compressorname?: string;
156
+ frame_count?: number;
157
+ height?: number;
158
+ width?: number;
159
+ }
160
+ export interface MP4ABoxParser extends BoxParser {
161
+ type: string;
162
+ channel_count?: number;
163
+ samplerate?: number;
164
+ samplesize?: number;
165
+ boxes: any[];
166
+ esds?: ESDSBoxParser;
167
+ getCodec?: () => string;
168
+ }
169
+ export interface MP4File {
170
+ boxes: BoxParser[];
171
+ mdats: any[];
172
+ moofs: any[];
173
+ ftyp?: any;
174
+ moov?: any;
175
+ addBox?: (box: any) => any;
176
+ addTrack: (opts: VideoTrackOpts | AudioTrackOpts) => number;
177
+ addSample: (trackId: number, buf: any, sample: SampleOpts) => any;
178
+ releaseUsedSamples(id: number, usedCount: number): void;
179
+ getTrackById: (id: number) => TrakBoxParser;
180
+ setExtractionOptions: (id: number, user?: unknown, opts?: {
181
+ nbSamples?: number;
182
+ rapAlignement?: boolean;
183
+ }) => void;
184
+ onMoovStart?: () => void;
185
+ onReady?: (info: MP4Info) => void;
186
+ onSamples?: (id: number, user: any, samples: MP4Sample[]) => void;
187
+ onError?: (e: string) => void;
188
+ appendBuffer: (data: any) => number | undefined;
189
+ start: () => void;
190
+ seek: (time: number, useRAP?: boolean) => {
191
+ offset: number;
192
+ time: number;
193
+ };
194
+ stop: () => void;
195
+ write: (ds: any) => void;
196
+ flush: () => void;
197
+ onFlush?: () => void;
198
+ }
199
+ export declare const createFile: (keepMdta?: boolean) => MP4File;
@@ -0,0 +1,34 @@
1
+ import { MP4File } from './mp4box';
2
+ type CleanFn = () => void;
3
+ /**
4
+ * Configuration options for recodemux function
5
+ */
6
+ interface RecodeMuxOpts {
7
+ video: {
8
+ width: number;
9
+ height: number;
10
+ expectFPS: number;
11
+ codec: string;
12
+ bitrate: number;
13
+ __unsafe_hardwareAcceleration__?: HardwareAcceleration;
14
+ } | null;
15
+ audio: {
16
+ codec: 'opus' | 'aac';
17
+ sampleRate: number;
18
+ channelCount: number;
19
+ } | null;
20
+ duration?: number;
21
+ metaDataTags?: Record<string, string>;
22
+ }
23
+ /**
24
+ * Handle audio and video encoding and decoding
25
+ */
26
+ export declare function recodemux(opts: RecodeMuxOpts): {
27
+ encodeVideo: (frame: VideoFrame, options: VideoEncoderEncodeOptions) => void;
28
+ encodeAudio: (data: AudioData) => void;
29
+ close: CleanFn;
30
+ flush: () => Promise<void>;
31
+ mp4file: MP4File;
32
+ getEncodeQueueSize: () => number;
33
+ };
34
+ export {};
@@ -0,0 +1,39 @@
1
+ import { MP4File } from './mp4box';
2
+ import { default as EventEmitter } from './event-emitter';
3
+ export interface VideoEncoderOpts {
4
+ width: number;
5
+ height: number;
6
+ expectFPS: number;
7
+ codec: string;
8
+ bitrate: number;
9
+ __unsafe_hardwareAcceleration__?: HardwareAcceleration;
10
+ }
11
+ export declare class VideoTrackEncoder {
12
+ private opts;
13
+ private mp4File;
14
+ private avSyncTool;
15
+ private encoder0;
16
+ private encoder1;
17
+ private trackId;
18
+ private samplesCache;
19
+ private currentEncoderId;
20
+ private lastAddedSampleTime;
21
+ private audioReady;
22
+ private gopId;
23
+ private stopTimer;
24
+ private frameDeltaTime;
25
+ constructor(opts: VideoEncoderOpts, mp4File: MP4File, avSyncTool: EventEmitter<{
26
+ VideoReady: undefined;
27
+ AudioReady: undefined;
28
+ }>);
29
+ private initEncoder;
30
+ private onOutput;
31
+ private setupTrack;
32
+ private getDecoderConfKey;
33
+ private checkCache;
34
+ private addSampleToFile;
35
+ encode(vf: VideoFrame, encOpts: VideoEncoderEncodeOptions): void;
36
+ flush(): Promise<void>;
37
+ close(): void;
38
+ get encodeQueueSize(): number;
39
+ }
@@ -0,0 +1 @@
1
+ export declare const workerTimer: (handler: () => void, time: number) => (() => void);
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "wrapbox",
3
+ "version": "0.0.1",
4
+ "description": "Video rendering and processing library",
5
+ "type": "module",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/designcombo/wrapbox.git"
12
+ },
13
+ "keywords": [
14
+ "video",
15
+ "rendering",
16
+ "webcodecs",
17
+ "mp4"
18
+ ],
19
+ "author": "DesignCombo",
20
+ "license": "SEE LICENSE IN LICENSE",
21
+ "files": [
22
+ "dist"
23
+ ],
24
+ "main": "dist/index.umd.js",
25
+ "module": "dist/index.es.js",
26
+ "types": "dist/index.d.ts",
27
+ "exports": {
28
+ ".": {
29
+ "types": "./dist/index.d.ts",
30
+ "import": "./dist/index.es.js",
31
+ "require": "./dist/index.umd.js"
32
+ }
33
+ },
34
+ "scripts": {
35
+ "dev": "vite",
36
+ "build": "tsc && vite build"
37
+ },
38
+ "devDependencies": {
39
+ "@types/rollup-plugin-peer-deps-external": "^2.2.6",
40
+ "rollup-plugin-peer-deps-external": "^2.2.4",
41
+ "typescript": "~5.9.2",
42
+ "vite": "^7.1.5",
43
+ "vite-plugin-dts": "^4.5.4"
44
+ },
45
+ "dependencies": {
46
+ "mp4box": "^2.3.0"
47
+ },
48
+ "packageManager": "pnpm@10.15.0+sha512.486ebc259d3e999a4e8691ce03b5cac4a71cbeca39372a9b762cb500cfdf0873e2cb16abe3d951b1ee2cf012503f027b98b6584e4df22524e0c7450d9ec7aa7b"
49
+ }