homebridge-unifi-protect 6.18.0 → 6.19.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/devices/index.d.ts +11 -0
- package/dist/devices/index.js +16 -0
- package/dist/devices/index.js.map +1 -0
- package/dist/{protect-camera-package.js → devices/protect-camera-package.js} +2 -4
- package/dist/devices/protect-camera-package.js.map +1 -0
- package/dist/{protect-camera.d.ts → devices/protect-camera.d.ts} +2 -3
- package/dist/{protect-camera.js → devices/protect-camera.js} +11 -27
- package/dist/devices/protect-camera.js.map +1 -0
- package/dist/{protect-chime.d.ts → devices/protect-chime.d.ts} +1 -1
- package/dist/devices/protect-chime.js.map +1 -0
- package/dist/{protect-device.d.ts → devices/protect-device.d.ts} +5 -3
- package/dist/{protect-device.js → devices/protect-device.js} +21 -19
- package/dist/devices/protect-device.js.map +1 -0
- package/dist/{protect-doorbell.d.ts → devices/protect-doorbell.d.ts} +1 -1
- package/dist/{protect-doorbell.js → devices/protect-doorbell.js} +5 -5
- package/dist/devices/protect-doorbell.js.map +1 -0
- package/dist/{protect-light.d.ts → devices/protect-light.d.ts} +1 -1
- package/dist/{protect-light.js → devices/protect-light.js} +1 -1
- package/dist/devices/protect-light.js.map +1 -0
- package/dist/{protect-liveviews.d.ts → devices/protect-liveviews.d.ts} +1 -1
- package/dist/{protect-liveviews.js → devices/protect-liveviews.js} +1 -1
- package/dist/devices/protect-liveviews.js.map +1 -0
- package/dist/{protect-nvr-systeminfo.d.ts → devices/protect-nvr-systeminfo.d.ts} +1 -1
- package/dist/{protect-nvr-systeminfo.js → devices/protect-nvr-systeminfo.js} +1 -1
- package/dist/devices/protect-nvr-systeminfo.js.map +1 -0
- package/dist/{protect-securitysystem.d.ts → devices/protect-securitysystem.d.ts} +1 -1
- package/dist/{protect-securitysystem.js → devices/protect-securitysystem.js} +2 -2
- package/dist/devices/protect-securitysystem.js.map +1 -0
- package/dist/{protect-sensor.d.ts → devices/protect-sensor.d.ts} +1 -1
- package/dist/{protect-sensor.js → devices/protect-sensor.js} +8 -8
- package/dist/devices/protect-sensor.js.map +1 -0
- package/dist/{protect-viewer.d.ts → devices/protect-viewer.d.ts} +1 -1
- package/dist/{protect-viewer.js → devices/protect-viewer.js} +4 -5
- package/dist/devices/protect-viewer.js.map +1 -0
- package/dist/ffmpeg/index.d.ts +6 -0
- package/dist/ffmpeg/index.js +11 -0
- package/dist/ffmpeg/index.js.map +1 -0
- package/dist/{protect-ffmpeg-codecs.d.ts → ffmpeg/protect-ffmpeg-codecs.d.ts} +1 -1
- package/dist/ffmpeg/protect-ffmpeg-codecs.js.map +1 -0
- package/dist/{protect-ffmpeg-exec.d.ts → ffmpeg/protect-ffmpeg-exec.d.ts} +5 -2
- package/dist/{protect-ffmpeg-exec.js → ffmpeg/protect-ffmpeg-exec.js} +13 -1
- package/dist/ffmpeg/protect-ffmpeg-exec.js.map +1 -0
- package/dist/{protect-ffmpeg-options.d.ts → ffmpeg/protect-ffmpeg-options.d.ts} +1 -1
- package/dist/{protect-ffmpeg-options.js → ffmpeg/protect-ffmpeg-options.js} +1 -1
- package/dist/ffmpeg/protect-ffmpeg-options.js.map +1 -0
- package/dist/{protect-ffmpeg-record.d.ts → ffmpeg/protect-ffmpeg-record.d.ts} +1 -1
- package/dist/{protect-ffmpeg-record.js → ffmpeg/protect-ffmpeg-record.js} +7 -3
- package/dist/ffmpeg/protect-ffmpeg-record.js.map +1 -0
- package/dist/{protect-ffmpeg-stream.d.ts → ffmpeg/protect-ffmpeg-stream.d.ts} +1 -1
- package/dist/ffmpeg/protect-ffmpeg-stream.js.map +1 -0
- package/dist/{protect-ffmpeg.d.ts → ffmpeg/protect-ffmpeg.d.ts} +3 -3
- package/dist/ffmpeg/protect-ffmpeg.js.map +1 -0
- package/dist/{protect-nvr-events.d.ts → protect-events.d.ts} +3 -4
- package/dist/{protect-nvr-events.js → protect-events.js} +4 -4
- package/dist/protect-events.js.map +1 -0
- package/dist/protect-mqtt.d.ts +3 -2
- package/dist/protect-mqtt.js +16 -6
- package/dist/protect-mqtt.js.map +1 -1
- package/dist/protect-nvr.d.ts +4 -8
- package/dist/protect-nvr.js +79 -129
- package/dist/protect-nvr.js.map +1 -1
- package/dist/protect-options.js +1 -0
- package/dist/protect-options.js.map +1 -1
- package/dist/protect-platform.d.ts +1 -1
- package/dist/protect-platform.js +1 -1
- package/dist/protect-platform.js.map +1 -1
- package/dist/protect-record.d.ts +4 -2
- package/dist/protect-record.js +31 -28
- package/dist/protect-record.js.map +1 -1
- package/dist/protect-snapshot.d.ts +21 -0
- package/dist/protect-snapshot.js +192 -0
- package/dist/protect-snapshot.js.map +1 -0
- package/dist/protect-stream.d.ts +3 -7
- package/dist/protect-stream.js +7 -86
- package/dist/protect-stream.js.map +1 -1
- package/dist/protect-timeshift.d.ts +3 -2
- package/dist/protect-timeshift.js +31 -30
- package/dist/protect-timeshift.js.map +1 -1
- package/dist/protect-types.d.ts +2 -6
- package/dist/protect-types.js +2 -0
- package/dist/protect-types.js.map +1 -1
- package/dist/settings.d.ts +2 -6
- package/dist/settings.js +4 -12
- package/dist/settings.js.map +1 -1
- package/package.json +11 -11
- package/dist/protect-camera-package.js.map +0 -1
- package/dist/protect-camera.js.map +0 -1
- package/dist/protect-chime.js.map +0 -1
- package/dist/protect-device.js.map +0 -1
- package/dist/protect-doorbell.js.map +0 -1
- package/dist/protect-ffmpeg-codecs.js.map +0 -1
- package/dist/protect-ffmpeg-exec.js.map +0 -1
- package/dist/protect-ffmpeg-options.js.map +0 -1
- package/dist/protect-ffmpeg-record.js.map +0 -1
- package/dist/protect-ffmpeg-stream.js.map +0 -1
- package/dist/protect-ffmpeg.js.map +0 -1
- package/dist/protect-light.js.map +0 -1
- package/dist/protect-liveviews.js.map +0 -1
- package/dist/protect-nvr-events.js.map +0 -1
- package/dist/protect-nvr-systeminfo.js.map +0 -1
- package/dist/protect-securitysystem.js.map +0 -1
- package/dist/protect-sensor.js.map +0 -1
- package/dist/protect-viewer.js.map +0 -1
- /package/dist/{protect-camera-package.d.ts → devices/protect-camera-package.d.ts} +0 -0
- /package/dist/{protect-chime.js → devices/protect-chime.js} +0 -0
- /package/dist/{protect-ffmpeg-codecs.js → ffmpeg/protect-ffmpeg-codecs.js} +0 -0
- /package/dist/{protect-ffmpeg-stream.js → ffmpeg/protect-ffmpeg-stream.js} +0 -0
- /package/dist/{protect-ffmpeg.js → ffmpeg/protect-ffmpeg.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protect-platform.js","sourceRoot":"","sources":["../src/protect-platform.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAqC,uBAAuB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClH,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"protect-platform.js","sourceRoot":"","sources":["../src/protect-platform.ts"],"names":[],"mappings":"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"}
|
package/dist/protect-record.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import { CameraRecordingConfiguration, CameraRecordingDelegate, HDSProtocolSpecificErrorReason, RecordingPacket } from "homebridge";
|
|
2
|
-
import { ProtectCamera } from "./
|
|
3
|
+
import { ProtectCamera, RtspEntry } from "./devices/index.js";
|
|
3
4
|
export declare class ProtectRecordingDelegate implements CameraRecordingDelegate {
|
|
4
5
|
private _isRecording;
|
|
5
6
|
private readonly accessory;
|
|
@@ -13,7 +14,7 @@ export declare class ProtectRecordingDelegate implements CameraRecordingDelegate
|
|
|
13
14
|
private nvr;
|
|
14
15
|
private readonly protectCamera;
|
|
15
16
|
private recordingConfig;
|
|
16
|
-
|
|
17
|
+
rtspEntry: RtspEntry | null;
|
|
17
18
|
private transmittedSegments;
|
|
18
19
|
private readonly timeshift;
|
|
19
20
|
private timeshiftedSegments;
|
|
@@ -28,6 +29,7 @@ export declare class ProtectRecordingDelegate implements CameraRecordingDelegate
|
|
|
28
29
|
private startTransmitting;
|
|
29
30
|
private stopTransmitting;
|
|
30
31
|
restartTimeshifting(): Promise<void>;
|
|
32
|
+
getTimeshiftBuffer(): Buffer | null;
|
|
31
33
|
get isRecording(): boolean;
|
|
32
34
|
get recordingConfiguration(): CameraRecordingConfiguration | null;
|
|
33
35
|
}
|
package/dist/protect-record.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FfmpegRecordingProcess } from "./
|
|
1
|
+
import { FfmpegRecordingProcess } from "./ffmpeg/index.js";
|
|
2
2
|
import { PROTECT_HKSV_MAX_EVENT_ERRORS } from "./settings.js";
|
|
3
3
|
import { ProtectTimeshiftBuffer } from "./protect-timeshift.js";
|
|
4
4
|
// Camera recording delegate implementation for Protect.
|
|
@@ -50,14 +50,14 @@ export class ProtectRecordingDelegate {
|
|
|
50
50
|
}
|
|
51
51
|
// Disable recording.
|
|
52
52
|
this._isRecording = active;
|
|
53
|
-
// Turn off any potential inflight motion detection. Strictly speaking, this shouldn't be needed since any inflight
|
|
54
|
-
//
|
|
53
|
+
// Turn off any potential inflight motion detection. Strictly speaking, this shouldn't be needed since any inflight motion sensor events will clear themselves.
|
|
54
|
+
// That said, we play it safe just the same.
|
|
55
55
|
this.accessory.getService(this.hap.Service.MotionSensor)?.updateCharacteristic(this.hap.Characteristic.MotionDetected, false);
|
|
56
56
|
// We're done.
|
|
57
57
|
return;
|
|
58
58
|
}
|
|
59
|
-
// We're recording - update our recording state internally. We set this regardless of whether or not we succeed at starting the
|
|
60
|
-
//
|
|
59
|
+
// We're recording - update our recording state internally. We set this regardless of whether or not we succeed at starting the timeshift buffer in order to maintain
|
|
60
|
+
// our state consistent with HKSV.
|
|
61
61
|
this._isRecording = active;
|
|
62
62
|
// Begin maintaining a timeshift buffer, if configured to do so.
|
|
63
63
|
if (!(await this.configureTimeshifting())) {
|
|
@@ -66,20 +66,19 @@ export class ProtectRecordingDelegate {
|
|
|
66
66
|
// Inform the user of the state change, if needed.
|
|
67
67
|
if (!this.isInitialized) {
|
|
68
68
|
this.isInitialized = true;
|
|
69
|
-
this.log.info("
|
|
69
|
+
this.log.info("HKSV %sevent recording enabled: %s, %s kbps %s", this.protectCamera.hints.hardwareTranscoding ? "hardware-accelerated " : "", this.rtspEntry?.name, this.recordingConfig?.videoCodec.parameters.bitRate.toLocaleString("en-US"), this.protectCamera.hints.timeshift ?
|
|
70
70
|
"(" + (this.timeshift.length / 1000).toString() + " second timeshift buffer)." :
|
|
71
71
|
"with no timeshift buffer. This will provide a suboptimal HKSV experience.");
|
|
72
72
|
// Inform the user if there's a maximum event recording duration set.
|
|
73
73
|
if (this.maxRecordingDuration) {
|
|
74
|
-
this.log.info("
|
|
74
|
+
this.log.info("HKSV recordings will be no longer than ~%s seconds.", this.maxRecordingDuration);
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
// Process updated recording configuration settings from HomeKit Secure Video.
|
|
79
79
|
updateRecordingConfiguration(configuration) {
|
|
80
|
-
// If we're set to an undefined state, it's because HomeKit can't figure out a valid configuration to use. This is
|
|
81
|
-
//
|
|
82
|
-
// timeshift buffer.
|
|
80
|
+
// If we're set to an undefined state, it's because HomeKit can't figure out a valid configuration to use. This is typically due to a factory reset of the camera or
|
|
81
|
+
// a similar edge case. We choose to handle it by stopping our timeshift buffer.
|
|
83
82
|
if (!configuration) {
|
|
84
83
|
this.recordingConfig = configuration;
|
|
85
84
|
this.timeshift.stop();
|
|
@@ -106,8 +105,8 @@ export class ProtectRecordingDelegate {
|
|
|
106
105
|
if (!this.accessory.context.hksvRecording || !this.isInitialized || !(await this.startTransmitting()) || !this.ffmpegStream) {
|
|
107
106
|
// Stop transmitting, if needed. If HKSV recording has been disabled explicitly, it should never start in the first place.
|
|
108
107
|
await this.stopTransmitting();
|
|
109
|
-
// Something's gone wrong, or we've disabled HKSV recording. In either event, we send an fMP4 stream header back to HKSV and exit as cleanly as we can.
|
|
110
|
-
//
|
|
108
|
+
// Something's gone wrong, or we've disabled HKSV recording. In either event, we send an fMP4 stream header back to HKSV and exit as cleanly as we can. If we can't
|
|
109
|
+
// get the stream header, we still send an empty segment to HKSV - this will still generate a warning in Homebridge that can be ignored.
|
|
111
110
|
yield { data: (await this.timeshift.getInitSegment()) ?? Buffer.alloc(0), isLast: true };
|
|
112
111
|
return;
|
|
113
112
|
}
|
|
@@ -121,9 +120,9 @@ export class ProtectRecordingDelegate {
|
|
|
121
120
|
if (!segment) {
|
|
122
121
|
continue;
|
|
123
122
|
}
|
|
124
|
-
// If we've exceeded a user-configured maximum recording duration, let HomeKit know we're stopping. We imperfectly calculate our recording duration by using
|
|
125
|
-
//
|
|
126
|
-
//
|
|
123
|
+
// If we've exceeded a user-configured maximum recording duration, let HomeKit know we're stopping. We imperfectly calculate our recording duration by using the
|
|
124
|
+
// fact that each transmitted segment will contain a single I-frame. The method is imperfect because partial segments happen, as well as other edge cases, but it's
|
|
125
|
+
// more than good enough for our purposes.
|
|
127
126
|
if (this.maxRecordingDuration && this.rtspEntry && ((this.transmittedSegments * this.rtspEntry.channel.idrInterval) > this.maxRecordingDuration)) {
|
|
128
127
|
isLastSegment = true;
|
|
129
128
|
}
|
|
@@ -149,8 +148,8 @@ export class ProtectRecordingDelegate {
|
|
|
149
148
|
}
|
|
150
149
|
// Maintain a timeshift buffer and which Protect streams to use for HKSV.
|
|
151
150
|
async configureTimeshifting() {
|
|
152
|
-
// We have no recording configuration available yet. Even though HKSV recording is technically active, we can't do anything without
|
|
153
|
-
//
|
|
151
|
+
// We have no recording configuration available yet. Even though HKSV recording is technically active, we can't do anything without a valid HKSV recording
|
|
152
|
+
// configuration, which HomeKit hasn't sent us yet.
|
|
154
153
|
if (!this.recordingConfig) {
|
|
155
154
|
return false;
|
|
156
155
|
}
|
|
@@ -172,9 +171,9 @@ export class ProtectRecordingDelegate {
|
|
|
172
171
|
if (!this.protectCamera.hints.timeshift || !this.isRecording) {
|
|
173
172
|
return true;
|
|
174
173
|
}
|
|
175
|
-
// Set the bitrate to what HomeKit is looking for. This is particularly useful when we occasionally have to livestream to a user, where bitrates
|
|
176
|
-
//
|
|
177
|
-
//
|
|
174
|
+
// Set the bitrate to what HomeKit is looking for. This is particularly useful when we occasionally have to livestream to a user, where bitrates can be different and
|
|
175
|
+
// even get reconfigured in realtime. By contrast, HomeKit Secure Video has a consistent bitrate it accepts, and we want to try to match it as closely as posible,
|
|
176
|
+
// assuming dynamic bitrates are enabled.
|
|
178
177
|
if (!(await this.protectCamera.setBitrate(this.rtspEntry.channel.id, this.recordingConfig.videoCodec.parameters.bitRate * 1000))) {
|
|
179
178
|
this.log.error("%s: unable to set the bitrate to %skbps.", timeshiftError, this.recordingConfig.videoCodec.parameters.bitRate.toLocaleString("en-US"));
|
|
180
179
|
return false;
|
|
@@ -209,8 +208,8 @@ export class ProtectRecordingDelegate {
|
|
|
209
208
|
}
|
|
210
209
|
// So how do we feed HKSV what it's looking for and how does timeshifting work in practice?
|
|
211
210
|
//
|
|
212
|
-
// We want to keep feeding HomeKit until it tells us it's finished, or we decide we don't want to send anymore fMP4 packets. We treat this in a similar way to
|
|
213
|
-
//
|
|
211
|
+
// We want to keep feeding HomeKit until it tells us it's finished, or we decide we don't want to send anymore fMP4 packets. We treat this in a similar way to how a
|
|
212
|
+
// DVR works where you can pause live television, but it continues to buffer what's being broadcast until you're ready to watch it. This is the same idea.
|
|
214
213
|
// Keep track of how many fMP4 segments we are feeding FFmpeg.
|
|
215
214
|
this.transmittedSegments = 0;
|
|
216
215
|
// Check to see if the user has audio enabled or disabled for recordings.
|
|
@@ -276,15 +275,15 @@ export class ProtectRecordingDelegate {
|
|
|
276
275
|
this.timeshift.removeListener("segment", this.transmitListener);
|
|
277
276
|
this.transmitListener = null;
|
|
278
277
|
}
|
|
279
|
-
// We actually have one less segment than we think we do since we counted the fMP4 stream header as well, which
|
|
280
|
-
//
|
|
278
|
+
// We actually have one less segment than we think we do since we counted the fMP4 stream header as well, which shouldn't count toward our total of transmitted video
|
|
279
|
+
// segments.
|
|
281
280
|
if (this.transmittedSegments) {
|
|
282
281
|
this.transmittedSegments--;
|
|
283
282
|
}
|
|
284
283
|
// Inform the user if we've recorded something.
|
|
285
284
|
if (this.accessory.context.hksvRecording && this.transmittedSegments && this.rtspEntry) {
|
|
286
|
-
// Calculate approximately how many seconds we've recorded. We have more accuracy in timeshifted segments, so we'll use the more
|
|
287
|
-
//
|
|
285
|
+
// Calculate approximately how many seconds we've recorded. We have more accuracy in timeshifted segments, so we'll use the more accurate statistics when we can.
|
|
286
|
+
// Otherwise, we use the number of segments transmitted to HomeKit as a close proxy.
|
|
288
287
|
const recordedSeconds = this.timeshiftedSegments ?
|
|
289
288
|
((this.timeshiftedSegments * this.timeshift.segmentLength) / 1000) : (this.transmittedSegments / this.rtspEntry?.channel.idrInterval);
|
|
290
289
|
let recordedTime = "";
|
|
@@ -334,7 +333,7 @@ export class ProtectRecordingDelegate {
|
|
|
334
333
|
}
|
|
335
334
|
// Inform the user if they've enabled logging. We log HKSV events by default, for now.
|
|
336
335
|
if (this.protectCamera.hints.logHksv || this.protectCamera.hints.logMotion) {
|
|
337
|
-
this.log.info("
|
|
336
|
+
this.log.info("HKSV recorded %s %s %s motion event.", this.timeshiftedSegments ? "a" : "an approximately", recordedTime, timeUnit);
|
|
338
337
|
}
|
|
339
338
|
// Once we've got a successful event, let's reset our error count.
|
|
340
339
|
this.nvr.nvrHksvErrors = 0;
|
|
@@ -356,7 +355,7 @@ export class ProtectRecordingDelegate {
|
|
|
356
355
|
}
|
|
357
356
|
// Inform the user when things stopped unexpectedly, and reset the timeshift buffer for good measure.
|
|
358
357
|
if ((reason !== undefined) && (reason !== 0 /* HDSProtocolSpecificErrorReason.NORMAL */)) {
|
|
359
|
-
this.log.error("
|
|
358
|
+
this.log.error("HKSV recording event ended early: %s", reasonDescription);
|
|
360
359
|
// If we have HKSV event recording enabled and we've had too many errors, something is likely going on with the Protect controller. Let's reset our connection.
|
|
361
360
|
if (this.accessory.context.hksvRecording && (++this.nvr.nvrHksvErrors >= PROTECT_HKSV_MAX_EVENT_ERRORS)) {
|
|
362
361
|
this.nvr.log.error("Reconnecting to the Protect controller after %s consecutive HomeKit Secure Video event recording errors. " +
|
|
@@ -380,6 +379,10 @@ export class ProtectRecordingDelegate {
|
|
|
380
379
|
this.timeshift.stop();
|
|
381
380
|
await this.configureTimeshifting();
|
|
382
381
|
}
|
|
382
|
+
// Return an MP4 stream from the timeshift buffer of the most recent specified duration, in milliseconds.
|
|
383
|
+
getTimeshiftBuffer() {
|
|
384
|
+
return this.protectCamera.hints.timeshift ? this.timeshift.buffer : null;
|
|
385
|
+
}
|
|
383
386
|
// Return our HomeKit Secure Video recording state. This effectively tells us if HKSV has been configured and is on.
|
|
384
387
|
get isRecording() {
|
|
385
388
|
return this._isRecording;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protect-record.js","sourceRoot":"","sources":["../src/protect-record.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"protect-record.js","sourceRoot":"","sources":["../src/protect-record.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { SnapshotRequest } from "homebridge";
|
|
3
|
+
import { ProtectCamera } from "./devices/index.js";
|
|
4
|
+
import { ProtectLogging } from "./protect-types.js";
|
|
5
|
+
import { ProtectPlatform } from "./protect-platform.js";
|
|
6
|
+
export declare class ProtectSnapshot {
|
|
7
|
+
private readonly api;
|
|
8
|
+
private readonly hap;
|
|
9
|
+
readonly log: ProtectLogging;
|
|
10
|
+
private readonly nvr;
|
|
11
|
+
readonly platform: ProtectPlatform;
|
|
12
|
+
readonly protectCamera: ProtectCamera;
|
|
13
|
+
private snapshotCache;
|
|
14
|
+
constructor(protectCamera: ProtectCamera);
|
|
15
|
+
getSnapshot(request?: SnapshotRequest): Promise<Buffer | null>;
|
|
16
|
+
private snapFromTimeshift;
|
|
17
|
+
private snapFromRtsp;
|
|
18
|
+
private snapFromFfmpeg;
|
|
19
|
+
private cropSnapshot;
|
|
20
|
+
private getCachedSnapshot;
|
|
21
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { FfmpegExec } from "./ffmpeg/index.js";
|
|
2
|
+
import { PROTECT_SNAPSHOT_CACHE_MAXAGE } from "./settings.js";
|
|
3
|
+
// Camera snapshot class for Protect.
|
|
4
|
+
export class ProtectSnapshot {
|
|
5
|
+
api;
|
|
6
|
+
hap;
|
|
7
|
+
log;
|
|
8
|
+
nvr;
|
|
9
|
+
platform;
|
|
10
|
+
protectCamera;
|
|
11
|
+
snapshotCache;
|
|
12
|
+
// Create an instance of a HomeKit streaming delegate.
|
|
13
|
+
constructor(protectCamera) {
|
|
14
|
+
this.api = protectCamera.api;
|
|
15
|
+
this.hap = protectCamera.api.hap;
|
|
16
|
+
this.log = protectCamera.log;
|
|
17
|
+
this.nvr = protectCamera.nvr;
|
|
18
|
+
this.protectCamera = protectCamera;
|
|
19
|
+
this.platform = protectCamera.platform;
|
|
20
|
+
this.snapshotCache = {};
|
|
21
|
+
}
|
|
22
|
+
// Return a snapshot for use by HomeKit.
|
|
23
|
+
async getSnapshot(request) {
|
|
24
|
+
// If we aren't connected, we're done.
|
|
25
|
+
if (!this.protectCamera.isOnline) {
|
|
26
|
+
this.log.error("Unable to retrieve a snapshot: the camera is offline or unavailable.");
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
// We request the snapshot to prioritize performance and quality of the image. The reason for this is that the Protect API constrains the quality level of snapshot
|
|
30
|
+
// images and doesn't always produce them reliably. Fortunately, we have a few options. We retrieve snapshots by trying to use the following sources, in order:
|
|
31
|
+
//
|
|
32
|
+
// Timeshift buffer Eliminates querying the Protect controller and allows us to capture the highest quality image we can.
|
|
33
|
+
// RTSP stream Queries the Protect controller, but allows us to capture the highest quality image available.
|
|
34
|
+
// Protect API Requests a snapshot from the Protect controller. This is an error-prone task for the Protect controller and produces lower quality images.
|
|
35
|
+
// Cached snapshot Returns the last snapshot we have taken, assuming it isn't too old.
|
|
36
|
+
//
|
|
37
|
+
// The exception to this is package cameras - we try the Protect API before the RTSP stream there because the lower frame rate of the camera causes a lengthier
|
|
38
|
+
// response time.
|
|
39
|
+
let snapshot = await this.snapFromTimeshift(request);
|
|
40
|
+
// No snapshot yet, let's try again.
|
|
41
|
+
if (!snapshot) {
|
|
42
|
+
// We treat package cameras uniquely.
|
|
43
|
+
if ("packageCamera" in this.protectCamera.accessory.context) {
|
|
44
|
+
snapshot = (await this.nvr.ufpApi.getSnapshot(this.protectCamera.ufp, request?.width, request?.height, undefined, true)) ?? (await this.snapFromRtsp(request));
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
snapshot = (await this.snapFromRtsp(request)) ?? (await this.nvr.ufpApi.getSnapshot(this.protectCamera.ufp, request?.width, request?.height));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Occasional snapshot failures will happen. The controller isn't always able to generate them if one is already inflight or if it's too soon after the last one.
|
|
51
|
+
if (!snapshot) {
|
|
52
|
+
// See if we have an image cached that we can use instead.
|
|
53
|
+
const cachedSnapshot = this.getCachedSnapshot(this.protectCamera.ufp.mac);
|
|
54
|
+
if (cachedSnapshot) {
|
|
55
|
+
this.log.error("Unable to retrieve a snapshot: using the most recent cached snapshot instead.");
|
|
56
|
+
return cachedSnapshot;
|
|
57
|
+
}
|
|
58
|
+
this.log.error("Unable to retrieve a snapshot.");
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
// Crop the snapshot, if we're configured to do so.
|
|
62
|
+
if (this.protectCamera.hints.crop) {
|
|
63
|
+
snapshot = await this.cropSnapshot(snapshot) ?? snapshot;
|
|
64
|
+
}
|
|
65
|
+
// Cache the image before returning it.
|
|
66
|
+
this.snapshotCache[this.protectCamera.ufp.mac] = { image: snapshot, time: Date.now() };
|
|
67
|
+
return this.snapshotCache[this.protectCamera.ufp.mac].image;
|
|
68
|
+
}
|
|
69
|
+
// Snapshots using the timeshift buffer as the source.
|
|
70
|
+
async snapFromTimeshift(request) {
|
|
71
|
+
const buffer = this.protectCamera.stream.hksv?.getTimeshiftBuffer();
|
|
72
|
+
if (!buffer) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
// Use our timeshift buffer to create a snapshot image. Options we use are:
|
|
76
|
+
//
|
|
77
|
+
// -r fps Set the input frame rate for the video stream.
|
|
78
|
+
// -f mp4 Specify that our input will be an MP4 file.
|
|
79
|
+
// -i pipe:0 Read input from standard input.
|
|
80
|
+
const ffmpegOptions = [
|
|
81
|
+
"-r", this.protectCamera.stream.hksv?.rtspEntry?.channel.fps.toString() ?? "30",
|
|
82
|
+
"-f", "mp4",
|
|
83
|
+
"-i", "pipe:0"
|
|
84
|
+
];
|
|
85
|
+
return this.snapFromFfmpeg(ffmpegOptions, request, buffer);
|
|
86
|
+
}
|
|
87
|
+
// Snapshots using the Protect RTSP endpoints as the source.
|
|
88
|
+
async snapFromRtsp(request) {
|
|
89
|
+
// Grab the highest quality stream we have available.
|
|
90
|
+
const rtspEntry = this.protectCamera.findRtsp(3840, 2160);
|
|
91
|
+
if (!rtspEntry) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
// Use the RTSP stream to generate a snapshot image. Options we use are:
|
|
95
|
+
//
|
|
96
|
+
// -probesize amount How many bytes should be analyzed for stream information. We default to to analyze time should be spent analyzing
|
|
97
|
+
// the input stream.
|
|
98
|
+
// -max_delay 500000 Set an upper limit on how much time FFmpeg can take in demuxing packets.
|
|
99
|
+
// -r fps Set the input frame rate for the video stream.
|
|
100
|
+
// -rtsp_transport tcp Tell the RTSP stream handler that we're looking for a TCP connection.
|
|
101
|
+
// -i rtspEntry.url RTSPS URL to get our input stream from.
|
|
102
|
+
const ffmpegOptions = [
|
|
103
|
+
...this.protectCamera.stream.ffmpegOptions.videoDecoder,
|
|
104
|
+
"-probesize", this.protectCamera.stream.probesize.toString(),
|
|
105
|
+
"-max_delay", "500000",
|
|
106
|
+
"-r", rtspEntry.channel.fps.toString(),
|
|
107
|
+
"-rtsp_transport", "tcp",
|
|
108
|
+
"-i", rtspEntry.url
|
|
109
|
+
];
|
|
110
|
+
return this.snapFromFfmpeg(ffmpegOptions, request);
|
|
111
|
+
}
|
|
112
|
+
// Generate a snapshot using FFmpeg.
|
|
113
|
+
async snapFromFfmpeg(ffmpegInputOptions, request, buffer) {
|
|
114
|
+
// Options we use to generate an image based on our MP4 input are:
|
|
115
|
+
//
|
|
116
|
+
// -hide_banner Suppress printing the startup banner in FFmpeg.
|
|
117
|
+
// -nostats Suppress printing progress reports while encoding in FFmpeg.
|
|
118
|
+
// -fflags flags Set the format flags to generate a presentation timestamp if it's missing and discard any corrupt packets rather than exit.
|
|
119
|
+
// -frames:v 1 Extract a single video frame for the output.
|
|
120
|
+
// -q:v 1 Set the quality output of the JPEG output.
|
|
121
|
+
const ffmpegOptions = [
|
|
122
|
+
"-hide_banner",
|
|
123
|
+
"-nostats",
|
|
124
|
+
"-fflags", "+discardcorrupt+genpts",
|
|
125
|
+
...ffmpegInputOptions,
|
|
126
|
+
"-frames:v", "1",
|
|
127
|
+
"-q:v", "2"
|
|
128
|
+
];
|
|
129
|
+
// If we've specified dimensions, scale the snapshot.
|
|
130
|
+
if (request) {
|
|
131
|
+
// -filter:v scale= Scale the image down, if needed, but never upscale it, preserving aspect ratios and letterboxing where needed.
|
|
132
|
+
ffmpegOptions.push("-filter:v", [
|
|
133
|
+
"scale=" + request.width.toString(), request.height.toString(),
|
|
134
|
+
"force_original_aspect_ratio=decrease,pad=" + request.width.toString(), request.height.toString(),
|
|
135
|
+
"(ow-iw)/2", "(oh-ih)/2"
|
|
136
|
+
].join(":"));
|
|
137
|
+
}
|
|
138
|
+
// -f image2pipe Specifies the output format to use a pipe, since we are outputting to stdout and want to consume the data directly.
|
|
139
|
+
// -c:v mjpeg Specify the MJPEG encoder to get a JPEG file.
|
|
140
|
+
// pipe:1 Output the snapshot to standard output.
|
|
141
|
+
ffmpegOptions.push("-f", "image2pipe", "-c:v", "mjpeg", "pipe:1");
|
|
142
|
+
// Instantiate FFmpeg.
|
|
143
|
+
const ffmpeg = new FfmpegExec(this.protectCamera, ffmpegOptions, false);
|
|
144
|
+
// Retrieve the snapshot.
|
|
145
|
+
const ffmpegResult = await ffmpeg.exec(buffer);
|
|
146
|
+
// We're done. If we produced an empty image, we couldn't utilize the output.
|
|
147
|
+
if (ffmpegResult?.exitCode === 0) {
|
|
148
|
+
return ffmpegResult.stdout.length ? ffmpegResult.stdout : null;
|
|
149
|
+
}
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
// Image snapshot crop handler.
|
|
153
|
+
async cropSnapshot(snapshot) {
|
|
154
|
+
// Crop the snapshot using the FFmpeg with crop filter. Options we use are:
|
|
155
|
+
//
|
|
156
|
+
// -hide_banner Suppress printing the startup banner in FFmpeg.
|
|
157
|
+
// -nostats Suppress printing progress reports while encoding in FFmpeg.
|
|
158
|
+
// -i pipe:0 Read input from standard input.
|
|
159
|
+
// -filter:v Pass the crop filter options to FFmpeg.
|
|
160
|
+
// -f image2pipe Specifies the output format to use a pipe, since we are outputting to stdout and want to consume the data directly.
|
|
161
|
+
// -c:v mjpeg Specify the MJPEG encoder to get a JPEG file.
|
|
162
|
+
// pipe:1 Output the cropped snapshot to standard output.
|
|
163
|
+
const ffmpeg = new FfmpegExec(this.protectCamera, [
|
|
164
|
+
"-hide_banner",
|
|
165
|
+
"-nostats",
|
|
166
|
+
"-i", "pipe:0",
|
|
167
|
+
"-filter:v", this.protectCamera.stream.ffmpegOptions.cropFilter,
|
|
168
|
+
"-f", "image2pipe",
|
|
169
|
+
"-c:v", "mjpeg",
|
|
170
|
+
"pipe:1"
|
|
171
|
+
]);
|
|
172
|
+
// Retrieve the snapshot.
|
|
173
|
+
const ffmpegResult = await ffmpeg.exec(snapshot);
|
|
174
|
+
// Crop succeeded, we're done.
|
|
175
|
+
if (ffmpegResult?.exitCode === 0) {
|
|
176
|
+
return ffmpegResult.stdout;
|
|
177
|
+
}
|
|
178
|
+
// Something went wrong.
|
|
179
|
+
this.log.error("Unable to crop snapshot.");
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
// Retrieve a cached snapshot, if available.
|
|
183
|
+
getCachedSnapshot(cameraMac) {
|
|
184
|
+
// If we have an image from the last few seconds, we can use it. Otherwise, we're done.
|
|
185
|
+
if (!this.snapshotCache[cameraMac] || ((Date.now() - this.snapshotCache[cameraMac].time) > (PROTECT_SNAPSHOT_CACHE_MAXAGE * 1000))) {
|
|
186
|
+
delete this.snapshotCache[cameraMac];
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
return this.snapshotCache[cameraMac].image;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=protect-snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protect-snapshot.js","sourceRoot":"","sources":["../src/protect-snapshot.ts"],"names":[],"mappings":"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"}
|
package/dist/protect-stream.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { CameraController, CameraStreamingDelegate, PrepareStreamCallback, PrepareStreamRequest, SnapshotRequest, SnapshotRequestCallback, StreamRequestCallback, StreamingRequest } from "homebridge";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { FfmpegOptions } from "./ffmpeg/index.js";
|
|
3
|
+
import { ProtectCamera } from "./devices/index.js";
|
|
5
4
|
import { ProtectLogging } from "./protect-types.js";
|
|
6
5
|
import { ProtectPlatform } from "./protect-platform.js";
|
|
7
6
|
import { ProtectRecordingDelegate } from "./protect-record.js";
|
|
@@ -22,16 +21,13 @@ export declare class ProtectStreamingDelegate implements CameraStreamingDelegate
|
|
|
22
21
|
private probesizeOverrideTimeout?;
|
|
23
22
|
private rtspEntry;
|
|
24
23
|
private savedBitrate;
|
|
25
|
-
private
|
|
24
|
+
private snapshot;
|
|
26
25
|
verboseFfmpeg: boolean;
|
|
27
26
|
constructor(protectCamera: ProtectCamera, resolutions: [number, number, number][]);
|
|
28
|
-
private cropSnapshot;
|
|
29
27
|
handleSnapshotRequest(request?: SnapshotRequest, callback?: SnapshotRequestCallback): Promise<void>;
|
|
30
28
|
prepareStream(request: PrepareStreamRequest, callback: PrepareStreamCallback): Promise<void>;
|
|
31
29
|
private startStream;
|
|
32
30
|
handleStreamRequest(request: StreamingRequest, callback: StreamRequestCallback): Promise<void>;
|
|
33
|
-
private getCachedSnapshot;
|
|
34
|
-
getSnapshot(request?: SnapshotRequest, isLoggingErrors?: boolean): Promise<Buffer | null>;
|
|
35
31
|
stopStream(sessionId: string): Promise<void>;
|
|
36
32
|
shutdown(): Promise<void>;
|
|
37
33
|
adjustProbeSize(): void;
|