@viguza/homebridge-ezviz 2.0.2 → 2.0.3
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/CHANGELOG.md +20 -0
- package/README.md +6 -2
- package/dist/accessories/ip-camera.js +6 -2
- package/dist/accessories/ip-camera.js.map +1 -1
- package/dist/api/ezviz-api.d.ts +13 -4
- package/dist/api/ezviz-api.js +155 -73
- package/dist/api/ezviz-api.js.map +1 -1
- package/dist/api/ezviz-requests.d.ts +3 -0
- package/dist/api/ezviz-requests.js +7 -21
- package/dist/api/ezviz-requests.js.map +1 -1
- package/dist/platform.d.ts +1 -0
- package/dist/platform.js +18 -11
- package/dist/platform.js.map +1 -1
- package/dist/types/data.d.ts +2 -2
- package/dist/utils/ffmpeg.d.ts +0 -2
- package/dist/utils/ffmpeg.js +6 -22
- package/dist/utils/ffmpeg.js.map +1 -1
- package/dist/utils/hksv-prebuffer.d.ts +4 -0
- package/dist/utils/hksv-prebuffer.js +48 -8
- package/dist/utils/hksv-prebuffer.js.map +1 -1
- package/dist/utils/hksv-recording-delegate.d.ts +1 -1
- package/dist/utils/hksv-recording-delegate.js +22 -12
- package/dist/utils/hksv-recording-delegate.js.map +1 -1
- package/dist/utils/mp4-parser.js +8 -1
- package/dist/utils/mp4-parser.js.map +1 -1
- package/dist/utils/rtsp-url.d.ts +5 -0
- package/dist/utils/rtsp-url.js +14 -5
- package/dist/utils/rtsp-url.js.map +1 -1
- package/dist/utils/sanitize.d.ts +5 -0
- package/dist/utils/sanitize.js +10 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/dist/utils/streaming-delegate.js +5 -3
- package/dist/utils/streaming-delegate.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
|
-
import
|
|
3
|
-
import { EZVIZ_CLIENT_TYPE, EZVIZ_USER_AGENT, API_ENDPOINT_REFRESH, EZVIZ_REQUEST_TIMEOUT_MS } from './ezviz-constants.js';
|
|
2
|
+
import { EZVIZ_CLIENT_TYPE, EZVIZ_USER_AGENT, EZVIZ_REQUEST_TIMEOUT_MS } from './ezviz-constants.js';
|
|
4
3
|
/**
|
|
5
4
|
* True for errors worth retrying: no response was received (timeout, DNS, connection
|
|
6
5
|
* reset, etc.) or the server reported a transient 5xx. A response with a 4xx status is
|
|
@@ -46,9 +45,11 @@ export async function withNetworkRetry(fn, retries) {
|
|
|
46
45
|
* networkRetries (default 0) retries transient network
|
|
47
46
|
* errors with backoff before giving up. Leave both unset
|
|
48
47
|
* for requests on a HomeKit-blocking read path.
|
|
48
|
+
* onUnauthorized is called on a 401 to rotate the session
|
|
49
|
+
* (resolving false if it couldn't) before retrying.
|
|
49
50
|
*/
|
|
50
51
|
export async function sendRequest(config, hostname, endpoint, method, data, retries = 3, options = {}) {
|
|
51
|
-
const { timeoutMs = EZVIZ_REQUEST_TIMEOUT_MS, networkRetries = 0 } = options;
|
|
52
|
+
const { timeoutMs = EZVIZ_REQUEST_TIMEOUT_MS, networkRetries = 0, onUnauthorized } = options;
|
|
52
53
|
const credentials = config.credentials;
|
|
53
54
|
const headers = {
|
|
54
55
|
'User-Agent': EZVIZ_USER_AGENT,
|
|
@@ -71,25 +72,10 @@ export async function sendRequest(config, hostname, endpoint, method, data, retr
|
|
|
71
72
|
}
|
|
72
73
|
catch (error) {
|
|
73
74
|
const axiosError = error;
|
|
74
|
-
if (retries > 0 && axiosError.response?.status === 401) {
|
|
75
|
-
|
|
76
|
-
cuName: credentials.cuName,
|
|
77
|
-
featureCode: credentials.featureCode,
|
|
78
|
-
refreshSessionId: credentials.rfSessionId,
|
|
79
|
-
});
|
|
80
|
-
const refreshSession = (await sendRequest(config, config.domain, API_ENDPOINT_REFRESH, 'PUT', query));
|
|
81
|
-
const creds = {
|
|
82
|
-
sessionId: refreshSession.sessionInfo.sessionId,
|
|
83
|
-
rfSessionId: refreshSession.sessionInfo.refreshSessionId,
|
|
84
|
-
featureCode: credentials.featureCode,
|
|
85
|
-
cuName: credentials.cuName,
|
|
86
|
-
};
|
|
87
|
-
config.credentials = creds;
|
|
88
|
-
return await sendRequest(config, hostname, endpoint, method, data, retries - 1, options);
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
throw error;
|
|
75
|
+
if (retries > 0 && onUnauthorized && axiosError.response?.status === 401 && await onUnauthorized()) {
|
|
76
|
+
return sendRequest(config, hostname, endpoint, method, data, retries - 1, options);
|
|
92
77
|
}
|
|
78
|
+
throw error;
|
|
93
79
|
}
|
|
94
80
|
}
|
|
95
81
|
//# sourceMappingURL=ezviz-requests.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ezviz-requests.js","sourceRoot":"","sources":["../../src/api/ezviz-requests.ts"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ezviz-requests.js","sourceRoot":"","sources":["../../src/api/ezviz-requests.ts"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAGtE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAErG;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,MAAM,UAAU,GAAG,KAAmB,CAAC;IACvC,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,UAAU,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC;IAC3C,CAAC;IACD,OAAO,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAI,EAAoB,EAAE,OAAe;IAC7E,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,SAAS,CAAC;QACR,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO,IAAI,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,GAAG,CAAC,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;YACzD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAmB,EACnB,QAAgB,EAChB,QAAgB,EAChB,MAAc,EACd,IAAa,EACb,OAAO,GAAG,CAAC,EACX,UAAoG,EAAE;IAEtG,MAAM,EAAE,SAAS,GAAG,wBAAwB,EAAE,cAAc,GAAG,CAAC,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAC7F,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAEvC,MAAM,OAAO,GAAmB;QAC9B,YAAY,EAAE,gBAAgB;QAC9B,YAAY,EAAE,iBAAiB;QAC/B,cAAc,EAAE,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,SAAS;QACvG,WAAW,EAAE,WAAW,CAAC,SAAS;KACnC,CAAC;IAEF,MAAM,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAChC,MAAM,GAAG,GAAuB;QAC9B,MAAM;QACN,GAAG;QACH,IAAI;QACJ,OAAO;QACP,YAAY,EAAE,MAAM;QACpB,OAAO,EAAE,SAAS;KACnB,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;QAC1E,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,KAAmB,CAAC;QACvC,IAAI,OAAO,GAAG,CAAC,IAAI,cAAc,IAAI,UAAU,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,IAAI,MAAM,cAAc,EAAE,EAAE,CAAC;YACnG,OAAO,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/platform.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export declare class EZVIZPlatform implements DynamicPlatformPlugin {
|
|
|
18
18
|
readonly discoveredCacheUUIDs: string[];
|
|
19
19
|
private readonly motionSensors;
|
|
20
20
|
private mqttClient;
|
|
21
|
+
private mqttLifecycle;
|
|
21
22
|
private ezvizAPI;
|
|
22
23
|
private readonly alarmSnapshots;
|
|
23
24
|
constructor(log: Logging, config: EZVIZConfig, api: API);
|
package/dist/platform.js
CHANGED
|
@@ -21,6 +21,7 @@ export class EZVIZPlatform {
|
|
|
21
21
|
discoveredCacheUUIDs = [];
|
|
22
22
|
motionSensors = new Map();
|
|
23
23
|
mqttClient = null;
|
|
24
|
+
mqttLifecycle = Promise.resolve();
|
|
24
25
|
ezvizAPI = null;
|
|
25
26
|
// Latest alarm snapshot URL per device serial, used as a fast path for HomeKit
|
|
26
27
|
// snapshot requests shortly after a motion event instead of a live RTSP grab.
|
|
@@ -44,22 +45,24 @@ export class EZVIZPlatform {
|
|
|
44
45
|
this.ezvizAPI = ezvizAPI;
|
|
45
46
|
const credentials = await this.authenticateWithRetry(ezvizAPI);
|
|
46
47
|
if (credentials) {
|
|
47
|
-
// Refresh session every 12 hours (uses refresh token, falls back to full re-auth).
|
|
48
48
|
// The MQTT push subscription is registered against the current sessionId, so it
|
|
49
|
-
// must be re-established
|
|
50
|
-
// while the socket
|
|
49
|
+
// must be re-established after every rotation — the 12h refresh below or a 401
|
|
50
|
+
// mid-request — or it silently stops receiving pushes while the socket stays up.
|
|
51
|
+
ezvizAPI.onSessionRefreshed = () => {
|
|
52
|
+
void this.restartMqtt(ezvizAPI);
|
|
53
|
+
};
|
|
54
|
+
// Refresh session every 12 hours (uses refresh token, falls back to full re-auth).
|
|
51
55
|
setInterval(async () => {
|
|
52
56
|
this.log.debug('Refreshing EZVIZ session');
|
|
53
57
|
try {
|
|
54
58
|
await ezvizAPI.refreshSession();
|
|
55
|
-
await this.restartMqtt(ezvizAPI);
|
|
56
59
|
}
|
|
57
60
|
catch (error) {
|
|
58
61
|
this.log.error('Session refresh failed:', error);
|
|
59
62
|
}
|
|
60
63
|
}, 3600000 * 12);
|
|
61
64
|
await this.discoverDevices(ezvizAPI);
|
|
62
|
-
await this.
|
|
65
|
+
await this.restartMqtt(ezvizAPI);
|
|
63
66
|
}
|
|
64
67
|
else {
|
|
65
68
|
this.log.error('Could not authenticate with EZVIZ API. Please check your credentials.');
|
|
@@ -293,12 +296,16 @@ export class EZVIZPlatform {
|
|
|
293
296
|
* since the push subscription is registered against the sessionId active at connect
|
|
294
297
|
* time — see startMqtt.
|
|
295
298
|
*/
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
this.mqttClient
|
|
300
|
-
|
|
301
|
-
|
|
299
|
+
restartMqtt(ezvizAPI) {
|
|
300
|
+
// Serialized so overlapping restarts can't each create a client and leak one.
|
|
301
|
+
this.mqttLifecycle = this.mqttLifecycle.then(async () => {
|
|
302
|
+
if (this.mqttClient) {
|
|
303
|
+
this.mqttClient.stop();
|
|
304
|
+
this.mqttClient = null;
|
|
305
|
+
}
|
|
306
|
+
await this.startMqtt(ezvizAPI);
|
|
307
|
+
});
|
|
308
|
+
return this.mqttLifecycle;
|
|
302
309
|
}
|
|
303
310
|
async startMqtt(ezvizAPI) {
|
|
304
311
|
if (this.motionSensors.size === 0) {
|
package/dist/platform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
package/dist/types/data.d.ts
CHANGED
|
@@ -9,10 +9,10 @@ export interface DeviceData {
|
|
|
9
9
|
Serial: string;
|
|
10
10
|
Name: string;
|
|
11
11
|
Type: string;
|
|
12
|
-
Connection
|
|
12
|
+
Connection?: ConnectionInfo;
|
|
13
13
|
Wifi?: WifiInfo;
|
|
14
14
|
Status: DeviceStatus;
|
|
15
|
-
Switches
|
|
15
|
+
Switches?: SwitchItem[];
|
|
16
16
|
P2P: P2PItem[];
|
|
17
17
|
ResourceInfo: ResourceInfo;
|
|
18
18
|
DeviceInfo: DeviceInfo;
|
package/dist/utils/ffmpeg.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { Logging, StreamRequestCallback } from 'homebridge';
|
|
2
2
|
import { StreamingDelegate } from './streaming-delegate.js';
|
|
3
3
|
import { Readable, Writable } from 'stream';
|
|
4
|
-
export declare function doesFfmpegSupportCodec(codec: string, ffmpegPath: string): Promise<boolean>;
|
|
5
4
|
export declare function getCodecsOutput(ffmpegPath: string): Promise<string>;
|
|
6
|
-
export declare function getDefaultEncoder(ffmpegPath: string): Promise<string>;
|
|
7
5
|
export declare function isFfmpegInstalled(ffmpegPath: string): Promise<boolean>;
|
|
8
6
|
export declare function getSnapshot(url: string, customFfmpeg?: string): Promise<Buffer>;
|
|
9
7
|
export declare class FfmpegProcess {
|
package/dist/utils/ffmpeg.js
CHANGED
|
@@ -1,29 +1,10 @@
|
|
|
1
1
|
import execa from 'execa';
|
|
2
2
|
import pathToFfmpeg from 'ffmpeg-for-homebridge';
|
|
3
|
-
|
|
4
|
-
if (!codec) {
|
|
5
|
-
return false;
|
|
6
|
-
}
|
|
7
|
-
if (codec === 'copy') {
|
|
8
|
-
return true;
|
|
9
|
-
}
|
|
10
|
-
const output = await execa(ffmpegPath, ['-codecs']);
|
|
11
|
-
return output.stdout.includes(codec);
|
|
12
|
-
}
|
|
3
|
+
import { redactCredentials } from './sanitize.js';
|
|
13
4
|
export async function getCodecsOutput(ffmpegPath) {
|
|
14
5
|
const output = await execa(ffmpegPath, ['-codecs']);
|
|
15
6
|
return output.stdout;
|
|
16
7
|
}
|
|
17
|
-
export async function getDefaultEncoder(ffmpegPath) {
|
|
18
|
-
const output = await execa(ffmpegPath, ['-codecs']);
|
|
19
|
-
const validEncoders = ['h264_omx', 'h264_videotoolbox'];
|
|
20
|
-
validEncoders.forEach((encoder) => {
|
|
21
|
-
if (output.stdout.includes(encoder)) {
|
|
22
|
-
return encoder;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
return 'libx264';
|
|
26
|
-
}
|
|
27
8
|
export async function isFfmpegInstalled(ffmpegPath) {
|
|
28
9
|
try {
|
|
29
10
|
await execa(ffmpegPath, ['-codecs']);
|
|
@@ -62,7 +43,7 @@ export class FfmpegProcess {
|
|
|
62
43
|
let started = false;
|
|
63
44
|
let startedCallback = false;
|
|
64
45
|
const controller = delegate.controller;
|
|
65
|
-
const cmdOutput = `${title} command: ffmpeg ${command.join(' ')}`;
|
|
46
|
+
const cmdOutput = `${title} command: ffmpeg ${redactCredentials(command.join(' '))}`;
|
|
66
47
|
if (ffmpegDebugOutput) {
|
|
67
48
|
log.info(cmdOutput);
|
|
68
49
|
}
|
|
@@ -82,7 +63,10 @@ export class FfmpegProcess {
|
|
|
82
63
|
}
|
|
83
64
|
}, 3000);
|
|
84
65
|
this.ff.stderr?.on('data', (data) => {
|
|
85
|
-
|
|
66
|
+
// ffmpeg echoes its input URL (e.g. "Input #0, rtsp, from 'rtsp://user:pass@...'"
|
|
67
|
+
// and in connection errors), and this text feeds both the logs and the error
|
|
68
|
+
// passed to HomeKit's callback.
|
|
69
|
+
const output = redactCredentials(String(data));
|
|
86
70
|
lastOutput = `${title}: ${output}`;
|
|
87
71
|
if (ffmpegDebugOutput) {
|
|
88
72
|
log.info(lastOutput);
|
package/dist/utils/ffmpeg.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../../src/utils/ffmpeg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,YAAY,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../../src/utils/ffmpeg.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Logging } from 'homebridge';
|
|
2
|
+
export declare const HKSV_PREBUFFER_LENGTH_MS = 4000;
|
|
2
3
|
/**
|
|
3
4
|
* Maintains a rolling few seconds of fragmented-mp4 video remuxed (not re-encoded —
|
|
4
5
|
* cheap) from the camera's RTSP stream, so an HKSV recording can include the moments
|
|
@@ -21,9 +22,12 @@ export declare class HksvPrebuffer {
|
|
|
21
22
|
private process;
|
|
22
23
|
private server;
|
|
23
24
|
private starting;
|
|
25
|
+
private wanted;
|
|
26
|
+
private restartTimer;
|
|
24
27
|
constructor(rtspUrl: string, cameraName: string, log: Logging);
|
|
25
28
|
start(): Promise<void>;
|
|
26
29
|
stop(): void;
|
|
30
|
+
private resetStream;
|
|
27
31
|
/**
|
|
28
32
|
* Returns ffmpeg input args (`-f mp4 -i tcp://...`) yielding the prebuffer's
|
|
29
33
|
* content followed by a live continuation, for use as the *input* to a
|
|
@@ -3,15 +3,25 @@ import { EventEmitter } from 'events';
|
|
|
3
3
|
import { createServer } from 'net';
|
|
4
4
|
import pathToFfmpeg from 'ffmpeg-for-homebridge';
|
|
5
5
|
import { parseMp4Boxes } from './mp4-parser.js';
|
|
6
|
-
|
|
6
|
+
import { redactCredentials } from './sanitize.js';
|
|
7
|
+
// How much pre-roll HomeKit is told we keep, and how much we actually buffer.
|
|
8
|
+
export const HKSV_PREBUFFER_LENGTH_MS = 4000;
|
|
7
9
|
// A splice server that nobody ever connects to (e.g. HomeKit gave up before the
|
|
8
10
|
// recording ffmpeg process reached it) would otherwise listen forever.
|
|
9
11
|
const SPLICE_SERVER_TIMEOUT_MS = 60_000;
|
|
10
|
-
|
|
12
|
+
// Long enough not to hammer a camera that's offline, short enough to have pre-roll
|
|
13
|
+
// again well before the next motion event is likely.
|
|
14
|
+
const PREBUFFER_RESTART_DELAY_MS = 10_000;
|
|
15
|
+
/**
|
|
16
|
+
* `onError` stays attached for the server's lifetime: a net.Server 'error' with no
|
|
17
|
+
* listener (e.g. accept() failing with EMFILE) is thrown and would crash Homebridge.
|
|
18
|
+
*/
|
|
19
|
+
function listenOnEphemeralPort(server, onError) {
|
|
11
20
|
return new Promise((resolve, reject) => {
|
|
12
21
|
server.once('error', reject);
|
|
13
22
|
server.listen(0, '127.0.0.1', () => {
|
|
14
23
|
server.removeListener('error', reject);
|
|
24
|
+
server.on('error', onError);
|
|
15
25
|
const address = server.address();
|
|
16
26
|
if (address && typeof address === 'object') {
|
|
17
27
|
resolve(address.port);
|
|
@@ -44,12 +54,15 @@ export class HksvPrebuffer {
|
|
|
44
54
|
process = null;
|
|
45
55
|
server = null;
|
|
46
56
|
starting = null;
|
|
57
|
+
wanted = false;
|
|
58
|
+
restartTimer = null;
|
|
47
59
|
constructor(rtspUrl, cameraName, log) {
|
|
48
60
|
this.rtspUrl = rtspUrl;
|
|
49
61
|
this.cameraName = cameraName;
|
|
50
62
|
this.log = log;
|
|
51
63
|
}
|
|
52
64
|
async start() {
|
|
65
|
+
this.wanted = true;
|
|
53
66
|
if (this.process) {
|
|
54
67
|
return;
|
|
55
68
|
}
|
|
@@ -61,8 +74,16 @@ export class HksvPrebuffer {
|
|
|
61
74
|
return this.starting;
|
|
62
75
|
}
|
|
63
76
|
stop() {
|
|
77
|
+
this.wanted = false;
|
|
78
|
+
if (this.restartTimer) {
|
|
79
|
+
clearTimeout(this.restartTimer);
|
|
80
|
+
this.restartTimer = null;
|
|
81
|
+
}
|
|
64
82
|
this.process?.kill('SIGKILL');
|
|
65
83
|
this.process = null;
|
|
84
|
+
this.resetStream();
|
|
85
|
+
}
|
|
86
|
+
resetStream() {
|
|
66
87
|
this.server?.close();
|
|
67
88
|
this.server = null;
|
|
68
89
|
this.boxes = [];
|
|
@@ -108,7 +129,9 @@ export class HksvPrebuffer {
|
|
|
108
129
|
socket.once('close', cleanup);
|
|
109
130
|
socket.once('error', cleanup);
|
|
110
131
|
});
|
|
111
|
-
const port = await listenOnEphemeralPort(server)
|
|
132
|
+
const port = await listenOnEphemeralPort(server, (error) => {
|
|
133
|
+
this.log.debug(`HKSV splice server for ${this.cameraName} error: ${error.message}`);
|
|
134
|
+
});
|
|
112
135
|
setTimeout(() => server.close(), SPLICE_SERVER_TIMEOUT_MS);
|
|
113
136
|
return ['-f', 'mp4', '-i', `tcp://127.0.0.1:${port}`];
|
|
114
137
|
}
|
|
@@ -119,7 +142,9 @@ export class HksvPrebuffer {
|
|
|
119
142
|
this.log.debug(`HKSV prebuffer for ${this.cameraName} ended: ${error.message}`);
|
|
120
143
|
});
|
|
121
144
|
});
|
|
122
|
-
const port = await listenOnEphemeralPort(server)
|
|
145
|
+
const port = await listenOnEphemeralPort(server, (error) => {
|
|
146
|
+
this.log.debug(`HKSV prebuffer server for ${this.cameraName} error: ${error.message}`);
|
|
147
|
+
});
|
|
123
148
|
this.server = server;
|
|
124
149
|
const videoProcessor = pathToFfmpeg || 'ffmpeg';
|
|
125
150
|
const args = [
|
|
@@ -138,12 +163,27 @@ export class HksvPrebuffer {
|
|
|
138
163
|
cp.stderr?.resume();
|
|
139
164
|
cp.on('exit', (code, signal) => {
|
|
140
165
|
this.log.debug(`HKSV prebuffer ffmpeg for ${this.cameraName} exited (code=${code}, signal=${signal})`);
|
|
141
|
-
if (this.process
|
|
142
|
-
|
|
166
|
+
if (this.process !== cp) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
// Died on its own (RTSP drop, camera reboot) rather than via stop(): drop this
|
|
170
|
+
// instance's init segment so a restarted process's ftyp/moov aren't mistaken for
|
|
171
|
+
// media boxes, and bring it back so later recordings still get pre-roll.
|
|
172
|
+
this.process = null;
|
|
173
|
+
this.resetStream();
|
|
174
|
+
if (this.wanted && !this.restartTimer) {
|
|
175
|
+
this.restartTimer = setTimeout(() => {
|
|
176
|
+
this.restartTimer = null;
|
|
177
|
+
if (this.wanted) {
|
|
178
|
+
this.start().catch((error) => {
|
|
179
|
+
this.log.debug(`HKSV prebuffer restart for ${this.cameraName} failed: ${error.message}`);
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}, PREBUFFER_RESTART_DELAY_MS);
|
|
143
183
|
}
|
|
144
184
|
});
|
|
145
185
|
cp.on('error', (error) => {
|
|
146
|
-
this.log.error(`HKSV prebuffer ffmpeg for ${this.cameraName} failed to start
|
|
186
|
+
this.log.error(`HKSV prebuffer ffmpeg for ${this.cameraName} failed to start: ${redactCredentials(error.message)}`);
|
|
147
187
|
});
|
|
148
188
|
}
|
|
149
189
|
async consume(socket) {
|
|
@@ -157,7 +197,7 @@ export class HksvPrebuffer {
|
|
|
157
197
|
}
|
|
158
198
|
else {
|
|
159
199
|
this.boxes.push({ box, time: now });
|
|
160
|
-
while (this.boxes.length && this.boxes[0].time < now -
|
|
200
|
+
while (this.boxes.length && this.boxes[0].time < now - HKSV_PREBUFFER_LENGTH_MS) {
|
|
161
201
|
this.boxes.shift();
|
|
162
202
|
}
|
|
163
203
|
this.events.emit('box', box);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hksv-prebuffer.js","sourceRoot":"","sources":["../../src/utils/hksv-prebuffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,YAAY,EAAU,MAAM,KAAK,CAAC;AAE3C,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAU,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"hksv-prebuffer.js","sourceRoot":"","sources":["../../src/utils/hksv-prebuffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ export declare class HksvRecordingDelegate implements CameraRecordingDelegate {
|
|
|
12
12
|
private configuration?;
|
|
13
13
|
private active;
|
|
14
14
|
private readonly prebuffer;
|
|
15
|
-
private
|
|
15
|
+
private readonly processes;
|
|
16
16
|
constructor(rtspUrl: string, cameraName: string, log: Logging, getRecordingAudioActive: () => boolean);
|
|
17
17
|
updateRecordingActive(active: boolean): void;
|
|
18
18
|
updateRecordingConfiguration(configuration: CameraRecordingConfiguration | undefined): void;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { spawn } from 'child_process';
|
|
2
2
|
import pathToFfmpeg from 'ffmpeg-for-homebridge';
|
|
3
3
|
import { parseMp4Boxes } from './mp4-parser.js';
|
|
4
|
-
import { HksvPrebuffer } from './hksv-prebuffer.js';
|
|
5
|
-
|
|
4
|
+
import { HKSV_PREBUFFER_LENGTH_MS, HksvPrebuffer } from './hksv-prebuffer.js';
|
|
5
|
+
import { redactCredentials } from './sanitize.js';
|
|
6
6
|
function sampleRateHz(rate) {
|
|
7
7
|
switch (rate) {
|
|
8
8
|
case 0 /* AudioRecordingSamplerate.KHZ_8 */: return 8000;
|
|
@@ -71,7 +71,11 @@ export class HksvRecordingDelegate {
|
|
|
71
71
|
configuration;
|
|
72
72
|
active = false;
|
|
73
73
|
prebuffer;
|
|
74
|
-
|
|
74
|
+
// Keyed by streamId: HomeKit can request a new recording stream before the previous
|
|
75
|
+
// one's generator has finished draining, so a single shared field would get
|
|
76
|
+
// overwritten and closeRecordingStream() would end up killing the wrong process,
|
|
77
|
+
// orphaning the old one against the camera's RTSP connection indefinitely.
|
|
78
|
+
processes = new Map();
|
|
75
79
|
constructor(rtspUrl, cameraName, log, getRecordingAudioActive) {
|
|
76
80
|
this.rtspUrl = rtspUrl;
|
|
77
81
|
this.cameraName = cameraName;
|
|
@@ -102,16 +106,16 @@ export class HksvRecordingDelegate {
|
|
|
102
106
|
}
|
|
103
107
|
const includeAudio = this.getRecordingAudioActive();
|
|
104
108
|
const input = this.active
|
|
105
|
-
? await this.prebuffer.getRecordingInput(configuration.prebufferLength ??
|
|
109
|
+
? await this.prebuffer.getRecordingInput(configuration.prebufferLength ?? HKSV_PREBUFFER_LENGTH_MS)
|
|
106
110
|
: ['-rtsp_transport', 'tcp', '-i', this.rtspUrl];
|
|
107
111
|
const videoProcessor = pathToFfmpeg || 'ffmpeg';
|
|
108
112
|
const args = buildRecordingArgs(input, configuration, includeAudio);
|
|
109
113
|
this.log.debug(`HKSV recording stream ${streamId} for ${this.cameraName} starting`);
|
|
110
114
|
const cp = spawn(videoProcessor, args, { env: process.env });
|
|
111
|
-
this.
|
|
115
|
+
this.processes.set(streamId, cp);
|
|
112
116
|
cp.stderr?.resume();
|
|
113
117
|
cp.on('error', (error) => {
|
|
114
|
-
this.log.error(`HKSV recording ffmpeg for ${this.cameraName} failed to start
|
|
118
|
+
this.log.error(`HKSV recording ffmpeg for ${this.cameraName} failed to start: ${redactCredentials(error.message)}`);
|
|
115
119
|
});
|
|
116
120
|
let pendingInit = [];
|
|
117
121
|
let sawMoov = false;
|
|
@@ -143,6 +147,7 @@ export class HksvRecordingDelegate {
|
|
|
143
147
|
this.log.debug(`HKSV recording stream ${streamId} for ${this.cameraName} ended: ${error.message}`);
|
|
144
148
|
}
|
|
145
149
|
finally {
|
|
150
|
+
this.processes.delete(streamId);
|
|
146
151
|
this.stopFfmpeg(cp);
|
|
147
152
|
}
|
|
148
153
|
}
|
|
@@ -151,21 +156,26 @@ export class HksvRecordingDelegate {
|
|
|
151
156
|
}
|
|
152
157
|
closeRecordingStream(streamId, reason) {
|
|
153
158
|
this.log.debug(`HKSV recording stream ${streamId} for ${this.cameraName} closed (reason=${reason ?? 'connection closed'})`);
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
this.
|
|
159
|
+
const cp = this.processes.get(streamId);
|
|
160
|
+
if (cp) {
|
|
161
|
+
this.processes.delete(streamId);
|
|
162
|
+
this.stopFfmpeg(cp);
|
|
157
163
|
}
|
|
158
164
|
}
|
|
159
165
|
stopFfmpeg(cp) {
|
|
160
|
-
if (cp.
|
|
166
|
+
if (cp.exitCode !== null || cp.signalCode !== null) {
|
|
161
167
|
return;
|
|
162
168
|
}
|
|
163
169
|
cp.kill('SIGTERM');
|
|
164
|
-
|
|
165
|
-
|
|
170
|
+
// cp.killed only reflects that kill() was called, not that the process actually
|
|
171
|
+
// exited, so it can't be used to decide whether to escalate — track real exit
|
|
172
|
+
// instead, otherwise a process that ignores SIGTERM never gets force-killed.
|
|
173
|
+
const forceKill = setTimeout(() => {
|
|
174
|
+
if (cp.exitCode === null && cp.signalCode === null) {
|
|
166
175
|
cp.kill('SIGKILL');
|
|
167
176
|
}
|
|
168
177
|
}, 2000);
|
|
178
|
+
cp.once('exit', () => clearTimeout(forceKill));
|
|
169
179
|
}
|
|
170
180
|
}
|
|
171
181
|
//# sourceMappingURL=hksv-recording-delegate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hksv-recording-delegate.js","sourceRoot":"","sources":["../../src/utils/hksv-recording-delegate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAC;AAYpD,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"hksv-recording-delegate.js","sourceRoot":"","sources":["../../src/utils/hksv-recording-delegate.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/mp4-parser.js
CHANGED
|
@@ -59,8 +59,15 @@ function readExact(readable, length) {
|
|
|
59
59
|
export async function* parseMp4Boxes(readable) {
|
|
60
60
|
while (true) {
|
|
61
61
|
const header = await readExact(readable, 8);
|
|
62
|
-
const
|
|
62
|
+
const size = header.readUInt32BE(0);
|
|
63
63
|
const type = header.subarray(4).toString('latin1');
|
|
64
|
+
// size 0 ("to end of stream") and 1 (64-bit extended size) aren't supported; any
|
|
65
|
+
// size < 8 would give a negative length, which read() can never satisfy, stalling
|
|
66
|
+
// the parser forever instead of failing.
|
|
67
|
+
if (size < 8) {
|
|
68
|
+
throw new Error(`unsupported MP4 box size ${size} for '${type}'`);
|
|
69
|
+
}
|
|
70
|
+
const length = size - 8;
|
|
64
71
|
const data = await readExact(readable, length);
|
|
65
72
|
yield { header, length, type, data };
|
|
66
73
|
}
|