hap-nodejs 0.10.0-beta.0 → 0.10.0-beta.12

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 (213) hide show
  1. package/@types/bonjour-hap.d.ts +4 -3
  2. package/@types/simple-plist.d.ts +2 -1
  3. package/README.md +1 -1
  4. package/dist/BridgedCore.js +7 -6
  5. package/dist/BridgedCore.js.map +1 -1
  6. package/dist/Core.js +14 -12
  7. package/dist/Core.js.map +1 -1
  8. package/dist/accessories/AirConditioner_accessory.js +9 -9
  9. package/dist/accessories/AirConditioner_accessory.js.map +1 -1
  10. package/dist/accessories/AppleTVRemote_accessory.js +17 -16
  11. package/dist/accessories/AppleTVRemote_accessory.js.map +1 -1
  12. package/dist/accessories/Camera_accessory.js +415 -36
  13. package/dist/accessories/Camera_accessory.js.map +1 -1
  14. package/dist/accessories/Fan_accessory.js +10 -15
  15. package/dist/accessories/Fan_accessory.js.map +1 -1
  16. package/dist/accessories/GarageDoorOpener_accessory.js +7 -8
  17. package/dist/accessories/GarageDoorOpener_accessory.js.map +1 -1
  18. package/dist/accessories/Light-AdaptiveLighting_accessory.js +3 -4
  19. package/dist/accessories/Light-AdaptiveLighting_accessory.js.map +1 -1
  20. package/dist/accessories/Light_accessory.js +23 -14
  21. package/dist/accessories/Light_accessory.js.map +1 -1
  22. package/dist/accessories/Lock_accessory.js +7 -8
  23. package/dist/accessories/Lock_accessory.js.map +1 -1
  24. package/dist/accessories/MotionSensor_accessory.js +5 -6
  25. package/dist/accessories/MotionSensor_accessory.js.map +1 -1
  26. package/dist/accessories/Outlet_accessory.js +5 -6
  27. package/dist/accessories/Outlet_accessory.js.map +1 -1
  28. package/dist/accessories/SmartSpeaker_accessory.js +6 -6
  29. package/dist/accessories/SmartSpeaker_accessory.js.map +1 -1
  30. package/dist/accessories/Sprinkler_accessory.js +12 -13
  31. package/dist/accessories/Sprinkler_accessory.js.map +1 -1
  32. package/dist/accessories/TV_accessory.js +4 -5
  33. package/dist/accessories/TV_accessory.js.map +1 -1
  34. package/dist/accessories/TemperatureSensor_accessory.js +5 -6
  35. package/dist/accessories/TemperatureSensor_accessory.js.map +1 -1
  36. package/dist/accessories/Wi-FiRouter_accessory.d.ts +1 -1
  37. package/dist/accessories/Wi-FiRouter_accessory.d.ts.map +1 -1
  38. package/dist/accessories/Wi-FiRouter_accessory.js +7 -8
  39. package/dist/accessories/Wi-FiRouter_accessory.js.map +1 -1
  40. package/dist/accessories/Wi-FiSatellite_accessory.d.ts +1 -1
  41. package/dist/accessories/Wi-FiSatellite_accessory.d.ts.map +1 -1
  42. package/dist/accessories/Wi-FiSatellite_accessory.js +6 -7
  43. package/dist/accessories/Wi-FiSatellite_accessory.js.map +1 -1
  44. package/dist/accessories/gstreamer-audioProducer.d.ts.map +1 -1
  45. package/dist/accessories/gstreamer-audioProducer.js +21 -22
  46. package/dist/accessories/gstreamer-audioProducer.js.map +1 -1
  47. package/dist/index.d.ts +27 -22
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +35 -24
  50. package/dist/index.js.map +1 -1
  51. package/dist/internal-types.d.ts +2 -0
  52. package/dist/internal-types.d.ts.map +1 -1
  53. package/dist/internal-types.js.map +1 -1
  54. package/dist/lib/Accessory.d.ts +38 -17
  55. package/dist/lib/Accessory.d.ts.map +1 -1
  56. package/dist/lib/Accessory.js +345 -273
  57. package/dist/lib/Accessory.js.map +1 -1
  58. package/dist/lib/AccessoryLoader.d.ts +10 -10
  59. package/dist/lib/AccessoryLoader.d.ts.map +1 -1
  60. package/dist/lib/AccessoryLoader.js +109 -99
  61. package/dist/lib/AccessoryLoader.js.map +1 -1
  62. package/dist/lib/Advertiser.d.ts +26 -6
  63. package/dist/lib/Advertiser.d.ts.map +1 -1
  64. package/dist/lib/Advertiser.js +242 -29
  65. package/dist/lib/Advertiser.js.map +1 -1
  66. package/dist/lib/Bridge.d.ts +1 -1
  67. package/dist/lib/Bridge.d.ts.map +1 -1
  68. package/dist/lib/Bridge.js +1 -1
  69. package/dist/lib/Bridge.js.map +1 -1
  70. package/dist/lib/Characteristic.d.ts +36 -23
  71. package/dist/lib/Characteristic.d.ts.map +1 -1
  72. package/dist/lib/Characteristic.js +148 -145
  73. package/dist/lib/Characteristic.js.map +1 -1
  74. package/dist/lib/HAPServer.d.ts +2 -2
  75. package/dist/lib/HAPServer.d.ts.map +1 -1
  76. package/dist/lib/HAPServer.js +43 -39
  77. package/dist/lib/HAPServer.js.map +1 -1
  78. package/dist/lib/Service.d.ts +8 -4
  79. package/dist/lib/Service.d.ts.map +1 -1
  80. package/dist/lib/Service.js +51 -47
  81. package/dist/lib/Service.js.map +1 -1
  82. package/dist/lib/camera/Camera.d.ts +2 -2
  83. package/dist/lib/camera/Camera.d.ts.map +1 -1
  84. package/dist/lib/camera/Camera.js +3 -3
  85. package/dist/lib/camera/Camera.js.map +1 -1
  86. package/dist/lib/camera/RTPProxy.d.ts +19 -19
  87. package/dist/lib/camera/RTPProxy.d.ts.map +1 -1
  88. package/dist/lib/camera/RTPProxy.js +230 -208
  89. package/dist/lib/camera/RTPProxy.js.map +1 -1
  90. package/dist/lib/camera/RTPStreamManagement.d.ts +46 -10
  91. package/dist/lib/camera/RTPStreamManagement.d.ts.map +1 -1
  92. package/dist/lib/camera/RTPStreamManagement.js +124 -49
  93. package/dist/lib/camera/RTPStreamManagement.js.map +1 -1
  94. package/dist/lib/camera/RecordingManagement.d.ts +267 -0
  95. package/dist/lib/camera/RecordingManagement.d.ts.map +1 -0
  96. package/dist/lib/camera/RecordingManagement.js +750 -0
  97. package/dist/lib/camera/RecordingManagement.js.map +1 -0
  98. package/dist/lib/camera/index.d.ts +4 -3
  99. package/dist/lib/camera/index.d.ts.map +1 -1
  100. package/dist/lib/camera/index.js +4 -3
  101. package/dist/lib/camera/index.js.map +1 -1
  102. package/dist/lib/controller/AdaptiveLightingController.d.ts +9 -9
  103. package/dist/lib/controller/AdaptiveLightingController.d.ts.map +1 -1
  104. package/dist/lib/controller/AdaptiveLightingController.js +37 -31
  105. package/dist/lib/controller/AdaptiveLightingController.js.map +1 -1
  106. package/dist/lib/controller/CameraController.d.ts +254 -7
  107. package/dist/lib/controller/CameraController.d.ts.map +1 -1
  108. package/dist/lib/controller/CameraController.js +382 -35
  109. package/dist/lib/controller/CameraController.js.map +1 -1
  110. package/dist/lib/controller/Controller.d.ts +3 -3
  111. package/dist/lib/controller/Controller.d.ts.map +1 -1
  112. package/dist/lib/controller/Controller.js.map +1 -1
  113. package/dist/lib/controller/DoorbellController.d.ts +43 -1
  114. package/dist/lib/controller/DoorbellController.d.ts.map +1 -1
  115. package/dist/lib/controller/DoorbellController.js +64 -12
  116. package/dist/lib/controller/DoorbellController.js.map +1 -1
  117. package/dist/lib/controller/RemoteController.d.ts +4 -4
  118. package/dist/lib/controller/RemoteController.d.ts.map +1 -1
  119. package/dist/lib/controller/RemoteController.js +79 -69
  120. package/dist/lib/controller/RemoteController.js.map +1 -1
  121. package/dist/lib/controller/index.d.ts +4 -4
  122. package/dist/lib/controller/index.js +5 -5
  123. package/dist/lib/controller/index.js.map +1 -1
  124. package/dist/lib/datastream/DataStreamManagement.d.ts.map +1 -1
  125. package/dist/lib/datastream/DataStreamManagement.js +12 -11
  126. package/dist/lib/datastream/DataStreamManagement.js.map +1 -1
  127. package/dist/lib/datastream/DataStreamParser.d.ts +24 -24
  128. package/dist/lib/datastream/DataStreamParser.d.ts.map +1 -1
  129. package/dist/lib/datastream/DataStreamParser.js +31 -22
  130. package/dist/lib/datastream/DataStreamParser.js.map +1 -1
  131. package/dist/lib/datastream/DataStreamServer.d.ts +24 -5
  132. package/dist/lib/datastream/DataStreamServer.d.ts.map +1 -1
  133. package/dist/lib/datastream/DataStreamServer.js +109 -68
  134. package/dist/lib/datastream/DataStreamServer.js.map +1 -1
  135. package/dist/lib/datastream/index.d.ts +3 -3
  136. package/dist/lib/datastream/index.js +3 -3
  137. package/dist/lib/datastream/index.js.map +1 -1
  138. package/dist/lib/definitions/CharacteristicDefinitions.d.ts +84 -0
  139. package/dist/lib/definitions/CharacteristicDefinitions.d.ts.map +1 -1
  140. package/dist/lib/definitions/CharacteristicDefinitions.js +471 -243
  141. package/dist/lib/definitions/CharacteristicDefinitions.js.map +1 -1
  142. package/dist/lib/definitions/ServiceDefinitions.d.ts +28 -0
  143. package/dist/lib/definitions/ServiceDefinitions.d.ts.map +1 -1
  144. package/dist/lib/definitions/ServiceDefinitions.js +158 -74
  145. package/dist/lib/definitions/ServiceDefinitions.js.map +1 -1
  146. package/dist/lib/definitions/generate-definitions.d.ts.map +1 -1
  147. package/dist/lib/definitions/generate-definitions.js +76 -72
  148. package/dist/lib/definitions/generate-definitions.js.map +1 -1
  149. package/dist/lib/definitions/generator-configuration.d.ts.map +1 -1
  150. package/dist/lib/definitions/generator-configuration.js +34 -16
  151. package/dist/lib/definitions/generator-configuration.js.map +1 -1
  152. package/dist/lib/definitions/index.js +2 -2
  153. package/dist/lib/definitions/index.js.map +1 -1
  154. package/dist/lib/model/AccessoryInfo.d.ts +6 -6
  155. package/dist/lib/model/AccessoryInfo.d.ts.map +1 -1
  156. package/dist/lib/model/AccessoryInfo.js +86 -76
  157. package/dist/lib/model/AccessoryInfo.js.map +1 -1
  158. package/dist/lib/model/ControllerStorage.d.ts.map +1 -1
  159. package/dist/lib/model/ControllerStorage.js +9 -9
  160. package/dist/lib/model/ControllerStorage.js.map +1 -1
  161. package/dist/lib/model/HAPStorage.d.ts.map +1 -1
  162. package/dist/lib/model/HAPStorage.js +2 -1
  163. package/dist/lib/model/HAPStorage.js.map +1 -1
  164. package/dist/lib/model/IdentifierCache.d.ts +11 -11
  165. package/dist/lib/model/IdentifierCache.d.ts.map +1 -1
  166. package/dist/lib/model/IdentifierCache.js +69 -67
  167. package/dist/lib/model/IdentifierCache.js.map +1 -1
  168. package/dist/lib/tv/AccessControlManagement.d.ts +1 -1
  169. package/dist/lib/tv/AccessControlManagement.d.ts.map +1 -1
  170. package/dist/lib/tv/AccessControlManagement.js +2 -2
  171. package/dist/lib/tv/AccessControlManagement.js.map +1 -1
  172. package/dist/lib/util/clone.js +5 -4
  173. package/dist/lib/util/clone.js.map +1 -1
  174. package/dist/lib/util/color-utils.d.ts.map +1 -1
  175. package/dist/lib/util/color-utils.js +2 -2
  176. package/dist/lib/util/color-utils.js.map +1 -1
  177. package/dist/lib/util/eventedhttp.d.ts +4 -4
  178. package/dist/lib/util/eventedhttp.d.ts.map +1 -1
  179. package/dist/lib/util/eventedhttp.js +54 -51
  180. package/dist/lib/util/eventedhttp.js.map +1 -1
  181. package/dist/lib/util/hapCrypto.d.ts +5 -5
  182. package/dist/lib/util/hapCrypto.d.ts.map +1 -1
  183. package/dist/lib/util/hapCrypto.js +66 -82
  184. package/dist/lib/util/hapCrypto.js.map +1 -1
  185. package/dist/lib/util/hapStatusError.js +3 -3
  186. package/dist/lib/util/hapStatusError.js.map +1 -1
  187. package/dist/lib/util/net-utils.d.ts.map +1 -1
  188. package/dist/lib/util/net-utils.js +4 -6
  189. package/dist/lib/util/net-utils.js.map +1 -1
  190. package/dist/lib/util/once.d.ts +1 -1
  191. package/dist/lib/util/once.d.ts.map +1 -1
  192. package/dist/lib/util/once.js +2 -1
  193. package/dist/lib/util/once.js.map +1 -1
  194. package/dist/lib/util/promise-utils.d.ts +2 -0
  195. package/dist/lib/util/promise-utils.d.ts.map +1 -0
  196. package/dist/lib/util/promise-utils.js +10 -0
  197. package/dist/lib/util/promise-utils.js.map +1 -0
  198. package/dist/lib/util/request-util.d.ts.map +1 -1
  199. package/dist/lib/util/request-util.js +1 -0
  200. package/dist/lib/util/request-util.js.map +1 -1
  201. package/dist/lib/util/time.d.ts +1 -1
  202. package/dist/lib/util/time.d.ts.map +1 -1
  203. package/dist/lib/util/time.js +8 -8
  204. package/dist/lib/util/time.js.map +1 -1
  205. package/dist/lib/util/tlv.d.ts.map +1 -1
  206. package/dist/lib/util/tlv.js +15 -12
  207. package/dist/lib/util/tlv.js.map +1 -1
  208. package/dist/lib/util/uuid.d.ts.map +1 -1
  209. package/dist/lib/util/uuid.js +26 -20
  210. package/dist/lib/util/uuid.js.map +1 -1
  211. package/dist/types.d.ts +0 -1
  212. package/dist/types.d.ts.map +1 -1
  213. package/package.json +22 -19
