node-av 2.4.0 → 2.5.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.
- package/README.md +38 -0
- package/dist/api/decoder.d.ts +4 -2
- package/dist/api/decoder.js +23 -10
- package/dist/api/decoder.js.map +1 -1
- package/dist/api/types.d.ts +30 -28
- package/dist/ffmpeg/index.d.ts +2 -0
- package/dist/ffmpeg/index.js +14 -0
- package/dist/ffmpeg/index.js.map +1 -0
- package/dist/ffmpeg/install.d.ts +2 -0
- package/dist/ffmpeg/install.js +118 -0
- package/dist/ffmpeg/install.js.map +1 -0
- package/dist/ffmpeg/utils.d.ts +4 -0
- package/dist/ffmpeg/utils.js +56 -0
- package/dist/ffmpeg/utils.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/binding.js +4 -5
- package/dist/lib/binding.js.map +1 -1
- package/package.json +23 -14
package/README.md
CHANGED
|
@@ -220,6 +220,44 @@ try {
|
|
|
220
220
|
}
|
|
221
221
|
```
|
|
222
222
|
|
|
223
|
+
## FFmpeg Binary Access
|
|
224
|
+
|
|
225
|
+
Need direct access to the FFmpeg binary? The library provides an easy way to get FFmpeg binaries that automatically downloads and manages platform-specific builds.
|
|
226
|
+
|
|
227
|
+
```typescript
|
|
228
|
+
import { ffmpegPath, isFfmpegAvailable } from 'node-av/ffmpeg';
|
|
229
|
+
import { execFile } from 'node:child_process';
|
|
230
|
+
import { promisify } from 'node:util';
|
|
231
|
+
|
|
232
|
+
const execFileAsync = promisify(execFile);
|
|
233
|
+
|
|
234
|
+
// Check if FFmpeg binary is available
|
|
235
|
+
if (isFfmpegAvailable()) {
|
|
236
|
+
console.log('FFmpeg binary found at:', ffmpegPath());
|
|
237
|
+
|
|
238
|
+
// Use FFmpeg binary directly
|
|
239
|
+
const { stdout } = await execFileAsync(ffmpegPath(), ['-version']);
|
|
240
|
+
console.log(stdout);
|
|
241
|
+
} else {
|
|
242
|
+
console.log('FFmpeg binary not available - install may have failed');
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Direct usage example
|
|
246
|
+
async function convertVideo(input: string, output: string) {
|
|
247
|
+
const args = [
|
|
248
|
+
'-i', input,
|
|
249
|
+
'-c:v', 'libx264',
|
|
250
|
+
'-crf', '23',
|
|
251
|
+
'-c:a', 'aac',
|
|
252
|
+
output
|
|
253
|
+
];
|
|
254
|
+
|
|
255
|
+
await execFileAsync(ffmpegPath(), args);
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
The FFmpeg binary is automatically downloaded during installation from GitHub releases and matches the same build used by the native bindings.
|
|
260
|
+
|
|
223
261
|
## Performance
|
|
224
262
|
|
|
225
263
|
NodeAV executes all media operations directly through FFmpeg's native C libraries. The Node.js bindings add minimal overhead - mostly just the JavaScript-to-C boundary crossings. During typical operations like transcoding or filtering, most processing time is spent in FFmpeg's optimized C code.
|
package/dist/api/decoder.d.ts
CHANGED
|
@@ -50,7 +50,7 @@ export declare class Decoder implements Disposable {
|
|
|
50
50
|
private stream;
|
|
51
51
|
private initialized;
|
|
52
52
|
private isClosed;
|
|
53
|
-
private
|
|
53
|
+
private options;
|
|
54
54
|
/**
|
|
55
55
|
* @param codecContext - Configured codec context
|
|
56
56
|
*
|
|
@@ -58,7 +58,8 @@ export declare class Decoder implements Disposable {
|
|
|
58
58
|
*
|
|
59
59
|
* @param stream - Media stream being decoded
|
|
60
60
|
*
|
|
61
|
-
* @param
|
|
61
|
+
* @param options - Decoder options
|
|
62
|
+
*
|
|
62
63
|
* Use {@link create} factory method
|
|
63
64
|
*
|
|
64
65
|
* @internal
|
|
@@ -106,6 +107,7 @@ export declare class Decoder implements Disposable {
|
|
|
106
107
|
* using decoder = await Decoder.create(stream, {
|
|
107
108
|
* hardware: hw,
|
|
108
109
|
* threads: 0 // Auto-detect thread count
|
|
110
|
+
* exitOnError: false // Continue on decode errors (default: true)
|
|
109
111
|
* });
|
|
110
112
|
* ```
|
|
111
113
|
*
|
package/dist/api/decoder.js
CHANGED
|
@@ -49,7 +49,7 @@ export class Decoder {
|
|
|
49
49
|
stream;
|
|
50
50
|
initialized = true;
|
|
51
51
|
isClosed = false;
|
|
52
|
-
|
|
52
|
+
options;
|
|
53
53
|
/**
|
|
54
54
|
* @param codecContext - Configured codec context
|
|
55
55
|
*
|
|
@@ -57,16 +57,17 @@ export class Decoder {
|
|
|
57
57
|
*
|
|
58
58
|
* @param stream - Media stream being decoded
|
|
59
59
|
*
|
|
60
|
-
* @param
|
|
60
|
+
* @param options - Decoder options
|
|
61
|
+
*
|
|
61
62
|
* Use {@link create} factory method
|
|
62
63
|
*
|
|
63
64
|
* @internal
|
|
64
65
|
*/
|
|
65
|
-
constructor(codecContext, codec, stream,
|
|
66
|
+
constructor(codecContext, codec, stream, options = {}) {
|
|
66
67
|
this.codecContext = codecContext;
|
|
67
68
|
this.codec = codec;
|
|
68
69
|
this.stream = stream;
|
|
69
|
-
this.
|
|
70
|
+
this.options = options;
|
|
70
71
|
this.frame = new Frame();
|
|
71
72
|
this.frame.alloc();
|
|
72
73
|
}
|
|
@@ -112,6 +113,7 @@ export class Decoder {
|
|
|
112
113
|
* using decoder = await Decoder.create(stream, {
|
|
113
114
|
* hardware: hw,
|
|
114
115
|
* threads: 0 // Auto-detect thread count
|
|
116
|
+
* exitOnError: false // Continue on decode errors (default: true)
|
|
115
117
|
* });
|
|
116
118
|
* ```
|
|
117
119
|
*
|
|
@@ -149,6 +151,10 @@ export class Decoder {
|
|
|
149
151
|
if (isHWDecoder && options.hardware) {
|
|
150
152
|
codecContext.hwDeviceCtx = options.hardware.deviceContext;
|
|
151
153
|
}
|
|
154
|
+
else {
|
|
155
|
+
options.hardware = undefined;
|
|
156
|
+
}
|
|
157
|
+
options.exitOnError = options.exitOnError ?? true;
|
|
152
158
|
const opts = options.options ? Dictionary.fromObject(options.options) : undefined;
|
|
153
159
|
// Open codec
|
|
154
160
|
const openRet = await codecContext.open2(codec, opts);
|
|
@@ -156,7 +162,7 @@ export class Decoder {
|
|
|
156
162
|
codecContext.freeContext();
|
|
157
163
|
FFmpegError.throwIfError(openRet, 'Failed to open codec');
|
|
158
164
|
}
|
|
159
|
-
return new Decoder(codecContext, codec, stream,
|
|
165
|
+
return new Decoder(codecContext, codec, stream, options);
|
|
160
166
|
}
|
|
161
167
|
/**
|
|
162
168
|
* Create a decoder for a media stream synchronously.
|
|
@@ -237,6 +243,9 @@ export class Decoder {
|
|
|
237
243
|
if (isHWDecoder && options.hardware) {
|
|
238
244
|
codecContext.hwDeviceCtx = options.hardware.deviceContext;
|
|
239
245
|
}
|
|
246
|
+
else {
|
|
247
|
+
options.hardware = undefined;
|
|
248
|
+
}
|
|
240
249
|
const opts = options.options ? Dictionary.fromObject(options.options) : undefined;
|
|
241
250
|
// Open codec synchronously
|
|
242
251
|
const openRet = codecContext.open2Sync(codec, opts);
|
|
@@ -244,7 +253,7 @@ export class Decoder {
|
|
|
244
253
|
codecContext.freeContext();
|
|
245
254
|
FFmpegError.throwIfError(openRet, 'Failed to open codec');
|
|
246
255
|
}
|
|
247
|
-
return new Decoder(codecContext, codec, stream,
|
|
256
|
+
return new Decoder(codecContext, codec, stream, options);
|
|
248
257
|
}
|
|
249
258
|
/**
|
|
250
259
|
* Check if decoder is open.
|
|
@@ -294,7 +303,7 @@ export class Decoder {
|
|
|
294
303
|
* @see {@link HardwareContext} For hardware setup
|
|
295
304
|
*/
|
|
296
305
|
isHardware() {
|
|
297
|
-
return !!this.hardware && this.codec.isHardwareAcceleratedDecoder();
|
|
306
|
+
return !!this.options.hardware && this.codec.isHardwareAcceleratedDecoder();
|
|
298
307
|
}
|
|
299
308
|
/**
|
|
300
309
|
* Check if decoder is ready for processing.
|
|
@@ -367,7 +376,7 @@ export class Decoder {
|
|
|
367
376
|
return frame;
|
|
368
377
|
}
|
|
369
378
|
// If still failing, it's an error
|
|
370
|
-
if (sendRet !== AVERROR_EAGAIN) {
|
|
379
|
+
if (sendRet !== AVERROR_EAGAIN && this.options.exitOnError) {
|
|
371
380
|
FFmpegError.throwIfError(sendRet, 'Failed to send packet');
|
|
372
381
|
}
|
|
373
382
|
}
|
|
@@ -737,7 +746,9 @@ export class Decoder {
|
|
|
737
746
|
}
|
|
738
747
|
else {
|
|
739
748
|
// Error
|
|
740
|
-
|
|
749
|
+
if (this.options.exitOnError) {
|
|
750
|
+
FFmpegError.throwIfError(ret, 'Failed to receive frame');
|
|
751
|
+
}
|
|
741
752
|
return null;
|
|
742
753
|
}
|
|
743
754
|
}
|
|
@@ -791,7 +802,9 @@ export class Decoder {
|
|
|
791
802
|
}
|
|
792
803
|
else {
|
|
793
804
|
// Error
|
|
794
|
-
|
|
805
|
+
if (this.options.exitOnError) {
|
|
806
|
+
FFmpegError.throwIfError(ret, 'Failed to receive frame');
|
|
807
|
+
}
|
|
795
808
|
return null;
|
|
796
809
|
}
|
|
797
810
|
}
|
package/dist/api/decoder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../src/api/decoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../src/api/decoder.ts"],"names":[],"mappings":"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"}
|
package/dist/api/types.d.ts
CHANGED
|
@@ -73,6 +73,34 @@ export interface MediaInputOptions {
|
|
|
73
73
|
*/
|
|
74
74
|
options?: Record<string, string | number>;
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Options for MediaOutput creation.
|
|
78
|
+
*
|
|
79
|
+
* Configures output container format and buffering.
|
|
80
|
+
*/
|
|
81
|
+
export interface MediaOutputOptions {
|
|
82
|
+
/**
|
|
83
|
+
* Preferred output format.
|
|
84
|
+
*
|
|
85
|
+
* If not specified, format is guessed from file extension.
|
|
86
|
+
* Use this to override automatic format detection.
|
|
87
|
+
*
|
|
88
|
+
*/
|
|
89
|
+
format?: string;
|
|
90
|
+
/**
|
|
91
|
+
* Buffer size for I/O operations.
|
|
92
|
+
*
|
|
93
|
+
* This option controls the size of the internal buffer used for
|
|
94
|
+
* reading and writing data. A larger buffer may improve performance
|
|
95
|
+
* by reducing the number of I/O operations, but will also increase
|
|
96
|
+
* memory usage.
|
|
97
|
+
*
|
|
98
|
+
* @default 4096
|
|
99
|
+
*
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
bufferSize?: number;
|
|
103
|
+
}
|
|
76
104
|
/**
|
|
77
105
|
* Options for decoder creation.
|
|
78
106
|
*
|
|
@@ -83,6 +111,8 @@ export interface MediaInputOptions {
|
|
|
83
111
|
export interface DecoderOptions {
|
|
84
112
|
/** Number of threads to use (0 for auto) */
|
|
85
113
|
threads?: number;
|
|
114
|
+
/** Exit immediately on first decode error (default: true) */
|
|
115
|
+
exitOnError?: boolean;
|
|
86
116
|
/** Additional codec-specific options (passed to AVOptions) */
|
|
87
117
|
options?: Record<string, string | number>;
|
|
88
118
|
/** Hardware acceleration: Pass a HardwareContext instance */
|
|
@@ -117,34 +147,6 @@ export interface EncoderOptions {
|
|
|
117
147
|
/** Additional codec-specific options (passed to AVOptions) */
|
|
118
148
|
options?: Record<string, string | number>;
|
|
119
149
|
}
|
|
120
|
-
/**
|
|
121
|
-
* Options for MediaOutput creation.
|
|
122
|
-
*
|
|
123
|
-
* Configures output container format and buffering.
|
|
124
|
-
*/
|
|
125
|
-
export interface MediaOutputOptions {
|
|
126
|
-
/**
|
|
127
|
-
* Preferred output format.
|
|
128
|
-
*
|
|
129
|
-
* If not specified, format is guessed from file extension.
|
|
130
|
-
* Use this to override automatic format detection.
|
|
131
|
-
*
|
|
132
|
-
*/
|
|
133
|
-
format?: string;
|
|
134
|
-
/**
|
|
135
|
-
* Buffer size for I/O operations.
|
|
136
|
-
*
|
|
137
|
-
* This option controls the size of the internal buffer used for
|
|
138
|
-
* reading and writing data. A larger buffer may improve performance
|
|
139
|
-
* by reducing the number of I/O operations, but will also increase
|
|
140
|
-
* memory usage.
|
|
141
|
-
*
|
|
142
|
-
* @default 4096
|
|
143
|
-
*
|
|
144
|
-
* ```
|
|
145
|
-
*/
|
|
146
|
-
bufferSize?: number;
|
|
147
|
-
}
|
|
148
150
|
/**
|
|
149
151
|
* Options for creating a filter instance.
|
|
150
152
|
*
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { dirname, resolve } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { getPlatform } from './utils.js';
|
|
5
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = dirname(__filename);
|
|
7
|
+
const ffmpegBinaryPath = resolve(__dirname, '../../binary');
|
|
8
|
+
const ffmpegFile = 'ffmpeg' + (getPlatform() === 'win32' ? '.exe' : '');
|
|
9
|
+
const ffmpegExtractedFilePath = resolve(ffmpegBinaryPath, ffmpegFile);
|
|
10
|
+
export const ffmpegPath = () => ffmpegExtractedFilePath;
|
|
11
|
+
export const isFfmpegAvailable = () => {
|
|
12
|
+
return existsSync(ffmpegExtractedFilePath);
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ffmpeg/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,gBAAgB,GAAG,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAC5D,MAAM,UAAU,GAAG,QAAQ,GAAG,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACxE,MAAM,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,UAAU,GAAG,GAAW,EAAE,CAAC,uBAAuB,CAAC;AAEhE,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAY,EAAE;IAC7C,OAAO,UAAU,CAAC,uBAAuB,CAAC,CAAC;AAC7C,CAAC,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { chmodSync, createWriteStream, mkdirSync, rmSync } from 'node:fs';
|
|
4
|
+
import { rename } from 'node:fs/promises';
|
|
5
|
+
import { createRequire } from 'node:module';
|
|
6
|
+
import { dirname, extname, resolve } from 'node:path';
|
|
7
|
+
import { pipeline } from 'node:stream/promises';
|
|
8
|
+
import { fileURLToPath } from 'node:url';
|
|
9
|
+
import { Open } from 'unzipper';
|
|
10
|
+
import { ffmpegPath } from './index.js';
|
|
11
|
+
import { getArchitecture, getPlatform, getPlatformType } from './utils.js';
|
|
12
|
+
if (process.env.SKIP_FFMPEG === 'true') {
|
|
13
|
+
console.log('Skipping ffmpeg download');
|
|
14
|
+
process.exit(0);
|
|
15
|
+
}
|
|
16
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
+
const __dirname = dirname(__filename);
|
|
18
|
+
const __require = createRequire(import.meta.url);
|
|
19
|
+
const releasesUrl = 'https://api.github.com/repos/seydx/node-av/releases';
|
|
20
|
+
const ffmpegVersion = 'v7.1.2';
|
|
21
|
+
const pJson = __require('../../package.json');
|
|
22
|
+
const binaries = {
|
|
23
|
+
darwin: {
|
|
24
|
+
x64: `ffmpeg-${ffmpegVersion}-macos-x64-jellyfin.zip`,
|
|
25
|
+
arm64: `ffmpeg-${ffmpegVersion}-macos-arm64-jellyfin.zip`,
|
|
26
|
+
},
|
|
27
|
+
linux: {
|
|
28
|
+
x64: `ffmpeg-${ffmpegVersion}-linux-x64-jellyfin.zip`,
|
|
29
|
+
arm64: `ffmpeg-${ffmpegVersion}-linux-arm64-jellyfin.zip`,
|
|
30
|
+
},
|
|
31
|
+
win32: {
|
|
32
|
+
x64: `ffmpeg-${ffmpegVersion}-win-x64.zip`,
|
|
33
|
+
arm64: `ffmpeg-${ffmpegVersion}-win-arm64.zip`,
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
const arch = getArchitecture();
|
|
37
|
+
const sysPlatform = getPlatform();
|
|
38
|
+
let filename = binaries[sysPlatform]?.[arch];
|
|
39
|
+
if (!filename) {
|
|
40
|
+
console.error(`No ffmpeg binary found for architecture (${sysPlatform} / ${arch})`);
|
|
41
|
+
process.exit(0);
|
|
42
|
+
}
|
|
43
|
+
if (sysPlatform === 'win32' && getPlatformType() !== 'Windows_NT') {
|
|
44
|
+
filename = filename.replace('.zip', '-jellyfin.zip');
|
|
45
|
+
}
|
|
46
|
+
console.log(`Detected platform: ${sysPlatform} / ${arch}`);
|
|
47
|
+
console.log(`Using binary: ${filename}`);
|
|
48
|
+
const ffmpegBinaryPath = resolve(__dirname, '../../binary');
|
|
49
|
+
const ffmpegFilePath = resolve(ffmpegBinaryPath, filename);
|
|
50
|
+
const ffmpegExtractedFilePath = ffmpegPath();
|
|
51
|
+
const isZipUrl = (url) => {
|
|
52
|
+
const pathArray = new URL(url).pathname.split('/');
|
|
53
|
+
const fileName = pathArray[pathArray.length - 1];
|
|
54
|
+
return fileName !== undefined && extname(fileName) === '.zip';
|
|
55
|
+
};
|
|
56
|
+
const downloadFile = async (url) => {
|
|
57
|
+
console.log(`Downloading FFmpeg ${ffmpegVersion} to ${ffmpegFilePath}...`);
|
|
58
|
+
const { data } = await axios.get(url, {
|
|
59
|
+
onDownloadProgress: (progressEvent) => {
|
|
60
|
+
if (process.env.CI || !progressEvent.total) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const percent = Math.round((progressEvent.loaded / progressEvent.total) * 100) + '%';
|
|
64
|
+
process.stdout.write('\r' + percent);
|
|
65
|
+
if (progressEvent.loaded === progressEvent.total) {
|
|
66
|
+
process.stdout.write('\r');
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
timeout: 30 * 1000, // 30s
|
|
70
|
+
maxRedirects: 3,
|
|
71
|
+
responseType: 'stream',
|
|
72
|
+
});
|
|
73
|
+
mkdirSync(ffmpegBinaryPath, { recursive: true });
|
|
74
|
+
const streams = [data, createWriteStream(ffmpegFilePath)];
|
|
75
|
+
await pipeline(streams);
|
|
76
|
+
if (isZipUrl(url)) {
|
|
77
|
+
console.log(`Extracting ${ffmpegFilePath} to ${ffmpegExtractedFilePath}...`);
|
|
78
|
+
const directory = await Open.file(ffmpegFilePath);
|
|
79
|
+
await new Promise((resolve, reject) => {
|
|
80
|
+
directory.files[0].stream().pipe(createWriteStream(ffmpegExtractedFilePath)).on('error', reject).on('finish', resolve);
|
|
81
|
+
});
|
|
82
|
+
console.log(`Removing ${ffmpegFilePath}...`);
|
|
83
|
+
rmSync(ffmpegFilePath);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
console.log(`Renaming ${ffmpegFilePath} to ${ffmpegExtractedFilePath}...`);
|
|
87
|
+
await rename(ffmpegFilePath, ffmpegExtractedFilePath);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
const getReleaseAssets = async (version) => {
|
|
91
|
+
const url = `${releasesUrl}/tags/v${version}`;
|
|
92
|
+
console.log(`Fetching release info from ${url}...`);
|
|
93
|
+
const response = await axios.get(url);
|
|
94
|
+
const assets = response.data.assets.map((asset) => asset.browser_download_url);
|
|
95
|
+
const files = assets.map((asset) => asset.split(`${version}/`)[1]);
|
|
96
|
+
return {
|
|
97
|
+
assets,
|
|
98
|
+
files,
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
const downloadFFmpeg = async () => {
|
|
102
|
+
const release = await getReleaseAssets(pJson.version);
|
|
103
|
+
if (!filename || !release.assets.find((r) => r.endsWith(filename))) {
|
|
104
|
+
throw new Error(`No ffmpeg binary found for architecture (${sysPlatform} / ${arch})`);
|
|
105
|
+
}
|
|
106
|
+
const downloadUrl = release.assets.find((r) => r.endsWith(filename));
|
|
107
|
+
await downloadFile(downloadUrl);
|
|
108
|
+
if (sysPlatform === 'linux' || sysPlatform === 'darwin') {
|
|
109
|
+
console.log(`Making ${ffmpegExtractedFilePath} executable...`);
|
|
110
|
+
chmodSync(ffmpegExtractedFilePath, 0o755);
|
|
111
|
+
}
|
|
112
|
+
console.log('Done!');
|
|
113
|
+
};
|
|
114
|
+
downloadFFmpeg().catch((error) => {
|
|
115
|
+
console.error('Error downloading FFmpeg:', error?.messge ?? error);
|
|
116
|
+
process.exit(0);
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/ffmpeg/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type ARCH = 'arm' | 'arm6' | 'arm7' | 'arm64' | 'ia32' | 'loong64' | 'mips' | 'mipsel' | 'ppc' | 'ppc64' | 'riscv64' | 's390' | 's390x' | 'x64';
|
|
2
|
+
export declare function getPlatform(): NodeJS.Platform;
|
|
3
|
+
export declare function getPlatformType(): string;
|
|
4
|
+
export declare function getArchitecture(): ARCH;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import { arch, platform, type } from 'node:os';
|
|
3
|
+
export function getPlatform() {
|
|
4
|
+
if (process.env.npm_config_os) {
|
|
5
|
+
if (!process.env.npm_config_cpu) {
|
|
6
|
+
throw new Error('npm_config_cpu is required when npm_config_os is set');
|
|
7
|
+
}
|
|
8
|
+
return process.env.npm_config_os;
|
|
9
|
+
}
|
|
10
|
+
return platform();
|
|
11
|
+
}
|
|
12
|
+
export function getPlatformType() {
|
|
13
|
+
return type();
|
|
14
|
+
}
|
|
15
|
+
export function getArchitecture() {
|
|
16
|
+
if (process.env.npm_config_cpu) {
|
|
17
|
+
if (!process.env.npm_config_os) {
|
|
18
|
+
throw new Error('npm_config_os is required when npm_config_cpu is set');
|
|
19
|
+
}
|
|
20
|
+
return process.env.npm_config_cpu;
|
|
21
|
+
}
|
|
22
|
+
const sysPlatform = getPlatform();
|
|
23
|
+
let sysArch = arch();
|
|
24
|
+
if (sysPlatform === 'win32') {
|
|
25
|
+
try {
|
|
26
|
+
const output = execSync('wmic cpu get architecture', { encoding: 'utf8' });
|
|
27
|
+
const architecture = output.trim().split('\n')[1].trim();
|
|
28
|
+
if (architecture === '5') {
|
|
29
|
+
sysArch = 'arm6';
|
|
30
|
+
}
|
|
31
|
+
else if (architecture === '7') {
|
|
32
|
+
sysArch = 'arm7';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
//
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else if (sysPlatform === 'linux') {
|
|
40
|
+
try {
|
|
41
|
+
const output = execSync('cat /proc/cpuinfo | grep "model name"', { encoding: 'utf8' });
|
|
42
|
+
const modelName = output.trim().split(':')[1].trim();
|
|
43
|
+
if (modelName.includes('ARMv6')) {
|
|
44
|
+
sysArch = 'arm6';
|
|
45
|
+
}
|
|
46
|
+
else if (modelName.includes('ARMv7')) {
|
|
47
|
+
sysArch = 'arm7';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
//
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return sysArch;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/ffmpeg/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAI/C,MAAM,UAAU,WAAW;IACzB,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,OAAO,CAAC,GAAG,CAAC,aAAgC,CAAC;IACtD,CAAC;IAED,OAAO,QAAQ,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,EAAE,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,OAAO,CAAC,GAAG,CAAC,cAAsB,CAAC;IAC5C,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,EAAE,CAAC;IAClC,IAAI,OAAO,GAAG,IAAI,EAAU,CAAC;IAE7B,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,2BAA2B,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3E,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEzD,IAAI,YAAY,KAAK,GAAG,EAAE,CAAC;gBACzB,OAAO,GAAG,MAAM,CAAC;YACnB,CAAC;iBAAM,IAAI,YAAY,KAAK,GAAG,EAAE,CAAC;gBAChC,OAAO,GAAG,MAAM,CAAC;YACnB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,EAAE;QACJ,CAAC;IACH,CAAC;SAAM,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,uCAAuC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YACvF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAErD,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChC,OAAO,GAAG,MAAM,CAAC;YACnB,CAAC;iBAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvC,OAAO,GAAG,MAAM,CAAC;YACnB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,EAAE;QACJ,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,cAAc,gBAAgB,CAAC;AAE/B,wBAAwB;AACxB,cAAc,gBAAgB,CAAC;AAE/B,iCAAiC;AACjC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,cAAc,gBAAgB,CAAC;AAE/B,wBAAwB;AACxB,cAAc,gBAAgB,CAAC;AAE/B,iCAAiC;AACjC,cAAc,sBAAsB,CAAC;AAErC,0BAA0B;AAC1B,cAAc,mBAAmB,CAAC"}
|
package/dist/lib/binding.js
CHANGED
|
@@ -42,9 +42,8 @@ function loadBinding() {
|
|
|
42
42
|
}
|
|
43
43
|
// For Windows, detect MinGW vs MSVC environment
|
|
44
44
|
if (platform === 'win32') {
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
if (!useMSVC) {
|
|
45
|
+
const useMingW = type() !== 'Windows_NT';
|
|
46
|
+
if (useMingW) {
|
|
48
47
|
try {
|
|
49
48
|
const packageName = `@seydx/node-av-${platformArch}-mingw`;
|
|
50
49
|
return require(`${packageName}/node-av.node`);
|
|
@@ -53,7 +52,7 @@ function loadBinding() {
|
|
|
53
52
|
errors.push(new Error(`MinGW package not found or loading failed: ${err}`));
|
|
54
53
|
}
|
|
55
54
|
}
|
|
56
|
-
//
|
|
55
|
+
// Fallback to MSVC
|
|
57
56
|
try {
|
|
58
57
|
const packageName = `@seydx/node-av-${platformArch}-msvc`;
|
|
59
58
|
return require(`${packageName}/node-av.node`);
|
|
@@ -76,7 +75,7 @@ function loadBinding() {
|
|
|
76
75
|
const errorMessages = errors.map((e) => e.message).join('\n ');
|
|
77
76
|
// prettier-ignore
|
|
78
77
|
throw new Error(`Could not load the node-av native binding for ${platformArch}.\n` +
|
|
79
|
-
`
|
|
78
|
+
`Errors:\n ${errorMessages}\n\n`);
|
|
80
79
|
}
|
|
81
80
|
// Load the native binding with fallback logic
|
|
82
81
|
const bindings = loadBinding();
|
package/dist/lib/binding.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/lib/binding.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAoCzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAiPtC;;;;;;GAMG;AACH,SAAS,WAAW;IAClB,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,kBAAkB;IAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,YAAY,GAAG,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC;IAE3C,8CAA8C;IAC9C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QACvF,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC5E,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QACtD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,gDAAgD;IAChD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,
|
|
1
|
+
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/lib/binding.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-av",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.1",
|
|
4
4
|
"description": "FFmpeg bindings for Node.js",
|
|
5
5
|
"author": "seydx (https://github.com/seydx/av)",
|
|
6
6
|
"type": "module",
|
|
@@ -24,6 +24,11 @@
|
|
|
24
24
|
"types": "./dist/constants/index.d.ts",
|
|
25
25
|
"require": "./dist/constants/index.js",
|
|
26
26
|
"default": "./dist/constants/index.js"
|
|
27
|
+
},
|
|
28
|
+
"./ffmpeg": {
|
|
29
|
+
"types": "./dist/ffmpeg/index.d.ts",
|
|
30
|
+
"require": "./dist/ffmpeg/index.js",
|
|
31
|
+
"default": "./dist/ffmpeg/index.js"
|
|
27
32
|
}
|
|
28
33
|
},
|
|
29
34
|
"scripts": {
|
|
@@ -46,23 +51,24 @@
|
|
|
46
51
|
"install-updates": "npm i --save",
|
|
47
52
|
"lint": "eslint .",
|
|
48
53
|
"lint:fix": "eslint --fix .",
|
|
54
|
+
"postinstall": "node dist/ffmpeg/install.js",
|
|
49
55
|
"predocs": "typedoc && cpy README.md docs/ --rename=index.md",
|
|
50
|
-
"release:patch": "node scripts/prepare-release.js patch",
|
|
51
|
-
"release:minor": "node scripts/prepare-release.js minor",
|
|
52
|
-
"release:major": "node scripts/prepare-release.js major",
|
|
56
|
+
"release:patch": "npm run build:tsc && node scripts/prepare-release.js patch",
|
|
57
|
+
"release:minor": "npm run build:tsc && node scripts/prepare-release.js minor",
|
|
58
|
+
"release:major": "npm run build:tsc && node scripts/prepare-release.js major",
|
|
53
59
|
"test": "tsx --test test/*.test.ts",
|
|
54
60
|
"test:all": "npm run build:tests && npm run build:tsc && tsx --test test/*.test.ts",
|
|
55
61
|
"update": "updates --update ./"
|
|
56
62
|
},
|
|
57
63
|
"optionalDependencies": {
|
|
58
|
-
"@seydx/node-av-darwin-arm64": "^2.
|
|
59
|
-
"@seydx/node-av-darwin-x64": "^2.
|
|
60
|
-
"@seydx/node-av-linux-arm64": "^2.
|
|
61
|
-
"@seydx/node-av-linux-x64": "^2.
|
|
62
|
-
"@seydx/node-av-win32-arm64-mingw": "^2.
|
|
63
|
-
"@seydx/node-av-win32-
|
|
64
|
-
"@seydx/node-av-win32-
|
|
65
|
-
"@seydx/node-av-win32-x64-msvc": "^2.
|
|
64
|
+
"@seydx/node-av-darwin-arm64": "^2.5.1",
|
|
65
|
+
"@seydx/node-av-darwin-x64": "^2.5.1",
|
|
66
|
+
"@seydx/node-av-linux-arm64": "^2.5.1",
|
|
67
|
+
"@seydx/node-av-linux-x64": "^2.5.1",
|
|
68
|
+
"@seydx/node-av-win32-arm64-mingw": "^2.5.1",
|
|
69
|
+
"@seydx/node-av-win32-arm64-msvc": "^2.5.1",
|
|
70
|
+
"@seydx/node-av-win32-x64-mingw": "^2.5.1",
|
|
71
|
+
"@seydx/node-av-win32-x64-msvc": "^2.5.1"
|
|
66
72
|
},
|
|
67
73
|
"devDependencies": {
|
|
68
74
|
"@camera.ui/ffmpeg": "^0.0.14",
|
|
@@ -78,14 +84,14 @@
|
|
|
78
84
|
"cpy-cli": "^6.0.0",
|
|
79
85
|
"cross-env": "^10.0.0",
|
|
80
86
|
"eslint": "^9.36.0",
|
|
81
|
-
"eslint-plugin-jsdoc": "^60.
|
|
87
|
+
"eslint-plugin-jsdoc": "^60.4.0",
|
|
82
88
|
"globals": "^16.4.0",
|
|
83
89
|
"node-addon-api": "^8.5.0",
|
|
84
90
|
"node-gyp": "^11.4.2",
|
|
85
91
|
"pngjs": "^7.0.0",
|
|
86
92
|
"prettier": "^3.6.2",
|
|
87
93
|
"rimraf": "^6.0.1",
|
|
88
|
-
"tsx": "^4.20.
|
|
94
|
+
"tsx": "^4.20.6",
|
|
89
95
|
"typedoc": "^0.28.13",
|
|
90
96
|
"typedoc-plugin-markdown": "^4.9.0",
|
|
91
97
|
"typedoc-vitepress-theme": "^1.1.2",
|
|
@@ -109,5 +115,8 @@
|
|
|
109
115
|
"repository": {
|
|
110
116
|
"type": "git",
|
|
111
117
|
"url": "git+https://github.com/seydx/av.git"
|
|
118
|
+
},
|
|
119
|
+
"dependencies": {
|
|
120
|
+
"unzipper": "^0.12.3"
|
|
112
121
|
}
|
|
113
122
|
}
|