@homebridge-plugins/homebridge-eufy-security 5.0.0-beta.33 → 5.0.0-beta.34
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/config.schema.json +6 -0
- package/dist/configuration.js +2 -0
- package/dist/configuration.js.map +1 -1
- package/dist/diagnostics.js +70 -1
- package/dist/diagnostics.js.map +1 -1
- package/dist/media/live-stream.js +313 -34
- package/dist/media/live-stream.js.map +1 -1
- package/dist/platform.js +16 -2
- package/dist/platform.js.map +1 -1
- package/homebridge-ui/public/i18n/en.json +2 -0
- package/homebridge-ui/public/i18n/fr.json +2 -0
- package/homebridge-ui/public/index.html +5 -0
- package/homebridge-ui/public/js/app.js +5 -0
- package/i18n/runtime/en.json +1 -0
- package/package.json +1 -1
package/config.schema.json
CHANGED
|
@@ -71,6 +71,12 @@
|
|
|
71
71
|
"default": false,
|
|
72
72
|
"type": "boolean"
|
|
73
73
|
},
|
|
74
|
+
"hardwareVideoEncoder": {
|
|
75
|
+
"title": "Hardware video encoding",
|
|
76
|
+
"description": "Use the computer’s video hardware: turn this off if live view stopped working after an update or looks wrong. On by default.",
|
|
77
|
+
"default": true,
|
|
78
|
+
"type": "boolean"
|
|
79
|
+
},
|
|
74
80
|
"hdLiveVideo": {
|
|
75
81
|
"title": "Always HD live video",
|
|
76
82
|
"description": "Turn this on if live view in the Home app looks blurry. Cameras then offer the Home app only 720p and 1080p, also on mobile data and in the camera grid, which uses more data. Off by default.",
|
package/dist/configuration.js
CHANGED
|
@@ -135,6 +135,7 @@ export function parseConfig(value) {
|
|
|
135
135
|
ffmpegPath: configuredFfmpegPath ?? bundledFfmpegPath,
|
|
136
136
|
smallVideoPackets: value.smallVideoPackets === true,
|
|
137
137
|
liveVideoPassthrough: value.liveVideoPassthrough === true,
|
|
138
|
+
hardwareVideoEncoder: value.hardwareVideoEncoder !== false,
|
|
138
139
|
hdLiveVideo: value.hdLiveVideo === true,
|
|
139
140
|
ignoreHomeBitRate: value.ignoreHomeBitRate === true,
|
|
140
141
|
entityPreferences: parseEntityPreferences(value.entityPreferences),
|
|
@@ -188,6 +189,7 @@ export function serializeConfig(config) {
|
|
|
188
189
|
ffmpegPath: config.ffmpegPath,
|
|
189
190
|
...(config.smallVideoPackets ? { smallVideoPackets: true } : {}),
|
|
190
191
|
...(config.liveVideoPassthrough ? { liveVideoPassthrough: true } : {}),
|
|
192
|
+
...(config.hardwareVideoEncoder ? {} : { hardwareVideoEncoder: false }),
|
|
191
193
|
...(config.hdLiveVideo ? { hdLiveVideo: true } : {}),
|
|
192
194
|
...(config.ignoreHomeBitRate ? { ignoreHomeBitRate: true } : {}),
|
|
193
195
|
entityPreferences: Object.fromEntries(Object.entries(config.entityPreferences).map(([serial, preference]) => [serial, { ...preference }])),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../src/configuration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,iBAAiB,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AACpC,MAAM,CAAC,MAAM,2BAA2B,GAAG,iBAAiB,CAAC;AAC7D,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,CAAC;AACnD,+FAA+F;AAC/F,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,sBAAsB,GAAsB,CAAC,eAAe,CAAC,CAAC;AAuB3E,qEAAqE;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../src/configuration.ts"],"names":[],"mappings":"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"}
|
package/dist/diagnostics.js
CHANGED
|
@@ -542,9 +542,39 @@ function readFfmpegIdentity(value) {
|
|
|
542
542
|
}
|
|
543
543
|
const path = typeof recorded.path === 'string' ? boundedText(recorded.path, MAX_FFMPEG_IDENTITY_LENGTH) : undefined;
|
|
544
544
|
const version = typeof recorded.version === 'string' ? boundedText(recorded.version, MAX_FFMPEG_IDENTITY_LENGTH) : undefined;
|
|
545
|
+
const encoders = recorded.encoders && typeof recorded.encoders === 'object' && !Array.isArray(recorded.encoders)
|
|
546
|
+
? readEncoderQualification(recorded.encoders)
|
|
547
|
+
: undefined;
|
|
545
548
|
return path === undefined
|
|
546
549
|
? undefined
|
|
547
|
-
: {
|
|
550
|
+
: {
|
|
551
|
+
path,
|
|
552
|
+
source: recorded.source,
|
|
553
|
+
...(version === undefined ? {} : { version }),
|
|
554
|
+
...(encoders === undefined ? {} : { encoders }),
|
|
555
|
+
};
|
|
556
|
+
}
|
|
557
|
+
/**
|
|
558
|
+
* The recorded encoder qualification, keeping only encoder names, `profile@level` selections and outcomes this
|
|
559
|
+
* build names, so the record is bounded by those three closed sets.
|
|
560
|
+
*/
|
|
561
|
+
function readEncoderQualification(recorded) {
|
|
562
|
+
return Object.fromEntries(LIVE_VIDEO_ENCODERS.filter((name) => Object.hasOwn(recorded, name)).map((name) => {
|
|
563
|
+
const outcomes = recorded[name] && typeof recorded[name] === 'object' ? Object.entries(recorded[name]) : [];
|
|
564
|
+
return [
|
|
565
|
+
name,
|
|
566
|
+
Object.fromEntries(outcomes.flatMap(([selection, value]) => {
|
|
567
|
+
const [profile, level] = selection.split('@');
|
|
568
|
+
const outcome = allowlistedLabel(value, QUALIFICATION_OUTCOMES);
|
|
569
|
+
return HOMEKIT_LIVE_VIDEO_PROFILES.has(profile) &&
|
|
570
|
+
HOMEKIT_LIVE_VIDEO_LEVELS.has(level) &&
|
|
571
|
+
selection === `${profile}@${level}` &&
|
|
572
|
+
outcome
|
|
573
|
+
? [[selection, outcome]]
|
|
574
|
+
: [];
|
|
575
|
+
})),
|
|
576
|
+
];
|
|
577
|
+
}));
|
|
548
578
|
}
|
|
549
579
|
/**
|
|
550
580
|
* The one log evidence class a retained record belongs to.
|
|
@@ -1909,6 +1939,7 @@ const ADAPTATION_ROLES = new Set(['live-video', 'live-audio', 'return-audio', 'r
|
|
|
1909
1939
|
/** What that process did. `output` is a process reported for what it wrote rather than for how it ended. */
|
|
1910
1940
|
const ADAPTATION_EVENTS = new Set([
|
|
1911
1941
|
'started',
|
|
1942
|
+
'encoder-disqualified',
|
|
1912
1943
|
'spawn-failed',
|
|
1913
1944
|
'input-failed',
|
|
1914
1945
|
'exited-before-output',
|
|
@@ -1922,6 +1953,31 @@ const ADAPTATION_EVENTS = new Set([
|
|
|
1922
1953
|
* started mid-flight is judged against what that one left. A first adaptation has nothing behind it.
|
|
1923
1954
|
*/
|
|
1924
1955
|
const ADAPTATION_CAUSES = ['first', 'controller-selection', 'source-configuration'];
|
|
1956
|
+
/** The encoders a live video process may code with, `copy` being none. */
|
|
1957
|
+
const LIVE_VIDEO_ENCODERS = [
|
|
1958
|
+
'copy',
|
|
1959
|
+
'libx264',
|
|
1960
|
+
'h264_videotoolbox',
|
|
1961
|
+
'h264_qsv',
|
|
1962
|
+
'h264_nvenc',
|
|
1963
|
+
'h264_amf',
|
|
1964
|
+
'h264_vaapi',
|
|
1965
|
+
'h264_v4l2m2m',
|
|
1966
|
+
];
|
|
1967
|
+
/** What qualifying a hardware encoder for one selection found: `qualified`, or the first check it failed. */
|
|
1968
|
+
const QUALIFICATION_OUTCOMES = [
|
|
1969
|
+
'qualified',
|
|
1970
|
+
'budget',
|
|
1971
|
+
'encode',
|
|
1972
|
+
'trace',
|
|
1973
|
+
'profile',
|
|
1974
|
+
'level',
|
|
1975
|
+
'geometry',
|
|
1976
|
+
'frames',
|
|
1977
|
+
'bytes',
|
|
1978
|
+
];
|
|
1979
|
+
/** The codec a live video source delivers. */
|
|
1980
|
+
const LIVE_VIDEO_SOURCES = ['h264', 'h265', 'av1'];
|
|
1925
1981
|
/**
|
|
1926
1982
|
* Which of those events is a failure, and so the ones a record is levelled `warn` for.
|
|
1927
1983
|
*
|
|
@@ -1931,6 +1987,7 @@ const ADAPTATION_CAUSES = ['first', 'controller-selection', 'source-configuratio
|
|
|
1931
1987
|
* log for every session that succeeded.
|
|
1932
1988
|
*/
|
|
1933
1989
|
const ADAPTATION_FAILURE_EVENTS = new Set([
|
|
1990
|
+
'encoder-disqualified',
|
|
1934
1991
|
'spawn-failed',
|
|
1935
1992
|
'input-failed',
|
|
1936
1993
|
'exited-before-output',
|
|
@@ -2397,6 +2454,14 @@ export function reportDiscardedV4Settings(target) {
|
|
|
2397
2454
|
messageKey,
|
|
2398
2455
|
}));
|
|
2399
2456
|
}
|
|
2457
|
+
/** States once which encoders code live video on this host: every qualified hardware encoder, then `libx264`. */
|
|
2458
|
+
export function reportLiveVideoEncoders(target, encoders) {
|
|
2459
|
+
const names = [
|
|
2460
|
+
...LIVE_VIDEO_ENCODERS.filter((name) => Object.values(encoders[name] ?? {}).includes('qualified') && name !== 'libx264'),
|
|
2461
|
+
'libx264',
|
|
2462
|
+
];
|
|
2463
|
+
target.info(`[live-video-encoders] ${localize(target, 'log.liveVideoEncoders', { encoders: names.join(', ') })}`);
|
|
2464
|
+
}
|
|
2400
2465
|
/** Emits one identity-free warning after an invalid retained camera image is discarded. */
|
|
2401
2466
|
export function reportInvalidSnapshotCache(target) {
|
|
2402
2467
|
const code = 'camera-snapshot-cache-invalid';
|
|
@@ -2599,12 +2664,16 @@ function sanitizeAdaptationNotice(value, level) {
|
|
|
2599
2664
|
.slice(-MAX_ADAPTATION_STDERR_LINES);
|
|
2600
2665
|
const sourceFragments = nonNegativeInteger(value.sourceFragments);
|
|
2601
2666
|
const cause = allowlistedLabel(value.cause, ADAPTATION_CAUSES);
|
|
2667
|
+
const encoder = allowlistedLabel(value.encoder, LIVE_VIDEO_ENCODERS);
|
|
2668
|
+
const source = allowlistedLabel(value.source, LIVE_VIDEO_SOURCES);
|
|
2602
2669
|
return {
|
|
2603
2670
|
scope: 'ffmpeg',
|
|
2604
2671
|
level,
|
|
2605
2672
|
role: value.role,
|
|
2606
2673
|
event: value.event,
|
|
2607
2674
|
...(cause === undefined ? {} : { cause }),
|
|
2675
|
+
...(encoder === undefined ? {} : { encoder }),
|
|
2676
|
+
...(source === undefined ? {} : { source }),
|
|
2608
2677
|
...(code === undefined ? {} : { code }),
|
|
2609
2678
|
...(signal === undefined ? {} : { signal }),
|
|
2610
2679
|
...(sourceFragments === undefined ? {} : { sourceFragments }),
|