homebridge-plugin-utils 1.18.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 +26 -18
- package/dist/ffmpeg/options.js +88 -80
- package/dist/ffmpeg/options.js.map +1 -1
- package/dist/ffmpeg/record.d.ts +53 -25
- package/dist/ffmpeg/record.js +55 -54
- 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 +4 -4
package/dist/ffmpeg/options.d.ts
CHANGED
|
@@ -69,15 +69,17 @@ export interface FfmpegOptionsConfig {
|
|
|
69
69
|
*
|
|
70
70
|
* These options control output bitrate, framerate, resolution, H.264 profile and level, input framerate, and smart quality optimizations.
|
|
71
71
|
*
|
|
72
|
-
* @property bitrate
|
|
73
|
-
* @property fps
|
|
74
|
-
* @property
|
|
75
|
-
* @property
|
|
76
|
-
* @property
|
|
77
|
-
* @property
|
|
78
|
-
* @property
|
|
79
|
-
* @property
|
|
80
|
-
* @property
|
|
72
|
+
* @property bitrate - Target video bitrate, in kilobits per second.
|
|
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`.
|
|
75
|
+
* @property height - Output video height, in pixels.
|
|
76
|
+
* @property idrInterval - Interval (in seconds) between keyframes (IDR frames).
|
|
77
|
+
* @property inputFps - Input (source) frames per second.
|
|
78
|
+
* @property level - H.264 profile level for output.
|
|
79
|
+
* @property profile - H.264 profile for output.
|
|
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`.
|
|
82
|
+
* @property width - Output video width, in pixels.
|
|
81
83
|
*
|
|
82
84
|
* @example
|
|
83
85
|
*
|
|
@@ -86,12 +88,14 @@ export interface FfmpegOptionsConfig {
|
|
|
86
88
|
*
|
|
87
89
|
* bitrate: 3000,
|
|
88
90
|
* fps: 30,
|
|
91
|
+
* hardwareDecoding: true,
|
|
92
|
+
* hardwareTranscoding: true,
|
|
89
93
|
* height: 1080,
|
|
90
94
|
* idrInterval: 2,
|
|
91
95
|
* inputFps: 30,
|
|
92
96
|
* level: H264Level.LEVEL4_0,
|
|
93
97
|
* profile: H264Profile.HIGH,
|
|
94
|
-
*
|
|
98
|
+
* smartQuality: true,
|
|
95
99
|
* width: 1920
|
|
96
100
|
* };
|
|
97
101
|
*
|
|
@@ -108,12 +112,14 @@ export interface FfmpegOptionsConfig {
|
|
|
108
112
|
export interface EncoderOptions {
|
|
109
113
|
bitrate: number;
|
|
110
114
|
fps: number;
|
|
115
|
+
hardwareDecoding?: boolean;
|
|
116
|
+
hardwareTranscoding?: boolean;
|
|
111
117
|
height: number;
|
|
112
118
|
idrInterval: number;
|
|
113
119
|
inputFps: number;
|
|
114
120
|
level: H264Level;
|
|
115
121
|
profile: H264Profile;
|
|
116
|
-
|
|
122
|
+
smartQuality?: boolean;
|
|
117
123
|
width: number;
|
|
118
124
|
}
|
|
119
125
|
/**
|
|
@@ -131,12 +137,14 @@ export interface EncoderOptions {
|
|
|
131
137
|
*
|
|
132
138
|
* bitrate: 3000,
|
|
133
139
|
* fps: 30,
|
|
140
|
+
* hardwareDecoding: true,
|
|
141
|
+
* hardwareTranscoding: true,
|
|
134
142
|
* height: 1080,
|
|
135
143
|
* idrInterval: 2,
|
|
136
144
|
* inputFps: 30,
|
|
137
145
|
* level: H264Level.LEVEL4_0,
|
|
138
146
|
* profile: H264Profile.HIGH,
|
|
139
|
-
*
|
|
147
|
+
* smartQuality: true,
|
|
140
148
|
* width: 1920
|
|
141
149
|
* };
|
|
142
150
|
* const args = ffmpegOpts.streamEncoder(encoderOptions);
|
|
@@ -157,6 +165,10 @@ export declare class FfmpegOptions {
|
|
|
157
165
|
*
|
|
158
166
|
*/
|
|
159
167
|
codecSupport: FfmpegCodecs;
|
|
168
|
+
/**
|
|
169
|
+
* The configuration options used to initialize this instance.
|
|
170
|
+
*/
|
|
171
|
+
readonly config: FfmpegOptionsConfig;
|
|
160
172
|
/**
|
|
161
173
|
* Indicates if debug logging is enabled.
|
|
162
174
|
*/
|
|
@@ -169,10 +181,6 @@ export declare class FfmpegOptions {
|
|
|
169
181
|
* Function returning the name for this options instance to be used for logging.
|
|
170
182
|
*/
|
|
171
183
|
readonly name: () => string;
|
|
172
|
-
/**
|
|
173
|
-
* The original options used to initialize this instance.
|
|
174
|
-
*/
|
|
175
|
-
readonly options: FfmpegOptionsConfig;
|
|
176
184
|
private readonly hwPixelFormat;
|
|
177
185
|
/**
|
|
178
186
|
* Creates an instance of Homebridge FFmpeg encoding and decoding options.
|
|
@@ -227,7 +235,7 @@ export declare class FfmpegOptions {
|
|
|
227
235
|
* Returns the video decoder arguments to use for decoding video.
|
|
228
236
|
*
|
|
229
237
|
* @param codec - Optional. Codec to decode ("h264" or "hevc").
|
|
230
|
-
* @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.
|
|
231
239
|
*
|
|
232
240
|
* @example
|
|
233
241
|
*
|
|
@@ -264,7 +272,7 @@ export declare class FfmpegOptions {
|
|
|
264
272
|
* inputFps: 30,
|
|
265
273
|
* level: H264Level.LEVEL3_1,
|
|
266
274
|
* profile: H264Profile.MAIN,
|
|
267
|
-
*
|
|
275
|
+
* smartQuality: true,
|
|
268
276
|
* width: 1280
|
|
269
277
|
* };
|
|
270
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
|
|
@@ -487,23 +496,21 @@ export class FfmpegOptions {
|
|
|
487
496
|
* ```
|
|
488
497
|
*/
|
|
489
498
|
streamEncoder(options) {
|
|
490
|
-
// Default smart quality to true.
|
|
491
|
-
|
|
492
|
-
options.useSmartQuality = true;
|
|
493
|
-
}
|
|
499
|
+
// Default hardware decoding and smart quality to true unless specified.
|
|
500
|
+
options = Object.assign({}, { hardwareDecoding: true, hardwareTranscoding: this.config.hardwareTranscoding, smartQuality: true }, options);
|
|
494
501
|
// In case we don't have a defined pixel format.
|
|
495
502
|
if (!this.hwPixelFormat.length) {
|
|
496
503
|
this.hwPixelFormat.push("yuvj420p");
|
|
497
504
|
}
|
|
498
505
|
// If we aren't hardware-accelerated, we default to libx264.
|
|
499
|
-
if (!this.options.hardwareTranscoding) {
|
|
506
|
+
if (!this.config.hardwareTranscoding || !options.hardwareTranscoding) {
|
|
500
507
|
return this.defaultVideoEncoderOptions(options);
|
|
501
508
|
}
|
|
502
509
|
// If we've enabled hardware-accelerated transcoding, let's select encoder options accordingly.
|
|
503
510
|
//
|
|
504
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
|
|
505
512
|
// variation in order to maximize quality while honoring bandwidth constraints.
|
|
506
|
-
const adjustedMaxBitrate = options.bitrate + (options.
|
|
513
|
+
const adjustedMaxBitrate = options.bitrate + (options.smartQuality ? HOMEKIT_STREAMING_HEADROOM : 0);
|
|
507
514
|
// Check the input and output frame rates to see if we need to change it.
|
|
508
515
|
const useFpsFilter = options.fps !== options.inputFps;
|
|
509
516
|
// Initialize our options.
|
|
@@ -517,7 +524,7 @@ export class FfmpegOptions {
|
|
|
517
524
|
// a power of two.
|
|
518
525
|
videoFilters.push("scale=-2:min(ih\\," + options.height.toString() + ")");
|
|
519
526
|
// Crop the stream, if the user has requested it.
|
|
520
|
-
if (this.
|
|
527
|
+
if (this.config.crop) {
|
|
521
528
|
videoFilters.push(this.cropFilter);
|
|
522
529
|
}
|
|
523
530
|
// fps=fps= Use the fps filter to provide the frame rate requested by HomeKit. This has better performance characteristics rather than using
|
|
@@ -529,7 +536,7 @@ export class FfmpegOptions {
|
|
|
529
536
|
case "macOS.Apple":
|
|
530
537
|
// h264_videotoolbox is the macOS hardware encoder API. We use the following options on Apple Silicon:
|
|
531
538
|
//
|
|
532
|
-
// -
|
|
539
|
+
// -codec:v Specify the macOS hardware encoder, h264_videotoolbox.
|
|
533
540
|
// -allow_sw 1 Allow the use of the software encoder if the hardware encoder is occupied or unavailable.
|
|
534
541
|
// This allows us to scale when we get multiple streaming requests simultaneously and consume all the available encode engines.
|
|
535
542
|
// -realtime 1 We prefer speed over quality - if the encoder has to make a choice, sacrifice one for the other.
|
|
@@ -545,8 +552,8 @@ export class FfmpegOptions {
|
|
|
545
552
|
// livestreamng exerience.
|
|
546
553
|
// -bufsize size This is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
547
554
|
// -maxrate bitrate The maximum bitrate tolerance used in concert with -bufsize to constrain the maximum bitrate permitted.
|
|
548
|
-
encoderOptions.push("-
|
|
549
|
-
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) {
|
|
550
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,
|
|
551
558
|
// constrained by our maximum bitrate. This is an Apple Silicon-specific feature.
|
|
552
559
|
encoderOptions.push("-q:v", "90");
|
|
@@ -559,7 +566,7 @@ export class FfmpegOptions {
|
|
|
559
566
|
case "macOS.Intel":
|
|
560
567
|
// h264_videotoolbox is the macOS hardware encoder API. We use the following options on Intel-based Macs:
|
|
561
568
|
//
|
|
562
|
-
// -
|
|
569
|
+
// -codec:v Specify the macOS hardware encoder, h264_videotoolbox.
|
|
563
570
|
// -allow_sw 1 Allow the use of the software encoder if the hardware encoder is occupied or unavailable.
|
|
564
571
|
// This allows us to scale when we get multiple streaming requests simultaneously that can consume all the available encode engines.
|
|
565
572
|
// -realtime 1 We prefer speed over quality - if the encoder has to make a choice, sacrifice one for the other.
|
|
@@ -578,7 +585,7 @@ export class FfmpegOptions {
|
|
|
578
585
|
// -bufsize size This is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
579
586
|
// -maxrate bitrate The maximum bitrate tolerance used in concert with -bufsize to constrain the maximum bitrate permitted.
|
|
580
587
|
return [
|
|
581
|
-
"-
|
|
588
|
+
"-codec:v", "h264_videotoolbox",
|
|
582
589
|
"-allow_sw", "1",
|
|
583
590
|
"-realtime", "1",
|
|
584
591
|
"-coder", "cabac",
|
|
@@ -595,7 +602,7 @@ export class FfmpegOptions {
|
|
|
595
602
|
case "raspbian":
|
|
596
603
|
// h264_v4l2m2m is the preferred interface to the Raspberry Pi hardware encoder API. We use the following options:
|
|
597
604
|
//
|
|
598
|
-
// -
|
|
605
|
+
// -codec:v Specify the Raspberry Pi hardware encoder, h264_v4l2m2m.
|
|
599
606
|
// -noautoscale Don't attempt to scale the video stream automatically.
|
|
600
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
|
|
601
608
|
// ensuring our final dimensions are a power of two.
|
|
@@ -606,7 +613,7 @@ export class FfmpegOptions {
|
|
|
606
613
|
// -bufsize size This is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
607
614
|
// -maxrate bitrate The maximum bitrate tolerance used in concert with -bufsize to constrain the maximum bitrate permitted.
|
|
608
615
|
return [
|
|
609
|
-
"-
|
|
616
|
+
"-codec:v", "h264_v4l2m2m",
|
|
610
617
|
"-profile:v", this.getH264Profile(options.profile, true),
|
|
611
618
|
"-bf", "0",
|
|
612
619
|
"-noautoscale",
|
|
@@ -622,9 +629,10 @@ export class FfmpegOptions {
|
|
|
622
629
|
videoFilters = [];
|
|
623
630
|
// We execute the following GPU-accelerated operations using the Quick Sync Video post-processing filter:
|
|
624
631
|
//
|
|
632
|
+
// hwupload If we aren't hardware decoding, we need to upload decoded frames to QSV to process them.
|
|
625
633
|
// format=same Set the output pixel format to the same as the input, since it's already in the GPU.
|
|
626
634
|
// w=...:h... Scale the video to the size that's being requested while respecting aspect ratios.
|
|
627
|
-
videoFilters.push("vpp_qsv=" + [
|
|
635
|
+
videoFilters.push((options.hardwareDecoding ? "" : "hwupload,") + "vpp_qsv=" + [
|
|
628
636
|
"format=same",
|
|
629
637
|
"w=min(iw\\, (iw / ih) * " + options.height.toString() + ")",
|
|
630
638
|
"h=min(ih\\, " + options.height.toString() + ")"
|
|
@@ -636,7 +644,7 @@ export class FfmpegOptions {
|
|
|
636
644
|
}
|
|
637
645
|
// h264_qsv is the Intel Quick Sync Video hardware encoder API. We use the following options:
|
|
638
646
|
//
|
|
639
|
-
// -
|
|
647
|
+
// -codec:v Specify the Intel Quick Sync Video hardware encoder, h264_qsv.
|
|
640
648
|
// -profile:v Use the H.264 profile that HomeKit is requesting when encoding.
|
|
641
649
|
// -level:v 0 We override what HomeKit requests for the H.264 profile level when we're using hardware-accelerated transcoding because
|
|
642
650
|
// the hardware encoder will determine which levels to use. Setting it to 0 allows the encoder to decide for itself.
|
|
@@ -650,8 +658,8 @@ export class FfmpegOptions {
|
|
|
650
658
|
// livestreamng exerience.
|
|
651
659
|
// -bufsize size This is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
652
660
|
// -maxrate bitrate The maximum bitrate tolerance used in concert with -bufsize to constrain the maximum bitrate permitted.
|
|
653
|
-
encoderOptions.push("-
|
|
654
|
-
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) {
|
|
655
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,
|
|
656
664
|
// constrained by our maximum bitrate. This leverages a QSV-specific feature known as intelligent constant quality.
|
|
657
665
|
encoderOptions.push("-global_quality", "20");
|
|
@@ -669,7 +677,7 @@ export class FfmpegOptions {
|
|
|
669
677
|
* @returns Maximum supported pixel count.
|
|
670
678
|
*/
|
|
671
679
|
get hostSystemMaxPixels() {
|
|
672
|
-
if (this.
|
|
680
|
+
if (this.config.hardwareTranscoding) {
|
|
673
681
|
switch (this.codecSupport.hostSystem) {
|
|
674
682
|
case "raspbian":
|
|
675
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":"AAAA;;;GAGG;AAsBH,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAmG5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,OAAO,aAAa;IAExB;;;OAGG;IACI,YAAY,CAAe;IAElC;;OAEG;IACa,KAAK,CAAU;IAE/B;;OAEG;IACa,GAAG,CAAoC;IAEvD;;OAEG;IACa,IAAI,CAAe;IAEnC;;OAEG;IACa,OAAO,CAAsB;IAE5B,aAAa,CAAW;IAEzC;;;;;;;;;;OAUG;IACH,YAAY,OAA4B;QAEtC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;QAEpC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,+CAA+C;QAC/C,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACK,gBAAgB;QAEtB,IAAI,UAAU,GAAG,EAAE,CAAC;QAEpB,wFAAwF;QACxF,MAAM,eAAe,GAAG,GAAW,EAAE;YAEnC,MAAM,UAAU,GAAG,EAAE,CAAC;YAEtB,IAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBAEjC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9B,CAAC;YAED,IAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;gBAEpC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjC,CAAC;YAED,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC;QAEF,sIAAsI;QACtI,IAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAEjC,mFAAmF;YACnF,6DAA6D;YAC7D,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,WAAqB,EAAW,EAAE;gBAExE,IAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;oBAExD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,qGAAqG,GAAG,KAAK,GAAG,YAAY;wBACzI,kCAAkC,CAAC,CAAC;oBAEtC,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;oBAEtC,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;gBAExC,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;YAEF,mFAAmF;YACnF,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,WAAqB,EAAW,EAAE;gBAExE,IAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;oBAEhD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,qGAAqG,GAAG,KAAK,GAAG,yBAAyB;wBACtJ,kCAAkC,CAAC,CAAC;oBAEtC,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;oBAEtC,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;gBAExC,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;YAEF,QAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;gBAEpC,KAAK,aAAa,CAAC;gBACnB,KAAK,aAAa;oBAEhB,qEAAqE;oBACrE,eAAe,CAAC,cAAc,EAAE,CAAC,kBAAkB,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;oBAEzE,MAAM;gBAER,KAAK,UAAU;oBAEb,uHAAuH;oBACvH,IAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;wBAEtD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,6HAA6H,EACzI,eAAe,EAAE,EAAE,eAAe,CAAC,CAAC;wBAEtC,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;wBACtC,IAAI,CAAC,OAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC;wBAEzC,OAAO,KAAK,CAAC;oBACf,CAAC;oBAED,8JAA8J;oBAC9J,uDAAuD;oBACvD,mDAAmD;oBACnD,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;oBAEtC,MAAM;gBAER;oBAEE,mGAAmG;oBACnG,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;oBAEtC,MAAM;YACV,CAAC;QACH,CAAC;QAED,mHAAmH;QACnH,IAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAEpC,mFAAmF;YACnF,MAAM,eAAe,GAAG,CAAC,KAAa,EAAW,EAAE;gBAEjD,IAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;oBAExD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wGAAwG,GAAG,KAAK,GAAG,YAAY;wBAC5I,qCAAqC,CAAC,CAAC;oBAEzC,IAAI,CAAC,OAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC;oBAEzC,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;YAEF,QAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;gBAEpC,KAAK,aAAa,CAAC;gBACnB,KAAK,aAAa;oBAEhB,4DAA4D;oBAC5D,eAAe,CAAC,mBAAmB,CAAC,CAAC;oBAErC,gEAAgE;oBAChE,IAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;wBAE1D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8HAA8H,CAAC,CAAC;oBACjJ,CAAC;oBAED,MAAM;gBAER,KAAK,UAAU;oBAEb,4DAA4D;oBAC5D,eAAe,CAAC,cAAc,CAAC,CAAC;oBAEhC,UAAU,GAAG,qEAAqE;wBAChF,qHAAqH,CAAC;oBAExH,0GAA0G;oBAC1G,IAAG,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;wBAE3C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACrC,CAAC;oBAED,MAAM;gBAER;oBAEE,0EAA0E;oBAC1E,IAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;wBAC5C,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC;wBACpH,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;wBAEvH,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;wBACrC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;wBAC1C,UAAU,GAAG,wBAAwB,CAAC;oBACxC,CAAC;yBAAM,CAAC;wBAEN,6BAA6B;wBAC7B,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;wBACtC,IAAI,CAAC,OAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC;oBAC3C,CAAC;oBAED,MAAM;YACV,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,IAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAErE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,GAAG,eAAe,EAAE,GAAG,UAAU,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;QAC/H,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACH,IAAW,YAAY;QAErB,oFAAoF;QACpF,IAAI,cAAc,GAAa,EAAE,CAAC;QAElC,4DAA4D;QAC5D,MAAM,0BAA0B,GAAG,GAAa,EAAE;YAEhD,MAAM,YAAY,GAAG,EAAE,CAAC;YAExB,IAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC;gBAE7D,gHAAgH;gBAChH,EAAE;gBACF,4DAA4D;gBAC5D,uIAAuI;gBACvI,yGAAyG;gBACzG,YAAY,CAAC,IAAI,CAEf,SAAS,EAAE,YAAY,EACvB,cAAc,EAAE,GAAG,EACnB,SAAS,EAAE,GAAG,CACf,CAAC;gBAEF,gHAAgH;gBAChH,IAAG,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC;oBAEhE,sFAAsF;oBACtF,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;YAED,OAAO,YAAY,CAAC;QACtB,CAAC,CAAC;QAEF,QAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;YAEpC,KAAK,aAAa,CAAC;YACnB,KAAK,aAAa;gBAEhB,6EAA6E;gBAC7E,IAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;oBAE1D,cAAc,GAAG,0BAA0B,EAAE,CAAC;oBAE9C,MAAM;gBACR,CAAC;gBAED,uEAAuE;gBACvE,EAAE;gBACF,iEAAiE;gBACjE,mJAAmJ;gBACnJ,cAAc,GAAG;oBAEf,SAAS,EAAE,QAAQ;oBACnB,cAAc,EAAE,MAAM;iBACvB,CAAC;gBAEF,MAAM;YAER;gBAEE,cAAc,GAAG,0BAA0B,EAAE,CAAC;gBAE9C,MAAM;QACV,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,IAAW,YAAY;QAErB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;;;;;;;;;;OAWG;IACI,YAAY,CAAC,KAAK,GAAG,MAAM;QAEhC,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAE5B,QAAO,KAAK,EAAE,CAAC;YAEb,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM;gBAET,KAAK,GAAG,MAAM,CAAC;gBAEf,MAAM;YAER;gBAEE,KAAK,GAAG,MAAM,CAAC;gBAEf,MAAM;QACV,CAAC;QAED,6DAA6D;QAC7D,IAAI,cAAc,GAAa,EAAE,CAAC;QAElC,+GAA+G;QAC/G,IAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAEjC,QAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;gBAEpC,KAAK,aAAa,CAAC;gBACnB,KAAK,aAAa;oBAEhB,oHAAoH;oBACpH,EAAE;oBACF,4FAA4F;oBAC5F,cAAc,GAAG;wBAEf,UAAU,EAAE,cAAc;qBAC3B,CAAC;oBAEF,MAAM;gBAER,KAAK,UAAU;oBAEb,mHAAmH;oBACnH,EAAE;oBACF,uHAAuH;oBACvH,cAAc,GAAG;oBAEf,sBAAsB;qBACvB,CAAC;oBAEF,MAAM;gBAER;oBAEE,uEAAuE;oBACvE,EAAE;oBACF,qGAAqG;oBACrG,mHAAmH;oBACnH,cAAc,GAAG;wBAEf,UAAU,EAAE,KAAK;wBACjB,wBAAwB,EAAE,KAAK;wBAC/B,MAAM,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;qBACrD,CAAC;oBAEF,MAAM;YACV,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,IAAW,UAAU;QAEnB,sEAAsE;QACtE,IAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAEtB,OAAO,sCAAsC,CAAC;QAChD,CAAC;QAED,kEAAkE;QAClE,OAAO,OAAO,GAAG;YAEf,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC5C,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YAC7C,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;YACxC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;SACzC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACd,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACK,0BAA0B,CAAC,OAAuB;QAExD,MAAM,YAAY,GAAG,EAAE,CAAC;QAExB,kDAAkD;QAClD,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAEhE,uCAAuC;QACvC,EAAE;QACF,wFAAwF;QACxF,YAAY,CAAC,IAAI,CAAC,SAAS,GAAG,CAAE,GAAG,IAAI,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,aAAa,EAAE,UAAU,CAAE,CAAC,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAE/F,4JAA4J;QAC5J,oDAAoD;QACpD,YAAY,CAAC,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,CAAC;QAE1E,qKAAqK;QACrK,0IAA0I;QAC1I,IAAG,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAEpC,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,kFAAkF;QAClF,EAAE;QACF,6EAA6E;QAC7E,8IAA8I;QAC9I,oGAAoG;QACpG,0GAA0G;QAC1G,2FAA2F;QAC3F,2IAA2I;QAC3I,uJAAuJ;QACvJ,mEAAmE;QACnE,uJAAuJ;QACvJ,4DAA4D;QAC5D,mIAAmI;QACnI,2JAA2J;QAC3J,qIAAqI;QACrI,MAAM,cAAc,GAAG;YAErB,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,UAAU;YACrB,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC;YAClD,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;YAC5C,cAAc;YACd,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YACpC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE;YACtD,UAAU,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,GAAG,GAAG;YAClD,UAAU,EAAE,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,GAAG;SAC5G,CAAC;QAEF,kJAAkJ;QAClJ,sJAAsJ;QACtJ,uGAAuG;QACvG,IAAG,OAAO,CAAC,eAAe,EAAE,CAAC;YAE3B,mJAAmJ;YACnJ,4EAA4E;YAC5E,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YAEN,mJAAmJ;YACnJ,sJAAsJ;YACtJ,iJAAiJ;YACjJ,yJAAyJ;YACzJ,0BAA0B;YAC1B,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACI,aAAa,CAAC,OAAuB;QAE1C,4FAA4F;QAC5F,OAAO,CAAC,eAAe,GAAG,KAAK,CAAC;QAEhC,uJAAuJ;QACvJ,mJAAmJ;QACnJ,qJAAqJ;QACrJ,qJAAqJ;QACrJ,QAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;YAEpC,KAAK,UAAU;gBAEb,mJAAmJ;gBACnJ,mGAAmG;gBACnG,OAAO,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;YAElD;gBAEE,8DAA8D;gBAC9D,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACI,aAAa,CAAC,OAAuB;QAE1C,iCAAiC;QACjC,IAAG,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YAEzC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;QACjC,CAAC;QAED,gDAAgD;QAChD,IAAG,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;YAE9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;QAED,4DAA4D;QAC5D,IAAG,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAErC,OAAO,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;QAED,+FAA+F;QAC/F,EAAE;QACF,kKAAkK;QAClK,+EAA+E;QAC/E,MAAM,kBAAkB,GAAG,OAAO,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAExG,yEAAyE;QACzE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,QAAQ,CAAC;QAEtD,0BAA0B;QAC1B,MAAM,cAAc,GAAG,EAAE,CAAC;QAC1B,IAAI,YAAY,GAAG,EAAE,CAAC;QAEtB,uCAAuC;QACvC,EAAE;QACF,wFAAwF;QACxF,YAAY,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAE5D,4JAA4J;QAC5J,oDAAoD;QACpD,YAAY,CAAC,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,CAAC;QAE1E,iDAAiD;QACjD,IAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAErB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;QAED,qKAAqK;QACrK,0IAA0I;QAC1I,IAAG,YAAY,EAAE,CAAC;YAEhB,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,QAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;YAEpC,KAAK,aAAa;gBAEhB,sGAAsG;gBACtG,EAAE;gBACF,uFAAuF;gBACvF,0HAA0H;gBAC1H,6JAA6J;gBAC7J,iIAAiI;gBACjI,8HAA8H;gBAC9H,gGAAgG;gBAChG,iKAAiK;gBACjK,qJAAqJ;gBACrJ,uIAAuI;gBACvI,uFAAuF;gBACvF,kKAAkK;gBAClK,kFAAkF;gBAClF,mJAAmJ;gBACnJ,wDAAwD;gBACxD,+HAA+H;gBAC/H,wIAAwI;gBACxI,cAAc,CAAC,IAAI,CAEjB,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,GAAG,EAChB,WAAW,EAAE,GAAG,EAChB,QAAQ,EAAE,OAAO,EACjB,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,EAClD,UAAU,EAAE,GAAG,EACf,KAAK,EAAE,GAAG,EACV,cAAc,EACd,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EACpC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EACtD,UAAU,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,GAAG,GAAG,EAClD,UAAU,EAAE,kBAAkB,CAAC,QAAQ,EAAE,GAAG,GAAG,CAChD,CAAC;gBAEF,IAAG,OAAO,CAAC,eAAe,EAAE,CAAC;oBAE3B,yJAAyJ;oBACzJ,6GAA6G;oBAC7G,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACpC,CAAC;qBAAM,CAAC;oBAEN,2EAA2E;oBAC3E,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,CAAC;gBAChE,CAAC;gBAED,OAAO,cAAc,CAAC;YAExB,KAAK,aAAa;gBAEhB,yGAAyG;gBACzG,EAAE;gBACF,uFAAuF;gBACvF,0HAA0H;gBAC1H,kKAAkK;gBAClK,iIAAiI;gBACjI,8HAA8H;gBAC9H,gGAAgG;gBAChG,iKAAiK;gBACjK,qJAAqJ;gBACrJ,uIAAuI;gBACvI,uFAAuF;gBACvF,kKAAkK;gBAClK,kFAAkF;gBAClF,4JAA4J;gBAC5J,+FAA+F;gBAC/F,mJAAmJ;gBACnJ,yDAAyD;gBACzD,+HAA+H;gBAC/H,wIAAwI;gBACxI,OAAO;oBAEL,MAAM,EAAE,mBAAmB;oBAC3B,WAAW,EAAE,GAAG;oBAChB,WAAW,EAAE,GAAG;oBAChB,QAAQ,EAAE,OAAO;oBACjB,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC;oBAClD,UAAU,EAAE,GAAG;oBACf,KAAK,EAAE,GAAG;oBACV,cAAc;oBACd,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;oBACpC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG;oBACxC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE;oBACtD,UAAU,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,GAAG,GAAG;oBAClD,UAAU,EAAE,kBAAkB,CAAC,QAAQ,EAAE,GAAG,GAAG;iBAChD,CAAC;YAEJ,KAAK,UAAU;gBAEb,kHAAkH;gBAClH,EAAE;gBACF,yFAAyF;gBACzF,uFAAuF;gBACvF,kKAAkK;gBAClK,kFAAkF;gBAClF,4JAA4J;gBAC5J,oEAAoE;gBACpE,mJAAmJ;gBACnJ,wDAAwD;gBACxD,+HAA+H;gBAC/H,wIAAwI;gBACxI,OAAO;oBAEL,MAAM,EAAE,cAAc;oBACtB,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;oBACxD,KAAK,EAAE,GAAG;oBACV,cAAc;oBACd,mBAAmB,EAAE,GAAG;oBACxB,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;oBACpC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG;oBACxC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE;oBACtD,UAAU,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,GAAG,GAAG;oBAClD,UAAU,EAAE,kBAAkB,CAAC,QAAQ,EAAE,GAAG,GAAG;iBAChD,CAAC;YAEJ;gBAEE,qCAAqC;gBACrC,YAAY,GAAG,EAAE,CAAC;gBAElB,yGAAyG;gBACzG,EAAE;gBACF,qHAAqH;gBACrH,mHAAmH;gBACnH,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG;oBAE7B,aAAa;oBACb,0BAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,GAAG;oBAC5D,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,GAAG;iBACjD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAEb,iKAAiK;gBACjK,sIAAsI;gBACtI,IAAG,YAAY,EAAE,CAAC;oBAEhB,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACzD,CAAC;gBAED,6FAA6F;gBAC7F,EAAE;gBACF,+FAA+F;gBAC/F,gGAAgG;gBAChG,wJAAwJ;gBACxJ,kJAAkJ;gBAClJ,uIAAuI;gBACvI,uFAAuF;gBACvF,gIAAgI;gBAChI,4GAA4G;gBAC5G,kKAAkK;gBAClK,kFAAkF;gBAClF,mJAAmJ;gBACnJ,wDAAwD;gBACxD,+HAA+H;gBAC/H,wIAAwI;gBACxI,cAAc,CAAC,IAAI,CAEjB,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,EAClD,UAAU,EAAE,GAAG,EACf,KAAK,EAAE,GAAG,EACV,cAAc,EACd,iBAAiB,EAAE,QAAQ,EAC3B,mBAAmB,EAAE,IAAI,EACzB,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EACpC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EACtD,UAAU,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,GAAG,GAAG,EAClD,UAAU,EAAE,kBAAkB,CAAC,QAAQ,EAAE,GAAG,GAAG,CAChD,CAAC;gBAEF,IAAG,OAAO,CAAC,eAAe,EAAE,CAAC;oBAE3B,mJAAmJ;oBACnJ,+IAA+I;oBAC/I,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBAEN,iFAAiF;oBACjF,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,CAAC;gBAChE,CAAC;gBAED,OAAO,cAAc,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,IAAW,mBAAmB;QAE5B,IAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAEpC,QAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;gBAEpC,KAAK,UAAU;oBAEb,6JAA6J;oBAC7J,wJAAwJ;oBACxJ,4DAA4D;oBAC5D,OAAO,IAAI,GAAG,IAAI,CAAC;gBAErB;oBAEE,MAAM;YACV,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACK,YAAY,CAAC,KAAgB,EAAE,OAAO,GAAG,KAAK;QAEpD,QAAO,KAAK,EAAE,CAAC;YAEb;gBAEE,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YAEhC;gBAEE,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YAEhC;gBAEE,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YAEhC;gBAEE,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACK,cAAc,CAAC,OAAoB,EAAE,OAAO,GAAG,KAAK;QAE1D,QAAO,OAAO,EAAE,CAAC;YAEf;gBAEE,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;YAErC;gBAEE,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YAElC;gBAEE,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;YAEjC;gBAEE,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QACnC,CAAC;IACH,CAAC;CACF"}
|
|
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,43 +79,53 @@ 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.
|
|
104
|
-
// -
|
|
105
|
-
// -r fps Set the input frame rate for the video stream.
|
|
106
|
-
// -f mp4 Tell FFmpeg that it should expect an MP4-encoded input stream.
|
|
107
|
-
// -i pipe:0 Use standard input to get video data.
|
|
108
|
-
// -ss Fast forward to where HKSV is expecting us to be for a recording event.
|
|
99
|
+
// -max_delay 500000 Set an upper limit on how much time FFmpeg can take in demuxing packets, in microseconds.
|
|
109
100
|
this.commandLineArgs = [
|
|
110
101
|
"-hide_banner",
|
|
111
102
|
"-nostats",
|
|
112
|
-
"-fflags", "+discardcorrupt",
|
|
103
|
+
"-fflags", "+discardcorrupt+genpts+igndts",
|
|
113
104
|
"-err_detect", "ignore_err",
|
|
114
|
-
|
|
105
|
+
"-max_delay", "500000"
|
|
115
106
|
];
|
|
116
|
-
if (this.isLivestream) {
|
|
107
|
+
if (this.isLivestream && fmp4Options.url) {
|
|
108
|
+
// -avioflags direct Tell FFmpeg to minimize buffering to reduce latency for more realtime processing.
|
|
109
|
+
// -rtsp_transport tcp Tell the RTSP stream handler that we're looking for a TCP connection.
|
|
110
|
+
// -i url RTSPS URL to get our input stream from.
|
|
117
111
|
this.commandLineArgs.push("-avioflags", "direct", "-rtsp_transport", "tcp", "-i", fmp4Options.url);
|
|
118
112
|
}
|
|
119
113
|
else {
|
|
114
|
+
// -probesize number How many bytes should be analyzed for stream information.
|
|
115
|
+
// -r fps Set the input frame rate for the video stream.
|
|
116
|
+
// -f mp4 Tell FFmpeg that it should expect an MP4-encoded input stream.
|
|
117
|
+
// -i pipe:0 Use standard input to get video data.
|
|
118
|
+
// -ss Fast forward to where HKSV is expecting us to be for a recording event.
|
|
120
119
|
this.commandLineArgs.push("-probesize", (fmp4Options.probesize ?? 5000000).toString(), "-r", fmp4Options.fps.toString(), "-f", "mp4", "-i", "pipe:0", "-ss", (fmp4Options.timeshift ?? 0).toString() + "ms");
|
|
121
120
|
}
|
|
122
121
|
// Configure our recording options for the video stream:
|
|
123
122
|
//
|
|
124
|
-
// -map 0:v:
|
|
125
|
-
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({
|
|
126
125
|
bitrate: recordingConfig.videoCodec.parameters.bitRate,
|
|
127
126
|
fps: recordingConfig.videoCodec.resolution[2],
|
|
127
|
+
hardwareDecoding: false,
|
|
128
|
+
hardwareTranscoding: fmp4Options.hardwareTranscoding,
|
|
128
129
|
height: recordingConfig.videoCodec.resolution[1],
|
|
129
130
|
idrInterval: HKSV_IDR_INTERVAL,
|
|
130
131
|
inputFps: fmp4Options.fps,
|
|
@@ -134,6 +135,7 @@ class FfmpegFmp4Process extends FfmpegProcess {
|
|
|
134
135
|
})));
|
|
135
136
|
// If we're livestreaming, emit fragments at one-second intervals.
|
|
136
137
|
if (this.isLivestream) {
|
|
138
|
+
// -frag_duration number Length of each fMP4 fragment, in microseconds.
|
|
137
139
|
this.commandLineArgs.push("-frag_duration", "1000000");
|
|
138
140
|
}
|
|
139
141
|
// -movflags flags In the generated fMP4 stream: set the default-base-is-moof flag in the header, write an initial empty MOOV box, start a new fragment
|
|
@@ -141,17 +143,23 @@ class FfmpegFmp4Process extends FfmpegProcess {
|
|
|
141
143
|
// -reset_timestamps Reset timestamps at the beginning of each segment.
|
|
142
144
|
// -metadata Set the metadata to the name of the camera to distinguish between FFmpeg sessions.
|
|
143
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"));
|
|
144
|
-
if (
|
|
146
|
+
if (fmp4Options.enableAudio) {
|
|
145
147
|
// Configure the audio portion of the command line. Options we use are:
|
|
146
148
|
//
|
|
147
|
-
// -map 0:a:
|
|
148
|
-
// -
|
|
149
|
-
|
|
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());
|
|
150
157
|
}
|
|
151
158
|
// Configure our video parameters for outputting our final stream:
|
|
152
159
|
//
|
|
153
|
-
// -f mp4
|
|
154
|
-
//
|
|
160
|
+
// -f mp4 Tell ffmpeg that it should create an MP4-encoded output stream.
|
|
161
|
+
// -avioflags direct Tell FFmpeg to minimize buffering to reduce latency for more realtime processing.
|
|
162
|
+
// pipe:1 Output the stream to standard output.
|
|
155
163
|
this.commandLineArgs.push("-f", "mp4", "-avioflags", "direct", "pipe:1");
|
|
156
164
|
// Additional logging, but only if we're debugging.
|
|
157
165
|
if (isVerbose || this.isVerbose) {
|
|
@@ -452,15 +460,11 @@ export class FfmpegRecordingProcess extends FfmpegFmp4Process {
|
|
|
452
460
|
*
|
|
453
461
|
* @param options - FFmpeg configuration options.
|
|
454
462
|
* @param recordingConfig - HomeKit recording configuration for the session.
|
|
455
|
-
* @param
|
|
456
|
-
* @param processAudio - If `true`, enables audio stream processing.
|
|
457
|
-
* @param probesize - Stream analysis size, in bytes.
|
|
458
|
-
* @param timeshift - Timeshift offset for event-based recording, in milliseconds.
|
|
459
|
-
* @param codec - Codec for the video stream input. Valid values are: `h264` and `hevc`. Defaults to `h264`.
|
|
463
|
+
* @param fmp4Options - fMP4 recording options.
|
|
460
464
|
* @param isVerbose - If `true`, enables more verbose logging for debugging purposes. Defaults to `false`.
|
|
461
465
|
*/
|
|
462
|
-
constructor(options, recordingConfig,
|
|
463
|
-
super(options, recordingConfig,
|
|
466
|
+
constructor(options, recordingConfig, fmp4Options = {}, isVerbose = false) {
|
|
467
|
+
super(options, recordingConfig, fmp4Options, isVerbose);
|
|
464
468
|
}
|
|
465
469
|
}
|
|
466
470
|
/**
|
|
@@ -483,16 +487,13 @@ export class FfmpegLivestreamProcess extends FfmpegFmp4Process {
|
|
|
483
487
|
/**
|
|
484
488
|
* Constructs a new FFmpeg livestream process.
|
|
485
489
|
*
|
|
486
|
-
* @param options
|
|
487
|
-
* @param recordingConfig
|
|
488
|
-
* @param
|
|
489
|
-
* @param
|
|
490
|
-
* @param processAudio - If `true`, enables audio stream processing. Defaults to `true`.
|
|
491
|
-
* @param codec - Codec for the video stream input. Valid values are: `h264` and `hevc`. Defaults to `h264`.
|
|
492
|
-
* @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`.
|
|
493
494
|
*/
|
|
494
|
-
constructor(options, recordingConfig,
|
|
495
|
-
super(options, recordingConfig,
|
|
495
|
+
constructor(options, recordingConfig, livestreamOptions, isVerbose = false) {
|
|
496
|
+
super(options, recordingConfig, livestreamOptions, isVerbose);
|
|
496
497
|
}
|
|
497
498
|
/**
|
|
498
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":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAiB,cAAc,EAAE,MAAM,YAAY,CAAC;AAG3D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAsBnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,iBAAkB,SAAQ,aAAa;IAEnC,cAAc,CAAU;IACxB,YAAY,CAAS;IACrB,YAAY,CAAU;IACtB,eAAe,CAAU;IAC1B,UAAU,CAAU;IACnB,eAAe,CAAmE;IAClF,eAAe,CAA+B;IAC/C,aAAa,CAAU;IAE9B;;;;;;;;;;;;;;OAcG;IACH,YAAY,aAA4B,EAAE,eAA6C,EAAE,aAAsB,EAAE,cAA0C,EAAE,EAC3J,SAAS,GAAG,KAAK;QAEjB,yBAAyB;QACzB,KAAK,CAAC,aAAa,CAAC,CAAC;QAErB,yCAAyC;QACzC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,mCAAmC;QACnC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAE1B,wBAAwB;QACxB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,UAAU,IAAI,KAAK,CAAC;QACpD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,WAAW,CAAC,KAAK,KAAK,MAAM,CAAC;QAC7B,WAAW,CAAC,GAAG,KAAK,EAAE,CAAC;QACvB,WAAW,CAAC,GAAG,KAAK,EAAE,CAAC;QAEvB,oCAAoC;QACpC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QAEvC,gDAAgD;QAChD,EAAE;QACF,gFAAgF;QAChF,6FAA6F;QAC7F,4JAA4J;QAC5J,sFAAsF;QACtF,2JAA2J;QAC3J,+EAA+E;QAC/E,+FAA+F;QAC/F,sEAAsE;QACtE,wGAAwG;QACxG,IAAI,CAAC,eAAe,GAAG;YAErB,cAAc;YACd,UAAU;YACV,SAAS,EAAE,iBAAiB;YAC5B,aAAa,EAAE,YAAY;YAC3B,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC;SAChD,CAAC;QAEF,IAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAErB,IAAI,CAAC,eAAe,CAAC,IAAI,CAEvB,YAAY,EAAE,QAAQ,EACtB,iBAAiB,EAAE,KAAK,EACxB,IAAI,EAAE,WAAW,CAAC,GAAG,CACtB,CAAC;QACJ,CAAC;aAAM,CAAC;YAEN,IAAI,CAAC,eAAe,CAAC,IAAI,CAEvB,YAAY,EAAE,CAAC,WAAW,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC,QAAQ,EAAE,EAC3D,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,EAChC,IAAI,EAAE,KAAK,EACX,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,CAAC,WAAW,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CACtD,CAAC;QACJ,CAAC;QAED,wDAAwD;QACxD,EAAE;QACF,yFAAyF;QACzF,IAAI,CAAC,eAAe,CAAC,IAAI,CAEvB,MAAM,EAAE,OAAO,EACf,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAE,SAAS,EAAE,MAAM,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;YAEzE,OAAO,EAAE,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO;YACtD,GAAG,EAAE,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;YAC7C,MAAM,EAAE,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;YAChD,WAAW,EAAE,iBAAiB;YAC9B,QAAQ,EAAE,WAAW,CAAC,GAAG;YACzB,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK;YAClD,OAAO,EAAE,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO;YACtD,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;SAChD,CAAC,CAAC,CACJ,CAAC;QAEF,kEAAkE;QAClE,IAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAErB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;QACzD,CAAC;QAED,qKAAqK;QACrK,sKAAsK;QACtK,mFAAmF;QACnF,mHAAmH;QACnH,IAAI,CAAC,eAAe,CAAC,IAAI,CAEvB,WAAW,EAAE,mEAAmE,EAChF,mBAAmB,EAAE,GAAG,EACxB,WAAW,EAAE,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC,CAC/G,CAAC;QAEF,IAAG,aAAa,EAAE,CAAC;YAEjB,uEAAuE;YACvE,EAAE;YACF,qGAAqG;YACrG,qEAAqE;YACrE,IAAI,CAAC,eAAe,CAAC,IAAI,CAEvB,MAAM,EAAE,QAAQ,EAChB,SAAS,EAAE,MAAM,CAClB,CAAC;QACJ,CAAC;QAED,kEAAkE;QAClE,EAAE;QACF,0EAA0E;QAC1E,gDAAgD;QAChD,IAAI,CAAC,eAAe,CAAC,IAAI,CAEvB,IAAI,EAAE,KAAK,EACX,YAAY,EAAE,QAAQ,EACtB,QAAQ,CAAC,CAAC;QAEZ,mDAAmD;QACnD,IAAG,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAE/B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED;;;;OAIG;IACO,gBAAgB;QAExB,IAAI,YAAsC,CAAC;QAE3C,kCAAkC;QAClC,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAEzB,4EAA4E;QAC5E,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,gGAAgG;QAChG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,MAAc,EAAQ,EAAE;YAEtE,yFAAyF;YACzF,IAAG,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAE9B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;gBAClD,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpC,CAAC;YAED,IAAI,MAAM,GAAG,CAAC,CAAC;YAEf,mKAAmK;YACnK,+JAA+J;YAC/J,iDAAiD;YACjD,SAAQ,CAAC;gBAEP,IAAI,IAAI,CAAC;gBAET,6JAA6J;gBAC7J,yFAAyF;gBAEzF,6CAA6C;gBAC7C,IAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;oBAElB,2HAA2H;oBAC3H,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAE5B,yCAAyC;oBACzC,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBAEpC,qHAAqH;oBACrH,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAElC,+CAA+C;oBAC/C,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;oBAEnC,iJAAiJ;oBACjJ,UAAU,IAAI,MAAM,GAAG,CAAC,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBAEN,iCAAiC;oBACjC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;oBACnC,MAAM,GAAG,CAAC,CAAC;gBACb,CAAC;gBAED,iHAAiH;gBACjH,IAAG,IAAI,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;oBAE5B,eAAe,GAAG,IAAI,CAAC;oBAEvB,MAAM;gBACR,CAAC;gBAED,yIAAyI;gBACzI,IAAG,IAAI,CAAC,YAAY,EAAE,CAAC;oBAErB,0EAA0E;oBAC1E,IAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;wBAExB,qIAAqI;wBACrI,IAAG,IAAI,KAAK,MAAM,EAAE,CAAC;4BAEnB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;4BAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;wBAC3B,CAAC;6BAAM,CAAC;4BAEN,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;wBACvE,CAAC;oBACH,CAAC;oBAED,IAAG,IAAI,CAAC,cAAc,EAAE,CAAC;wBAEvB,iEAAiE;wBACjE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAE,MAAM,EAAE,IAAI,CAAE,CAAC,CAAC,CAAC;oBACxD,CAAC;gBACH,CAAC;qBAAM,CAAC;oBAEN,kFAAkF;oBAClF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC1F,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtB,CAAC;gBAED,6EAA6E;gBAC7E,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,GAAG,EAAE,CAAC;gBAEV,gFAAgF;gBAChF,IAAG,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC;oBAE3C,UAAU,GAAG,CAAC,CAAC;oBAEf,MAAM;gBACR,CAAC;gBAED,2FAA2F;gBAC3F,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;gBAC3C,UAAU,GAAG,CAAC,CAAC;YACjB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,sDAAsD;QACtD,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;YAE9B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;OAYG;IACO,KAAK,CAAC,cAAc;QAE5B,oDAAoD;QACpD,IAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAEvB,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAED,oEAAoE;QACpE,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAEvC,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACO,WAAW;QAEnB,kCAAkC;QAClC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEpB,kFAAkF;QAClF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK;QAEV,IAAG,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,EAAE,CAAC;YAE3D,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAEjE,IAAG,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;gBAEpB,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC/E,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;IAED;;;;;;;;;;OAUG;IACI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe;QAE1C,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;QAE5C,wEAAwE;QACxE,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QAEjC,qCAAqC;QACrC,KAAK,CAAC,IAAI,EAAE,CAAC;QAEb,sCAAsC;QACtC,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;IACxC,CAAC;IAED;;;;;OAKG;IACO,cAAc,CAAC,QAAgB,EAAE,MAAsB;QAE/D,wCAAwC;QACxC,IAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAEzB,OAAO;QACT,CAAC;QAED,yJAAyJ;QACzJ,MAAM,oBAAoB,GAAG,IAAI,MAAM,CAAC;YAEtC,yDAAyD;YACzD,4EAA4E;YAC5E,6CAA6C;YAC7C,mCAAmC;YACnC,+CAA+C;YAC/C,4CAA4C;YAC5C,uBAAuB;SACxB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAEb,mCAAmC;QACnC,IAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAE1D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,qIAAqI,CAAC,CAAC;YAEtJ,OAAO;QACT,CAAC;QAED,0DAA0D;QAC1D,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACI,KAAK,CAAC,CAAC,gBAAgB;QAE5B,IAAI,OAAO,GAAa,EAAE,CAAC;QAE3B,uGAAuG;QACvG,SAAQ,CAAC;YAEP,gDAAgD;YAChD,IAAG,IAAI,CAAC,OAAO,EAAE,CAAC;gBAEhB,OAAO;YACT,CAAC;YAED,6EAA6E;YAC7E,IAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;gBAEhC,gKAAgK;gBAChK,kFAAkF;gBAClF,4CAA4C;gBAC5C,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;YAC3D,CAAC;YAED,0CAA0C;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAEzC,mKAAmK;YACnK,IAAG,CAAC,GAAG,EAAE,CAAC;gBAER,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBAEvB,OAAO;YACT,CAAC;YAED,kDAAkD;YAClD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAEnC,0FAA0F;YAC1F,EAAE;YACF,gKAAgK;YAChK,0BAA0B;YAC1B,EAAE;YACF,oKAAoK;YACpK,yEAAyE;YACzE,EAAE;YACF,uFAAuF;YACvF,IAAG,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;gBAElD,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC7B,OAAO,GAAG,EAAE,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,IAAW,WAAW;QAEpB,IAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAExB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,sBAAuB,SAAQ,iBAAiB;IAE3D;;;;;;;;;;;OAWG;IACH,YAAY,OAAsB,EAAE,eAA6C,EAAE,GAAW,EAAE,YAAqB,EAAE,SAAiB,EAAE,SAAiB,EACzJ,KAAK,GAAG,MAAM,EAAE,SAAS,GAAG,KAAK;QAEjC,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC;IACnI,CAAC;CACF;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,uBAAwB,SAAQ,iBAAiB;IAE5D;;;;;;;;;;OAUG;IACH,YAAY,OAAsB,EAAE,eAA6C,EAAE,GAAW,EAAE,GAAW,EAAE,YAAY,GAAG,IAAI,EAAE,KAAK,GAAG,MAAM,EAAE,SAAS,GAAG,KAAK;QAEjK,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IACnH,CAAC;IAED;;;;;;;;;;OAUG;IACI,KAAK,CAAC,cAAc;QAEzB,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC;IAChC,CAAC;CACF"}
|
|
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,15 +41,15 @@
|
|
|
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",
|
|
50
50
|
"typedoc-plugin-markdown": "4.6.3",
|
|
51
51
|
"typescript": "5.8.3",
|
|
52
|
-
"typescript-eslint": "^8.
|
|
52
|
+
"typescript-eslint": "^8.33.0"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"mqtt": "5.13.0"
|