@@ -1,23 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var __1 = require("..");
3
+ var tslib_1 = require("tslib");
4
+ var assert_1 = (0, tslib_1.__importDefault)(require("assert"));
4
5
  var child_process_1 = require("child_process");
5
- var cameraUUID = __1.uuid.generate('hap-nodejs:accessories:ip-camera');
6
- var camera = exports.accessory = new __1.Accessory('IPCamera', cameraUUID);
7
- // @ts-ignore
6
+ var events_1 = require("events");
7
+ var net_1 = require("net");
8
+ var __1 = require("..");
9
+ var cameraUUID = __1.uuid.generate("hap-nodejs:accessories:ip-camera");
10
+ var camera = exports.accessory = new __1.Accessory("IPCamera", cameraUUID);
11
+ // @ts-expect-error: Core/BridgeCore API
8
12
  camera.username = "9F:B2:46:0C:40:DB";
9
- // @ts-ignore
13
+ // @ts-expect-error: Core/BridgeCore API
10
14
  camera.pincode = "948-23-459";
11
15
  camera.category = 17 /* IP_CAMERA */;
12
16
  var FFMPEGH264ProfileNames = [
13
17
  "baseline",
14
18
  "main",
15
- "high"
19
+ "high",
16
20
  ];
17
21
  var FFMPEGH264LevelNames = [
18
22
  "3.1",
19
23
  "3.2",
20
- "4.0"
24
+ "4.0",
21
25
  ];
