homebridge-plugin-utils 1.32.0 → 1.34.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/build/tsconfig.json +6 -4
- package/dist/featureoptions.d.ts +3 -3
- package/dist/featureoptions.js +122 -97
- package/dist/featureoptions.js.map +1 -1
- package/dist/ffmpeg/codecs.js +20 -19
- package/dist/ffmpeg/codecs.js.map +1 -1
- package/dist/ffmpeg/exec.d.ts +1 -1
- package/dist/ffmpeg/exec.js.map +1 -1
- package/dist/ffmpeg/fmp4.d.ts +71 -0
- package/dist/ffmpeg/fmp4.js +144 -0
- package/dist/ffmpeg/fmp4.js.map +1 -0
- package/dist/ffmpeg/index.d.ts +1 -0
- package/dist/ffmpeg/index.js +1 -0
- package/dist/ffmpeg/index.js.map +1 -1
- package/dist/ffmpeg/options.d.ts +13 -0
- package/dist/ffmpeg/options.js +22 -13
- package/dist/ffmpeg/options.js.map +1 -1
- package/dist/ffmpeg/process.d.ts +8 -2
- package/dist/ffmpeg/process.js +20 -9
- package/dist/ffmpeg/process.js.map +1 -1
- package/dist/ffmpeg/record.d.ts +121 -122
- package/dist/ffmpeg/record.js +346 -275
- package/dist/ffmpeg/record.js.map +1 -1
- package/dist/ffmpeg/rtp.js +1 -1
- package/dist/ffmpeg/rtp.js.map +1 -1
- package/dist/ffmpeg/stream.d.ts +1 -1
- package/dist/ffmpeg/stream.js +1 -1
- package/dist/ffmpeg/stream.js.map +1 -1
- package/dist/mqttclient.js +5 -4
- package/dist/mqttclient.js.map +1 -1
- package/dist/service.js +9 -3
- package/dist/service.js.map +1 -1
- package/dist/ui/featureoptions.js +122 -97
- package/dist/ui/featureoptions.js.map +1 -1
- package/dist/util.d.ts +18 -14
- package/dist/util.js +19 -11
- package/dist/util.js.map +1 -1
- package/package.json +9 -10
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ISO BMFF (fMP4) box parsing utilities for working with fragmented MP4 data.
|
|
3
|
+
*
|
|
4
|
+
* This module provides lightweight, Buffer-based utilities for inspecting ISO Base Media File Format (ISO BMFF) structures commonly found in fragmented MP4 (fMP4)
|
|
5
|
+
* streams. It enables locating specific box types, splitting fragments into their moof/mdat components, and detecting keyframe (sync sample) segments by parsing the
|
|
6
|
+
* TRUN sample flags.
|
|
7
|
+
*
|
|
8
|
+
* These utilities operate on complete Buffers and are independent of FFmpeg processes or streaming pipelines.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import type { Nullable } from "../util.js";
|
|
13
|
+
/**
|
|
14
|
+
* Describes the location of an ISO BMFF box within a buffer.
|
|
15
|
+
*
|
|
16
|
+
* @property offset - The byte offset of the box start (including the header).
|
|
17
|
+
* @property size - The total box size in bytes (including the header).
|
|
18
|
+
*
|
|
19
|
+
* @category FFmpeg
|
|
20
|
+
*/
|
|
21
|
+
export interface FMp4Box {
|
|
22
|
+
offset: number;
|
|
23
|
+
size: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Locates the first ISO BMFF box of a given type within a byte range.
|
|
27
|
+
*
|
|
28
|
+
* Walks the standard box headers (4-byte big-endian size + 4-byte ASCII type) starting at `start` and ending at `end`. Returns the offset and size of the first
|
|
29
|
+
* matching box, or `null` if no match is found. Does not handle extended-size boxes (64-bit size field) as these are uncommon in fMP4 livestream contexts.
|
|
30
|
+
*
|
|
31
|
+
* @param buffer - The buffer containing ISO BMFF box data.
|
|
32
|
+
* @param type - The 4-character ASCII box type to search for (e.g. "moof", "traf", "trun"). Must be exactly 4 characters.
|
|
33
|
+
* @param start - Optional. The byte offset to begin searching from. Defaults to 0.
|
|
34
|
+
* @param end - Optional. The byte offset to stop searching at. Defaults to the buffer length.
|
|
35
|
+
*
|
|
36
|
+
* @returns The box location, or `null` if not found.
|
|
37
|
+
*
|
|
38
|
+
* @category FFmpeg
|
|
39
|
+
*/
|
|
40
|
+
export declare function findBox(buffer: Buffer, type: string, start?: number, end?: number): Nullable<FMp4Box>;
|
|
41
|
+
/**
|
|
42
|
+
* Determines whether an fMP4 segment contains a keyframe (sync sample) by parsing the TRUN sample flags.
|
|
43
|
+
*
|
|
44
|
+
* Traverses the box hierarchy `moof -> traf -> trun` and inspects the sample flags to determine if the first sample is a sync sample (keyframe/IDR frame). Checks
|
|
45
|
+
* `first_sample_flags` first (the common case for fragments generated with `frag_keyframe`), then falls back to per-sample flags if available. Returns `false` if the
|
|
46
|
+
* box structure cannot be parsed or if the flags indicate a non-sync sample.
|
|
47
|
+
*
|
|
48
|
+
* @param segment - A buffer containing a complete fMP4 segment (typically a moof+mdat pair).
|
|
49
|
+
*
|
|
50
|
+
* @returns `true` if the segment's first sample is a sync sample (keyframe), `false` otherwise.
|
|
51
|
+
*
|
|
52
|
+
* @category FFmpeg
|
|
53
|
+
*/
|
|
54
|
+
export declare function isKeyframe(segment: Buffer): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Splits an fMP4 fragment into its moof and mdat components.
|
|
57
|
+
*
|
|
58
|
+
* Locates the `mdat` box and returns everything before it as the moof portion (which includes the moof box and any preceding metadata boxes) and everything from the
|
|
59
|
+
* mdat box to the end of the fragment as the mdat portion. The returned buffers are subarray views into the original buffer, so no data is copied. Returns `null` if
|
|
60
|
+
* the mdat box cannot be found.
|
|
61
|
+
*
|
|
62
|
+
* @param fragment - A buffer containing a complete fMP4 fragment.
|
|
63
|
+
*
|
|
64
|
+
* @returns An object with `moof` and `mdat` sub-buffers, or `null` if the structure cannot be parsed.
|
|
65
|
+
*
|
|
66
|
+
* @category FFmpeg
|
|
67
|
+
*/
|
|
68
|
+
export declare function splitMoofMdat(fragment: Buffer): Nullable<{
|
|
69
|
+
mdat: Buffer;
|
|
70
|
+
moof: Buffer;
|
|
71
|
+
}>;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/* Copyright(C) 2017-2026, HJD (https://github.com/hjdhjd). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* ffmpeg/fmp4.ts: ISO BMFF (fMP4) box parsing utilities.
|
|
4
|
+
*/
|
|
5
|
+
// ISO BMFF box header size: 4 bytes big-endian size + 4 bytes ASCII type.
|
|
6
|
+
const BOX_HEADER_SIZE = 8;
|
|
7
|
+
// TRUN fullbox header size: standard box header + 4 bytes version/flags + 4 bytes sample_count.
|
|
8
|
+
const TRUN_HEADER_SIZE = BOX_HEADER_SIZE + 8;
|
|
9
|
+
// TRUN box flags indicating the presence of optional fields.
|
|
10
|
+
const TRUN_FLAG_DATA_OFFSET = 0x000001;
|
|
11
|
+
const TRUN_FLAG_FIRST_SAMPLE_FLAGS = 0x000004;
|
|
12
|
+
const TRUN_FLAG_SAMPLE_DURATION = 0x000100;
|
|
13
|
+
const TRUN_FLAG_SAMPLE_SIZE = 0x000200;
|
|
14
|
+
const TRUN_FLAG_SAMPLE_FLAGS = 0x000400;
|
|
15
|
+
// Sample flags bit indicating a non-sync sample. When this bit is clear (0), the sample is a sync sample (keyframe/IDR).
|
|
16
|
+
const SAMPLE_FLAG_NON_SYNC = 0x00010000;
|
|
17
|
+
/**
|
|
18
|
+
* Locates the first ISO BMFF box of a given type within a byte range.
|
|
19
|
+
*
|
|
20
|
+
* Walks the standard box headers (4-byte big-endian size + 4-byte ASCII type) starting at `start` and ending at `end`. Returns the offset and size of the first
|
|
21
|
+
* matching box, or `null` if no match is found. Does not handle extended-size boxes (64-bit size field) as these are uncommon in fMP4 livestream contexts.
|
|
22
|
+
*
|
|
23
|
+
* @param buffer - The buffer containing ISO BMFF box data.
|
|
24
|
+
* @param type - The 4-character ASCII box type to search for (e.g. "moof", "traf", "trun"). Must be exactly 4 characters.
|
|
25
|
+
* @param start - Optional. The byte offset to begin searching from. Defaults to 0.
|
|
26
|
+
* @param end - Optional. The byte offset to stop searching at. Defaults to the buffer length.
|
|
27
|
+
*
|
|
28
|
+
* @returns The box location, or `null` if not found.
|
|
29
|
+
*
|
|
30
|
+
* @category FFmpeg
|
|
31
|
+
*/
|
|
32
|
+
export function findBox(buffer, type, start = 0, end) {
|
|
33
|
+
const limit = end ?? buffer.length;
|
|
34
|
+
// Encode the target type as a 32-bit integer for comparison, avoiding string allocation on every box visited. Box types in ISO BMFF are always exactly 4 ASCII bytes.
|
|
35
|
+
if (type.length !== 4) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
const target = ((type.charCodeAt(0) << 24) | (type.charCodeAt(1) << 16) | (type.charCodeAt(2) << 8) | type.charCodeAt(3)) >>> 0;
|
|
39
|
+
let offset = start;
|
|
40
|
+
// Walk boxes by reading each header: 4 bytes size (big-endian) + 4 bytes type.
|
|
41
|
+
while ((offset + BOX_HEADER_SIZE) <= limit) {
|
|
42
|
+
const size = buffer.readUInt32BE(offset);
|
|
43
|
+
// A valid box must be at least the header size and must not extend beyond the search range. Size values below the header size indicate corruption, misalignment,
|
|
44
|
+
// extended-size boxes (size === 1), or open-ended boxes (size === 0) - none of which are supported in this context.
|
|
45
|
+
if ((size < BOX_HEADER_SIZE) || (size > (limit - offset))) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
// Compare the box type as a 32-bit integer to avoid allocating a string on every iteration.
|
|
49
|
+
if (buffer.readUInt32BE(offset + 4) === target) {
|
|
50
|
+
return { offset, size };
|
|
51
|
+
}
|
|
52
|
+
// Advance to the next box.
|
|
53
|
+
offset += size;
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Determines whether an fMP4 segment contains a keyframe (sync sample) by parsing the TRUN sample flags.
|
|
59
|
+
*
|
|
60
|
+
* Traverses the box hierarchy `moof -> traf -> trun` and inspects the sample flags to determine if the first sample is a sync sample (keyframe/IDR frame). Checks
|
|
61
|
+
* `first_sample_flags` first (the common case for fragments generated with `frag_keyframe`), then falls back to per-sample flags if available. Returns `false` if the
|
|
62
|
+
* box structure cannot be parsed or if the flags indicate a non-sync sample.
|
|
63
|
+
*
|
|
64
|
+
* @param segment - A buffer containing a complete fMP4 segment (typically a moof+mdat pair).
|
|
65
|
+
*
|
|
66
|
+
* @returns `true` if the segment's first sample is a sync sample (keyframe), `false` otherwise.
|
|
67
|
+
*
|
|
68
|
+
* @category FFmpeg
|
|
69
|
+
*/
|
|
70
|
+
export function isKeyframe(segment) {
|
|
71
|
+
// Locate the moof box at the top level.
|
|
72
|
+
const moof = findBox(segment, "moof");
|
|
73
|
+
if (!moof) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
// Locate the traf box inside the moof. Child boxes start after the parent's header.
|
|
77
|
+
const traf = findBox(segment, "traf", moof.offset + BOX_HEADER_SIZE, moof.offset + moof.size);
|
|
78
|
+
if (!traf) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
// Locate the trun box inside the traf.
|
|
82
|
+
const trun = findBox(segment, "trun", traf.offset + BOX_HEADER_SIZE, traf.offset + traf.size);
|
|
83
|
+
if (!trun) {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
// The trun is a fullbox: after the standard box header come 4 bytes of version/flags and 4 bytes of sample_count. We need the full header to read the flags and
|
|
87
|
+
// determine which optional fields follow.
|
|
88
|
+
if (trun.size < TRUN_HEADER_SIZE) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
// Read the flags from the fullbox header. The version occupies the top byte and the flags occupy the lower 24 bits.
|
|
92
|
+
const flags = segment.readUInt32BE(trun.offset + BOX_HEADER_SIZE) & 0x00FFFFFF;
|
|
93
|
+
// Start after the trun header (box header + version/flags + sample_count).
|
|
94
|
+
let pos = trun.offset + TRUN_HEADER_SIZE;
|
|
95
|
+
// Skip the optional data_offset field if present.
|
|
96
|
+
if (flags & TRUN_FLAG_DATA_OFFSET) {
|
|
97
|
+
pos += 4;
|
|
98
|
+
}
|
|
99
|
+
// Check first_sample_flags if present. This is the most common path for fMP4 fragments generated with the frag_keyframe movflag, where each fragment starts at a
|
|
100
|
+
// keyframe and the first sample's flags are stored separately from the per-sample entries.
|
|
101
|
+
if (flags & TRUN_FLAG_FIRST_SAMPLE_FLAGS) {
|
|
102
|
+
if ((pos + 4) > (trun.offset + trun.size)) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
return (segment.readUInt32BE(pos) & SAMPLE_FLAG_NON_SYNC) === 0;
|
|
106
|
+
}
|
|
107
|
+
// Fall back to per-sample flags. The per-sample entry fields appear in a fixed order: duration, size, flags, composition time offset. We skip duration and size to
|
|
108
|
+
// reach the first sample's flags field.
|
|
109
|
+
if (flags & TRUN_FLAG_SAMPLE_FLAGS) {
|
|
110
|
+
if (flags & TRUN_FLAG_SAMPLE_DURATION) {
|
|
111
|
+
pos += 4;
|
|
112
|
+
}
|
|
113
|
+
if (flags & TRUN_FLAG_SAMPLE_SIZE) {
|
|
114
|
+
pos += 4;
|
|
115
|
+
}
|
|
116
|
+
if ((pos + 4) > (trun.offset + trun.size)) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
return (segment.readUInt32BE(pos) & SAMPLE_FLAG_NON_SYNC) === 0;
|
|
120
|
+
}
|
|
121
|
+
// No sample flags information available in the trun...we can't determine keyframe status.
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Splits an fMP4 fragment into its moof and mdat components.
|
|
126
|
+
*
|
|
127
|
+
* Locates the `mdat` box and returns everything before it as the moof portion (which includes the moof box and any preceding metadata boxes) and everything from the
|
|
128
|
+
* mdat box to the end of the fragment as the mdat portion. The returned buffers are subarray views into the original buffer, so no data is copied. Returns `null` if
|
|
129
|
+
* the mdat box cannot be found.
|
|
130
|
+
*
|
|
131
|
+
* @param fragment - A buffer containing a complete fMP4 fragment.
|
|
132
|
+
*
|
|
133
|
+
* @returns An object with `moof` and `mdat` sub-buffers, or `null` if the structure cannot be parsed.
|
|
134
|
+
*
|
|
135
|
+
* @category FFmpeg
|
|
136
|
+
*/
|
|
137
|
+
export function splitMoofMdat(fragment) {
|
|
138
|
+
const mdat = findBox(fragment, "mdat");
|
|
139
|
+
if (!mdat) {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
return { mdat: fragment.subarray(mdat.offset), moof: fragment.subarray(0, mdat.offset) };
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=fmp4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fmp4.js","sourceRoot":"","sources":["../../src/ffmpeg/fmp4.ts"],"names":[],"mappings":"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"}
|
package/dist/ffmpeg/index.d.ts
CHANGED
package/dist/ffmpeg/index.js
CHANGED
package/dist/ffmpeg/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ffmpeg/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ffmpeg/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
|
package/dist/ffmpeg/options.d.ts
CHANGED
|
@@ -31,6 +31,11 @@ import type { HomebridgePluginLogging } from "../util.js";
|
|
|
31
31
|
* @property log - Logging interface for output and errors.
|
|
32
32
|
* @property name - Function returning the name or label for this options set.
|
|
33
33
|
*
|
|
34
|
+
* @remarks The `hardwareDecoding` and `hardwareTranscoding` flags are bidirectional. On input, they express the caller's desired hardware acceleration state. During
|
|
35
|
+
* `FfmpegOptions` construction, the flags are resolved against the host's actual capabilities and the config object is mutated in place to reflect what is available.
|
|
36
|
+
* After construction, these flags represent the resolved state...`hardwareDecoding` or `hardwareTranscoding` may be set to `false` if the required codecs or
|
|
37
|
+
* accelerators are absent, or `hardwareDecoding` may be set to `true` if Intel Quick Sync Video is detected even when not explicitly requested.
|
|
38
|
+
*
|
|
34
39
|
* @example
|
|
35
40
|
*
|
|
36
41
|
* ```ts
|
|
@@ -299,6 +304,14 @@ export declare class FfmpegOptions {
|
|
|
299
304
|
* ```
|
|
300
305
|
*/
|
|
301
306
|
videoDecoder(codec?: string): string[];
|
|
307
|
+
/**
|
|
308
|
+
* Returns the platform-appropriate FFmpeg video filters needed to transfer hardware-decoded frames to system memory. When hardware decoding is active, decoded frames
|
|
309
|
+
* may reside on the GPU and require explicit download before CPU-based filters (crop, scale, format conversion) can operate on them. Returns an empty array when
|
|
310
|
+
* hardware decoding is disabled or when the platform handles the transfer implicitly (e.g. Raspberry Pi).
|
|
311
|
+
*
|
|
312
|
+
* @returns An array of FFmpeg filter strings to prepend to a video filter chain, or an empty array if no transfer is needed.
|
|
313
|
+
*/
|
|
314
|
+
get hardwareDownloadFilters(): string[];
|
|
302
315
|
/**
|
|
303
316
|
* Returns the FFmpeg crop filter string, or a default no-op filter if cropping is disabled.
|
|
304
317
|
*
|
package/dist/ffmpeg/options.js
CHANGED
|
@@ -158,7 +158,7 @@ export class FfmpegOptions {
|
|
|
158
158
|
return false;
|
|
159
159
|
}
|
|
160
160
|
// Verify that we have the hardware decoder available to us. Unfortunately, as of FFmpeg 7, it seems that hardware decoding is flaky, at best, on Raspberry Pi.
|
|
161
|
-
// validateDecoder("
|
|
161
|
+
// validateDecoder("h264_v4l2m2m", [ "yuv420p" ]);
|
|
162
162
|
this.config.hardwareDecoding = false;
|
|
163
163
|
break;
|
|
164
164
|
default:
|
|
@@ -237,12 +237,11 @@ export class FfmpegOptions {
|
|
|
237
237
|
const needsUpload = !options.hardwareDecoding && options.hardwareTranscoding;
|
|
238
238
|
const needsDownload = options.hardwareDecoding && !options.hardwareTranscoding;
|
|
239
239
|
if (needsUpload) {
|
|
240
|
-
// We need to
|
|
240
|
+
// We need to upload frames from system memory to the GPU for hardware encoding.
|
|
241
241
|
switch (this.codecSupport.hostSystem) {
|
|
242
242
|
case "macOS.Apple":
|
|
243
243
|
case "macOS.Intel":
|
|
244
|
-
// FFmpeg 8.x on macOS requires explicit upload when moving from
|
|
245
|
-
// We need to upload frames from system memory to the GPU for hardware encoding.
|
|
244
|
+
// FFmpeg 8.x on macOS requires explicit upload when moving from software decoding to VideoToolbox encoding.
|
|
246
245
|
if (this.config.codecSupport.ffmpegVersion.startsWith("8.")) {
|
|
247
246
|
filters.push("hwupload");
|
|
248
247
|
}
|
|
@@ -332,7 +331,7 @@ export class FfmpegOptions {
|
|
|
332
331
|
*/
|
|
333
332
|
audioEncoder(options = {}) {
|
|
334
333
|
// Default our codec to AAC_ELD unless specified.
|
|
335
|
-
options =
|
|
334
|
+
options = { codec: 1 /* AudioRecordingCodecType.AAC_ELD */, ...options };
|
|
336
335
|
// If we don't have libfdk_aac available to us, we're essentially dead in the water.
|
|
337
336
|
let encoderOptions = [];
|
|
338
337
|
// Utility function to return a default audio encoder codec.
|
|
@@ -467,6 +466,16 @@ export class FfmpegOptions {
|
|
|
467
466
|
}
|
|
468
467
|
return decoderOptions;
|
|
469
468
|
}
|
|
469
|
+
/**
|
|
470
|
+
* Returns the platform-appropriate FFmpeg video filters needed to transfer hardware-decoded frames to system memory. When hardware decoding is active, decoded frames
|
|
471
|
+
* may reside on the GPU and require explicit download before CPU-based filters (crop, scale, format conversion) can operate on them. Returns an empty array when
|
|
472
|
+
* hardware decoding is disabled or when the platform handles the transfer implicitly (e.g. Raspberry Pi).
|
|
473
|
+
*
|
|
474
|
+
* @returns An array of FFmpeg filter strings to prepend to a video filter chain, or an empty array if no transfer is needed.
|
|
475
|
+
*/
|
|
476
|
+
get hardwareDownloadFilters() {
|
|
477
|
+
return this.getHardwareTransferFilters({ hardwareDecoding: this.config.hardwareDecoding, hardwareTranscoding: false });
|
|
478
|
+
}
|
|
470
479
|
/**
|
|
471
480
|
* Returns the FFmpeg crop filter string, or a default no-op filter if cropping is disabled.
|
|
472
481
|
*
|
|
@@ -603,7 +612,7 @@ export class FfmpegOptions {
|
|
|
603
612
|
// -filter:v Set the pixel format and scale the video to the size we want while respecting aspect ratios and ensuring our final
|
|
604
613
|
// dimensions are a power of two.
|
|
605
614
|
// -g:v Set the group of pictures to the number of frames per second * the interval in between keyframes to ensure a solid
|
|
606
|
-
//
|
|
615
|
+
// livestreaming experience.
|
|
607
616
|
// -bufsize size This is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
608
617
|
// -maxrate bitrate The maximum bitrate tolerance, used with -bufsize. This provides an upper bound on bitrate, with a little bit extra to
|
|
609
618
|
// allow encoders some variation in order to maximize quality while honoring bandwidth constraints.
|
|
@@ -646,9 +655,9 @@ export class FfmpegOptions {
|
|
|
646
655
|
recordEncoder(options) {
|
|
647
656
|
// We always disable smart quality when recording due to HomeKit's strict requirements here.
|
|
648
657
|
options.smartQuality = false;
|
|
649
|
-
//
|
|
658
|
+
// Generally, we default to using the same encoding options we use to transcode livestreams, unless we have platform-specific quirks we need to address,
|
|
650
659
|
// such as where we can have hardware-accelerated transcoded livestreaming, but not hardware-accelerated HKSV event recording. The other noteworthy
|
|
651
|
-
// aspect here is that HKSV is quite specific in what it wants, and isn't
|
|
660
|
+
// aspect here is that HKSV is quite specific in what it wants, and isn't very tolerant of creative license in how you may choose to alter bitrate to
|
|
652
661
|
// address quality. When we call our encoders, we also let them know we don't want any additional quality optimizations when transcoding HKSV events.
|
|
653
662
|
switch (this.codecSupport.hostSystem) {
|
|
654
663
|
case "raspbian":
|
|
@@ -674,7 +683,7 @@ export class FfmpegOptions {
|
|
|
674
683
|
*/
|
|
675
684
|
streamEncoder(options) {
|
|
676
685
|
// Default hardware decoding and smart quality to true unless specified.
|
|
677
|
-
options =
|
|
686
|
+
options = { hardwareDecoding: true, hardwareTranscoding: this.config.hardwareTranscoding, smartQuality: true, ...options };
|
|
678
687
|
// Disable hardware acceleration if we haven't detected it.
|
|
679
688
|
if (!this.config.hardwareDecoding) {
|
|
680
689
|
options.hardwareDecoding = false;
|
|
@@ -717,7 +726,7 @@ export class FfmpegOptions {
|
|
|
717
726
|
// -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
|
|
718
727
|
// ensuring our final dimensions are a power of two.
|
|
719
728
|
// -g:v Set the group of pictures to the number of frames per second * the interval in between keyframes to ensure a solid
|
|
720
|
-
//
|
|
729
|
+
// livestreaming experience.
|
|
721
730
|
// -bufsize size This is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
722
731
|
// -maxrate bitrate The maximum bitrate tolerance used in concert with -bufsize to constrain the maximum bitrate permitted.
|
|
723
732
|
// -r framerate Set the output framerate. We use this to bypass doing this in filters so we can maximize the use of our hardware pipeline.
|
|
@@ -749,7 +758,7 @@ export class FfmpegOptions {
|
|
|
749
758
|
// -b:v Average bitrate that's being requested by HomeKit. We can't use a quality constraint and allow for more optimization of the
|
|
750
759
|
// bitrate on Intel-based Macs due to hardware / API limitations.
|
|
751
760
|
// -g:v Set the group of pictures to the number of frames per second * the interval in between keyframes to ensure a solid
|
|
752
|
-
// livestreaming
|
|
761
|
+
// livestreaming experience.
|
|
753
762
|
// -bufsize size This is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
754
763
|
// -maxrate bitrate The maximum bitrate tolerance used in concert with -bufsize to constrain the maximum bitrate permitted.
|
|
755
764
|
// -r framerate Set the output framerate. We use this to bypass doing this in filters so we can maximize the use of our hardware pipeline.
|
|
@@ -765,7 +774,7 @@ export class FfmpegOptions {
|
|
|
765
774
|
// -b:v Average bitrate that's being requested by HomeKit. We can't use a quality constraint and allow for more optimization of the
|
|
766
775
|
// bitrate due to v4l2m2m limitations.
|
|
767
776
|
// -g:v Set the group of pictures to the number of frames per second * the interval in between keyframes to ensure a solid
|
|
768
|
-
//
|
|
777
|
+
// livestreaming experience.
|
|
769
778
|
// -bufsize size This is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
770
779
|
// -maxrate bitrate The maximum bitrate tolerance used in concert with -bufsize to constrain the maximum bitrate permitted.
|
|
771
780
|
// -r framerate Set the output framerate. We use this to bypass doing this in filters so we can maximize the use of our hardware pipeline.
|
|
@@ -783,7 +792,7 @@ export class FfmpegOptions {
|
|
|
783
792
|
// -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
|
|
784
793
|
// ensuring our final dimensions are a power of two.
|
|
785
794
|
// -g:v Set the group of pictures to the number of frames per second * the interval in between keyframes to ensure a solid
|
|
786
|
-
//
|
|
795
|
+
// livestreaming experience.
|
|
787
796
|
// -bufsize size This is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
788
797
|
// -maxrate bitrate The maximum bitrate tolerance used in concert with -bufsize to constrain the maximum bitrate permitted.
|
|
789
798
|
// -r framerate Set the output framerate. We use this to bypass doing this in filters so we can maximize the use of our hardware pipeline.
|
|
@@ -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/process.d.ts
CHANGED
|
@@ -91,11 +91,11 @@ export declare class FfmpegProcess extends EventEmitter {
|
|
|
91
91
|
/**
|
|
92
92
|
* The underlying Node.js ChildProcess instance for the FFmpeg process.
|
|
93
93
|
*/
|
|
94
|
-
process: Nullable<ChildProcessWithoutNullStreams>;
|
|
94
|
+
protected process: Nullable<ChildProcessWithoutNullStreams>;
|
|
95
95
|
/**
|
|
96
96
|
* Accumulated log lines from standard error for error reporting and debugging.
|
|
97
97
|
*/
|
|
98
|
-
|
|
98
|
+
private _stderrLog;
|
|
99
99
|
private ffmpegTimeout?;
|
|
100
100
|
private isLogging;
|
|
101
101
|
private stderrBuffer;
|
|
@@ -134,6 +134,12 @@ export declare class FfmpegProcess extends EventEmitter {
|
|
|
134
134
|
* @param signal - The signal, if any, used to terminate the process.
|
|
135
135
|
*/
|
|
136
136
|
protected logFfmpegError(exitCode: Nullable<number>, signal: Nullable<NodeJS.Signals>): void;
|
|
137
|
+
/**
|
|
138
|
+
* Returns the accumulated standard error log lines from the FFmpeg process.
|
|
139
|
+
*
|
|
140
|
+
* @returns An array of stderr log lines.
|
|
141
|
+
*/
|
|
142
|
+
get stderrLog(): string[];
|
|
137
143
|
/**
|
|
138
144
|
* Returns the writable standard input stream for the FFmpeg process, if available.
|
|
139
145
|
*
|
package/dist/ffmpeg/process.js
CHANGED
|
@@ -27,6 +27,8 @@ import { spawn } from "node:child_process";
|
|
|
27
27
|
import { EventEmitter } from "node:events";
|
|
28
28
|
import os from "node:os";
|
|
29
29
|
import util from "node:util";
|
|
30
|
+
// Matches non-printable control characters for stripping from FFmpeg stderr output. Compiled once at module scope rather than per data event.
|
|
31
|
+
const NON_PRINTABLE_CHARS = /\p{C}+/gu;
|
|
30
32
|
/**
|
|
31
33
|
* Base class providing FFmpeg process management and capability introspection.
|
|
32
34
|
*
|
|
@@ -97,7 +99,7 @@ export class FfmpegProcess extends EventEmitter {
|
|
|
97
99
|
/**
|
|
98
100
|
* Accumulated log lines from standard error for error reporting and debugging.
|
|
99
101
|
*/
|
|
100
|
-
|
|
102
|
+
_stderrLog;
|
|
101
103
|
ffmpegTimeout;
|
|
102
104
|
isLogging;
|
|
103
105
|
stderrBuffer;
|
|
@@ -115,7 +117,7 @@ export class FfmpegProcess extends EventEmitter {
|
|
|
115
117
|
this.options = options;
|
|
116
118
|
this.process = null;
|
|
117
119
|
this.stderrBuffer = "";
|
|
118
|
-
this.
|
|
120
|
+
this._stderrLog = [];
|
|
119
121
|
// Toggle FFmpeg logging, if configured.
|
|
120
122
|
this.isVerbose = this.options.codecSupport.verbose;
|
|
121
123
|
// If we've specified a command line or a callback, let's save them.
|
|
@@ -208,7 +210,7 @@ export class FfmpegProcess extends EventEmitter {
|
|
|
208
210
|
if (!this.isStarted) {
|
|
209
211
|
this.isStarted = true;
|
|
210
212
|
this.isEnded = false;
|
|
211
|
-
this.log.debug("
|
|
213
|
+
this.log.debug("FFmpeg process started.");
|
|
212
214
|
// Always remember to execute the callback once we're setup to let homebridge know we're streaming.
|
|
213
215
|
if (this.callback) {
|
|
214
216
|
this.callback();
|
|
@@ -216,7 +218,7 @@ export class FfmpegProcess extends EventEmitter {
|
|
|
216
218
|
}
|
|
217
219
|
}
|
|
218
220
|
// Append to the current line we've been buffering. We don't want to output not-printable characters to ensure the log output is readable.
|
|
219
|
-
this.stderrBuffer += data.toString().replace(
|
|
221
|
+
this.stderrBuffer += data.toString().replace(NON_PRINTABLE_CHARS, os.EOL);
|
|
220
222
|
// Debugging and additional logging collection.
|
|
221
223
|
for (;;) {
|
|
222
224
|
// Find the next newline.
|
|
@@ -228,7 +230,7 @@ export class FfmpegProcess extends EventEmitter {
|
|
|
228
230
|
// Grab the next complete line, and increment our buffer.
|
|
229
231
|
const line = this.stderrBuffer.slice(0, lineIndex);
|
|
230
232
|
this.stderrBuffer = this.stderrBuffer.slice(lineIndex + os.EOL.length);
|
|
231
|
-
this.
|
|
233
|
+
this._stderrLog.push(line);
|
|
232
234
|
// Show it to the user if it's been requested.
|
|
233
235
|
if (this.isLogging || this.isVerbose || this.options.debug) {
|
|
234
236
|
this.log.info(line);
|
|
@@ -258,7 +260,7 @@ export class FfmpegProcess extends EventEmitter {
|
|
|
258
260
|
this.hasError = true;
|
|
259
261
|
// Flush out any remaining output in our error buffer.
|
|
260
262
|
if (this.stderrBuffer.length) {
|
|
261
|
-
this.
|
|
263
|
+
this._stderrLog.push(this.stderrBuffer + "\n");
|
|
262
264
|
this.stderrBuffer = "";
|
|
263
265
|
}
|
|
264
266
|
// Inform the user.
|
|
@@ -268,11 +270,10 @@ export class FfmpegProcess extends EventEmitter {
|
|
|
268
270
|
void errorHandler(util.format(this.options.name() + ": " + logPrefix + " unexpectedly with exit code %s and signal %s.", exitCode, signal));
|
|
269
271
|
}
|
|
270
272
|
}
|
|
271
|
-
// Cleanup after ourselves.
|
|
273
|
+
// Cleanup after ourselves. We intentionally preserve _stderrLog so callers can inspect it for post-mortem diagnostics after the process exits.
|
|
272
274
|
this.process?.stdin.off("error", errorListener);
|
|
273
275
|
this.process?.stderr.off("data", dataListener);
|
|
274
276
|
this.process = null;
|
|
275
|
-
this.stderrLog = [];
|
|
276
277
|
});
|
|
277
278
|
}
|
|
278
279
|
// Stop the FFmpeg process and complete any cleanup activities.
|
|
@@ -313,7 +314,17 @@ export class FfmpegProcess extends EventEmitter {
|
|
|
313
314
|
// Something else has occurred. Inform the user, and stop everything.
|
|
314
315
|
this.log.error("FFmpeg process ended unexpectedly with %s%s%s.", (exitCode !== null) ? "an exit code of " + exitCode.toString() : "", ((exitCode !== null) && signal) ? " and " : "", signal ? "a signal received of " + signal : "");
|
|
315
316
|
this.log.error("FFmpeg (%s) command that errored out was: %s %s", this.options.codecSupport.ffmpegVersion, this.options.codecSupport.ffmpegExec, this.commandLineArgs.join(" "));
|
|
316
|
-
|
|
317
|
+
for (const x of this._stderrLog) {
|
|
318
|
+
this.log.error(x);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Returns the accumulated standard error log lines from the FFmpeg process.
|
|
323
|
+
*
|
|
324
|
+
* @returns An array of stderr log lines.
|
|
325
|
+
*/
|
|
326
|
+
get stderrLog() {
|
|
327
|
+
return this._stderrLog;
|
|
317
328
|
}
|
|
318
329
|
/**
|
|
319
330
|
* Returns the writable standard input stream for the FFmpeg process, if available.
|