homebridge-unifi-protect 5.1.1 → 5.3.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.
- package/README.md +4 -1
- package/config.schema.json +7 -0
- package/dist/protect-accessory.js +11 -9
- package/dist/protect-accessory.js.map +1 -1
- package/dist/protect-camera.js +69 -5
- package/dist/protect-camera.js.map +1 -1
- package/dist/protect-ffmpeg-record.js +200 -0
- package/dist/protect-ffmpeg-record.js.map +1 -0
- package/dist/protect-ffmpeg-stream.js +80 -0
- package/dist/protect-ffmpeg-stream.js.map +1 -0
- package/dist/protect-ffmpeg.js +104 -328
- package/dist/protect-ffmpeg.js.map +1 -1
- package/dist/protect-nvr-events.js +17 -21
- package/dist/protect-nvr-events.js.map +1 -1
- package/dist/protect-platform.js.map +1 -1
- package/dist/protect-record.js +72 -18
- package/dist/protect-record.js.map +1 -1
- package/dist/protect-stream.js +38 -20
- package/dist/protect-stream.js.map +1 -1
- package/dist/protect-timeshift.js +37 -4
- package/dist/protect-timeshift.js.map +1 -1
- package/dist/settings.js +2 -2
- package/package.json +2 -3
package/README.md
CHANGED
|
@@ -25,7 +25,9 @@ For the more technically inclined - this plugin has continued to pioneer the Hom
|
|
|
25
25
|
### Features
|
|
26
26
|
- ***Easy* configuration - all you need is your UniFi Protect controller IP address, username, and password to get started.** The defaults work for the vast majority of users. When you want more, there are [advanced options](https://github.com/hjdhjd/homebridge-unifi-protect/blob/master/docs/AdvancedOptions.md) you can play with, if you choose.
|
|
27
27
|
|
|
28
|
-
- **Full HomeKit
|
|
28
|
+
- **Full HomeKit support for the UniFi Protect ecosystem.** All generally available UniFi Protect devices are supported, including cameras, doorbells, lights, sensors, and ViewPorts.
|
|
29
|
+
|
|
30
|
+
- **[Complete HomeKit Secure Video support for all UniFi Protect cameras.](https://github.com/hjdhjd/homebridge-unifi-protect/blob/master/docs/HomeKitSecureVideo.md)** Complete HomeKit Secure Video support, without the need for additional plugins or software beyond FFmpeg. Another community first. We weren't the first to do HKSV, but we are the first to do it seamlessly without the need for additional tools to get a complete solution.
|
|
29
31
|
|
|
30
32
|
- **Blazing fast video streaming.** Video streaming from HomeKit will start within in 1-2 seconds for cameras, in most cases. I've spent the time to optimize the video streaming experience to ensure it feels very responsive, and *just works*.
|
|
31
33
|
|
|
@@ -63,6 +65,7 @@ I hope to continue to work on this one to get AEC working for two-way audio. [Yo
|
|
|
63
65
|
* [Feature Options](https://github.com/hjdhjd/homebridge-unifi-protect/blob/master/docs/FeatureOptions.md): granular options to allow you to set the camera quality individually, show or hide specific cameras, controllers, and more.
|
|
64
66
|
* [Audio Options](https://github.com/hjdhjd/homebridge-unifi-protect/blob/master/docs/AudioOptions.md): options to further tailor how audio is handled from Protect, such as background noise reduction.
|
|
65
67
|
* [Doorbells](https://github.com/hjdhjd/homebridge-unifi-protect/blob/master/docs/Doorbell.md): how UniFi Protect doorbell support works in this plugin, and how to use all the available features including doorbell messages.
|
|
68
|
+
* [HomeKit Secure Video](https://github.com/hjdhjd/homebridge-unifi-protect/blob/master/docs/HomeKitSecureVideo.md): how HomeKit Secure Video support works in this plugin with UniFi Protect.
|
|
66
69
|
* [Liveview Scenes](https://github.com/hjdhjd/homebridge-unifi-protect/blob/master/docs/Liveviews.md): use the UniFi Protect liveviews feature (available in the UniFi Protect controller webUI) to create motion-detection scenes.
|
|
67
70
|
* [MQTT](https://github.com/hjdhjd/homebridge-unifi-protect/blob/master/docs/MQTT.md): how to configure MQTT support.
|
|
68
71
|
* [Advanced Configuration](https://github.com/hjdhjd/homebridge-unifi-protect/blob/master/docs/AdvancedOptions.md): complete list of configuration options available in this plugin.
|
package/config.schema.json
CHANGED
|
@@ -113,6 +113,7 @@
|
|
|
113
113
|
},
|
|
114
114
|
|
|
115
115
|
"name": {
|
|
116
|
+
|
|
116
117
|
"type": "string",
|
|
117
118
|
"title": "Plugin Name",
|
|
118
119
|
"required": true,
|
|
@@ -121,6 +122,7 @@
|
|
|
121
122
|
},
|
|
122
123
|
|
|
123
124
|
"options": {
|
|
125
|
+
|
|
124
126
|
"type": "array",
|
|
125
127
|
"title": "Feature Options",
|
|
126
128
|
|
|
@@ -134,6 +136,7 @@
|
|
|
134
136
|
},
|
|
135
137
|
|
|
136
138
|
"motionDuration": {
|
|
139
|
+
|
|
137
140
|
"type": "integer",
|
|
138
141
|
"title": "Motion Event Duration (seconds)",
|
|
139
142
|
"required": false,
|
|
@@ -144,6 +147,7 @@
|
|
|
144
147
|
},
|
|
145
148
|
|
|
146
149
|
"ringDuration": {
|
|
150
|
+
|
|
147
151
|
"type": "integer",
|
|
148
152
|
"title": "Ring Event Duration (seconds)",
|
|
149
153
|
"required": false,
|
|
@@ -154,6 +158,7 @@
|
|
|
154
158
|
},
|
|
155
159
|
|
|
156
160
|
"verboseFfmpeg": {
|
|
161
|
+
|
|
157
162
|
"type": "boolean",
|
|
158
163
|
"title": "Verbose FFmpeg Logging",
|
|
159
164
|
"required": false,
|
|
@@ -161,6 +166,7 @@
|
|
|
161
166
|
},
|
|
162
167
|
|
|
163
168
|
"videoEncoder": {
|
|
169
|
+
|
|
164
170
|
"type": "string",
|
|
165
171
|
"title": "Video Encoder",
|
|
166
172
|
"required": false,
|
|
@@ -169,6 +175,7 @@
|
|
|
169
175
|
},
|
|
170
176
|
|
|
171
177
|
"videoProcessor": {
|
|
178
|
+
|
|
172
179
|
"type": "string",
|
|
173
180
|
"title": "Video Processor",
|
|
174
181
|
"required": false,
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ProtectAccessory = exports.ProtectBase = exports.PROTECT_SWITCH_MOTION_TRIGGER = exports.PROTECT_SWITCH_MOTION_SENSOR = exports.PROTECT_SWITCH_DOORBELL_TRIGGER = exports.PROTECT_CONTACT_SENSOR_ALARM_SOUND = exports.PROTECT_CONTACT_SENSOR = exports.PROTECT_CONTACT_MOTION_SMARTDETECT = void 0;
|
|
3
|
+
exports.ProtectAccessory = exports.ProtectBase = exports.PROTECT_SWITCH_MOTION_TRIGGER = exports.PROTECT_SWITCH_MOTION_SENSOR = exports.PROTECT_SWITCH_HKSV_RECORDING = exports.PROTECT_SWITCH_DOORBELL_TRIGGER = exports.PROTECT_CONTACT_SENSOR_ALARM_SOUND = exports.PROTECT_CONTACT_SENSOR = exports.PROTECT_CONTACT_MOTION_SMARTDETECT = void 0;
|
|
4
4
|
// Manage our contact sensor types.
|
|
5
5
|
exports.PROTECT_CONTACT_MOTION_SMARTDETECT = "ContactMotionSmartDetect";
|
|
6
6
|
exports.PROTECT_CONTACT_SENSOR = "ContactSensor";
|
|
7
7
|
exports.PROTECT_CONTACT_SENSOR_ALARM_SOUND = "ContactAlarmSound";
|
|
8
8
|
// Manage our switch types.
|
|
9
9
|
exports.PROTECT_SWITCH_DOORBELL_TRIGGER = "DoorbellTrigger";
|
|
10
|
+
exports.PROTECT_SWITCH_HKSV_RECORDING = "HKSVRecordingSwitch";
|
|
10
11
|
exports.PROTECT_SWITCH_MOTION_SENSOR = "MotionSensorSwitch";
|
|
11
12
|
exports.PROTECT_SWITCH_MOTION_TRIGGER = "MotionSensorTrigger";
|
|
12
13
|
class ProtectBase {
|
|
@@ -75,31 +76,31 @@ class ProtectAccessory extends ProtectBase {
|
|
|
75
76
|
// Configure the Protect motion sensor for HomeKit.
|
|
76
77
|
configureMotionSensor(isEnabled = true) {
|
|
77
78
|
var _a, _b;
|
|
78
|
-
const accessory = this.accessory;
|
|
79
|
-
const hap = this.hap;
|
|
80
79
|
// Find the motion sensor service, if it exists.
|
|
81
|
-
let motionService = accessory.getService(hap.Service.MotionSensor);
|
|
80
|
+
let motionService = this.accessory.getService(this.hap.Service.MotionSensor);
|
|
82
81
|
// Have we disabled motion sensors?
|
|
83
|
-
if (!isEnabled || !((_a = this.nvr) === null || _a === void 0 ? void 0 : _a.optionEnabled(accessory.context.device, "Motion.Sensor"))) {
|
|
82
|
+
if (!isEnabled || !((_a = this.nvr) === null || _a === void 0 ? void 0 : _a.optionEnabled(this.accessory.context.device, "Motion.Sensor"))) {
|
|
84
83
|
if (motionService) {
|
|
85
|
-
accessory.removeService(motionService);
|
|
86
|
-
(_b = this.nvr.mqtt) === null || _b === void 0 ? void 0 : _b.unsubscribe(accessory, "motion/trigger");
|
|
84
|
+
this.accessory.removeService(motionService);
|
|
85
|
+
(_b = this.nvr.mqtt) === null || _b === void 0 ? void 0 : _b.unsubscribe(this.accessory, "motion/trigger");
|
|
87
86
|
this.log.info("%s: Disabling motion sensor.", this.name());
|
|
88
87
|
}
|
|
89
88
|
return false;
|
|
90
89
|
}
|
|
91
90
|
// The motion sensor has already been configured.
|
|
92
91
|
if (motionService) {
|
|
92
|
+
// Initialize the state of the motion sensor.
|
|
93
|
+
motionService.updateCharacteristic(this.hap.Characteristic.MotionDetected, false);
|
|
93
94
|
this.configureMqttMotionTrigger();
|
|
94
95
|
return true;
|
|
95
96
|
}
|
|
96
97
|
// We don't have it, add the motion sensor to the camera.
|
|
97
|
-
motionService = new hap.Service.MotionSensor(accessory.displayName);
|
|
98
|
+
motionService = new this.hap.Service.MotionSensor(this.accessory.displayName);
|
|
98
99
|
if (!motionService) {
|
|
99
100
|
this.log.error("%s: Unable to add motion sensor.", this.name());
|
|
100
101
|
return false;
|
|
101
102
|
}
|
|
102
|
-
accessory.addService(motionService);
|
|
103
|
+
this.accessory.addService(motionService);
|
|
103
104
|
this.configureMqttMotionTrigger();
|
|
104
105
|
this.log.info("%s: Enabling motion sensor.", this.name());
|
|
105
106
|
return true;
|
|
@@ -165,6 +166,7 @@ class ProtectAccessory extends ProtectBase {
|
|
|
165
166
|
[
|
|
166
167
|
exports.PROTECT_CONTACT_MOTION_SMARTDETECT.toUpperCase(),
|
|
167
168
|
exports.PROTECT_SWITCH_DOORBELL_TRIGGER.toUpperCase(),
|
|
169
|
+
exports.PROTECT_SWITCH_HKSV_RECORDING.toUpperCase(),
|
|
168
170
|
exports.PROTECT_SWITCH_MOTION_SENSOR.toUpperCase(),
|
|
169
171
|
exports.PROTECT_SWITCH_MOTION_TRIGGER.toUpperCase(),
|
|
170
172
|
exports.PROTECT_CONTACT_SENSOR.toUpperCase(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protect-accessory.js","sourceRoot":"","sources":["../src/protect-accessory.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"protect-accessory.js","sourceRoot":"","sources":["../src/protect-accessory.ts"],"names":[],"mappings":"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"}
|
package/dist/protect-camera.js
CHANGED
|
@@ -11,7 +11,7 @@ const protect_stream_1 = require("./protect-stream");
|
|
|
11
11
|
class ProtectCamera extends protect_accessory_1.ProtectAccessory {
|
|
12
12
|
// Configure a camera accessory for HomeKit.
|
|
13
13
|
async configureDevice() {
|
|
14
|
-
var _a, _b;
|
|
14
|
+
var _a, _b, _c;
|
|
15
15
|
this.isDoorbellConfigured = false;
|
|
16
16
|
this.isHksv = false;
|
|
17
17
|
this.isRinging = false;
|
|
@@ -20,19 +20,30 @@ class ProtectCamera extends protect_accessory_1.ProtectAccessory {
|
|
|
20
20
|
this.smartDetectTypes = [];
|
|
21
21
|
// Save the device object before we wipeout the context.
|
|
22
22
|
const device = this.accessory.context.device;
|
|
23
|
-
// Default
|
|
23
|
+
// Default to enabling camera motion detection.
|
|
24
24
|
let detectMotion = true;
|
|
25
25
|
// Save the motion sensor switch state before we wipeout the context.
|
|
26
26
|
if (this.accessory.context.detectMotion !== undefined) {
|
|
27
27
|
detectMotion = this.accessory.context.detectMotion;
|
|
28
28
|
}
|
|
29
|
+
// Default to enabling HKSV recording.
|
|
30
|
+
let hksvRecording = true;
|
|
31
|
+
// Save the HKSV recording switch state before we wipeout the context.
|
|
32
|
+
if (this.accessory.context.hksvRecording !== undefined) {
|
|
33
|
+
hksvRecording = this.accessory.context.hksvRecording;
|
|
34
|
+
}
|
|
29
35
|
// Clean out the context object in case it's been polluted somehow.
|
|
30
36
|
this.accessory.context = {};
|
|
31
37
|
this.accessory.context.device = device;
|
|
32
38
|
this.accessory.context.nvr = (_a = this.nvr.nvrApi.bootstrap) === null || _a === void 0 ? void 0 : _a.nvr.mac;
|
|
33
39
|
this.accessory.context.detectMotion = detectMotion;
|
|
40
|
+
this.accessory.context.hksvRecording = hksvRecording;
|
|
41
|
+
// Inform the user if we have enabled dynamic bitrates.
|
|
42
|
+
if ((_b = this.nvr) === null || _b === void 0 ? void 0 : _b.optionEnabled(this.accessory.context.device, "Video.Dynamic.Bitrates", false)) {
|
|
43
|
+
this.log.info("%s: Dynamic adjustment of bitrates using the UniFi Protect controller enabled.", this.name());
|
|
44
|
+
}
|
|
34
45
|
// If the camera supports it, check to see if we have smart motion events enabled.
|
|
35
|
-
if (device.featureFlags.hasSmartDetect && ((
|
|
46
|
+
if (device.featureFlags.hasSmartDetect && ((_c = this.nvr) === null || _c === void 0 ? void 0 : _c.optionEnabled(device, "Motion.SmartDetect", false))) {
|
|
36
47
|
// We deal with smart motion detection options here and save them on the ProtectCamera instance because
|
|
37
48
|
// we're trying to optimize and reduce the number of feature option lookups we do in realtime, when possible.
|
|
38
49
|
// Reading a stream of constant events and having to perform a string comparison through a list of options multiple
|
|
@@ -56,8 +67,9 @@ class ProtectCamera extends protect_accessory_1.ProtectAccessory {
|
|
|
56
67
|
this.configureMotionSmartSensor();
|
|
57
68
|
// Configure two-way audio support.
|
|
58
69
|
this.configureTwoWayAudio();
|
|
59
|
-
// Configure HomeKit Secure Video.
|
|
70
|
+
// Configure HomeKit Secure Video suport.
|
|
60
71
|
this.configureHksv();
|
|
72
|
+
this.configureHksvRecordingSwitch();
|
|
61
73
|
// Configure our video stream.
|
|
62
74
|
await this.configureVideoStream();
|
|
63
75
|
// Configure our camera details.
|
|
@@ -468,7 +480,7 @@ class ProtectCamera extends protect_accessory_1.ProtectAccessory {
|
|
|
468
480
|
}
|
|
469
481
|
// HomeKit Secure Video support requires an enabled motion sensor. If one isn't enabled, we're done.
|
|
470
482
|
if (!((_b = this.nvr) === null || _b === void 0 ? void 0 : _b.optionEnabled(device, "Motion.Sensor"))) {
|
|
471
|
-
this.log.info("%s: Disabling HomeKit Secure Video support. You must enable motion sensor support in order to use HomeKit Secure Video.");
|
|
483
|
+
this.log.info("%s: Disabling HomeKit Secure Video support. You must enable motion sensor support in order to use HomeKit Secure Video.", this.name());
|
|
472
484
|
return false;
|
|
473
485
|
}
|
|
474
486
|
this.isHksv = true;
|
|
@@ -482,6 +494,45 @@ class ProtectCamera extends protect_accessory_1.ProtectAccessory {
|
|
|
482
494
|
}
|
|
483
495
|
return true;
|
|
484
496
|
}
|
|
497
|
+
// Configure a switch to manually enable or disable HKSV recording for a camera.
|
|
498
|
+
configureHksvRecordingSwitch() {
|
|
499
|
+
var _a, _b, _c;
|
|
500
|
+
// Find the switch service, if it exists.
|
|
501
|
+
let switchService = this.accessory.getServiceById(this.hap.Service.Switch, protect_accessory_1.PROTECT_SWITCH_HKSV_RECORDING);
|
|
502
|
+
// If we don't have HKSV or the HKSV recording switch, disable the switch and we're done.
|
|
503
|
+
if (!((_a = this.nvr) === null || _a === void 0 ? void 0 : _a.optionEnabled(this.accessory.context.device, "Video.HKSV")) ||
|
|
504
|
+
!((_b = this.nvr) === null || _b === void 0 ? void 0 : _b.optionEnabled(this.accessory.context.device, "Video.HKSV.Recording.Switch", false))) {
|
|
505
|
+
if (switchService) {
|
|
506
|
+
this.accessory.removeService(switchService);
|
|
507
|
+
}
|
|
508
|
+
// We want to default this back to recording whenever we disable the recording switch.
|
|
509
|
+
this.accessory.context.hksvRecording;
|
|
510
|
+
return false;
|
|
511
|
+
}
|
|
512
|
+
// Add the switch to the camera, if needed.
|
|
513
|
+
if (!switchService) {
|
|
514
|
+
switchService = new this.hap.Service.Switch(this.accessory.displayName + " HKSV Recording", protect_accessory_1.PROTECT_SWITCH_HKSV_RECORDING);
|
|
515
|
+
if (!switchService) {
|
|
516
|
+
this.log.error("%s: Unable to add the HomeKit Secure Video recording switch.", this.name());
|
|
517
|
+
return false;
|
|
518
|
+
}
|
|
519
|
+
this.accessory.addService(switchService);
|
|
520
|
+
}
|
|
521
|
+
// Activate or deactivate HKSV recording.
|
|
522
|
+
(_c = switchService
|
|
523
|
+
.getCharacteristic(this.hap.Characteristic.On)) === null || _c === void 0 ? void 0 : _c.onGet(() => {
|
|
524
|
+
return this.accessory.context.hksvRecording;
|
|
525
|
+
}).onSet((value) => {
|
|
526
|
+
if (this.accessory.context.hksvRecording !== value) {
|
|
527
|
+
this.log.info("%s: HomeKit Secure Video event recording has been %s.", this.name(), value === true ? "enabled" : "disabled");
|
|
528
|
+
}
|
|
529
|
+
this.accessory.context.hksvRecording = value === true;
|
|
530
|
+
});
|
|
531
|
+
// Initialize the switch.
|
|
532
|
+
switchService.updateCharacteristic(this.hap.Characteristic.On, this.accessory.context.hksvRecording);
|
|
533
|
+
this.log.info("%s: Enabling HomeKit Secure Video recording switch.", this.name());
|
|
534
|
+
return true;
|
|
535
|
+
}
|
|
485
536
|
// Configure MQTT capabilities of this camera.
|
|
486
537
|
configureMqtt() {
|
|
487
538
|
var _a, _b;
|
|
@@ -531,8 +582,21 @@ class ProtectCamera extends protect_accessory_1.ProtectAccessory {
|
|
|
531
582
|
}
|
|
532
583
|
return true;
|
|
533
584
|
}
|
|
585
|
+
getBitrate(channelId) {
|
|
586
|
+
var _a;
|
|
587
|
+
// Grab the device JSON.
|
|
588
|
+
const device = this.accessory.context.device;
|
|
589
|
+
// Find the right channel.
|
|
590
|
+
const channel = device.channels.find(x => x.id === channelId);
|
|
591
|
+
return (_a = channel === null || channel === void 0 ? void 0 : channel.bitrate) !== null && _a !== void 0 ? _a : -1;
|
|
592
|
+
}
|
|
534
593
|
// Set the bitrate for a specific camera channel.
|
|
535
594
|
async setBitrate(channelId, value) {
|
|
595
|
+
var _a;
|
|
596
|
+
// If we've disabled the ability to set bitrates dynamically, silently fail.
|
|
597
|
+
if (!((_a = this.nvr) === null || _a === void 0 ? void 0 : _a.optionEnabled(this.accessory.context.device, "Video.Dynamic.Bitrates", false))) {
|
|
598
|
+
return true;
|
|
599
|
+
}
|
|
536
600
|
// Grab the device JSON.
|
|
537
601
|
const device = this.accessory.context.device;
|
|
538
602
|
// Find the right channel.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protect-camera.js","sourceRoot":"","sources":["../src/protect-camera.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"protect-camera.js","sourceRoot":"","sources":["../src/protect-camera.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FfmpegRecordingProcess = void 0;
|
|
4
|
+
const protect_ffmpeg_1 = require("./protect-ffmpeg");
|
|
5
|
+
// FFmpeg HomeKit Streaming Video recording process management.
|
|
6
|
+
class FfmpegRecordingProcess extends protect_ffmpeg_1.FfmpegProcess {
|
|
7
|
+
// Create a new FFmpeg process instance.
|
|
8
|
+
constructor(device, recordingConfig, isAudioActive) {
|
|
9
|
+
// Initialize our parent.
|
|
10
|
+
super(device);
|
|
11
|
+
// Initialize our recording buffer.
|
|
12
|
+
this.recordingBuffer = [];
|
|
13
|
+
// Determine which H.264 profile HomeKit is expecting from us.
|
|
14
|
+
const requestedProfile = (recordingConfig.videoCodec.parameters.profile === 2 /* HIGH */) ? "high"
|
|
15
|
+
: (recordingConfig.videoCodec.parameters.profile === 1 /* MAIN */) ? "main" : "baseline";
|
|
16
|
+
const requestedLevel = (recordingConfig.videoCodec.parameters.level === 2 /* LEVEL4_0 */) ? "4.0"
|
|
17
|
+
: (recordingConfig.videoCodec.parameters.level === 1 /* LEVEL3_2 */) ? "3.2" : "3.1";
|
|
18
|
+
// Configure our video parameters for transcoding:
|
|
19
|
+
//
|
|
20
|
+
// -hide_banner: Suppress printing the startup banner in FFmpeg.
|
|
21
|
+
// -f mp4 Tell ffmpeg that it should expect an MP4-encoded input stream.
|
|
22
|
+
// -i pipe:0 Use standard input to get video data.
|
|
23
|
+
// -map 0:v Selects the first available video track from the stream. Protect actually maps audio
|
|
24
|
+
// and video tracks in opposite locations from where FFmpeg typically expects them. This
|
|
25
|
+
// setting is a more general solution than naming the track locations directly in case
|
|
26
|
+
// Protect changes this in the future.
|
|
27
|
+
// -vcodec libx264 Copy the stream withour reencoding it.
|
|
28
|
+
// -pix_fmt yuvj420p Use the yuvj420p pixel format, which is what Protect uses.
|
|
29
|
+
// -profile:v high Use the H.264 high profile when encoding, which provides for better stream quality and size efficiency.
|
|
30
|
+
// -preset veryfast Use the veryfast encoding preset in libx264, which provides a good balance of encoding speed and quality.
|
|
31
|
+
// -b:v bitrate The average bitrate to use for this stream. This is specified by HomeKit Secure Video.
|
|
32
|
+
// -bufsize size This is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
33
|
+
// -maxrate bitrate The maximum bitrate tolerance, used with -bufsize. We set this to effectively create a constant bitrate.
|
|
34
|
+
// -force_key_frames expr:gte(t, n_forced * 4) Force a specific keyframe interval in the fMP4 stream we are generating.
|
|
35
|
+
// -fflags +genpts Generate a presentation timestamp (PTS) if there's a valid decoding timestamp (DTS) and PTS is missing.
|
|
36
|
+
// -reset_timestamps 1 Reset timestamps at the beginning of each segment to make the generated segments easier to consume.
|
|
37
|
+
// -movflags frag_keyframe+empty_moov+default_base_moof Start a new fragment at each keyframe, send the MOOV box at the beginning of the stream, and avoid
|
|
38
|
+
// writing absolute byte positions for the segments we send.
|
|
39
|
+
this.commandLineArgs = [
|
|
40
|
+
"-hide_banner",
|
|
41
|
+
"-f", "mp4",
|
|
42
|
+
"-i", "pipe:0",
|
|
43
|
+
"-map", "0:v",
|
|
44
|
+
"-vcodec", this.protectCamera.stream.videoEncoder || "libx264",
|
|
45
|
+
"-pix_fmt", "yuvj420p",
|
|
46
|
+
"-profile:v", requestedProfile,
|
|
47
|
+
"-level:v", requestedLevel,
|
|
48
|
+
"-preset", "veryfast",
|
|
49
|
+
"-b:v", recordingConfig.videoCodec.parameters.bitRate.toString() + "k",
|
|
50
|
+
"-bufsize", (2 * recordingConfig.videoCodec.parameters.bitRate).toString() + "k",
|
|
51
|
+
"-maxrate", recordingConfig.videoCodec.parameters.bitRate.toString() + "k",
|
|
52
|
+
"-force_key_frames", "expr:gte(t, n_forced * " + (recordingConfig.videoCodec.parameters.iFrameInterval / 1000).toString() + ")",
|
|
53
|
+
"-fflags", "+genpts",
|
|
54
|
+
"-reset_timestamps", "1",
|
|
55
|
+
"-movflags", "frag_keyframe+empty_moov+default_base_moof"
|
|
56
|
+
];
|
|
57
|
+
if (isAudioActive) {
|
|
58
|
+
// Configure the audio portion of the command line. Options we use are:
|
|
59
|
+
//
|
|
60
|
+
// -map 0:a Selects the first available audio track from the stream. Protect actually maps audio
|
|
61
|
+
// and video tracks in opposite locations from where FFmpeg typically expects them. This
|
|
62
|
+
// setting is a more general solution than naming the track locations directly in case
|
|
63
|
+
// Protect changes this in the future.
|
|
64
|
+
// -acodec copy Copy the stream withour reencoding it.
|
|
65
|
+
this.commandLineArgs.push("-map", "0:a", "-acodec", "copy");
|
|
66
|
+
}
|
|
67
|
+
// Configure our video parameters for outputting our final stream:
|
|
68
|
+
//
|
|
69
|
+
// -f mp4 Tell ffmpeg that it should create an MP4-encoded output stream.
|
|
70
|
+
// pipe:1 Output the stream to standard output.
|
|
71
|
+
this.commandLineArgs.push("-f", "mp4", "pipe:1");
|
|
72
|
+
// Additional logging, but only if we're debugging.
|
|
73
|
+
if (device.platform.verboseFfmpeg) {
|
|
74
|
+
this.commandLineArgs.unshift("-loglevel", "level+verbose");
|
|
75
|
+
}
|
|
76
|
+
// Start the FFmpeg session.
|
|
77
|
+
void this.start();
|
|
78
|
+
}
|
|
79
|
+
// Prepare and start our FFmpeg process.
|
|
80
|
+
configureProcess() {
|
|
81
|
+
var _a, _b, _c;
|
|
82
|
+
let dataListener;
|
|
83
|
+
// Call our parent to get started.
|
|
84
|
+
super.configureProcess();
|
|
85
|
+
// Initialize our variables that we need to process incoming FFmpeg packets.
|
|
86
|
+
let header = Buffer.alloc(0);
|
|
87
|
+
let bufferRemaining = Buffer.alloc(0);
|
|
88
|
+
let dataLength = 0;
|
|
89
|
+
let type = "";
|
|
90
|
+
// Process FFmpeg output and parse out the fMP4 stream it's generating for HomeKit Secure Video.
|
|
91
|
+
(_b = (_a = this.process) === null || _a === void 0 ? void 0 : _a.stdout) === null || _b === void 0 ? void 0 : _b.on("data", dataListener = (buffer) => {
|
|
92
|
+
// If we have anything left from the last buffer we processed, prepend it to this buffer.
|
|
93
|
+
if (bufferRemaining.length > 0) {
|
|
94
|
+
buffer = Buffer.concat([bufferRemaining, buffer]);
|
|
95
|
+
bufferRemaining = Buffer.alloc(0);
|
|
96
|
+
}
|
|
97
|
+
let offset = 0;
|
|
98
|
+
// FFmpeg is outputting an fMP4 stream that's suitable for HomeKit Secure Video. However, we can't just
|
|
99
|
+
// pass this stream directly back to HomeKit since we're using a generator-based API to send packets back to
|
|
100
|
+
// HKSV. Here, we take on the task of parsing the fMP4 stream that's being generated and split it up into the
|
|
101
|
+
// MP4 boxes that HAP-NodeJS is ultimately expecting.
|
|
102
|
+
for (;;) {
|
|
103
|
+
let data;
|
|
104
|
+
// The MP4 container format is well-documented format that is based around the concept of boxes. A box (or atom as they
|
|
105
|
+
// used to be called), is at the center of the MP4 format. It's composed of an 8-byte header, followed by the data payload
|
|
106
|
+
// it carries.
|
|
107
|
+
// No existing header, let's start a new box.
|
|
108
|
+
if (!header.length) {
|
|
109
|
+
// Grab the header. The first four bytes represents the length of the entire box. Second four bytes represent the box type.
|
|
110
|
+
header = buffer.slice(0, 8);
|
|
111
|
+
// Now we retrieve the length of the box and subtract the length of the header to get the length of the data portion of the box.
|
|
112
|
+
dataLength = header.readUInt32BE(0) - 8;
|
|
113
|
+
// Get the type of the box. This is always a string and has a funky history to it that makes for an interesting read!
|
|
114
|
+
type = header.slice(4).toString();
|
|
115
|
+
// Finally, we get the data portion of the box.
|
|
116
|
+
data = buffer.slice(8, dataLength + 8);
|
|
117
|
+
offset = 8;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// Grab the data from our buffer.
|
|
121
|
+
data = buffer.slice(0, dataLength);
|
|
122
|
+
offset = 0;
|
|
123
|
+
}
|
|
124
|
+
// If we don't have enough data in this buffer, save what we have for the next buffer we see and append it there.
|
|
125
|
+
if (data.length < (dataLength - offset)) {
|
|
126
|
+
bufferRemaining = data;
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
// Add it to our queue to be eventually pushed out through our generator function.
|
|
130
|
+
this.recordingBuffer.push({ data: data, header: header, length: dataLength, type: type });
|
|
131
|
+
// Prepare to start a new box for the next buffer that we will be processing.
|
|
132
|
+
data = Buffer.alloc(0);
|
|
133
|
+
header = Buffer.alloc(0);
|
|
134
|
+
type = "";
|
|
135
|
+
// We've parsed an entire box, and there's no more data in this buffer to parse.
|
|
136
|
+
if (buffer.length === (offset + dataLength)) {
|
|
137
|
+
dataLength = 0;
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
// If there's anything left in the buffer, move us to the new box and let's keep iterating.
|
|
141
|
+
buffer = buffer.slice(offset + dataLength);
|
|
142
|
+
dataLength = 0;
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
// Make sure we cleanup our listeners when we're done.
|
|
146
|
+
(_c = this.process) === null || _c === void 0 ? void 0 : _c.once("exit", () => {
|
|
147
|
+
var _a, _b;
|
|
148
|
+
(_b = (_a = this.process) === null || _a === void 0 ? void 0 : _a.stdout) === null || _b === void 0 ? void 0 : _b.removeListener("data", dataListener);
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
// Generate complete segments from an FFmpeg output stream that HomeKit Secure Video can process.
|
|
152
|
+
async *segmentGenerator() {
|
|
153
|
+
let segment = [];
|
|
154
|
+
// Loop forever, generating either FTYP/MOOV box pairs or MOOF/MDAT box pairs for HomeKit Secure Video.
|
|
155
|
+
for (;;) {
|
|
156
|
+
// FFmpeg has finished it's output - we're done.
|
|
157
|
+
if (this.isEnded) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
// If we haven't seen any output from FFmpeg yet, sleep for a very short period of time to wait for it.
|
|
161
|
+
// You might think there should be a longer sleep interval here, given the typical HKSV-requested segment
|
|
162
|
+
// size, but since we have a several-second buffer that gets fed to FFmpeg on startup, FFmpeg is likely to
|
|
163
|
+
// generate output very quickly after startup.
|
|
164
|
+
if (!this.isStarted) {
|
|
165
|
+
// eslint-disable-next-line no-await-in-loop
|
|
166
|
+
await this.nvr.sleep(100);
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
// Grab the next fMP4 box from our buffer.
|
|
170
|
+
const box = this.recordingBuffer.shift();
|
|
171
|
+
// If the buffer is empty, sleep for a second. We sleep a longer interval here because the buffer is likely
|
|
172
|
+
// to populate no more than once a second, and in reality, more likely longer than that in most cases. Smaller
|
|
173
|
+
// boxes (e.g. MOOF) will be buffered faster than larger ones like MDAT that carry the bulk of the audio / video
|
|
174
|
+
// data.
|
|
175
|
+
if (!box) {
|
|
176
|
+
// eslint-disable-next-line no-await-in-loop
|
|
177
|
+
await this.nvr.sleep(1000);
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
// Queue up this fMP4 box to send back to HomeKit.
|
|
181
|
+
segment.push(box.header, box.data);
|
|
182
|
+
// What we want to send are two types of complete segments, made up of multiple MP4 boxes:
|
|
183
|
+
//
|
|
184
|
+
// - a complete MOOV box, usually with an accompanying FTYP box, that's sent at the very
|
|
185
|
+
// beginning of any valid fMP4 stream. HomeKit Secure Video looks for this before anything
|
|
186
|
+
// else.
|
|
187
|
+
//
|
|
188
|
+
// - a complete MOOF/MDAT pair. MOOF describes XXX and MDAT describes the actual audio and video
|
|
189
|
+
// data related to that segment.
|
|
190
|
+
//
|
|
191
|
+
// Once we see these, we combine all the segments in our queue to send back to HomeKit.
|
|
192
|
+
if ((box.type === "moov") || (box.type === "mdat")) {
|
|
193
|
+
yield Buffer.concat(segment);
|
|
194
|
+
segment = [];
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
exports.FfmpegRecordingProcess = FfmpegRecordingProcess;
|
|
200
|
+
//# sourceMappingURL=protect-ffmpeg-record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protect-ffmpeg-record.js","sourceRoot":"","sources":["../src/protect-ffmpeg-record.ts"],"names":[],"mappings":"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"}
|