homebridge-plugin-utils 1.19.0 → 1.20.0
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/dist/ffmpeg/options.d.ts +18 -13
- package/dist/ffmpeg/options.js +86 -77
- package/dist/ffmpeg/options.js.map +1 -1
- package/dist/ffmpeg/record.d.ts +53 -25
- package/dist/ffmpeg/record.js +46 -50
- package/dist/ffmpeg/record.js.map +1 -1
- package/dist/util.d.ts +30 -0
- package/dist/util.js.map +1 -1
- package/package.json +3 -3
package/dist/ffmpeg/options.d.ts
CHANGED
|
@@ -71,13 +71,14 @@ export interface FfmpegOptionsConfig {
|
|
|
71
71
|
*
|
|
72
72
|
* @property bitrate - Target video bitrate, in kilobits per second.
|
|
73
73
|
* @property fps - Target output frames per second.
|
|
74
|
+
* @property hardwareDecoding - Optional. If `true`, encoder options will account for hardware decoding (primarily for Intel QSV scenarios). Defaults to `true`.
|
|
74
75
|
* @property height - Output video height, in pixels.
|
|
75
76
|
* @property idrInterval - Interval (in seconds) between keyframes (IDR frames).
|
|
76
77
|
* @property inputFps - Input (source) frames per second.
|
|
77
78
|
* @property level - H.264 profile level for output.
|
|
78
79
|
* @property profile - H.264 profile for output.
|
|
79
|
-
* @property
|
|
80
|
-
*
|
|
80
|
+
* @property smartQuality - Optional and applicable only when not using hardware acceleration. If `true`, enables smart quality and variable bitrate optimizations.
|
|
81
|
+
* Defaults to `true`.
|
|
81
82
|
* @property width - Output video width, in pixels.
|
|
82
83
|
*
|
|
83
84
|
* @example
|
|
@@ -87,13 +88,14 @@ export interface FfmpegOptionsConfig {
|
|
|
87
88
|
*
|
|
88
89
|
* bitrate: 3000,
|
|
89
90
|
* fps: 30,
|
|
91
|
+
* hardwareDecoding: true,
|
|
92
|
+
* hardwareTranscoding: true,
|
|
90
93
|
* height: 1080,
|
|
91
94
|
* idrInterval: 2,
|
|
92
95
|
* inputFps: 30,
|
|
93
96
|
* level: H264Level.LEVEL4_0,
|
|
94
97
|
* profile: H264Profile.HIGH,
|
|
95
|
-
*
|
|
96
|
-
* useSmartQuality: true,
|
|
98
|
+
* smartQuality: true,
|
|
97
99
|
* width: 1920
|
|
98
100
|
* };
|
|
99
101
|
*
|
|
@@ -110,13 +112,14 @@ export interface FfmpegOptionsConfig {
|
|
|
110
112
|
export interface EncoderOptions {
|
|
111
113
|
bitrate: number;
|
|
112
114
|
fps: number;
|
|
115
|
+
hardwareDecoding?: boolean;
|
|
116
|
+
hardwareTranscoding?: boolean;
|
|
113
117
|
height: number;
|
|
114
118
|
idrInterval: number;
|
|
115
119
|
inputFps: number;
|
|
116
120
|
level: H264Level;
|
|
117
121
|
profile: H264Profile;
|
|
118
|
-
|
|
119
|
-
useHardwareDecoder?: boolean;
|
|
122
|
+
smartQuality?: boolean;
|
|
120
123
|
width: number;
|
|
121
124
|
}
|
|
122
125
|
/**
|
|
@@ -134,12 +137,14 @@ export interface EncoderOptions {
|
|
|
134
137
|
*
|
|
135
138
|
* bitrate: 3000,
|
|
136
139
|
* fps: 30,
|
|
140
|
+
* hardwareDecoding: true,
|
|
141
|
+
* hardwareTranscoding: true,
|
|
137
142
|
* height: 1080,
|
|
138
143
|
* idrInterval: 2,
|
|
139
144
|
* inputFps: 30,
|
|
140
145
|
* level: H264Level.LEVEL4_0,
|
|
141
146
|
* profile: H264Profile.HIGH,
|
|
142
|
-
*
|
|
147
|
+
* smartQuality: true,
|
|
143
148
|
* width: 1920
|
|
144
149
|
* };
|
|
145
150
|
* const args = ffmpegOpts.streamEncoder(encoderOptions);
|
|
@@ -160,6 +165,10 @@ export declare class FfmpegOptions {
|
|
|
160
165
|
*
|
|
161
166
|
*/
|
|
162
167
|
codecSupport: FfmpegCodecs;
|
|
168
|
+
/**
|
|
169
|
+
* The configuration options used to initialize this instance.
|
|
170
|
+
*/
|
|
171
|
+
readonly config: FfmpegOptionsConfig;
|
|
163
172
|
/**
|
|
164
173
|
* Indicates if debug logging is enabled.
|
|
165
174
|
*/
|
|
@@ -172,10 +181,6 @@ export declare class FfmpegOptions {
|
|
|
172
181
|
* Function returning the name for this options instance to be used for logging.
|
|
173
182
|
*/
|
|
174
183
|
readonly name: () => string;
|
|
175
|
-
/**
|
|
176
|
-
* The original options used to initialize this instance.
|
|
177
|
-
*/
|
|
178
|
-
readonly options: FfmpegOptionsConfig;
|
|
179
184
|
private readonly hwPixelFormat;
|
|
180
185
|
/**
|
|
181
186
|
* Creates an instance of Homebridge FFmpeg encoding and decoding options.
|
|
@@ -230,7 +235,7 @@ export declare class FfmpegOptions {
|
|
|
230
235
|
* Returns the video decoder arguments to use for decoding video.
|
|
231
236
|
*
|
|
232
237
|
* @param codec - Optional. Codec to decode ("h264" or "hevc").
|
|
233
|
-
* @returns Array of FFmpeg command-line arguments for video decoding.
|
|
238
|
+
* @returns Array of FFmpeg command-line arguments for video decoding or an empty array if the codec isn't supported.
|
|
234
239
|
*
|
|
235
240
|
* @example
|
|
236
241
|
*
|
|
@@ -267,7 +272,7 @@ export declare class FfmpegOptions {
|
|
|
267
272
|
* inputFps: 30,
|
|
268
273
|
* level: H264Level.LEVEL3_1,
|
|
269
274
|
* profile: H264Profile.MAIN,
|
|
270
|
-
*
|
|
275
|
+
* smartQuality: true,
|
|
271
276
|
* width: 1280
|
|
272
277
|
* };
|
|
273
278
|
*
|
package/dist/ffmpeg/options.js
CHANGED
|
@@ -18,12 +18,14 @@ import { HOMEKIT_STREAMING_HEADROOM, RPI_GPU_MINIMUM } from "./settings.js";
|
|
|
18
18
|
*
|
|
19
19
|
* bitrate: 3000,
|
|
20
20
|
* fps: 30,
|
|
21
|
+
* hardwareDecoding: true,
|
|
22
|
+
* hardwareTranscoding: true,
|
|
21
23
|
* height: 1080,
|
|
22
24
|
* idrInterval: 2,
|
|
23
25
|
* inputFps: 30,
|
|
24
26
|
* level: H264Level.LEVEL4_0,
|
|
25
27
|
* profile: H264Profile.HIGH,
|
|
26
|
-
*
|
|
28
|
+
* smartQuality: true,
|
|
27
29
|
* width: 1920
|
|
28
30
|
* };
|
|
29
31
|
* const args = ffmpegOpts.streamEncoder(encoderOptions);
|
|
@@ -44,6 +46,10 @@ export class FfmpegOptions {
|
|
|
44
46
|
*
|
|
45
47
|
*/
|
|
46
48
|
codecSupport;
|
|
49
|
+
/**
|
|
50
|
+
* The configuration options used to initialize this instance.
|
|
51
|
+
*/
|
|
52
|
+
config;
|
|
47
53
|
/**
|
|
48
54
|
* Indicates if debug logging is enabled.
|
|
49
55
|
*/
|
|
@@ -56,10 +62,6 @@ export class FfmpegOptions {
|
|
|
56
62
|
* Function returning the name for this options instance to be used for logging.
|
|
57
63
|
*/
|
|
58
64
|
name;
|
|
59
|
-
/**
|
|
60
|
-
* The original options used to initialize this instance.
|
|
61
|
-
*/
|
|
62
|
-
options;
|
|
63
65
|
hwPixelFormat;
|
|
64
66
|
/**
|
|
65
67
|
* Creates an instance of Homebridge FFmpeg encoding and decoding options.
|
|
@@ -74,11 +76,11 @@ export class FfmpegOptions {
|
|
|
74
76
|
*/
|
|
75
77
|
constructor(options) {
|
|
76
78
|
this.codecSupport = options.codecSupport;
|
|
79
|
+
this.config = options;
|
|
77
80
|
this.debug = options.debug ?? false;
|
|
78
81
|
this.hwPixelFormat = [];
|
|
79
82
|
this.log = options.log;
|
|
80
83
|
this.name = options.name;
|
|
81
|
-
this.options = options;
|
|
82
84
|
// Configure our hardware acceleration support.
|
|
83
85
|
this.configureHwAccel();
|
|
84
86
|
}
|
|
@@ -111,23 +113,23 @@ export class FfmpegOptions {
|
|
|
111
113
|
// Utility to return which hardware acceleration features are currently available to us.
|
|
112
114
|
const accelCategories = () => {
|
|
113
115
|
const categories = [];
|
|
114
|
-
if (this.
|
|
116
|
+
if (this.config.hardwareDecoding) {
|
|
115
117
|
categories.push("decoding");
|
|
116
118
|
}
|
|
117
|
-
if (this.
|
|
119
|
+
if (this.config.hardwareTranscoding) {
|
|
118
120
|
categories.push("transcoding");
|
|
119
121
|
}
|
|
120
122
|
return categories.join(" and ");
|
|
121
123
|
};
|
|
122
124
|
// Hardware-accelerated decoding is enabled by default, where supported. Let's select the decoder options accordingly where supported.
|
|
123
|
-
if (this.
|
|
125
|
+
if (this.config.hardwareDecoding) {
|
|
124
126
|
// Utility function to check that we have a specific decoder codec available to us.
|
|
125
127
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
126
128
|
const validateDecoder = (codec, pixelFormat) => {
|
|
127
|
-
if (!this.
|
|
129
|
+
if (!this.config.codecSupport.hasDecoder("h264", codec)) {
|
|
128
130
|
this.log.error("Unable to enable hardware-accelerated decoding. Your video processor does not have support for the " + codec + " decoder. " +
|
|
129
131
|
"Using software decoding instead.");
|
|
130
|
-
this.
|
|
132
|
+
this.config.hardwareDecoding = false;
|
|
131
133
|
return false;
|
|
132
134
|
}
|
|
133
135
|
this.hwPixelFormat.push(...pixelFormat);
|
|
@@ -135,10 +137,10 @@ export class FfmpegOptions {
|
|
|
135
137
|
};
|
|
136
138
|
// Utility function to check that we have a specific decoder codec available to us.
|
|
137
139
|
const validateHwAccel = (accel, pixelFormat) => {
|
|
138
|
-
if (!this.
|
|
140
|
+
if (!this.config.codecSupport.hasHwAccel(accel)) {
|
|
139
141
|
this.log.error("Unable to enable hardware-accelerated decoding. Your video processor does not have support for the " + accel + " hardware accelerator. " +
|
|
140
142
|
"Using software decoding instead.");
|
|
141
|
-
this.
|
|
143
|
+
this.config.hardwareDecoding = false;
|
|
142
144
|
return false;
|
|
143
145
|
}
|
|
144
146
|
this.hwPixelFormat.push(...pixelFormat);
|
|
@@ -152,31 +154,31 @@ export class FfmpegOptions {
|
|
|
152
154
|
break;
|
|
153
155
|
case "raspbian":
|
|
154
156
|
// If it's less than the minimum hardware GPU memory we need on an Raspberry Pi, we revert back to our default decoder.
|
|
155
|
-
if (this.
|
|
157
|
+
if (this.config.codecSupport.gpuMem < RPI_GPU_MINIMUM) {
|
|
156
158
|
this.log.info("Disabling hardware-accelerated %s. Adjust the GPU memory configuration on your Raspberry Pi to at least %s MB to enable it.", accelCategories(), RPI_GPU_MINIMUM);
|
|
157
|
-
this.
|
|
158
|
-
this.
|
|
159
|
+
this.config.hardwareDecoding = false;
|
|
160
|
+
this.config.hardwareTranscoding = false;
|
|
159
161
|
return false;
|
|
160
162
|
}
|
|
161
163
|
// Verify that we have the hardware decoder available to us. Unfortunately, at the moment, it seems that hardware decoding is flaky, at best, on Raspberry Pi.
|
|
162
164
|
// validateDecoder("h264_mmal", [ "mmal", "yuv420p" ]);
|
|
163
165
|
// validateDecoder("h264_v4l2m2ml", [ "yuv420p" ]);
|
|
164
|
-
this.
|
|
166
|
+
this.config.hardwareDecoding = false;
|
|
165
167
|
break;
|
|
166
168
|
default:
|
|
167
169
|
// Back to software decoding unless we're on a known system that always supports hardware decoding.
|
|
168
|
-
this.
|
|
170
|
+
this.config.hardwareDecoding = false;
|
|
169
171
|
break;
|
|
170
172
|
}
|
|
171
173
|
}
|
|
172
174
|
// If we've enabled hardware-accelerated transcoding, let's select the encoder options accordingly where supported.
|
|
173
|
-
if (this.
|
|
175
|
+
if (this.config.hardwareTranscoding) {
|
|
174
176
|
// Utility function to check that we have a specific encoder codec available to us.
|
|
175
177
|
const validateEncoder = (codec) => {
|
|
176
|
-
if (!this.
|
|
178
|
+
if (!this.config.codecSupport.hasEncoder("h264", codec)) {
|
|
177
179
|
this.log.error("Unable to enable hardware-accelerated transcoding. Your video processor does not have support for the " + codec + " encoder. " +
|
|
178
180
|
"Using software transcoding instead.");
|
|
179
|
-
this.
|
|
181
|
+
this.config.hardwareTranscoding = false;
|
|
180
182
|
return false;
|
|
181
183
|
}
|
|
182
184
|
return true;
|
|
@@ -187,7 +189,7 @@ export class FfmpegOptions {
|
|
|
187
189
|
// Verify that we have the hardware encoder available to us.
|
|
188
190
|
validateEncoder("h264_videotoolbox");
|
|
189
191
|
// Validate that we have access to the AudioToolbox AAC encoder.
|
|
190
|
-
if (!this.
|
|
192
|
+
if (!this.config.codecSupport.hasEncoder("aac", "aac_at")) {
|
|
191
193
|
this.log.error("Your video processor does not have support for the native macOS AAC encoder, aac_at. Will attempt to use libfdk_aac instead.");
|
|
192
194
|
}
|
|
193
195
|
break;
|
|
@@ -203,26 +205,26 @@ export class FfmpegOptions {
|
|
|
203
205
|
break;
|
|
204
206
|
default:
|
|
205
207
|
// Let's see if we have Intel QuickSync hardware decoding available to us.
|
|
206
|
-
if (this.
|
|
207
|
-
this.
|
|
208
|
-
this.
|
|
209
|
-
this.
|
|
208
|
+
if (this.config.codecSupport.hasHwAccel("qsv") &&
|
|
209
|
+
this.config.codecSupport.hasDecoder("h264", "h264_qsv") && this.config.codecSupport.hasEncoder("h264", "h264_qsv") &&
|
|
210
|
+
this.config.codecSupport.hasDecoder("hevc", "hevc_qsv") && this.config.codecSupport.hasEncoder("hevc", "hevc_qsv")) {
|
|
211
|
+
this.config.hardwareDecoding = true;
|
|
210
212
|
this.hwPixelFormat.push("qsv", "yuv420p");
|
|
211
213
|
logMessage = "Intel Quick Sync Video";
|
|
212
214
|
}
|
|
213
215
|
else {
|
|
214
216
|
// Back to software encoding.
|
|
215
|
-
this.
|
|
216
|
-
this.
|
|
217
|
+
this.config.hardwareDecoding = false;
|
|
218
|
+
this.config.hardwareTranscoding = false;
|
|
217
219
|
}
|
|
218
220
|
break;
|
|
219
221
|
}
|
|
220
222
|
}
|
|
221
223
|
// Inform the user.
|
|
222
|
-
if (this.
|
|
224
|
+
if (this.config.hardwareDecoding || this.config.hardwareTranscoding) {
|
|
223
225
|
this.log.info("Hardware-accelerated " + accelCategories() + " enabled" + (logMessage.length ? ": " + logMessage : "") + ".");
|
|
224
226
|
}
|
|
225
|
-
return this.
|
|
227
|
+
return this.config.hardwareTranscoding;
|
|
226
228
|
}
|
|
227
229
|
/**
|
|
228
230
|
* Returns the audio encoder arguments to use when transcoding.
|
|
@@ -235,15 +237,15 @@ export class FfmpegOptions {
|
|
|
235
237
|
// Utility function to return a default audio encoder codec.
|
|
236
238
|
const defaultAudioEncoderOptions = () => {
|
|
237
239
|
const audioOptions = [];
|
|
238
|
-
if (this.
|
|
240
|
+
if (this.config.codecSupport.hasEncoder("aac", "libfdk_aac")) {
|
|
239
241
|
// Default to libfdk_aac since FFmpeg doesn't natively support AAC-ELD. We use the following options by default:
|
|
240
242
|
//
|
|
241
|
-
// -
|
|
243
|
+
// -codec:a libfdk_aac Use the libfdk_aac encoder.
|
|
242
244
|
// -afterburner 1 Increases audio quality at the expense of needing a little bit more computational power in libfdk_aac.
|
|
243
245
|
// -eld_v2 1 Use the enhanced low delay v2 standard for better audio characteristics.
|
|
244
|
-
audioOptions.push("-
|
|
246
|
+
audioOptions.push("-codec:a", "libfdk_aac", "-afterburner", "1", "-eld_v2", "1");
|
|
245
247
|
// If we're using Jellyfin's FFmpeg, it's libfdk_aac is broken and crashes when using spectral band replication.
|
|
246
|
-
if (!/-Jellyfin
|
|
248
|
+
if (!/-Jellyfin$/.test(this.config.codecSupport.ffmpegVersion)) {
|
|
247
249
|
// -eld_sbr 1 Use spectral band replication to further enhance audio.
|
|
248
250
|
audioOptions.push("-eld_sbr", "1");
|
|
249
251
|
}
|
|
@@ -254,16 +256,16 @@ export class FfmpegOptions {
|
|
|
254
256
|
case "macOS.Apple":
|
|
255
257
|
case "macOS.Intel":
|
|
256
258
|
// If we don't have audiotoolbox available, let's default back to libfdk_aac.
|
|
257
|
-
if (!this.
|
|
259
|
+
if (!this.config.codecSupport.hasEncoder("aac", "aac_at")) {
|
|
258
260
|
encoderOptions = defaultAudioEncoderOptions();
|
|
259
261
|
break;
|
|
260
262
|
}
|
|
261
263
|
// aac_at is the macOS audio encoder API. We use the following options:
|
|
262
264
|
//
|
|
263
|
-
// -
|
|
265
|
+
// -codec:a aac_at Use the aac_at encoder on macOS.
|
|
264
266
|
// -aac_at_mode cvbr Use the constrained variable bitrate setting to allow the encoder to optimize audio within the requested bitrates.
|
|
265
267
|
encoderOptions = [
|
|
266
|
-
"-
|
|
268
|
+
"-codec:a", "aac_at",
|
|
267
269
|
"-aac_at_mode", "cvbr"
|
|
268
270
|
];
|
|
269
271
|
break;
|
|
@@ -285,7 +287,7 @@ export class FfmpegOptions {
|
|
|
285
287
|
* Returns the video decoder arguments to use for decoding video.
|
|
286
288
|
*
|
|
287
289
|
* @param codec - Optional. Codec to decode ("h264" or "hevc").
|
|
288
|
-
* @returns Array of FFmpeg command-line arguments for video decoding.
|
|
290
|
+
* @returns Array of FFmpeg command-line arguments for video decoding or an empty array if the codec isn't supported.
|
|
289
291
|
*
|
|
290
292
|
* @example
|
|
291
293
|
*
|
|
@@ -294,26 +296,33 @@ export class FfmpegOptions {
|
|
|
294
296
|
* ```
|
|
295
297
|
*/
|
|
296
298
|
videoDecoder(codec = "h264") {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
+
switch (codec.toLowerCase()) {
|
|
300
|
+
case "h264":
|
|
301
|
+
codec = "h264";
|
|
302
|
+
break;
|
|
299
303
|
case "h265":
|
|
300
304
|
case "hevc":
|
|
301
305
|
codec = "hevc";
|
|
302
306
|
break;
|
|
303
307
|
default:
|
|
304
|
-
|
|
305
|
-
|
|
308
|
+
// If it's unknown to us, we bail out.
|
|
309
|
+
return [];
|
|
306
310
|
}
|
|
311
|
+
// Intel QSV decoder to codec mapping.
|
|
312
|
+
const QSV_DECODER = {
|
|
313
|
+
"h264": "h264_qsv",
|
|
314
|
+
"hevc": "hevc_qsv"
|
|
315
|
+
};
|
|
307
316
|
// Default to no special decoder options for inbound streams.
|
|
308
317
|
let decoderOptions = [];
|
|
309
318
|
// If we've enabled hardware-accelerated transcoding, let's select decoder options accordingly where supported.
|
|
310
|
-
if (this.
|
|
319
|
+
if (this.config.hardwareDecoding) {
|
|
311
320
|
switch (this.codecSupport.hostSystem) {
|
|
312
321
|
case "macOS.Apple":
|
|
313
322
|
case "macOS.Intel":
|
|
314
323
|
// h264_videotoolbox is the macOS hardware decoder and encoder API. We use the following options for decoding video:
|
|
315
324
|
//
|
|
316
|
-
// -hwaccel videotoolbox
|
|
325
|
+
// -hwaccel videotoolbox Select Video Toolbox for hardware-accelerated H.264 decoding.
|
|
317
326
|
decoderOptions = [
|
|
318
327
|
"-hwaccel", "videotoolbox"
|
|
319
328
|
];
|
|
@@ -321,20 +330,20 @@ export class FfmpegOptions {
|
|
|
321
330
|
case "raspbian":
|
|
322
331
|
// h264_mmal is the preferred Raspberry Pi hardware decoder codec. We use the following options for decoding video:
|
|
323
332
|
//
|
|
324
|
-
// -
|
|
333
|
+
// -codec:v h264_mmal Select the Multimedia Abstraction Layer codec for hardware-accelerated H.264 processing.
|
|
325
334
|
decoderOptions = [
|
|
326
|
-
// "-
|
|
335
|
+
// "-codec:v", "h264_mmal"
|
|
327
336
|
];
|
|
328
337
|
break;
|
|
329
338
|
default:
|
|
330
339
|
// h264_qsv is the Intel Quick Sync Video hardware encoder and decoder.
|
|
331
340
|
//
|
|
332
|
-
// -hwaccel qsv
|
|
333
|
-
// -
|
|
341
|
+
// -hwaccel qsv Select Quick Sync Video to enable hardware-accelerated H.264 decoding.
|
|
342
|
+
// -codec:v h264_qsv or hevc_qsv Select the Quick Sync Video codec for hardware-accelerated H.264 or HEVC processing.
|
|
334
343
|
decoderOptions = [
|
|
335
344
|
"-hwaccel", "qsv",
|
|
336
345
|
"-hwaccel_output_format", "qsv",
|
|
337
|
-
"-
|
|
346
|
+
"-codec:v", QSV_DECODER[codec]
|
|
338
347
|
];
|
|
339
348
|
break;
|
|
340
349
|
}
|
|
@@ -348,15 +357,15 @@ export class FfmpegOptions {
|
|
|
348
357
|
*/
|
|
349
358
|
get cropFilter() {
|
|
350
359
|
// If we haven't enabled cropping, tell the crop filter to do nothing.
|
|
351
|
-
if (!this.
|
|
360
|
+
if (!this.config.crop) {
|
|
352
361
|
return "crop=w=iw*100:h=ih*100:x=iw*0:y=ih*0";
|
|
353
362
|
}
|
|
354
363
|
// Generate our crop filter based on what the user has configured.
|
|
355
364
|
return "crop=" + [
|
|
356
|
-
"w=iw*" + this.
|
|
357
|
-
"h=ih*" + this.
|
|
358
|
-
"x=iw*" + this.
|
|
359
|
-
"y=ih*" + this.
|
|
365
|
+
"w=iw*" + this.config.crop.width.toString(),
|
|
366
|
+
"h=ih*" + this.config.crop.height.toString(),
|
|
367
|
+
"x=iw*" + this.config.crop.x.toString(),
|
|
368
|
+
"y=ih*" + this.config.crop.y.toString()
|
|
360
369
|
].join(":");
|
|
361
370
|
}
|
|
362
371
|
/**
|
|
@@ -381,7 +390,7 @@ export class FfmpegOptions {
|
|
|
381
390
|
* inputFps: 30,
|
|
382
391
|
* level: H264Level.LEVEL3_1,
|
|
383
392
|
* profile: H264Profile.MAIN,
|
|
384
|
-
*
|
|
393
|
+
* smartQuality: true,
|
|
385
394
|
* width: 1280
|
|
386
395
|
* };
|
|
387
396
|
*
|
|
@@ -393,7 +402,7 @@ export class FfmpegOptions {
|
|
|
393
402
|
defaultVideoEncoderOptions(options) {
|
|
394
403
|
const videoFilters = [];
|
|
395
404
|
// Default smart quality to true unless specified.
|
|
396
|
-
options = Object.assign({}, {
|
|
405
|
+
options = Object.assign({}, { smartQuality: true }, options);
|
|
397
406
|
// Set our FFmpeg video filter options:
|
|
398
407
|
//
|
|
399
408
|
// format= Set the pixel formats we want to target for output.
|
|
@@ -408,7 +417,7 @@ export class FfmpegOptions {
|
|
|
408
417
|
}
|
|
409
418
|
// Default to the tried-and-true libx264. We use the following options by default:
|
|
410
419
|
//
|
|
411
|
-
// -
|
|
420
|
+
// -codec:v libx264 Use the excellent libx264 H.264 encoder.
|
|
412
421
|
// -preset veryfast Use the veryfast encoding preset in libx264, which provides a good balance of encoding speed and quality.
|
|
413
422
|
// -profile:v Use the H.264 profile that HomeKit is requesting when encoding.
|
|
414
423
|
// -level:v Use the H.264 profile level that HomeKit is requesting when encoding.
|
|
@@ -422,7 +431,7 @@ export class FfmpegOptions {
|
|
|
422
431
|
// -maxrate bitrate The maximum bitrate tolerance, used with -bufsize. This provides an upper bound on bitrate, with a little bit extra to
|
|
423
432
|
// allow encoders some variation in order to maximize quality while honoring bandwidth constraints.
|
|
424
433
|
const encoderOptions = [
|
|
425
|
-
"-
|
|
434
|
+
"-codec:v", "libx264",
|
|
426
435
|
"-preset", "veryfast",
|
|
427
436
|
"-profile:v", this.getH264Profile(options.profile),
|
|
428
437
|
"-level:v", this.getH264Level(options.level),
|
|
@@ -431,12 +440,12 @@ export class FfmpegOptions {
|
|
|
431
440
|
"-filter:v", videoFilters.join(", "),
|
|
432
441
|
"-g:v", (options.fps * options.idrInterval).toString(),
|
|
433
442
|
"-bufsize", (2 * options.bitrate).toString() + "k",
|
|
434
|
-
"-maxrate", (options.bitrate + (options.
|
|
443
|
+
"-maxrate", (options.bitrate + (options.smartQuality ? HOMEKIT_STREAMING_HEADROOM : 0)).toString() + "k"
|
|
435
444
|
];
|
|
436
445
|
// Using libx264's constant rate factor mode produces generally better results across the board. We use a capped CRF approach, allowing libx264 to
|
|
437
446
|
// make intelligent choices about how to adjust bitrate to achieve a certain quality level depending on the complexity of the scene being encoded, but
|
|
438
447
|
// constraining it to a maximum bitrate to stay within the bandwidth constraints HomeKit is requesting.
|
|
439
|
-
if (options.
|
|
448
|
+
if (options.smartQuality) {
|
|
440
449
|
// -crf 20 Use a constant rate factor of 20, to allow libx264 the ability to vary bitrates to achieve the visual quality we
|
|
441
450
|
// want, constrained by our maximum bitrate.
|
|
442
451
|
encoderOptions.push("-crf", "20");
|
|
@@ -459,7 +468,7 @@ export class FfmpegOptions {
|
|
|
459
468
|
*/
|
|
460
469
|
recordEncoder(options) {
|
|
461
470
|
// We always disable smart quality when recording due to HomeKit's strict requirements here.
|
|
462
|
-
options.
|
|
471
|
+
options.smartQuality = false;
|
|
463
472
|
// Generaly, we default to using the same encoding options we use to transcode livestreams, unless we have platform-specific quirks we need to address,
|
|
464
473
|
// such as where we can have hardware-accelerated transcoded livestreaming, but not hardware-accelerated HKSV event recording. The other noteworthy
|
|
465
474
|
// aspect here is that HKSV is quite specific in what it wants, and isn't vary tolerant of creative license in how you may choose to alter bitrate to
|
|
@@ -488,20 +497,20 @@ export class FfmpegOptions {
|
|
|
488
497
|
*/
|
|
489
498
|
streamEncoder(options) {
|
|
490
499
|
// Default hardware decoding and smart quality to true unless specified.
|
|
491
|
-
options = Object.assign({}, {
|
|
500
|
+
options = Object.assign({}, { hardwareDecoding: true, hardwareTranscoding: this.config.hardwareTranscoding, smartQuality: true }, options);
|
|
492
501
|
// In case we don't have a defined pixel format.
|
|
493
502
|
if (!this.hwPixelFormat.length) {
|
|
494
503
|
this.hwPixelFormat.push("yuvj420p");
|
|
495
504
|
}
|
|
496
505
|
// If we aren't hardware-accelerated, we default to libx264.
|
|
497
|
-
if (!this.options.hardwareTranscoding) {
|
|
506
|
+
if (!this.config.hardwareTranscoding || !options.hardwareTranscoding) {
|
|
498
507
|
return this.defaultVideoEncoderOptions(options);
|
|
499
508
|
}
|
|
500
509
|
// If we've enabled hardware-accelerated transcoding, let's select encoder options accordingly.
|
|
501
510
|
//
|
|
502
511
|
// We begin by adjusting the maximum bitrate tolerance used with -bufsize. This provides an upper bound on bitrate, with a little bit extra to allow encoders some
|
|
503
512
|
// variation in order to maximize quality while honoring bandwidth constraints.
|
|
504
|
-
const adjustedMaxBitrate = options.bitrate + (options.
|
|
513
|
+
const adjustedMaxBitrate = options.bitrate + (options.smartQuality ? HOMEKIT_STREAMING_HEADROOM : 0);
|
|
505
514
|
// Check the input and output frame rates to see if we need to change it.
|
|
506
515
|
const useFpsFilter = options.fps !== options.inputFps;
|
|
507
516
|
// Initialize our options.
|
|
@@ -515,7 +524,7 @@ export class FfmpegOptions {
|
|
|
515
524
|
// a power of two.
|
|
516
525
|
videoFilters.push("scale=-2:min(ih\\," + options.height.toString() + ")");
|
|
517
526
|
// Crop the stream, if the user has requested it.
|
|
518
|
-
if (this.
|
|
527
|
+
if (this.config.crop) {
|
|
519
528
|
videoFilters.push(this.cropFilter);
|
|
520
529
|
}
|
|
521
530
|
// fps=fps= Use the fps filter to provide the frame rate requested by HomeKit. This has better performance characteristics rather than using
|
|
@@ -527,7 +536,7 @@ export class FfmpegOptions {
|
|
|
527
536
|
case "macOS.Apple":
|
|
528
537
|
// h264_videotoolbox is the macOS hardware encoder API. We use the following options on Apple Silicon:
|
|
529
538
|
//
|
|
530
|
-
// -
|
|
539
|
+
// -codec:v Specify the macOS hardware encoder, h264_videotoolbox.
|
|
531
540
|
// -allow_sw 1 Allow the use of the software encoder if the hardware encoder is occupied or unavailable.
|
|
532
541
|
// This allows us to scale when we get multiple streaming requests simultaneously and consume all the available encode engines.
|
|
533
542
|
// -realtime 1 We prefer speed over quality - if the encoder has to make a choice, sacrifice one for the other.
|
|
@@ -543,8 +552,8 @@ export class FfmpegOptions {
|
|
|
543
552
|
// livestreamng exerience.
|
|
544
553
|
// -bufsize size This is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
545
554
|
// -maxrate bitrate The maximum bitrate tolerance used in concert with -bufsize to constrain the maximum bitrate permitted.
|
|
546
|
-
encoderOptions.push("-
|
|
547
|
-
if (options.
|
|
555
|
+
encoderOptions.push("-codec:v", "h264_videotoolbox", "-allow_sw", "1", "-realtime", "1", "-coder", "cabac", "-profile:v", this.getH264Profile(options.profile), "-level:v", "0", "-bf", "0", "-noautoscale", "-filter:v", videoFilters.join(", "), "-g:v", (options.fps * options.idrInterval).toString(), "-bufsize", (2 * options.bitrate).toString() + "k", "-maxrate", adjustedMaxBitrate.toString() + "k");
|
|
556
|
+
if (options.smartQuality) {
|
|
548
557
|
// -q:v 90 Use a fixed quality scale of 90, to allow videotoolbox the ability to vary bitrates to achieve the visual quality we want,
|
|
549
558
|
// constrained by our maximum bitrate. This is an Apple Silicon-specific feature.
|
|
550
559
|
encoderOptions.push("-q:v", "90");
|
|
@@ -557,7 +566,7 @@ export class FfmpegOptions {
|
|
|
557
566
|
case "macOS.Intel":
|
|
558
567
|
// h264_videotoolbox is the macOS hardware encoder API. We use the following options on Intel-based Macs:
|
|
559
568
|
//
|
|
560
|
-
// -
|
|
569
|
+
// -codec:v Specify the macOS hardware encoder, h264_videotoolbox.
|
|
561
570
|
// -allow_sw 1 Allow the use of the software encoder if the hardware encoder is occupied or unavailable.
|
|
562
571
|
// This allows us to scale when we get multiple streaming requests simultaneously that can consume all the available encode engines.
|
|
563
572
|
// -realtime 1 We prefer speed over quality - if the encoder has to make a choice, sacrifice one for the other.
|
|
@@ -576,7 +585,7 @@ export class FfmpegOptions {
|
|
|
576
585
|
// -bufsize size This is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
577
586
|
// -maxrate bitrate The maximum bitrate tolerance used in concert with -bufsize to constrain the maximum bitrate permitted.
|
|
578
587
|
return [
|
|
579
|
-
"-
|
|
588
|
+
"-codec:v", "h264_videotoolbox",
|
|
580
589
|
"-allow_sw", "1",
|
|
581
590
|
"-realtime", "1",
|
|
582
591
|
"-coder", "cabac",
|
|
@@ -593,7 +602,7 @@ export class FfmpegOptions {
|
|
|
593
602
|
case "raspbian":
|
|
594
603
|
// h264_v4l2m2m is the preferred interface to the Raspberry Pi hardware encoder API. We use the following options:
|
|
595
604
|
//
|
|
596
|
-
// -
|
|
605
|
+
// -codec:v Specify the Raspberry Pi hardware encoder, h264_v4l2m2m.
|
|
597
606
|
// -noautoscale Don't attempt to scale the video stream automatically.
|
|
598
607
|
// -filter:v Set the pixel format, adjust the frame rate if needed, and scale the video to the size we want while respecting aspect ratios and
|
|
599
608
|
// ensuring our final dimensions are a power of two.
|
|
@@ -604,7 +613,7 @@ export class FfmpegOptions {
|
|
|
604
613
|
// -bufsize size This is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
605
614
|
// -maxrate bitrate The maximum bitrate tolerance used in concert with -bufsize to constrain the maximum bitrate permitted.
|
|
606
615
|
return [
|
|
607
|
-
"-
|
|
616
|
+
"-codec:v", "h264_v4l2m2m",
|
|
608
617
|
"-profile:v", this.getH264Profile(options.profile, true),
|
|
609
618
|
"-bf", "0",
|
|
610
619
|
"-noautoscale",
|
|
@@ -623,7 +632,7 @@ export class FfmpegOptions {
|
|
|
623
632
|
// hwupload If we aren't hardware decoding, we need to upload decoded frames to QSV to process them.
|
|
624
633
|
// format=same Set the output pixel format to the same as the input, since it's already in the GPU.
|
|
625
634
|
// w=...:h... Scale the video to the size that's being requested while respecting aspect ratios.
|
|
626
|
-
videoFilters.push((options.
|
|
635
|
+
videoFilters.push((options.hardwareDecoding ? "" : "hwupload,") + "vpp_qsv=" + [
|
|
627
636
|
"format=same",
|
|
628
637
|
"w=min(iw\\, (iw / ih) * " + options.height.toString() + ")",
|
|
629
638
|
"h=min(ih\\, " + options.height.toString() + ")"
|
|
@@ -635,7 +644,7 @@ export class FfmpegOptions {
|
|
|
635
644
|
}
|
|
636
645
|
// h264_qsv is the Intel Quick Sync Video hardware encoder API. We use the following options:
|
|
637
646
|
//
|
|
638
|
-
// -
|
|
647
|
+
// -codec:v Specify the Intel Quick Sync Video hardware encoder, h264_qsv.
|
|
639
648
|
// -profile:v Use the H.264 profile that HomeKit is requesting when encoding.
|
|
640
649
|
// -level:v 0 We override what HomeKit requests for the H.264 profile level when we're using hardware-accelerated transcoding because
|
|
641
650
|
// the hardware encoder will determine which levels to use. Setting it to 0 allows the encoder to decide for itself.
|
|
@@ -649,8 +658,8 @@ export class FfmpegOptions {
|
|
|
649
658
|
// livestreamng exerience.
|
|
650
659
|
// -bufsize size This is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
651
660
|
// -maxrate bitrate The maximum bitrate tolerance used in concert with -bufsize to constrain the maximum bitrate permitted.
|
|
652
|
-
encoderOptions.push("-
|
|
653
|
-
if (options.
|
|
661
|
+
encoderOptions.push("-codec:v", "h264_qsv", "-profile:v", this.getH264Profile(options.profile), "-level:v", "0", "-bf", "0", "-noautoscale", "-init_hw_device", "qsv=hw", "-filter_hw_device", "hw", "-filter:v", videoFilters.join(", "), "-g:v", (options.fps * options.idrInterval).toString(), "-bufsize", (2 * options.bitrate).toString() + "k", "-maxrate", adjustedMaxBitrate.toString() + "k");
|
|
662
|
+
if (options.smartQuality) {
|
|
654
663
|
// -global_quality 20 Use a global quality setting of 20, to allow QSV the ability to vary bitrates to achieve the visual quality we want,
|
|
655
664
|
// constrained by our maximum bitrate. This leverages a QSV-specific feature known as intelligent constant quality.
|
|
656
665
|
encoderOptions.push("-global_quality", "20");
|
|
@@ -668,7 +677,7 @@ export class FfmpegOptions {
|
|
|
668
677
|
* @returns Maximum supported pixel count.
|
|
669
678
|
*/
|
|
670
679
|
get hostSystemMaxPixels() {
|
|
671
|
-
if (this.
|
|
680
|
+
if (this.config.hardwareTranscoding) {
|
|
672
681
|
switch (this.codecSupport.hostSystem) {
|
|
673
682
|
case "raspbian":
|
|
674
683
|
// For constrained environments like Raspberry Pi, when hardware transcoding has been selected for a camera, we limit the available source streams to no more
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/ffmpeg/options.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/ffmpeg/options.ts"],"names":[],"mappings":"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"}
|
package/dist/ffmpeg/record.d.ts
CHANGED
|
@@ -1,23 +1,58 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* FFmpeg process management for HomeKit Secure Video (HKSV) events and fMP4 livestreaming.
|
|
3
|
+
*
|
|
4
|
+
* This module defines classes for orchestrating FFmpeg processes that produce fMP4 segments suitable for HomeKit Secure Video and realtime livestreaming scenarios. It
|
|
5
|
+
* handles process lifecycle, segment buffering, initialization segment detection, and streaming event generation, abstracting away the complexity of interacting directly
|
|
6
|
+
* with FFmpeg for these workflows.
|
|
7
|
+
*
|
|
8
|
+
* Key features:
|
|
9
|
+
*
|
|
10
|
+
* - Automated setup and management of FFmpeg processes for HKSV event recording and livestreaming (with support for audio and video).
|
|
11
|
+
* - Parsing and generation of fMP4 boxes/segments for HomeKit, including initialization and media segments.
|
|
12
|
+
* - Async generator APIs for efficient, event-driven segment handling.
|
|
13
|
+
* - Flexible error handling and timeouts for HomeKit’s strict realtime requirements.
|
|
14
|
+
* - Designed for Homebridge plugin authors or advanced users who need robust, platform-aware FFmpeg session control for HomeKit and related integrations.
|
|
15
|
+
*
|
|
16
|
+
* @module
|
|
17
|
+
*/
|
|
18
|
+
import { type CameraRecordingConfiguration } from "homebridge";
|
|
19
|
+
import { type Nullable, type PartialWithId } from "../util.js";
|
|
3
20
|
import type { FfmpegOptions } from "./options.js";
|
|
4
21
|
import { FfmpegProcess } from "./process.js";
|
|
5
22
|
/**
|
|
6
23
|
* Options for configuring an fMP4 recording or livestream session.
|
|
7
24
|
*
|
|
8
|
-
* @property
|
|
9
|
-
* @property
|
|
10
|
-
* @property
|
|
11
|
-
* @property
|
|
12
|
-
* @property
|
|
13
|
-
* @property url - Source URL for livestreaming (RTSP).
|
|
25
|
+
* @property audioStream - Audio stream input to use, if the input contains multiple audio streams. Defaults to `0` (the first audio stream).
|
|
26
|
+
* @property codec - The codec for the input video stream. Valid values are `h264` and `hevc`. Defaults to `h264`.
|
|
27
|
+
* @property enableAudio - Indicates whether to enable audio or not.
|
|
28
|
+
* @property hardwareTranscoding - Indicates whether or not to use hardware accelerated transcoding, if available. Defaults to what was specified in ffmpegOptions.
|
|
29
|
+
* @property videoStream - Video stream input to use, if the input contains multiple video streams. Defaults to `0` (the first video stream).
|
|
14
30
|
*/
|
|
15
|
-
interface
|
|
31
|
+
interface Fmp4CommonOptions {
|
|
32
|
+
audioStream: number;
|
|
16
33
|
codec: string;
|
|
34
|
+
enableAudio: boolean;
|
|
35
|
+
hardwareTranscoding: boolean;
|
|
36
|
+
videoStream: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Options for configuring an fMP4 recording or livestream session.
|
|
40
|
+
*
|
|
41
|
+
* @property fps - The video frames per second for the session.
|
|
42
|
+
* @property probesize - Number of bytes to analyze for stream information.
|
|
43
|
+
* @property timeshift - Timeshift offset for event-based recording (in milliseconds).
|
|
44
|
+
*/
|
|
45
|
+
export interface Fmp4RecordingOptions extends Fmp4CommonOptions {
|
|
17
46
|
fps: number;
|
|
18
|
-
livestream: boolean;
|
|
19
47
|
probesize: number;
|
|
20
48
|
timeshift: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Options for configuring an fMP4 recording or livestream session.
|
|
52
|
+
*
|
|
53
|
+
* @property url - Source URL for livestream (RTSP) remuxing to fMP4.
|
|
54
|
+
*/
|
|
55
|
+
export interface Fmp4LivestreamOptions extends Fmp4CommonOptions {
|
|
21
56
|
url: string;
|
|
22
57
|
}
|
|
23
58
|
/**
|
|
@@ -73,7 +108,7 @@ declare class FfmpegFmp4Process extends FfmpegProcess {
|
|
|
73
108
|
* const process = new FfmpegFmp4Process(ffmpegOptions, recordingConfig, true, { fps: 30 });
|
|
74
109
|
* ```
|
|
75
110
|
*/
|
|
76
|
-
constructor(ffmpegOptions: FfmpegOptions, recordingConfig: CameraRecordingConfiguration,
|
|
111
|
+
constructor(ffmpegOptions: FfmpegOptions, recordingConfig: CameraRecordingConfiguration, fmp4Options?: Partial<Fmp4LivestreamOptions & Fmp4RecordingOptions>, isVerbose?: boolean);
|
|
77
112
|
/**
|
|
78
113
|
* Prepares and configures the FFmpeg process for reading and parsing output fMP4 data.
|
|
79
114
|
*
|
|
@@ -183,14 +218,10 @@ export declare class FfmpegRecordingProcess extends FfmpegFmp4Process {
|
|
|
183
218
|
*
|
|
184
219
|
* @param options - FFmpeg configuration options.
|
|
185
220
|
* @param recordingConfig - HomeKit recording configuration for the session.
|
|
186
|
-
* @param
|
|
187
|
-
* @param processAudio - If `true`, enables audio stream processing.
|
|
188
|
-
* @param probesize - Stream analysis size, in bytes.
|
|
189
|
-
* @param timeshift - Timeshift offset for event-based recording, in milliseconds.
|
|
190
|
-
* @param codec - Codec for the video stream input. Valid values are: `h264` and `hevc`. Defaults to `h264`.
|
|
221
|
+
* @param fmp4Options - fMP4 recording options.
|
|
191
222
|
* @param isVerbose - If `true`, enables more verbose logging for debugging purposes. Defaults to `false`.
|
|
192
223
|
*/
|
|
193
|
-
constructor(options: FfmpegOptions, recordingConfig: CameraRecordingConfiguration,
|
|
224
|
+
constructor(options: FfmpegOptions, recordingConfig: CameraRecordingConfiguration, fmp4Options?: Partial<Fmp4RecordingOptions>, isVerbose?: boolean);
|
|
194
225
|
}
|
|
195
226
|
/**
|
|
196
227
|
* Manages a HomeKit livestream FFmpeg process for generating fMP4 segments.
|
|
@@ -212,15 +243,12 @@ export declare class FfmpegLivestreamProcess extends FfmpegFmp4Process {
|
|
|
212
243
|
/**
|
|
213
244
|
* Constructs a new FFmpeg livestream process.
|
|
214
245
|
*
|
|
215
|
-
* @param options
|
|
216
|
-
* @param recordingConfig
|
|
217
|
-
* @param
|
|
218
|
-
* @param
|
|
219
|
-
* @param processAudio - If `true`, enables audio stream processing. Defaults to `true`.
|
|
220
|
-
* @param codec - Codec for the video stream input. Valid values are: `h264` and `hevc`. Defaults to `h264`.
|
|
221
|
-
* @param isVerbose - If `true`, enables more verbose logging for debugging purposes. Defaults to `false`.
|
|
246
|
+
* @param options - FFmpeg configuration options.
|
|
247
|
+
* @param recordingConfig - HomeKit recording configuration for the session.
|
|
248
|
+
* @param livestreamOptions - livestream segmenting options.
|
|
249
|
+
* @param isVerbose - If `true`, enables more verbose logging for debugging purposes. Defaults to `false`.
|
|
222
250
|
*/
|
|
223
|
-
constructor(options: FfmpegOptions, recordingConfig: CameraRecordingConfiguration,
|
|
251
|
+
constructor(options: FfmpegOptions, recordingConfig: CameraRecordingConfiguration, livestreamOptions: PartialWithId<Fmp4LivestreamOptions, "url">, isVerbose?: boolean);
|
|
224
252
|
/**
|
|
225
253
|
* Gets the fMP4 initialization segment generated by FFmpeg for the livestream.
|
|
226
254
|
*
|
package/dist/ffmpeg/record.js
CHANGED
|
@@ -1,30 +1,21 @@
|
|
|
1
1
|
/* Copyright(C) 2017-2025, HJD (https://github.com/hjdhjd). All rights reserved.
|
|
2
2
|
*
|
|
3
3
|
* ffmpeg/record.ts: Provide FFmpeg process control to support livestreaming and HomeKit Secure Video.
|
|
4
|
-
*
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* FFmpeg process management for HomeKit Secure Video (HKSV) events and fMP4 livestreaming.
|
|
8
|
-
*
|
|
9
|
-
* This module defines classes for orchestrating FFmpeg processes that produce fMP4 segments suitable for HomeKit Secure Video and realtime livestreaming scenarios. It
|
|
10
|
-
* handles process lifecycle, segment buffering, initialization segment detection, and streaming event generation, abstracting away the complexity of interacting directly
|
|
11
|
-
* with FFmpeg for these workflows.
|
|
12
|
-
*
|
|
13
|
-
* Key features:
|
|
14
|
-
*
|
|
15
|
-
* - Automated setup and management of FFmpeg processes for HKSV event recording and livestreaming (with support for audio and video).
|
|
16
|
-
* - Parsing and generation of fMP4 boxes/segments for HomeKit, including initialization and media segments.
|
|
17
|
-
* - Async generator APIs for efficient, event-driven segment handling.
|
|
18
|
-
* - Flexible error handling and timeouts for HomeKit’s strict realtime requirements.
|
|
19
|
-
* - Designed for Homebridge plugin authors or advanced users who need robust, platform-aware FFmpeg session control for HomeKit and related integrations.
|
|
20
|
-
*
|
|
21
|
-
* @module
|
|
22
4
|
*/
|
|
23
5
|
import { HKSV_IDR_INTERVAL, HKSV_TIMEOUT } from "./settings.js";
|
|
24
6
|
import { runWithTimeout } from "../util.js";
|
|
25
7
|
import { FfmpegProcess } from "./process.js";
|
|
26
8
|
import events from "node:events";
|
|
27
9
|
import { once } from "node:events";
|
|
10
|
+
// Utility to map audio sample rates to strings. We also use satisfies here to ensure we account for any future changes that would require updating this mapping.
|
|
11
|
+
const translateAudioSampleRate = {
|
|
12
|
+
[0 /* AudioRecordingSamplerate.KHZ_8 */]: "8",
|
|
13
|
+
[1 /* AudioRecordingSamplerate.KHZ_16 */]: "16",
|
|
14
|
+
[2 /* AudioRecordingSamplerate.KHZ_24 */]: "24",
|
|
15
|
+
[3 /* AudioRecordingSamplerate.KHZ_32 */]: "32",
|
|
16
|
+
[4 /* AudioRecordingSamplerate.KHZ_44_1 */]: "44.1",
|
|
17
|
+
[5 /* AudioRecordingSamplerate.KHZ_48 */]: "48"
|
|
18
|
+
};
|
|
28
19
|
/**
|
|
29
20
|
* FFmpeg process controller for HomeKit Secure Video (HKSV) and fMP4 livestreaming and recording.
|
|
30
21
|
*
|
|
@@ -78,7 +69,7 @@ class FfmpegFmp4Process extends FfmpegProcess {
|
|
|
78
69
|
* const process = new FfmpegFmp4Process(ffmpegOptions, recordingConfig, true, { fps: 30 });
|
|
79
70
|
* ```
|
|
80
71
|
*/
|
|
81
|
-
constructor(ffmpegOptions, recordingConfig,
|
|
72
|
+
constructor(ffmpegOptions, recordingConfig, fmp4Options = {}, isVerbose = false) {
|
|
82
73
|
// Initialize our parent.
|
|
83
74
|
super(ffmpegOptions);
|
|
84
75
|
// We want to log errors when they occur.
|
|
@@ -88,33 +79,39 @@ class FfmpegFmp4Process extends FfmpegProcess {
|
|
|
88
79
|
this._initSegment = Buffer.alloc(0);
|
|
89
80
|
this.recordingBuffer = [];
|
|
90
81
|
// Initialize our state.
|
|
91
|
-
this.isLivestream = fmp4Options.
|
|
82
|
+
this.isLivestream = !!fmp4Options.url;
|
|
92
83
|
this.isTimedOut = false;
|
|
84
|
+
fmp4Options.audioStream ??= 0;
|
|
93
85
|
fmp4Options.codec ??= "h264";
|
|
86
|
+
fmp4Options.enableAudio ??= true;
|
|
94
87
|
fmp4Options.fps ??= 30;
|
|
95
|
-
fmp4Options.
|
|
88
|
+
fmp4Options.hardwareTranscoding ??= this.options.config.hardwareTranscoding;
|
|
89
|
+
fmp4Options.videoStream ??= 0;
|
|
96
90
|
// Save our recording configuration.
|
|
97
91
|
this.recordingConfig = recordingConfig;
|
|
98
92
|
// Configure our video parameters for our input:
|
|
99
93
|
//
|
|
100
94
|
// -hide_banner Suppress printing the startup banner in FFmpeg.
|
|
101
95
|
// -nostats Suppress printing progress reports while encoding in FFmpeg.
|
|
102
|
-
// -fflags flags Set the format flags to generate a presentation timestamp if it's missing and
|
|
96
|
+
// -fflags flags Set the format flags to discard any corrupt packets rather than exit, generate a presentation timestamp if it's missing, and ignore
|
|
97
|
+
// the decoding timestamp.
|
|
103
98
|
// -err_detect ignore_err Ignore decoding errors and continue rather than exit.
|
|
99
|
+
// -max_delay 500000 Set an upper limit on how much time FFmpeg can take in demuxing packets, in microseconds.
|
|
104
100
|
this.commandLineArgs = [
|
|
105
101
|
"-hide_banner",
|
|
106
102
|
"-nostats",
|
|
107
|
-
"-fflags", "+discardcorrupt",
|
|
108
|
-
"-err_detect", "ignore_err"
|
|
103
|
+
"-fflags", "+discardcorrupt+genpts+igndts",
|
|
104
|
+
"-err_detect", "ignore_err",
|
|
105
|
+
"-max_delay", "500000"
|
|
109
106
|
];
|
|
110
|
-
if (this.isLivestream) {
|
|
107
|
+
if (this.isLivestream && fmp4Options.url) {
|
|
111
108
|
// -avioflags direct Tell FFmpeg to minimize buffering to reduce latency for more realtime processing.
|
|
112
109
|
// -rtsp_transport tcp Tell the RTSP stream handler that we're looking for a TCP connection.
|
|
113
|
-
// -i
|
|
110
|
+
// -i url RTSPS URL to get our input stream from.
|
|
114
111
|
this.commandLineArgs.push("-avioflags", "direct", "-rtsp_transport", "tcp", "-i", fmp4Options.url);
|
|
115
112
|
}
|
|
116
113
|
else {
|
|
117
|
-
// -probesize number How many bytes should be analyzed for stream information.
|
|
114
|
+
// -probesize number How many bytes should be analyzed for stream information.
|
|
118
115
|
// -r fps Set the input frame rate for the video stream.
|
|
119
116
|
// -f mp4 Tell FFmpeg that it should expect an MP4-encoded input stream.
|
|
120
117
|
// -i pipe:0 Use standard input to get video data.
|
|
@@ -123,16 +120,17 @@ class FfmpegFmp4Process extends FfmpegProcess {
|
|
|
123
120
|
}
|
|
124
121
|
// Configure our recording options for the video stream:
|
|
125
122
|
//
|
|
126
|
-
// -map 0:v:
|
|
127
|
-
this.commandLineArgs.push("-map", "0:v:
|
|
123
|
+
// -map 0:v:X Selects the video track from the input.
|
|
124
|
+
this.commandLineArgs.push("-map", "0:v:" + fmp4Options.videoStream.toString(), ...(this.isLivestream ? ["-codec:v", "copy"] : this.options.recordEncoder({
|
|
128
125
|
bitrate: recordingConfig.videoCodec.parameters.bitRate,
|
|
129
126
|
fps: recordingConfig.videoCodec.resolution[2],
|
|
127
|
+
hardwareDecoding: false,
|
|
128
|
+
hardwareTranscoding: fmp4Options.hardwareTranscoding,
|
|
130
129
|
height: recordingConfig.videoCodec.resolution[1],
|
|
131
130
|
idrInterval: HKSV_IDR_INTERVAL,
|
|
132
131
|
inputFps: fmp4Options.fps,
|
|
133
132
|
level: recordingConfig.videoCodec.parameters.level,
|
|
134
133
|
profile: recordingConfig.videoCodec.parameters.profile,
|
|
135
|
-
useHardwareDecoder: false,
|
|
136
134
|
width: recordingConfig.videoCodec.resolution[0]
|
|
137
135
|
})));
|
|
138
136
|
// If we're livestreaming, emit fragments at one-second intervals.
|
|
@@ -145,12 +143,17 @@ class FfmpegFmp4Process extends FfmpegProcess {
|
|
|
145
143
|
// -reset_timestamps Reset timestamps at the beginning of each segment.
|
|
146
144
|
// -metadata Set the metadata to the name of the camera to distinguish between FFmpeg sessions.
|
|
147
145
|
this.commandLineArgs.push("-movflags", "default_base_moof+empty_moov+frag_keyframe+skip_sidx+skip_trailer", "-reset_timestamps", "1", "-metadata", "comment=" + this.options.name() + " " + (this.isLivestream ? "Livestream Buffer" : "HKSV Event"));
|
|
148
|
-
if (
|
|
146
|
+
if (fmp4Options.enableAudio) {
|
|
149
147
|
// Configure the audio portion of the command line. Options we use are:
|
|
150
148
|
//
|
|
151
|
-
// -map 0:a:
|
|
152
|
-
// -
|
|
153
|
-
|
|
149
|
+
// -map 0:a:X? Selects the audio stream from the input, if it exists.
|
|
150
|
+
// -codec:a Encode using the codecs available to us on given platforms.
|
|
151
|
+
// -profile:a Specify either low-complexity AAC or enhanced low-delay AAC for HKSV events.
|
|
152
|
+
// -ar samplerate Sample rate to use for this audio. This is specified by HKSV.
|
|
153
|
+
// -b:a bitrate Bitrate to use for this audio stream. This is specified by HKSV.
|
|
154
|
+
// -bufsize size This is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
155
|
+
// -ac number Set the number of audio channels.
|
|
156
|
+
this.commandLineArgs.push("-map", "0:a:" + fmp4Options.audioStream.toString() + "?", ...this.options.audioEncoder, "-profile:a", (recordingConfig.audioCodec.type === 0 /* AudioRecordingCodecType.AAC_LC */) ? "22" : "38", "-ar", translateAudioSampleRate[recordingConfig.audioCodec.samplerate] + "k", "-b:a", recordingConfig.audioCodec.bitrate.toString() + "k", "-bufsize", (2 * recordingConfig.audioCodec.bitrate).toString() + "k", "-ac", (recordingConfig.audioCodec.audioChannels ?? 1).toString());
|
|
154
157
|
}
|
|
155
158
|
// Configure our video parameters for outputting our final stream:
|
|
156
159
|
//
|
|
@@ -457,15 +460,11 @@ export class FfmpegRecordingProcess extends FfmpegFmp4Process {
|
|
|
457
460
|
*
|
|
458
461
|
* @param options - FFmpeg configuration options.
|
|
459
462
|
* @param recordingConfig - HomeKit recording configuration for the session.
|
|
460
|
-
* @param
|
|
461
|
-
* @param processAudio - If `true`, enables audio stream processing.
|
|
462
|
-
* @param probesize - Stream analysis size, in bytes.
|
|
463
|
-
* @param timeshift - Timeshift offset for event-based recording, in milliseconds.
|
|
464
|
-
* @param codec - Codec for the video stream input. Valid values are: `h264` and `hevc`. Defaults to `h264`.
|
|
463
|
+
* @param fmp4Options - fMP4 recording options.
|
|
465
464
|
* @param isVerbose - If `true`, enables more verbose logging for debugging purposes. Defaults to `false`.
|
|
466
465
|
*/
|
|
467
|
-
constructor(options, recordingConfig,
|
|
468
|
-
super(options, recordingConfig,
|
|
466
|
+
constructor(options, recordingConfig, fmp4Options = {}, isVerbose = false) {
|
|
467
|
+
super(options, recordingConfig, fmp4Options, isVerbose);
|
|
469
468
|
}
|
|
470
469
|
}
|
|
471
470
|
/**
|
|
@@ -488,16 +487,13 @@ export class FfmpegLivestreamProcess extends FfmpegFmp4Process {
|
|
|
488
487
|
/**
|
|
489
488
|
* Constructs a new FFmpeg livestream process.
|
|
490
489
|
*
|
|
491
|
-
* @param options
|
|
492
|
-
* @param recordingConfig
|
|
493
|
-
* @param
|
|
494
|
-
* @param
|
|
495
|
-
* @param processAudio - If `true`, enables audio stream processing. Defaults to `true`.
|
|
496
|
-
* @param codec - Codec for the video stream input. Valid values are: `h264` and `hevc`. Defaults to `h264`.
|
|
497
|
-
* @param isVerbose - If `true`, enables more verbose logging for debugging purposes. Defaults to `false`.
|
|
490
|
+
* @param options - FFmpeg configuration options.
|
|
491
|
+
* @param recordingConfig - HomeKit recording configuration for the session.
|
|
492
|
+
* @param livestreamOptions - livestream segmenting options.
|
|
493
|
+
* @param isVerbose - If `true`, enables more verbose logging for debugging purposes. Defaults to `false`.
|
|
498
494
|
*/
|
|
499
|
-
constructor(options, recordingConfig,
|
|
500
|
-
super(options, recordingConfig,
|
|
495
|
+
constructor(options, recordingConfig, livestreamOptions, isVerbose = false) {
|
|
496
|
+
super(options, recordingConfig, livestreamOptions, isVerbose);
|
|
501
497
|
}
|
|
502
498
|
/**
|
|
503
499
|
* Gets the fMP4 initialization segment generated by FFmpeg for the livestream.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/ffmpeg/record.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/ffmpeg/record.ts"],"names":[],"mappings":"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"}
|
package/dist/util.d.ts
CHANGED
|
@@ -80,6 +80,36 @@ export type DeepReadonly<T> = {
|
|
|
80
80
|
* @category Utilities
|
|
81
81
|
*/
|
|
82
82
|
export type Nullable<T> = T | null;
|
|
83
|
+
/**
|
|
84
|
+
* Makes all properties in `T` optional except for `id`, which remains required.
|
|
85
|
+
*
|
|
86
|
+
* @template T - The base interface or type.
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
*
|
|
90
|
+
* ```ts
|
|
91
|
+
* interface Device {
|
|
92
|
+
*
|
|
93
|
+
* id: string;
|
|
94
|
+
* name: string;
|
|
95
|
+
* mac: string;
|
|
96
|
+
* }
|
|
97
|
+
*
|
|
98
|
+
* type UserUpdate = PartialWithId<User>;
|
|
99
|
+
*
|
|
100
|
+
* // Valid: Only 'id' is required, others are optional.
|
|
101
|
+
* const update: DeviceUpdate = { id: "123" };
|
|
102
|
+
*
|
|
103
|
+
* // Valid: Extra properties can be provided.
|
|
104
|
+
* const another: DeviceUpdate = { id: "456", name: "SomeDevice" };
|
|
105
|
+
*
|
|
106
|
+
* // Error: 'id' is missing.
|
|
107
|
+
* const error: DeviceUpdate = { name: "SomeOtherDevice" }; // TypeScript error
|
|
108
|
+
* ```
|
|
109
|
+
*
|
|
110
|
+
* @category Utilities
|
|
111
|
+
*/
|
|
112
|
+
export type PartialWithId<T, K extends keyof T> = Partial<T> & Pick<T, K>;
|
|
83
113
|
/**
|
|
84
114
|
* Logging interface for Homebridge plugins.
|
|
85
115
|
*
|
package/dist/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgLH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IAErC,4BAA4B;IAC5B,IAAG,KAAK,GAAG,IAAI,EAAE,CAAC;QAEhB,OAAO,KAAK,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC;IACnC,CAAC;IAED,kCAAkC;IAClC,IAAG,KAAK,GAAG,OAAO,EAAE,CAAC;QAEnB,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;QAE1B,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAC1E,CAAC;IAED,kCAAkC;IAClC,MAAM,IAAI,GAAG,KAAK,GAAG,OAAO,CAAC;IAE7B,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;AAC1E,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,SAAiC,EAAE,aAAqB,EAAE,YAAqB;IAEzG,IAAG,CAAC,YAAY,KAAK,SAAS,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,EAAE,CAAC;QAEvD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wCAAwC;IACxC,IAAG,CAAC,CAAC,MAAM,SAAS,EAAE,CAAC,EAAE,CAAC;QAExB,4FAA4F;QAC5F,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;QAE3B,OAAO,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IACpG,CAAC;IAED,mCAAmC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAI,OAAmB,EAAE,OAAe;IAE1E,MAAM,cAAc,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAEhG,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,UAAkB;IAE5C,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IAEvC,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IAEvC,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-plugin-utils",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.20.0",
|
|
4
4
|
"displayName": "Homebridge Plugin Utilities",
|
|
5
5
|
"description": "Opinionated utilities to provide common capabilities and create rich configuration webUI experiences for Homebridge plugins.",
|
|
6
6
|
"author": {
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
"main": "dist/index.js",
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@stylistic/eslint-plugin": "4.4.0",
|
|
44
|
-
"@types/node": "22.15.
|
|
44
|
+
"@types/node": "22.15.29",
|
|
45
45
|
"@types/ws": "^8.18.1",
|
|
46
|
-
"eslint": "^9.
|
|
46
|
+
"eslint": "^9.28.0",
|
|
47
47
|
"homebridge": "1.9.0",
|
|
48
48
|
"shx": "0.4.0",
|
|
49
49
|
"typedoc": "0.28.5",
|