homebridge-unifi-protect 5.5.4 → 6.0.1

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.
Files changed (79) hide show
  1. package/README.md +3 -3
  2. package/config.schema.json +17 -16
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.js +6 -6
  5. package/dist/index.js.map +1 -1
  6. package/dist/protect-camera.d.ts +58 -0
  7. package/dist/protect-camera.js +367 -246
  8. package/dist/protect-camera.js.map +1 -1
  9. package/dist/protect-device.d.ts +48 -0
  10. package/dist/protect-device.js +189 -0
  11. package/dist/protect-device.js.map +1 -0
  12. package/dist/protect-doorbell.d.ts +22 -0
  13. package/dist/protect-doorbell.js +75 -64
  14. package/dist/protect-doorbell.js.map +1 -1
  15. package/dist/protect-ffmpeg-record.d.ts +15 -0
  16. package/dist/protect-ffmpeg-record.js +48 -34
  17. package/dist/protect-ffmpeg-record.js.map +1 -1
  18. package/dist/protect-ffmpeg-stream.d.ts +15 -0
  19. package/dist/protect-ffmpeg-stream.js +22 -12
  20. package/dist/protect-ffmpeg-stream.js.map +1 -1
  21. package/dist/protect-ffmpeg.d.ts +42 -0
  22. package/dist/protect-ffmpeg.js +49 -58
  23. package/dist/protect-ffmpeg.js.map +1 -1
  24. package/dist/protect-light.d.ts +13 -0
  25. package/dist/protect-light.js +63 -40
  26. package/dist/protect-light.js.map +1 -1
  27. package/dist/protect-liveviews.d.ts +17 -0
  28. package/dist/protect-liveviews.js +117 -101
  29. package/dist/protect-liveviews.js.map +1 -1
  30. package/dist/protect-mqtt.d.ts +19 -0
  31. package/dist/protect-mqtt.js +26 -35
  32. package/dist/protect-mqtt.js.map +1 -1
  33. package/dist/protect-nvr-events.d.ts +30 -0
  34. package/dist/protect-nvr-events.js +168 -431
  35. package/dist/protect-nvr-events.js.map +1 -1
  36. package/dist/protect-nvr-systeminfo.d.ts +15 -0
  37. package/dist/protect-nvr-systeminfo.js +43 -49
  38. package/dist/protect-nvr-systeminfo.js.map +1 -1
  39. package/dist/protect-nvr.d.ts +48 -0
  40. package/dist/protect-nvr.js +327 -359
  41. package/dist/protect-nvr.js.map +1 -1
  42. package/dist/protect-options.d.ts +39 -0
  43. package/dist/protect-options.js +172 -6
  44. package/dist/protect-options.js.map +1 -1
  45. package/dist/protect-platform.d.ts +17 -0
  46. package/dist/protect-platform.js +17 -30
  47. package/dist/protect-platform.js.map +1 -1
  48. package/dist/protect-record.d.ts +33 -0
  49. package/dist/protect-record.js +130 -126
  50. package/dist/protect-record.js.map +1 -1
  51. package/dist/protect-rtp.d.ts +29 -0
  52. package/dist/protect-rtp.js +133 -16
  53. package/dist/protect-rtp.js.map +1 -1
  54. package/dist/protect-securitysystem.d.ts +18 -0
  55. package/dist/protect-securitysystem.js +105 -109
  56. package/dist/protect-securitysystem.js.map +1 -1
  57. package/dist/protect-sensor.d.ts +28 -0
  58. package/dist/protect-sensor.js +79 -97
  59. package/dist/protect-sensor.js.map +1 -1
  60. package/dist/protect-stream.d.ts +41 -0
  61. package/dist/protect-stream.js +298 -156
  62. package/dist/protect-stream.js.map +1 -1
  63. package/dist/protect-timeshift.d.ts +30 -0
  64. package/dist/protect-timeshift.js +65 -48
  65. package/dist/protect-timeshift.js.map +1 -1
  66. package/dist/protect-types.d.ts +50 -0
  67. package/dist/protect-types.js +22 -0
  68. package/dist/protect-types.js.map +1 -0
  69. package/dist/protect-viewer.d.ts +17 -0
  70. package/dist/protect-viewer.js +41 -47
  71. package/dist/protect-viewer.js.map +1 -1
  72. package/dist/settings.d.ts +22 -0
  73. package/dist/settings.js +30 -35
  74. package/dist/settings.js.map +1 -1
  75. package/homebridge-ui/public/index.html +715 -0
  76. package/homebridge-ui/server.js +156 -0
  77. package/package.json +15 -15
  78. package/dist/protect-accessory.js +0 -184
  79. package/dist/protect-accessory.js.map +0 -1