22
26
  var ports = new Set();
23
27
  function getPort() {
@@ -34,25 +38,26 @@ var ExampleCamera = /** @class */ (function () {
34
38
  // keep track of sessions
35
39
  this.pendingSessions = {};
36
40
  this.ongoingSessions = {};
41
+ this.handlingStreamingRequest = false;
37
42
  }
38
43
  ExampleCamera.prototype.handleSnapshotRequest = function (request, callback) {
39
44
  var _this = this;
40
- var ffmpegCommand = "-f lavfi -i testsrc=s=" + request.width + "x" + request.height + " -vframes 1 -f mjpeg -";
41
- var ffmpeg = child_process_1.spawn("ffmpeg", ffmpegCommand.split(" "), { env: process.env });
45
+ var ffmpegCommand = "-f lavfi -i testsrc=s=".concat(request.width, "x").concat(request.height, " -vframes 1 -f mjpeg -");
46
+ var ffmpeg = (0, child_process_1.spawn)("ffmpeg", ffmpegCommand.split(" "), { env: process.env });
42
47
  var snapshotBuffers = [];
43
- ffmpeg.stdout.on('data', function (data) { return snapshotBuffers.push(data); });
44
- ffmpeg.stderr.on('data', function (data) {
48
+ ffmpeg.stdout.on("data", function (data) { return snapshotBuffers.push(data); });
49
+ ffmpeg.stderr.on("data", function (data) {
45
50
  if (_this.ffmpegDebugOutput) {
46
51
  console.log("SNAPSHOT: " + String(data));
47
52
  }
48
53
  });
49
- ffmpeg.on('exit', function (code, signal) {
54
+ ffmpeg.on("exit", function (code, signal) {
50
55
  if (signal) {
51
56
  console.log("Snapshot process was killed with signal: " + signal);
52
57
  callback(new Error("killed with signal " + signal));
53
58
  }
54
59
  else if (code === 0) {
55
- console.log("Successfully captured snapshot at " + request.width + "x" + request.height);
60
+ console.log("Successfully captured snapshot at ".concat(request.width, "x").concat(request.height));
56
61
  callback(undefined, Buffer.concat(snapshotBuffers));
57
62
  }
58
63
  else {
@@ -106,6 +111,7 @@ var ExampleCamera = /** @class */ (function () {
106
111
  var fps = video.fps;
107
112
  var payloadType = video.pt;
108
113
  var maxBitrate = video.max_bit_rate;
114
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
109
115
  var rtcpInterval = video.rtcp_interval; // usually 0.5
110
116
  var mtu = video.mtu; // maximum transmission unit
111
117
  var address = sessionInfo.address;
@@ -114,11 +120,11 @@ var ExampleCamera = /** @class */ (function () {
114
120
  var ssrc = sessionInfo.videoSSRC;
115
121
  var cryptoSuite = sessionInfo.videoCryptoSuite;
116
122
  var videoSRTP = sessionInfo.videoSRTP.toString("base64");
117
- console.log("Starting video stream (" + width + "x" + height + ", " + fps + " fps, " + maxBitrate + " kbps, " + mtu + " mtu)...");
118
- var videoffmpegCommand = "-re -f lavfi -i testsrc=s=" + width + "x" + height + ":r=" + fps + " -map 0:0 " +
119
- ("-c:v h264 -pix_fmt yuv420p -r " + fps + " -an -sn -dn -b:v " + maxBitrate + "k ") +
120
- ("-profile:v " + profile + " -level:v " + level + " ") +
121
- ("-payload_type " + payloadType + " -ssrc " + ssrc + " -f rtp ");
123
+ console.log("Starting video stream (".concat(width, "x").concat(height, ", ").concat(fps, " fps, ").concat(maxBitrate, " kbps, ").concat(mtu, " mtu)..."));
124
+ var videoffmpegCommand = "-re -f lavfi -i testsrc=s=".concat(width, "x").concat(height, ":r=").concat(fps, " -map 0:0 ") +
125
+ "-c:v h264 -pix_fmt yuv420p -r ".concat(fps, " -an -sn -dn -b:v ").concat(maxBitrate, "k ") +
126
+ "-profile:v ".concat(profile, " -level:v ").concat(level, " ") +
127
+ "-payload_type ".concat(payloadType, " -ssrc ").concat(ssrc, " -f rtp ");
122
128
  if (cryptoSuite !== 2 /* NONE */) {
123
129
  var suite = void 0;
124
130
  switch (cryptoSuite) {
@@ -129,15 +135,15 @@ var ExampleCamera = /** @class */ (function () {
129
135
  suite = "AES_CM_256_HMAC_SHA1_80";
130
136
  break;
131
137
  }
132
- videoffmpegCommand += "-srtp_out_suite " + suite + " -srtp_out_params " + videoSRTP + " s";
138
+ videoffmpegCommand += "-srtp_out_suite ".concat(suite, " -srtp_out_params ").concat(videoSRTP, " s");
133
139
  }
134
- videoffmpegCommand += "rtp://" + address + ":" + videoPort + "?rtcpport=" + videoPort + "&localrtcpport=" + localVideoPort + "&pkt_size=" + mtu;
140
+ videoffmpegCommand += "rtp://".concat(address, ":").concat(videoPort, "?rtcpport=").concat(videoPort, "&localrtcpport=").concat(localVideoPort, "&pkt_size=").concat(mtu);
135
141
  if (this.ffmpegDebugOutput) {
136
142
  console.log("FFMPEG command: ffmpeg " + videoffmpegCommand);
137
143
  }
138
- var ffmpegVideo = child_process_1.spawn('ffmpeg', videoffmpegCommand.split(' '), { env: process.env });
144
+ var ffmpegVideo = (0, child_process_1.spawn)("ffmpeg", videoffmpegCommand.split(" "), { env: process.env });
139
145
  var started_1 = false;
140
- ffmpegVideo.stderr.on('data', function (data) {
146
+ ffmpegVideo.stderr.on("data", function (data) {
141
147
  console.log(data.toString("utf8"));
142
148
  if (!started_1) {
143
149
  started_1 = true;
@@ -148,11 +154,11 @@ var ExampleCamera = /** @class */ (function () {
148
154
  console.log("VIDEO: " + String(data));
149
155
  }
150
156
  });
151
- ffmpegVideo.on('error', function (error) {
157
+ ffmpegVideo.on("error", function (error) {
152
158
  console.log("[Video] Failed to start video stream: " + error.message);
153
159
  callback(new Error("ffmpeg process creation failed!"));
154
160
  });
155
- ffmpegVideo.on('exit', function (code, signal) {
161
+ ffmpegVideo.on("exit", function (code, signal) {
156
162
  var message = "[Video] ffmpeg exited with code: " + code + " and signal: " + signal;
157
163
  if (code == null || code === 255) {
158
164
  console.log(message + " (Video stream stopped!)");
@@ -179,11 +185,15 @@ var ExampleCamera = /** @class */ (function () {
179
185
  console.log("Received (unsupported) request to reconfigure to: " + JSON.stringify(request.video));
180
186
  callback();
181
187
  break;
182
- case "stop" /* STOP */:
188
+ case "stop" /* STOP */: {
183
189
  var ongoingSession = this.ongoingSessions[sessionId];
190
+ if (!ongoingSession) {
191
+ callback();
192
+ break;
193
+ }
184
194
  ports.delete(ongoingSession.localVideoPort);
185
195
  try {
186
- ongoingSession.process.kill('SIGKILL');
196
+ ongoingSession.process.kill("SIGKILL");
187
197
  }
188
198
  catch (e) {
189
199
  console.log("Error occurred terminating the video process!");
@@ -193,16 +203,336 @@ var ExampleCamera = /** @class */ (function () {
193
203
  console.log("Stopped streaming session!");
194
204
  callback();
195
205
  break;
206
+ }
196
207
  }
197
208
  };
209
+ ExampleCamera.prototype.updateRecordingActive = function (active) {
210
+ // we haven't implemented a prebuffer
211
+ console.log("Recording active set to " + active);
212
+ };
213
+ ExampleCamera.prototype.updateRecordingConfiguration = function (configuration) {
214
+ this.configuration = configuration;
215
+ console.log(configuration);
216
+ };
217
+ /**
218
+ * This is a very minimal, very experimental example on how to implement fmp4 streaming with a
219
+ * CameraController supporting HomeKit Secure Video.
220
+ *
221
+ * An ideal implementation would diverge from this in the following ways:
222
+ * * It would implement a prebuffer and respect the recording `active` characteristic for that.
223
+ * * It would start to immediately record after a trigger event occurred and not just
224
+ * when the HomeKit Controller requests it (see the documentation of `CameraRecordingDelegate`).
225
+ */
226
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
227
+ ExampleCamera.prototype.handleRecordingStreamRequest = function (streamId) {
228
+ var _a, _b, _c;
229
+ return (0, tslib_1.__asyncGenerator)(this, arguments, function handleRecordingStreamRequest_1() {
230
+ var STOP_AFTER_MOTION_STOP, profile, level, videoArgs, samplerate, audioArgs, pending, _d, _e, box, motionDetected, fragment, isLast, e_1_1, error_1;
231
+ var e_1, _f;
232
+ return (0, tslib_1.__generator)(this, function (_g) {
233
+ switch (_g.label) {
234
+ case 0:
235
+ (0, assert_1.default)(!!this.configuration);
236
+ STOP_AFTER_MOTION_STOP = false;
237
+ this.handlingStreamingRequest = true;
238
+ (0, assert_1.default)(this.configuration.videoCodec.type === 0 /* H264 */);
239
+ profile = this.configuration.videoCodec.parameters.profile === 2 /* HIGH */ ? "high"
240
+ : this.configuration.videoCodec.parameters.profile === 1 /* MAIN */ ? "main" : "baseline";
241
+ level = this.configuration.videoCodec.parameters.level === 2 /* LEVEL4_0 */ ? "4.0"
242
+ : this.configuration.videoCodec.parameters.level === 1 /* LEVEL3_2 */ ? "3.2" : "3.1";
243
+ videoArgs = [
244
+ "-an",
245
+ "-sn",
246
+ "-dn",
247
+ "-codec:v",
248
+ "libx264",
249
+ "-pix_fmt",
250
+ "yuv420p",
251
+ "-profile:v", profile,
252
+ "-level:v", level,
253
+ "-b:v",
254
+ "".concat(this.configuration.videoCodec.parameters.bitRate, "k"),
255
+ "-force_key_frames",
256
+ "expr:eq(t,n_forced*".concat(this.configuration.videoCodec.parameters.iFrameInterval / 1000, ")"),
257
+ "-r", this.configuration.videoCodec.resolution[2].toString(),
258
+ ];
259
+ switch (this.configuration.audioCodec.samplerate) {
260
+ case 0 /* KHZ_8 */:
261
+ samplerate = "8";
262
+ break;
263
+ case 1 /* KHZ_16 */:
264
+ samplerate = "16";
265
+ break;
266
+ case 2 /* KHZ_24 */:
267
+ samplerate = "24";
268
+ break;
269
+ case 3 /* KHZ_32 */:
270
+ samplerate = "32";
271
+ break;
272
+ case 4 /* KHZ_44_1 */:
273
+ samplerate = "44.1";
274
+ break;
275
+ case 5 /* KHZ_48 */:
276
+ samplerate = "48";
277
+ break;
278
+ default:
279
+ throw new Error("Unsupported audio samplerate: " + this.configuration.audioCodec.samplerate);
280
+ }
281
+ audioArgs = ((_b = (_a = this.controller) === null || _a === void 0 ? void 0 : _a.recordingManagement) === null || _b === void 0 ? void 0 : _b.recordingManagementService.getCharacteristic(__1.Characteristic.RecordingAudioActive))
282
+ ? (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([
283
+ "-acodec", "libfdk_aac"
284
+ ], (0, tslib_1.__read)((this.configuration.audioCodec.type === 0 /* AAC_LC */ ?
285
+ ["-profile:a", "aac_low"] :
286
+ ["-profile:a", "aac_eld"])), false), [
287
+ "-ar",
288
+ "".concat(samplerate, "k"),
289
+ "-b:a",
290
+ "".concat(this.configuration.audioCodec.bitrate, "k"),
291
+ "-ac",
292
+ "".concat(this.configuration.audioCodec.audioChannels),
293
+ ], false) : [];
294
+ this.server = new MP4StreamingServer("ffmpeg", "-f lavfi -i testsrc=s=".concat(this.configuration.videoCodec.resolution[0], "x").concat(this.configuration.videoCodec.resolution[1], ":r=").concat(this.configuration.videoCodec.resolution[2])
295
+ .split(/ /g), audioArgs, videoArgs);
296
+ return [4 /*yield*/, (0, tslib_1.__await)(this.server.start())];
297
+ case 1:
298
+ _g.sent();
299
+ if (!(!this.server || this.server.destroyed)) return [3 /*break*/, 3];
300
+ return [4 /*yield*/, (0, tslib_1.__await)(void 0)];
301
+ case 2: return [2 /*return*/, _g.sent()]; // early exit
302
+ case 3:
303
+ pending = [];
304
+ _g.label = 4;
305
+ case 4:
306
+ _g.trys.push([4, 19, , 20]);
307
+ _g.label = 5;
308
+ case 5:
309
+ _g.trys.push([5, 12, 13, 18]);
310
+ _d = (0, tslib_1.__asyncValues)(this.server.generator());
311
+ _g.label = 6;
312
+ case 6: return [4 /*yield*/, (0, tslib_1.__await)(_d.next())];
313
+ case 7:
314
+ if (!(_e = _g.sent(), !_e.done)) return [3 /*break*/, 11];
315
+ box = _e.value;
316
+ pending.push(box.header, box.data);
317
+ motionDetected = (_c = camera.getService(__1.Service.MotionSensor)) === null || _c === void 0 ? void 0 : _c.getCharacteristic(__1.Characteristic.MotionDetected).value;
318
+ console.log("mp4 box type " + box.type + " and length " + box.length);
319
+ if (!(box.type === "moov" || box.type === "mdat")) return [3 /*break*/, 10];
320
+ fragment = Buffer.concat(pending);
321
+ pending.splice(0, pending.length);
322
+ isLast = STOP_AFTER_MOTION_STOP && !motionDetected;
323
+ return [4 /*yield*/, (0, tslib_1.__await)({
324
+ data: fragment,
325
+ isLast: isLast,
326
+ })];
327
+ case 8: return [4 /*yield*/, _g.sent()];
328
+ case 9:
329
+ _g.sent();
330
+ if (isLast) {
331
+ console.log("Ending session due to motion stopped!");
332
+ return [3 /*break*/, 11];
333
+ }
334
+ _g.label = 10;
335
+ case 10: return [3 /*break*/, 6];
336
+ case 11: return [3 /*break*/, 18];
337
+ case 12:
338
+ e_1_1 = _g.sent();
339
+ e_1 = { error: e_1_1 };
340
+ return [3 /*break*/, 18];
341
+ case 13:
342
+ _g.trys.push([13, , 16, 17]);
343
+ if (!(_e && !_e.done && (_f = _d.return))) return [3 /*break*/, 15];
344
+ return [4 /*yield*/, (0, tslib_1.__await)(_f.call(_d))];
345
+ case 14:
346
+ _g.sent();
347
+ _g.label = 15;
348
+ case 15: return [3 /*break*/, 17];
349
+ case 16:
350
+ if (e_1) throw e_1.error;
351
+ return [7 /*endfinally*/];
352
+ case 17: return [7 /*endfinally*/];
353
+ case 18: return [3 /*break*/, 20];
354
+ case 19:
355
+ error_1 = _g.sent();
356
+ if (!error_1.message.startsWith("FFMPEG")) { // cheap way of identifying our own emitted errors
357
+ console.error("Encountered unexpected error on generator " + error_1.stack);
358
+ }
359
+ return [3 /*break*/, 20];
360
+ case 20: return [2 /*return*/];
361
+ }
362
+ });
363
+ });
364
+ };
365
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
366
+ ExampleCamera.prototype.closeRecordingStream = function (streamId, reason) {
367
+ if (this.server) {
368
+ this.server.destroy();
369
+ this.server = undefined;
370
+ }
371
+ this.handlingStreamingRequest = false;
372
+ };
373
+ ExampleCamera.prototype.acknowledgeStream = function (streamId) {
374
+ this.closeRecordingStream(streamId);
375
+ };
198
376
  return ExampleCamera;
199
377
  }());
378
+ var MP4StreamingServer = /** @class */ (function () {
379
+ function MP4StreamingServer(ffmpegPath, ffmpegInput, audioOutputArgs, videoOutputArgs) {
380
+ var _a, _b, _c;
381
+ var _this = this;
382
+ /**
383
+ * This can be configured to output ffmpeg debug output!
384
+ */
385
+ this.debugMode = false;
386
+ this.destroyed = false;
387
+ this.connectPromise = new Promise(function (resolve) { return _this.connectResolve = resolve; });
388
+ this.server = (0, net_1.createServer)(this.handleConnection.bind(this));
389
+ this.ffmpegPath = ffmpegPath;
390
+ this.args = [];
391
+ (_a = this.args).push.apply(_a, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(ffmpegInput), false));
392
+ (_b = this.args).push.apply(_b, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(audioOutputArgs), false));
393
+ this.args.push("-f", "mp4");
394
+ (_c = this.args).push.apply(_c, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(videoOutputArgs), false));
395
+ this.args.push("-fflags", "+genpts", "-reset_timestamps", "1");
396
+ this.args.push("-movflags", "frag_keyframe+empty_moov+default_base_moof");
397
+ }
398
+ MP4StreamingServer.prototype.start = function () {
399
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
400
+ var promise, port;
401
+ return (0, tslib_1.__generator)(this, function (_a) {
402
+ switch (_a.label) {
403
+ case 0:
404
+ promise = (0, events_1.once)(this.server, "listening");
405
+ this.server.listen(); // listen on random port
406
+ return [4 /*yield*/, promise];
407
+ case 1:
408
+ _a.sent();
409
+ if (this.destroyed) {
410
+ return [2 /*return*/];
411
+ }
412
+ port = this.server.address().port;
413
+ this.args.push("tcp://127.0.0.1:" + port);
414
+ console.log(this.ffmpegPath + " " + this.args.join(" "));
415
+ this.childProcess = (0, child_process_1.spawn)(this.ffmpegPath, this.args, { env: process.env, stdio: this.debugMode ? "pipe" : "ignore" });
416
+ if (!this.childProcess) {
417
+ console.error("ChildProcess is undefined directly after the init!");
418
+ }
419
+ if (this.debugMode) {
420
+ this.childProcess.stdout.on("data", function (data) { return console.log(data.toString()); });
421
+ this.childProcess.stderr.on("data", function (data) { return console.log(data.toString()); });
422
+ }
423
+ return [2 /*return*/];
424
+ }
425
+ });
426
+ });
427
+ };
428
+ MP4StreamingServer.prototype.destroy = function () {
429
+ var _a, _b;
430
+ (_a = this.socket) === null || _a === void 0 ? void 0 : _a.destroy();
431
+ (_b = this.childProcess) === null || _b === void 0 ? void 0 : _b.kill();
432
+ this.socket = undefined;
433
+ this.childProcess = undefined;
434
+ this.destroyed = true;
435
+ };
436
+ MP4StreamingServer.prototype.handleConnection = function (socket) {
437
+ var _a;
438
+ this.server.close(); // don't accept any further clients
439
+ this.socket = socket;
440
+ (_a = this.connectResolve) === null || _a === void 0 ? void 0 : _a.call(this);
441
+ };
442
+ /**
443
+ * Generator for `MP4Atom`s.
444
+ * Throws error to signal EOF when socket is closed.
445
+ */
446
+ MP4StreamingServer.prototype.generator = function () {
447
+ return (0, tslib_1.__asyncGenerator)(this, arguments, function generator_1() {
448
+ var header, length, type, data;
449
+ return (0, tslib_1.__generator)(this, function (_a) {
450
+ switch (_a.label) {
451
+ case 0: return [4 /*yield*/, (0, tslib_1.__await)(this.connectPromise)];
452
+ case 1:
453
+ _a.sent();
454
+ if (!this.socket || !this.childProcess) {
455
+ console.log("Socket undefined " + !!this.socket + " childProcess undefined " + !!this.childProcess);
456
+ throw new Error("Unexpected state!");
457
+ }
458
+ _a.label = 2;
459
+ case 2:
460
+ if (!true) return [3 /*break*/, 7];
461
+ return [4 /*yield*/, (0, tslib_1.__await)(this.read(8))];
462
+ case 3:
463
+ header = _a.sent();
464
+ length = header.readInt32BE(0) - 8;
465
+ type = header.slice(4).toString();
466
+ return [4 /*yield*/, (0, tslib_1.__await)(this.read(length))];
467
+ case 4:
468
+ data = _a.sent();
469
+ return [4 /*yield*/, (0, tslib_1.__await)({
470
+ header: header,
471
+ length: length,
472
+ type: type,
473
+ data: data,
474
+ })];
475
+ case 5: return [4 /*yield*/, _a.sent()];
476
+ case 6:
477
+ _a.sent();
478
+ return [3 /*break*/, 2];
479
+ case 7: return [2 /*return*/];
480
+ }
481
+ });
482
+ });
483
+ };
484
+ MP4StreamingServer.prototype.read = function (length) {
485
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
486
+ var value;
487
+ var _this = this;
488
+ return (0, tslib_1.__generator)(this, function (_a) {
489
+ if (!this.socket) {
490
+ throw Error("FFMPEG tried reading from closed socket!");
491
+ }
492
+ if (!length) {
493
+ return [2 /*return*/, Buffer.alloc(0)];
494
+ }
495
+ value = this.socket.read(length);
496
+ if (value) {
497
+ return [2 /*return*/, value];
498
+ }
499
+ return [2 /*return*/, new Promise(function (resolve, reject) {
500
+ var readHandler = function () {
501
+ var value = _this.socket.read(length);
502
+ if (value) {
503
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
504
+ cleanup();
505
+ resolve(value);
506
+ }
507
+ };
508
+ var endHandler = function () {
509
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
510
+ cleanup();
511
+ reject(new Error("FFMPEG socket closed during read for ".concat(length, " bytes!")));
512
+ };
513
+ var cleanup = function () {
514
+ var _a, _b;
515
+ (_a = _this.socket) === null || _a === void 0 ? void 0 : _a.removeListener("readable", readHandler);
516
+ (_b = _this.socket) === null || _b === void 0 ? void 0 : _b.removeListener("close", endHandler);
517
+ };
518
+ if (!_this.socket) {
519
+ throw new Error("FFMPEG socket is closed now!");
520
+ }
521
+ _this.socket.on("readable", readHandler);
522
+ _this.socket.on("close", endHandler);
523
+ })];
524
+ });
525
+ });
526
+ };
527
+ return MP4StreamingServer;
528
+ }());
200
529
  var streamDelegate = new ExampleCamera();
201
530
  var cameraController = new __1.CameraController({
202
531
  cameraStreamCount: 2,
203
532
  delegate: streamDelegate,
204
533
  streamingOptions: {
205
534
  // srtp: true, // legacy option which will just enable AES_CM_128_HMAC_SHA1_80 (can still be used though)
535
+ // NONE is not supported by iOS just there for testing with Wireshark for example
206
536
  supportedCryptoSuites: [2 /* NONE */, 0 /* AES_CM_128_HMAC_SHA1_80 */],
207
537
  video: {
208
538
  codec: {
@@ -224,19 +554,68 @@ var cameraController = new __1.CameraController({
224
554
  ],
225
555
  },
226
556
  /* audio option is omitted, as it is not supported in this example; HAP-NodeJS will fake an appropriate audio codec
227
- audio: {
228
- comfort_noise: false, // optional, default false
229
- codecs: [
230
- {
231
- type: AudioStreamingCodecType.OPUS,
232
- audioChannels: 1, // optional, default 1
233
- samplerate: [AudioStreamingSamplerate.KHZ_16, AudioStreamingSamplerate.KHZ_24], // 16 and 24 must be present for AAC-ELD or OPUS
557
+ audio: {
558
+ comfort_noise: false, // optional, default false
559
+ codecs: [
560
+ {
561
+ type: AudioStreamingCodecType.OPUS,
562
+ audioChannels: 1, // optional, default 1
563
+ samplerate: [AudioStreamingSamplerate.KHZ_16, AudioStreamingSamplerate.KHZ_24], // 16 and 24 must be present for AAC-ELD or OPUS
564
+ },
565
+ ],
566
+ },
567
+ // */
568
+ },
569
+ recording: {
570
+ options: {
571
+ prebufferLength: 4000,
572
+ mediaContainerConfiguration: {
573
+ type: 0 /* FRAGMENTED_MP4 */,
574
+ fragmentLength: 4000,
575
+ },
576
+ video: {
577
+ type: 0 /* H264 */,
578
+ parameters: {
579
+ profiles: [2 /* HIGH */],
580
+ levels: [2 /* LEVEL4_0 */],
234
581
  },
235
- ],
582
+ resolutions: [
583
+ [320, 180, 30],
584
+ [320, 240, 15],
585
+ [320, 240, 30],
586
+ [480, 270, 30],
587
+ [480, 360, 30],
588
+ [640, 360, 30],
589
+ [640, 480, 30],
590
+ [1280, 720, 30],
591
+ [1280, 960, 30],
592
+ [1920, 1080, 30],
593
+ [1600, 1200, 30],
594
+ ],
595
+ },
596
+ audio: {
597
+ codecs: {
598
+ type: 1 /* AAC_ELD */,
599
+ audioChannels: 1,
600
+ samplerate: 5 /* KHZ_48 */,
601
+ bitrateMode: 0 /* VARIABLE */,
602
+ },
603
+ },
236
604
  },
237
- // */
238
- }
605
+ delegate: streamDelegate,
606
+ },
607
+ sensors: {
608
+ motion: true,
609
+ occupancy: true,
610
+ },
239
611
  });
240
612
  streamDelegate.controller = cameraController;
241
613
  camera.configureController(cameraController);
614
+ // a service to trigger the motion sensor!
615
+ camera.addService(__1.Service.Switch, "MOTION TRIGGER")
616
+ .getCharacteristic(__1.Characteristic.On)
617
+ .onSet(function (value) {
618
+ var _a;
619
+ (_a = camera.getService(__1.Service.MotionSensor)) === null || _a === void 0 ? void 0 : _a.updateCharacteristic(__1.Characteristic.MotionDetected, value);
620
+ });
242
621
  //# sourceMappingURL=Camera_accessory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Camera_accessory.js","sourceRoot":"","sources":["../../src/accessories/Camera_accessory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Camera_accessory.js","sourceRoot":"","sources":["../../src/accessories/Camera_accessory.ts"],"names":[],"mappings":"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"}