@@ -1,101 +1,67 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ProtectRecordingDelegate = void 0;
4
- const protect_ffmpeg_record_1 = require("./protect-ffmpeg-record");
5
- const protect_timeshift_1 = require("./protect-timeshift");
1
+ import { FfmpegRecordingProcess } from "./protect-ffmpeg-record.js";
2
+ import { ProtectTimeshiftBuffer } from "./protect-timeshift.js";
6
3
  // Camera recording delegate implementation for Protect.
7
- class ProtectRecordingDelegate {
4
+ export class ProtectRecordingDelegate {
8
5
  // Create an instance of the HKSV recording delegate.
9
6
  constructor(protectCamera) {
10
- var _a;
11
7
  this._isRecording = false;
12
8
  this.accessory = protectCamera.accessory;
13
9
  this.api = protectCamera.api;
14
10
  this.hap = protectCamera.api.hap;
15
- this.debug = protectCamera.platform.debug.bind(protectCamera.platform);
16
11
  this.ffmpegStream = null;
17
12
  this.isInitialized = false;
18
13
  this.isTransmitting = false;
19
- this.log = protectCamera.platform.log;
20
- this.name = protectCamera.name.bind(protectCamera);
14
+ this.log = protectCamera.log;
21
15
  this.nvr = protectCamera.nvr;
22
16
  this.protectCamera = protectCamera;
23
- this.maxRecordingDuration = parseInt((_a = this.nvr.optionGet(this.accessory.context.device, "Video.HKSV.Recording.MaxDuration")) !== null && _a !== void 0 ? _a : "0");
17
+ this.maxRecordingDuration = parseInt(this.nvr.optionGet(this.protectCamera.ufp, "Video.HKSV.Recording.MaxDuration") ?? "0");
24
18
  this.timeshiftedSegments = 0;
25
19
  this.transmittedSegments = 0;
26
20
  this.rtspEntry = null;
27
- this.timeshift = new protect_timeshift_1.ProtectTimeshiftBuffer(protectCamera);
21
+ this.timeshift = new ProtectTimeshiftBuffer(protectCamera);
28
22
  this.transmitListener = null;
29
23
  }
30
24
  // Process HomeKit requests to activate or deactivate HKSV recording capabilities for a camera.
31
25
  async updateRecordingActive(active) {
32
- var _a, _b, _c;
33
26
  // If we are no longer recording, stop the livestream.
34
27
  if (!active) {
35
28
  this.timeshift.stop();
36
29
  // Inform the user of the state change, if needed.
37
30
  if (this.isRecording !== active) {
38
- this.log.info("%s: Disabling HomeKit Secure Video event recording.", this.name());
31
+ this.log.info("Disabling HomeKit Secure Video event recording.");
39
32
  }
40
33
  // Disable recording.
41
34
  this._isRecording = active;
42
35
  // Turn off any potential inflight motion detection. Strictly speaking, this shouldn't be needed since any inflight
43
36
  // motion sensor events will clear themselves. That said, we play it safe just the same.
44
- (_a = this.accessory.getService(this.hap.Service.MotionSensor)) === null || _a === void 0 ? void 0 : _a.updateCharacteristic(this.hap.Characteristic.MotionDetected, false);
37
+ this.accessory.getService(this.hap.Service.MotionSensor)?.updateCharacteristic(this.hap.Characteristic.MotionDetected, false);
45
38
  // We're done.
46
39
  return;
47
40
  }
48
- // We have no recording configuration available yet. Set our desired state and we're done.
49
- // Once we have a recording configuration, we'll get called again and be able to begin timeshifting.
50
- if (!this.recordingConfig) {
51
- this._isRecording = active;
52
- return;
53
- }
54
- // Figure out which camera channel we should use for the livestream based on the requested resolution.
55
- this.rtspEntry = this.protectCamera.findRecordingRtsp(this.recordingConfig.videoCodec.resolution[0], this.recordingConfig.videoCodec.resolution[1], this.accessory.context.device);
56
- if (!this.rtspEntry) {
57
- this._isRecording = false;
58
- this.log.error("%s: Unable to start the HomeKit Secure Video timeshift buffer: no valid RTSP stream profile was found.", this.name());
41
+ // We're recording - update our recording state internally. We set this regardless of whether or not we succeed at starting the
42
+ // timeshift buffer in order to maintain our state consistent with HKSV.
43
+ this._isRecording = active;
44
+ // Begin maintaining a timeshift buffer, if configured to do so.
45
+ if (!(await this.configureTimeshifting())) {
59
46
  return;
60
47
  }
61
- // If the user has disabled timeshifting, don't start the timeshift buffer.
62
- if (this.nvr.optionEnabled(this.accessory.context.device, "Video.HKSV.TimeshiftBuffer")) {
63
- if (!this.recordingConfig || !this.rtspEntry) {
64
- return;
65
- }
66
- // Set the bitrate to what HomeKit is looking for. This is particularly useful when we occasionally have
67
- // to livestream to a user, where bitrates can be different and even get reconfigured in realtime. By
68
- // contrast, HomeKit Secure Video has a consistent bitrate it accepts, and we want to try to match it as
69
- // closely as posible.
70
- if (!(await this.protectCamera.setBitrate(this.rtspEntry.channel.id, this.recordingConfig.videoCodec.parameters.bitRate * 1000))) {
71
- this.log.error("%s: Unable to set the bitrate to %skbps for HomeKit Secure Video event recording.", this.name(), this.recordingConfig.videoCodec.parameters.bitRate);
72
- return;
73
- }
74
- // Fire up the timeshift buffer.
75
- if (!(await this.timeshift.start(this.rtspEntry.channel.id))) {
76
- this.log.error("%s: Unable to start the timeshift buffer for HomeKit Secure Video.", this.name());
77
- return;
78
- }
79
- }
80
48
  // Inform the user of the state change, if needed.
81
- if ((this._isRecording !== active) || !this.isInitialized) {
49
+ if (!this.isInitialized) {
82
50
  this.isInitialized = true;
83
- this.log.info("%s: HomeKit Secure Video event recording enabled: %s, %s kbps with %s", this.name(), (_b = this.rtspEntry) === null || _b === void 0 ? void 0 : _b.name, (_c = this.recordingConfig) === null || _c === void 0 ? void 0 : _c.videoCodec.parameters.bitRate, this.nvr.optionEnabled(this.accessory.context.device, "Video.HKSV.TimeshiftBuffer") ?
51
+ this.log.info("HomeKit Secure Video event recording enabled: %s, %s kbps with %s", this.rtspEntry?.name, this.recordingConfig?.videoCodec.parameters.bitRate, this.protectCamera.hints.timeshift ?
84
52
  "a " + (this.timeshift.length / 1000).toString() + " second timeshift buffer." :
85
- "no timeshift buffer. Warning: this may provide a suboptimal HKSV experience.");
53
+ "no timeshift buffer. This will provide a suboptimal HKSV experience.");
86
54
  // Inform the user if there's a maximum event recording duration set.
87
55
  if (this.maxRecordingDuration) {
88
- this.log.info("%s: HomeKit Secure Video recordings will be no longer than ~%s seconds.", this.name(), this.maxRecordingDuration);
56
+ this.log.info("HomeKit Secure Video recordings will be no longer than ~%s seconds.", this.maxRecordingDuration);
89
57
  }
90
58
  }
91
- // Update our recording state internally.
92
- this._isRecording = active;
93
59
  }
94
60
  // Process updated recording configuration settings from HomeKit Secure Video.
95
61
  updateRecordingConfiguration(configuration) {
96
- // If we're set to an undefined state, it's because HomeKit can't figure out a valid configuration to use.
97
- // This is typically due to a factory reset of the camera or a similar edge case. We choose to handle it
98
- // by stopping our timeshift buffer.
62
+ // If we're set to an undefined state, it's because HomeKit can't figure out a valid configuration to use. This is
63
+ // typically due to a factory reset of the camera or a similar edge case. We choose to handle it by stopping our
64
+ // timeshift buffer.
99
65
  if (!configuration) {
100
66
  this.recordingConfig = configuration;
101
67
  this.timeshift.stop();
@@ -111,26 +77,29 @@ class ProtectRecordingDelegate {
111
77
  // Handle the actual recording stream request.
112
78
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
113
79
  async *handleRecordingStreamRequest(streamId) {
114
- var _a, _b;
115
80
  let isLastSegment = false;
116
81
  this.transmittedSegments = 0;
117
- // If we've explicitly disabled HKSV recording, we're done right now. Otherwise, start transmitting our timeshift
118
- // buffer and process it through FFmpeg.
119
- if (!this.accessory.context.hksvRecording || !(await this.startTransmitting()) || !this.ffmpegStream) {
82
+ // If we are recording HKSV events and we haven't fully initialized our timeshift buffer (e.g. offline cameras preventing us
83
+ // from doing so), then do so now.
84
+ if (this.accessory.context.hksvRecording && this.isRecording && !this.isInitialized) {
85
+ await this.updateRecordingActive(this.isRecording);
86
+ }
87
+ // If we've explicitly disabled HKSV recording, or we have issues setting up our timeshift buffer, we're done right now. Otherwise,
88
+ // start transmitting our timeshift buffer and process it through FFmpeg.
89
+ if (!this.accessory.context.hksvRecording || !this.isInitialized || !(await this.startTransmitting()) || !this.ffmpegStream) {
120
90
  // Stop transmitting, if needed. If HKSV recording has been disabled explicitly, it should never start in the first place.
121
- this.stopTransmitting();
91
+ await this.stopTransmitting();
122
92
  // Something's gone wrong, or we've disabled HKSV recording. In either event, we send an fMP4 stream header
123
93
  // back to HKSV and exit as cleanly as we can. If we can't get the stream header, we still send an empty segment
124
94
  // to HKSV - this will still generate a warning in Homebridge that can be ignored.
125
- const streamHeader = (_a = (await this.timeshift.getInitSegment())) !== null && _a !== void 0 ? _a : Buffer.alloc(0);
126
- yield { data: streamHeader, isLast: true };
95
+ yield { data: (await this.timeshift.getInitSegment()) ?? Buffer.alloc(0), isLast: true };
127
96
  return;
128
97
  }
129
98
  // Process our FFmpeg-generated segments and send them back to HKSV.
130
99
  for await (const segment of this.ffmpegStream.segmentGenerator()) {
131
100
  // If we've not transmitting, we're done.
132
101
  if (!this.isTransmitting) {
133
- return;
102
+ break;
134
103
  }
135
104
  // No segment doesn't mean we're done necessarily, but it does mean we need to wait for FFmpeg to catch up.
136
105
  if (!segment) {
@@ -142,55 +111,74 @@ class ProtectRecordingDelegate {
142
111
  if (this.maxRecordingDuration && this.rtspEntry && ((this.transmittedSegments * this.rtspEntry.channel.idrInterval) > this.maxRecordingDuration)) {
143
112
  isLastSegment = true;
144
113
  }
145
- // Send HKSV the segment.
146
- yield {
147
- data: segment,
148
- isLast: isLastSegment
149
- };
150
- // Keep track of how many segments we've sent to HKSV.
114
+ // Keep track of how many segments we're sending to HKSV.
151
115
  this.transmittedSegments++;
152
- // If we've sent the last segment, we're done.
116
+ // Send HKSV the fMP4 segment.
117
+ yield { data: segment, isLast: isLastSegment };
118
+ // If we're at the last segment, we're done.
153
119
  if (isLastSegment) {
154
- return;
120
+ break;
155
121
  }
156
122
  }
157
- // If we're done transmitting, we're done here.
158
- if (!this.isTransmitting) {
159
- return;
160
- }
161
- // Something's gone wrong and we've sent HKSV no segments. Let's send an fMP4 stream header back to HKSV and exit
162
- // as cleanly as we can. If we can't get the stream header, we send an empty segment to HKSV - this will still
163
- // generate a warning in HAP-NodeJS that can be ignored.
164
- if (!this.transmittedSegments) {
165
- this.debug("%s: HKSV event recording ending without sending any segments. Transmitting a final packet to ensure we end properly.", this.name());
166
- yield { data: (_b = (await this.timeshift.getInitSegment())) !== null && _b !== void 0 ? _b : Buffer.alloc(0), isLast: true };
167
- return;
168
- }
169
- // Something likely happened to FFmpeg and we didn't send out a final segment. Tell HKSV we're really done.
170
- if (!isLastSegment) {
171
- this.log.error("%s: HKSV event recording ending abruptly, likely due to an FFmpeg failure. " +
172
- "Transmitting a final packet to ensure we end properly. " +
173
- "Note: Homebridge / HAP-NodeJS may generate an HDS error as a result. This can be safely ignored.", this.name());
174
- yield { data: Buffer.alloc(0), isLast: true };
175
- return;
176
- }
177
123
  }
178
124
  // Receive an acknowledgement from HomeKit that it's seen an end-of-stream packet from us.
179
125
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
180
- acknowledgeStream(streamId) {
126
+ async acknowledgeStream(streamId) {
181
127
  // Since HomeKit knows our transmission is ending, it's safe to do so now.
182
- this.stopTransmitting();
128
+ await this.stopTransmitting();
183
129
  }
184
130
  // Process HomeKit requests to end the transmission of the recording stream.
185
- closeRecordingStream(streamId, reason) {
186
- this.stopTransmitting(reason);
131
+ async closeRecordingStream(streamId, reason) {
132
+ await this.stopTransmitting(reason);
133
+ }
134
+ // Maintain a timeshift buffer and which Protect streams to use for HKSV.
135
+ async configureTimeshifting() {
136
+ // We have no recording configuration available yet. Even though HKSV recording is technically active, we can't do anything without
137
+ // a valid HKSV recording configuration, which HomeKit hasn't sent us yet.
138
+ if (!this.recordingConfig) {
139
+ return false;
140
+ }
141
+ const timeshiftError = "Unable to configure HomeKit Secure Video event recording support";
142
+ // If the camera isn't connected, don't attempt to do anything with the timeshift buffer or HKSV quite yet.
143
+ if (this.protectCamera.ufp.state !== "CONNECTED") {
144
+ this.log.error("%s: the camera is not currently connected to the Protect controller." +
145
+ " HomeKit Secure Video event recording will resume once the camera reconnects to the Protect controller.", timeshiftError);
146
+ return false;
147
+ }
148
+ const oldRtspEntry = this.rtspEntry;
149
+ // Figure out which camera channel we should use for the based on the HKSV-requested resolution.
150
+ this.rtspEntry = this.protectCamera.findRecordingRtsp(this.recordingConfig.videoCodec.resolution[0], this.recordingConfig.videoCodec.resolution[1], this.protectCamera.ufp);
151
+ if (!this.rtspEntry) {
152
+ this.log.error("%s: no valid RTSP stream profile was found for this camera.", timeshiftError);
153
+ return false;
154
+ }
155
+ // If we haven't enabled the timeshift buffer or HKSV hasn't asked us to record, we're done with everything we need to configure.
156
+ if (!this.protectCamera.hints.timeshift || !this.isRecording) {
157
+ return true;
158
+ }
159
+ // Set the bitrate to what HomeKit is looking for. This is particularly useful when we occasionally have to livestream to a user, where bitrates
160
+ // can be different and even get reconfigured in realtime. By contrast, HomeKit Secure Video has a consistent bitrate it accepts, and we want to
161
+ // try to match it as closely as posible, assuming dynamic bitrates are enabled.
162
+ if (!(await this.protectCamera.setBitrate(this.rtspEntry.channel.id, this.recordingConfig.videoCodec.parameters.bitRate * 1000))) {
163
+ this.log.error("%s: unable to set the bitrate to %skbps.", timeshiftError, this.recordingConfig.videoCodec.parameters.bitRate);
164
+ return false;
165
+ }
166
+ // If we haven't changed the camera channel we're using, and we've already started timeshifting, we're done.
167
+ if (this.timeshift.isStarted && (this.rtspEntry.channel.id === oldRtspEntry?.channel.id)) {
168
+ return true;
169
+ }
170
+ // Fire up the timeshift buffer.
171
+ if (!(await this.timeshift.start(this.rtspEntry.channel.id))) {
172
+ this.log.error("%s.", timeshiftError);
173
+ return false;
174
+ }
175
+ return true;
187
176
  }
188
177
  // Start transmitting to the HomeKit hub our timeshifted fMP4 stream.
189
178
  async startTransmitting() {
190
- var _a;
191
179
  // If there's a prior instance of FFmpeg, clean up after ourselves.
192
180
  if (this.ffmpegStream) {
193
- this.ffmpegStream.stop();
181
+ this.ffmpegStream.stop(false);
194
182
  this.ffmpegStream = null;
195
183
  }
196
184
  // If there's a prior instance of our transmit handler, clean it up.
@@ -202,28 +190,39 @@ class ProtectRecordingDelegate {
202
190
  if (!this.recordingConfig || !this.rtspEntry) {
203
191
  return false;
204
192
  }
205
- // We want to keep feeding HomeKit until it tells us it's finished, or we decide we don't want to send anymore
206
- // fMP4 packets. We treat this the same was a DVR works where you can pause live television, but it continues to
207
- // buffer what's being broadcast until you're ready to watch it. This is the same idea.
193
+ // 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
194
+ // treat this in a similar way to how a DVR works where you can pause live television, but it continues to buffer what's being
195
+ // broadcast until you're ready to watch it. This is the same idea.
208
196
  // Keep track of how many fMP4 segments we are feeding FFmpeg.
209
197
  this.transmittedSegments = 0;
210
198
  // Check to see if the user has audio enabled or disabled for recordings.
211
- const isAudioActive = ((_a = this.protectCamera.stream.controller.recordingManagement) === null || _a === void 0 ? void 0 : _a.recordingManagementService.getCharacteristic(this.api.hap.Characteristic.RecordingAudioActive).value) === 1 ? true : false;
199
+ const isAudioActive = this.protectCamera.stream.controller.recordingManagement?.recordingManagementService
200
+ .getCharacteristic(this.api.hap.Characteristic.RecordingAudioActive).value === 1 ? true : false;
212
201
  // Start a new FFmpeg instance to transcode using HomeKit's requirements.
213
- this.ffmpegStream = new protect_ffmpeg_record_1.FfmpegRecordingProcess(this.protectCamera, this.recordingConfig, this.rtspEntry, isAudioActive);
202
+ this.ffmpegStream = new FfmpegRecordingProcess(this.protectCamera, this.recordingConfig, this.rtspEntry, isAudioActive);
214
203
  this.isTransmitting = true;
215
204
  // Let the timeshift buffer know it's time to transmit and continue timeshifting.
216
- if (this.nvr.optionEnabled(this.accessory.context.device, "Video.HKSV.TimeshiftBuffer")) {
205
+ if (this.protectCamera.hints.timeshift) {
217
206
  this.timeshiftedSegments = 0;
218
- await this.timeshift.transmitStream(true);
207
+ // Check to make sure something didn't go wrong when we start transmitting the stream.
208
+ if (!(await this.timeshift.startTransmitting())) {
209
+ // Stop our FFmpeg process and our timeshift buffer.
210
+ this.ffmpegStream.stop();
211
+ this.timeshift.stop();
212
+ // Ensure we cleanup.
213
+ this.ffmpegStream = null;
214
+ this.isTransmitting = false;
215
+ // Restart our timeshift buffer.
216
+ await this.restartTimeshifting();
217
+ return false;
218
+ }
219
219
  let seenInitSegment = false;
220
220
  // Listen in for events from the timeshift buffer and feed FFmpeg. This looks simple, conceptually,
221
221
  // but there's a lot going on here.
222
222
  this.transmitListener = (segment) => {
223
- var _a, _b, _c, _d;
224
223
  if (!seenInitSegment && this.timeshift.isInitSegment(segment)) {
225
224
  seenInitSegment = true;
226
- (_b = (_a = this.ffmpegStream) === null || _a === void 0 ? void 0 : _a.stdin) === null || _b === void 0 ? void 0 : _b.write(segment);
225
+ this.ffmpegStream?.stdin?.write(segment);
227
226
  return;
228
227
  }
229
228
  // We don't want to send the initialization segment more than once - FFmpeg will get confused if you do, plus
@@ -232,26 +231,26 @@ class ProtectRecordingDelegate {
232
231
  return;
233
232
  }
234
233
  // Send the segment to FFmpeg for processing.
235
- (_d = (_c = this.ffmpegStream) === null || _c === void 0 ? void 0 : _c.stdin) === null || _d === void 0 ? void 0 : _d.write(segment);
234
+ this.ffmpegStream?.stdin?.write(segment);
236
235
  this.timeshiftedSegments++;
237
236
  };
238
237
  this.timeshift.on("segment", this.transmitListener);
239
238
  }
240
239
  // Inform the user.
241
- this.log.debug("%s: Beginning a HomeKit Secure Video recording event.", this.name());
240
+ this.log.debug("Beginning a HomeKit Secure Video recording event.");
242
241
  return true;
243
242
  }
244
243
  // Stop transmitting the HomeKit hub our timeshifted fMP4 stream.
245
- stopTransmitting(reason) {
246
- var _a;
247
- const device = this.accessory.context.device;
244
+ async stopTransmitting(reason) {
248
245
  // We're done transmitting, so we can go back to maintaining our timeshift buffer for HomeKit.
249
- if (this.nvr.optionEnabled(device, "Video.HKSV.TimeshiftBuffer")) {
250
- void this.timeshift.transmitStream(false);
246
+ if (this.protectCamera.hints.timeshift) {
247
+ this.timeshift.stopTransmitting();
251
248
  }
249
+ let ffmpegError = false;
252
250
  // Kill any FFmpeg sessions.
253
251
  if (this.ffmpegStream) {
254
- this.ffmpegStream.stop();
252
+ this.ffmpegStream.stop(((reason !== undefined) && (reason !== 0 /* HDSProtocolSpecificErrorReason.NORMAL */)) ? false : undefined);
253
+ ffmpegError = this.ffmpegStream.hasError;
255
254
  this.ffmpegStream = null;
256
255
  }
257
256
  this.isTransmitting = false;
@@ -269,10 +268,9 @@ class ProtectRecordingDelegate {
269
268
  // Calculate approximately how many seconds we've recorded. We have more accuracy in timeshifted segments, so we'll use the more
270
269
  // accurate statistics when we can. Otherwise, we use the number of segments transmitted to HomeKit as a close proxy.
271
270
  const recordedSeconds = this.timeshiftedSegments ?
272
- ((this.timeshiftedSegments * this.timeshift.segmentLength) / 1000) : (this.transmittedSegments * ((_a = this.rtspEntry) === null || _a === void 0 ? void 0 : _a.channel.idrInterval));
271
+ ((this.timeshiftedSegments * this.timeshift.segmentLength) / 1000) : (this.transmittedSegments * this.rtspEntry?.channel.idrInterval);
273
272
  let recordedTime = "";
274
- // Create a nicely formatted string for end users. Yes, the author recognizes this isn't
275
- // essential, but it does bring a smile to their face.
273
+ // Create a nicely formatted string for end users. Yes, the author recognizes this isn't essential, but it does bring a smile to their face.
276
274
  if (recordedSeconds < 1) {
277
275
  recordedTime = recordedSeconds.toString();
278
276
  }
@@ -285,13 +283,13 @@ class ProtectRecordingDelegate {
285
283
  const minutes = Math.floor((recordedSeconds % 3600) / 60);
286
284
  const seconds = Math.floor((recordedSeconds % 3600) % 60);
287
285
  // Build the string.
288
- if (hours > 10) {
286
+ if (hours > 9) {
289
287
  recordedTime = hours.toString() + ":";
290
288
  }
291
289
  else if (hours > 0) {
292
290
  recordedTime = "0" + hours.toString() + ":";
293
291
  }
294
- if (minutes > 10) {
292
+ if (minutes > 9) {
295
293
  recordedTime += minutes.toString() + ":";
296
294
  }
297
295
  else if (minutes > 0) {
@@ -317,12 +315,11 @@ class ProtectRecordingDelegate {
317
315
  break;
318
316
  }
319
317
  // Inform the user if they've enabled logging. We log HKSV events by default, for now.
320
- if (this.nvr.optionEnabled(device, "Log.HKSV") ||
321
- this.nvr.optionEnabled(device, "Log.Motion", false)) {
322
- this.log.info("%s: HomeKit Secure Video has recorded %s %s %s motion event.", this.name(), this.timeshiftedSegments ? "a" : "an approximately", recordedTime, timeUnit);
318
+ if (this.protectCamera.hints.logHksv || this.protectCamera.hints.logMotion) {
319
+ this.log.info("HomeKit Secure Video has recorded %s %s %s motion event.", this.timeshiftedSegments ? "a" : "an approximately", recordedTime, timeUnit);
323
320
  }
324
321
  }
325
- // If we have a reason for stopping defined, and it's noteworthy, inform the user.
322
+ // Let's figure out the reason why we're stopping, if we have one, and it's noteworthy.
326
323
  let reasonDescription;
327
324
  switch (reason) {
328
325
  case 3 /* HDSProtocolSpecificErrorReason.CANCELLED */:
@@ -337,19 +334,26 @@ class ProtectRecordingDelegate {
337
334
  default:
338
335
  break;
339
336
  }
337
+ // Inform the user when things stopped unexpectedly, and reset the timeshift buffer for good measure.
340
338
  if ((reason !== undefined) && (reason !== 0 /* HDSProtocolSpecificErrorReason.NORMAL */)) {
341
- this.log.error("%s: HomeKit Secure Video event recording ended abnormally: %s", this.name(), reasonDescription);
339
+ this.log.error("HomeKit Secure Video event recording ended early: %s", reasonDescription);
340
+ if (this.protectCamera.hints.timeshift && ffmpegError) {
341
+ await this.restartTimeshifting();
342
+ }
342
343
  }
343
344
  }
345
+ // Restart timeshifting for a camera.
346
+ async restartTimeshifting() {
347
+ this.timeshift.stop();
348
+ await this.configureTimeshifting();
349
+ }
344
350
  // Return our HomeKit Secure Video recording state. This effectively tells us if HKSV has been configured and is on.
345
351
  get isRecording() {
346
352
  return this._isRecording;
347
353
  }
348
354
  // Return our current HomeKit Secure Video recording configuration.
349
355
  get recordingConfiguration() {
350
- var _a;
351
- return (_a = this.recordingConfig) !== null && _a !== void 0 ? _a : null;
356
+ return this.recordingConfig ?? null;
352
357
  }
353
358
  }
354
- exports.ProtectRecordingDelegate = ProtectRecordingDelegate;
355
359
  //# sourceMappingURL=protect-record.js.map
@@ -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,29 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { EventEmitter } from "node:events";
4
+ import { ProtectStreamingDelegate } from "./protect-stream.js";
5
+ export declare class RtpDemuxer extends EventEmitter {
6
+ private delegate;
7
+ private heartbeatTimer;
8
+ private heartbeatMsg;
9
+ private _isRunning;
10
+ private log;
11
+ private inputPort;
12
+ readonly socket: import("dgram").Socket;
13
+ constructor(streamingDelegate: ProtectStreamingDelegate, ipFamily: ("ipv4" | "ipv6"), inputPort: number, rtcpPort: number, rtpPort: number);
14
+ private heartbeat;
15
+ close(): void;
16
+ private getPayloadType;
17
+ private isRtpMessage;
18
+ get isRunning(): boolean;
19
+ }
20
+ export declare class RtpPortAllocator {
21
+ private portsInUse;
22
+ constructor();
23
+ private getPort;
24
+ reservePort(ipFamily?: ("ipv4" | "ipv6"), portCount?: (1 | 2), attempts?: number): Promise<number>;
25
+ freePort(port: number): void;
26
+ }
27
+ export declare class RtpUtils {
28
+ static reservePort(ipFamily?: ("ipv4" | "ipv6"), portCount?: (1 | 2), attempts?: number): Promise<number>;
29
+ }