homebridge-unifi-protect 6.22.0 → 7.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 (88) hide show
  1. package/README.md +29 -29
  2. package/config.schema.json +5 -15
  3. package/dist/devices/protect-camera-package.d.ts +0 -2
  4. package/dist/devices/protect-camera-package.js +4 -12
  5. package/dist/devices/protect-camera-package.js.map +1 -1
  6. package/dist/devices/protect-camera.d.ts +2 -3
  7. package/dist/devices/protect-camera.js +35 -124
  8. package/dist/devices/protect-camera.js.map +1 -1
  9. package/dist/devices/protect-chime.js +2 -6
  10. package/dist/devices/protect-chime.js.map +1 -1
  11. package/dist/devices/protect-device.d.ts +10 -6
  12. package/dist/devices/protect-device.js +23 -22
  13. package/dist/devices/protect-device.js.map +1 -1
  14. package/dist/devices/protect-doorbell.d.ts +0 -2
  15. package/dist/devices/protect-doorbell.js +41 -60
  16. package/dist/devices/protect-doorbell.js.map +1 -1
  17. package/dist/devices/protect-light.js +1 -3
  18. package/dist/devices/protect-light.js.map +1 -1
  19. package/dist/devices/protect-liveviews.js +2 -1
  20. package/dist/devices/protect-liveviews.js.map +1 -1
  21. package/dist/devices/protect-nvr-systeminfo.js +1 -1
  22. package/dist/devices/protect-nvr-systeminfo.js.map +1 -1
  23. package/dist/devices/protect-securitysystem.js +4 -4
  24. package/dist/devices/protect-securitysystem.js.map +1 -1
  25. package/dist/devices/protect-sensor.js +2 -6
  26. package/dist/devices/protect-sensor.js.map +1 -1
  27. package/dist/devices/protect-viewer.js +1 -1
  28. package/dist/devices/protect-viewer.js.map +1 -1
  29. package/dist/ffmpeg/protect-ffmpeg-codecs.js.map +1 -1
  30. package/dist/ffmpeg/protect-ffmpeg-exec.js +1 -1
  31. package/dist/ffmpeg/protect-ffmpeg-exec.js.map +1 -1
  32. package/dist/ffmpeg/protect-ffmpeg-options.js +2 -19
  33. package/dist/ffmpeg/protect-ffmpeg-options.js.map +1 -1
  34. package/dist/ffmpeg/protect-ffmpeg-record.js +2 -1
  35. package/dist/ffmpeg/protect-ffmpeg-record.js.map +1 -1
  36. package/dist/ffmpeg/protect-ffmpeg-stream.js +14 -8
  37. package/dist/ffmpeg/protect-ffmpeg-stream.js.map +1 -1
  38. package/dist/ffmpeg/protect-ffmpeg.d.ts +2 -2
  39. package/dist/ffmpeg/protect-ffmpeg.js.map +1 -1
  40. package/dist/protect-events.d.ts +1 -3
  41. package/dist/protect-events.js +38 -43
  42. package/dist/protect-events.js.map +1 -1
  43. package/dist/protect-livestream.d.ts +12 -0
  44. package/dist/protect-livestream.js +63 -0
  45. package/dist/protect-livestream.js.map +1 -0
  46. package/dist/protect-nvr.d.ts +7 -11
  47. package/dist/protect-nvr.js +15 -61
  48. package/dist/protect-nvr.js.map +1 -1
  49. package/dist/protect-options.d.ts +8 -23
  50. package/dist/protect-options.js +4 -128
  51. package/dist/protect-options.js.map +1 -1
  52. package/dist/protect-platform.d.ts +2 -4
  53. package/dist/protect-platform.js +3 -28
  54. package/dist/protect-platform.js.map +1 -1
  55. package/dist/protect-record.d.ts +4 -3
  56. package/dist/protect-record.js +23 -29
  57. package/dist/protect-record.js.map +1 -1
  58. package/dist/protect-snapshot.d.ts +2 -2
  59. package/dist/protect-snapshot.js +7 -3
  60. package/dist/protect-snapshot.js.map +1 -1
  61. package/dist/protect-stream.d.ts +3 -4
  62. package/dist/protect-stream.js +116 -98
  63. package/dist/protect-stream.js.map +1 -1
  64. package/dist/protect-timeshift.d.ts +16 -10
  65. package/dist/protect-timeshift.js +88 -51
  66. package/dist/protect-timeshift.js.map +1 -1
  67. package/dist/protect-types.d.ts +0 -7
  68. package/dist/protect-types.js +0 -1
  69. package/dist/protect-types.js.map +1 -1
  70. package/dist/settings.d.ts +2 -1
  71. package/dist/settings.js +4 -2
  72. package/dist/settings.js.map +1 -1
  73. package/homebridge-ui/public/index.html +42 -21
  74. package/homebridge-ui/public/lib/featureoptions.js +376 -0
  75. package/homebridge-ui/public/lib/featureoptions.js.map +1 -0
  76. package/homebridge-ui/public/lib/webUi-featureoptions.mjs +836 -0
  77. package/homebridge-ui/public/lib/webUi.mjs +184 -0
  78. package/homebridge-ui/public/ui.mjs +213 -124
  79. package/homebridge-ui/server.js +13 -52
  80. package/package.json +22 -21
  81. package/dist/protect-mqtt.d.ts +0 -20
  82. package/dist/protect-mqtt.js +0 -177
  83. package/dist/protect-mqtt.js.map +0 -1
  84. package/dist/protect-rtp.d.ts +0 -26
  85. package/dist/protect-rtp.js +0 -180
  86. package/dist/protect-rtp.js.map +0 -1
  87. package/homebridge-ui/public/lib/featureoptions.mjs +0 -201
  88. package/homebridge-ui/public/protect-featureoptions.mjs +0 -736
@@ -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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"}
@@ -1,12 +1,12 @@
1
1
  /// <reference types="node" />
2
2
  import { SnapshotRequest } from "homebridge";
3
+ import { HomebridgePluginLogging } from "homebridge-plugin-utils";
3
4
  import { ProtectCamera } from "./devices/index.js";
4
- import { ProtectLogging } from "./protect-types.js";
5
5
  import { ProtectPlatform } from "./protect-platform.js";
6
6
  export declare class ProtectSnapshot {
7
7
  private readonly api;
8
8
  private readonly hap;
9
- readonly log: ProtectLogging;
9
+ readonly log: HomebridgePluginLogging;
10
10
  private readonly nvr;
11
11
  readonly platform: ProtectPlatform;
12
12
  readonly protectCamera: ProtectCamera;
@@ -129,7 +129,7 @@ export class ProtectSnapshot {
129
129
  // -nostats Suppress printing progress reports while encoding in FFmpeg.
130
130
  // -fflags flags Set the format flags to generate a presentation timestamp if it's missing and discard any corrupt packets rather than exit.
131
131
  // -frames:v 1 Extract a single video frame for the output.
132
- // -q:v 1 Set the quality output of the JPEG output.
132
+ // -q:v 2 Set the quality output of the JPEG output.
133
133
  const ffmpegOptions = [
134
134
  "-hide_banner",
135
135
  "-nostats",
@@ -140,9 +140,13 @@ export class ProtectSnapshot {
140
140
  ];
141
141
  // If we've specified dimensions, scale the snapshot.
142
142
  if (request) {
143
- // -filter:v scale= Scale the image down, if needed, but never upscale it, preserving aspect ratios and letterboxing where needed.
143
+ // Video filter options we use for -filter:v are:
144
+ //
145
+ // select Select only keyframes. These will be full images and avoid potential image corruption, especially in HEVC use cases.
146
+ // scale= Scale the image down, if needed, but never upscale it, preserving aspect ratios and letterboxing where needed.
144
147
  ffmpegOptions.push("-filter:v", [
145
- "scale=" + request.width.toString(), request.height.toString(),
148
+ "select=eq(pict_type\\,I)," +
149
+ "scale=" + request.width.toString(), request.height.toString(),
146
150
  "force_original_aspect_ratio=decrease,pad=" + request.width.toString(), request.height.toString(),
147
151
  "(ow-iw)/2", "(oh-ih)/2"
148
152
  ].join(":"));
@@ -1 +1 @@
1
- {"version":3,"file":"protect-snapshot.js","sourceRoot":"","sources":["../src/protect-snapshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protect-snapshot.js","sourceRoot":"","sources":["../src/protect-snapshot.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAK9D,qCAAqC;AACrC,MAAM,OAAO,eAAe;IAET,GAAG,CAAM;IACT,GAAG,CAAM;IACV,GAAG,CAA0B;IAC5B,GAAG,CAAa;IACjB,QAAQ,CAAkB;IAC1B,aAAa,CAAgB;IACrC,aAAa,CAAuD;IAE5E,sDAAsD;IACtD,YAAY,aAA4B;QAEtC,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;QACjC,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED,wCAAwC;IACjC,KAAK,CAAC,WAAW,CAAC,OAAyB;QAEhD,sCAAsC;QACtC,IAAG,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAEhC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;YAEvF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mKAAmK;QACnK,+JAA+J;QAC/J,EAAE;QACF,yHAAyH;QACzH,iHAAiH;QACjH,8JAA8J;QAC9J,uFAAuF;QACvF,EAAE;QACF,+JAA+J;QAC/J,iBAAiB;QACjB,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAErD,oCAAoC;QACpC,IAAG,CAAC,QAAQ,EAAE,CAAC;YAEb,qCAAqC;YACrC,IAAG,eAAe,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBAE3D,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;YACjK,CAAC;iBAAM,CAAC;gBAEN,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YAChJ,CAAC;QACH,CAAC;QAED,iKAAiK;QACjK,IAAG,CAAC,QAAQ,EAAE,CAAC;YAEb,0DAA0D;YAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAE1E,IAAG,cAAc,EAAE,CAAC;gBAElB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,+EAA+E,CAAC,CAAC;gBAEhG,OAAO,cAAc,CAAC;YACxB,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAEjD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mDAAmD;QACnD,IAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAEjC,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;QAC3D,CAAC;QAED,uCAAuC;QACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAEvF,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IAC9D,CAAC;IAED,sDAAsD;IAC9C,KAAK,CAAC,iBAAiB,CAAC,OAAyB;QAEvD,iEAAiE;QACjE,IAAG,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAE9C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,EAAE,CAAC;QAEpE,IAAG,CAAC,MAAM,EAAE,CAAC;YAEX,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2EAA2E;QAC3E,EAAE;QACF,kEAAkE;QAClE,+DAA+D;QAC/D,mDAAmD;QACnD,MAAM,aAAa,GAAG;YAEpB,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,IAAI;YAC/E,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,QAAQ;SACf,CAAC;QAEF,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED,4DAA4D;IACpD,KAAK,CAAC,YAAY,CAAC,OAAyB;QAElD,iEAAiE;QACjE,IAAG,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAE9C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,qDAAqD;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhF,IAAG,CAAC,SAAS,EAAE,CAAC;YAEd,OAAO,IAAI,CAAC;QACd,CAAC;QAED,wEAAwE;QACxE,EAAE;QACF,yIAAyI;QACzI,yCAAyC;QACzC,gGAAgG;QAChG,kFAAkF;QAClF,yGAAyG;QACzG,sEAAsE;QACtE,6FAA6F;QAC7F,+DAA+D;QAC/D,MAAM,aAAa,GAAG;YACpB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY;YACvD,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC5D,YAAY,EAAE,QAAQ;YACtB,QAAQ,EAAE,WAAW;YACrB,YAAY,EAAE,QAAQ;YACtB,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;YACtC,iBAAiB,EAAE,KAAK;YACxB,IAAI,EAAE,SAAS,CAAC,GAAG;SACpB,CAAC;QAEF,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,oCAAoC;IAC5B,KAAK,CAAC,cAAc,CAAC,kBAA4B,EAAE,OAAyB,EAAE,MAAe;QAEnG,kEAAkE;QAClE,EAAE;QACF,uEAAuE;QACvE,oFAAoF;QACpF,mJAAmJ;QACnJ,oEAAoE;QACpE,kEAAkE;QAClE,MAAM,aAAa,GAAG;YAEpB,cAAc;YACd,UAAU;YACV,SAAS,EAAE,wBAAwB;YACnC,GAAG,kBAAkB;YACrB,WAAW,EAAE,GAAG;YAChB,MAAM,EAAE,GAAG;SACZ,CAAC;QAEF,qDAAqD;QACrD,IAAG,OAAO,EAAE,CAAC;YAEX,iDAAiD;YACjD,EAAE;YACF,0IAA0I;YAC1I,oIAAoI;YACpI,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE;gBAE9B,2BAA2B;oBAC3B,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC9D,2CAA2C,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACjG,WAAW,EAAE,WAAW;aACzB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACf,CAAC;QAED,2IAA2I;QAC3I,qEAAqE;QACrE,+DAA+D;QAC/D,aAAa,CAAC,IAAI,CAEhB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,OAAO,EACf,QAAQ,CACT,CAAC;QAEF,sBAAsB;QACtB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QAExE,yBAAyB;QACzB,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE/C,6EAA6E;QAC7E,IAAG,YAAY,EAAE,QAAQ,KAAK,CAAC,EAAE,CAAC;YAEhC,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACjE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+BAA+B;IACvB,KAAK,CAAC,YAAY,CAAC,QAAgB;QAEzC,2EAA2E;QAC3E,EAAE;QACF,uEAAuE;QACvE,oFAAoF;QACpF,uDAAuD;QACvD,+DAA+D;QAC/D,2IAA2I;QAC3I,qEAAqE;QACrE,uEAAuE;QACvE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE;YAEhD,cAAc;YACd,UAAU;YACV,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU;YAC/D,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,OAAO;YACf,QAAQ;SACT,CAAC,CAAC;QAEH,yBAAyB;QACzB,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEjD,8BAA8B;QAC9B,IAAG,YAAY,EAAE,QAAQ,KAAK,CAAC,EAAE,CAAC;YAEhC,OAAO,YAAY,CAAC,MAAM,CAAC;QAC7B,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAE3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4CAA4C;IACpC,iBAAiB,CAAC,SAAiB;QAEzC,uFAAuF;QACvF,IAAG,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,6BAA6B,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;YAElI,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAErC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;IAC7C,CAAC;CACF"}
@@ -1,7 +1,7 @@
1
1
  import { CameraController, CameraStreamingDelegate, PrepareStreamCallback, PrepareStreamRequest, SnapshotRequest, SnapshotRequestCallback, StreamRequestCallback, StreamingRequest } from "homebridge";
2
2
  import { FfmpegOptions } from "./ffmpeg/index.js";
3
+ import { HomebridgePluginLogging } from "homebridge-plugin-utils";
3
4
  import { ProtectCamera } from "./devices/index.js";
4
- import { ProtectLogging } from "./protect-types.js";
5
5
  import { ProtectPlatform } from "./protect-platform.js";
6
6
  import { ProtectRecordingDelegate } from "./protect-record.js";
7
7
  export declare class ProtectStreamingDelegate implements CameraStreamingDelegate {
@@ -10,7 +10,7 @@ export declare class ProtectStreamingDelegate implements CameraStreamingDelegate
10
10
  readonly ffmpegOptions: FfmpegOptions;
11
11
  private readonly hap;
12
12
  hksv: ProtectRecordingDelegate | null;
13
- readonly log: ProtectLogging;
13
+ readonly log: HomebridgePluginLogging;
14
14
  private readonly nvr;
15
15
  private ongoingSessions;
16
16
  private pendingSessions;
@@ -19,10 +19,9 @@ export declare class ProtectStreamingDelegate implements CameraStreamingDelegate
19
19
  private probesizeOverride;
20
20
  private probesizeOverrideCount;
21
21
  private probesizeOverrideTimeout?;
22
- private rtspEntry;
23
- private savedBitrate;
24
22
  private snapshot;
25
23
  verboseFfmpeg: boolean;
24
+ private abTest;
26
25
  constructor(protectCamera: ProtectCamera, resolutions: [number, number, number][]);
27
26
  handleSnapshotRequest(request?: SnapshotRequest, callback?: SnapshotRequestCallback): Promise<void>;
28
27
  prepareStream(request: PrepareStreamRequest, callback: PrepareStreamCallback): Promise<void>;
@@ -1,8 +1,8 @@
1
1
  import { FfmpegOptions, FfmpegStreamingProcess } from "./ffmpeg/index.js";
2
+ import { RtpDemuxer } from "homebridge-plugin-utils";
2
3
  import { PROTECT_FFMPEG_AUDIO_FILTER_FFTNR, PROTECT_HKSV_SEGMENT_LENGTH, PROTECT_HKSV_TIMESHIFT_BUFFER_MAXLENGTH, PROTECT_HOMEKIT_IDR_INTERVAL } from "./settings.js";
3
4
  import { ProtectRecordingDelegate } from "./protect-record.js";
4
5
  import { ProtectSnapshot } from "./protect-snapshot.js";
5
- import { RtpDemuxer } from "./protect-rtp.js";
6
6
  import WebSocket from "ws";
7
7
  import { once } from "node:events";
8
8
  // Camera streaming delegate implementation for Protect.
@@ -21,10 +21,9 @@ export class ProtectStreamingDelegate {
21
21
  probesizeOverride;
22
22
  probesizeOverrideCount;
23
23
  probesizeOverrideTimeout;
24
- rtspEntry;
25
- savedBitrate;
26
24
  snapshot;
27
25
  verboseFfmpeg;
26
+ abTest = true;
28
27
  // Create an instance of a HomeKit streaming delegate.
29
28
  constructor(protectCamera, resolutions) {
30
29
  this.api = protectCamera.api;
@@ -38,8 +37,6 @@ export class ProtectStreamingDelegate {
38
37
  this.platform = protectCamera.platform;
39
38
  this.probesizeOverride = 0;
40
39
  this.probesizeOverrideCount = 0;
41
- this.rtspEntry = null;
42
- this.savedBitrate = 0;
43
40
  this.verboseFfmpeg = false;
44
41
  // Configure our hardware acceleration support.
45
42
  this.ffmpegOptions = new FfmpegOptions(protectCamera);
@@ -145,7 +142,7 @@ export class ProtectStreamingDelegate {
145
142
  callback(undefined, snapshot);
146
143
  }
147
144
  // Publish the snapshot as a data URL to MQTT, if configured.
148
- this.nvr.mqtt?.publish(this.protectCamera.accessory, "snapshot", "data:image/jpeg;base64," + snapshot.toString("base64"));
145
+ this.nvr.mqtt?.publish(this.protectCamera.ufp.mac, "snapshot", "data:image/jpeg;base64," + snapshot.toString("base64"));
149
146
  }
150
147
  // Prepare to launch the video stream.
151
148
  async prepareStream(request, callback) {
@@ -189,7 +186,7 @@ export class ProtectStreamingDelegate {
189
186
  let talkBack = null;
190
187
  if (hasAudioSupport && this.protectCamera.hints.twoWayAudio) {
191
188
  // Setup the RTP demuxer for two-way audio scenarios.
192
- rtpDemuxer = new RtpDemuxer(this, request.addressVersion, audioIncomingPort, audioIncomingRtcpPort, audioIncomingRtpPort);
189
+ rtpDemuxer = new RtpDemuxer(request.addressVersion, audioIncomingPort, audioIncomingRtcpPort, audioIncomingRtpPort, this.log);
193
190
  // Request the talkback websocket from the controller.
194
191
  const params = new URLSearchParams({ camera: this.protectCamera.ufp.id });
195
192
  talkBack = await this.nvr.ufpApi.getWsEndpoint("talkback", params);
@@ -252,7 +249,7 @@ export class ProtectStreamingDelegate {
252
249
  // Launch the Protect video (and audio) stream.
253
250
  async startStream(request, callback) {
254
251
  const sessionInfo = this.pendingSessions[request.sessionID];
255
- const sdpIpVersion = sessionInfo.addressVersion === "ipv6" ? "IP6 " : "IP4";
252
+ const sdpIpVersion = sessionInfo.addressVersion === "ipv6" ? "IP6" : "IP4";
256
253
  // If we aren't connected, we're done.
257
254
  if (!this.protectCamera.isOnline) {
258
255
  const errorMessage = "Unable to start video stream: the camera is offline or unavailable.";
@@ -267,17 +264,24 @@ export class ProtectStreamingDelegate {
267
264
  // 3. We are on a high latency streaming session (e.g. cellular). If we're high latency, we'll transcode by default unless the user has asked us not to. Why? It
268
265
  // generally results in a speedier experience, at the expense of some stream quality (HomeKit tends to request far lower bitrates than Protect is capable of
269
266
  // producing).
267
+ // 4. The codec in use on the Protect camera isn't H.264.
270
268
  //
271
269
  // How do we determine if we're a high latency connection? We look at the RTP packet time of the audio packet time for a hint. HomeKit uses values of 20, 30, 40,
272
270
  // and 60ms. We make an assumption, validated by lots of real-world testing, that when we see 60ms used by HomeKit, it's a high latency connection and act
273
271
  // accordingly.
274
272
  const isHighLatency = request.audio.packet_time >= 60;
275
- const isTranscoding = this.protectCamera.hints.transcode || this.protectCamera.hints.crop || (isHighLatency && this.protectCamera.hints.transcodeHighLatency);
273
+ const isTranscoding = this.protectCamera.hints.transcode || this.protectCamera.hints.crop || (isHighLatency && this.protectCamera.hints.transcodeHighLatency) ||
274
+ (this.protectCamera.ufp.videoCodec !== "h264");
276
275
  // Set the initial bitrate we should use for this request based on what HomeKit is requesting.
277
276
  let targetBitrate = request.video.max_bit_rate;
277
+ // Override the stream quality selection if we know they're problematic on the Protect controller.
278
+ const overrideStream = this.protectCamera.hints.apiStreaming && ["AI Pro", "G4 Pro"].includes(this.protectCamera.ufp.marketName);
279
+ let rtspEntry;
278
280
  // Find the best RTSP stream based on what we're looking for.
279
281
  if (isTranscoding) {
280
- this.rtspEntry = this.protectCamera.findRtsp((this.protectCamera.hints.hardwareTranscoding) ? 3840 : request.video.width, (this.protectCamera.hints.hardwareTranscoding) ? 2160 : request.video.height, { biasHigher: true, maxPixels: this.ffmpegOptions.hostSystemMaxPixels });
282
+ // If we have hardware transcoding enabled, we treat it uniquely and get the highest quality stream we can. Fixed-function hardware transcoders tend to perform
283
+ // better with higher bitrate sources. Wel also want to generally bias ourselves toward higher quality streams where possible.
284
+ rtspEntry = this.protectCamera.findRtsp((this.protectCamera.hints.hardwareTranscoding || overrideStream) ? 3840 : request.video.width, (this.protectCamera.hints.hardwareTranscoding || overrideStream) ? 2160 : request.video.height, { biasHigher: true, maxPixels: this.ffmpegOptions.hostSystemMaxPixels });
281
285
  // If we have specified the bitrates we want to use when transcoding, let's honor those here.
282
286
  if (isHighLatency && (this.protectCamera.hints.transcodeHighLatencyBitrate > 0)) {
283
287
  targetBitrate = this.protectCamera.hints.transcodeHighLatencyBitrate;
@@ -286,91 +290,77 @@ export class ProtectStreamingDelegate {
286
290
  targetBitrate = this.protectCamera.hints.transcodeBitrate;
287
291
  }
288
292
  // If we're targeting a bitrate that's beyond the capabilities of our input channel, match the bitrate of the input channel.
289
- if (this.rtspEntry && (targetBitrate > (this.rtspEntry.channel.bitrate / 1000))) {
290
- targetBitrate = this.rtspEntry.channel.bitrate / 1000;
293
+ if (rtspEntry && (targetBitrate > (rtspEntry.channel.bitrate / 1000))) {
294
+ targetBitrate = rtspEntry.channel.bitrate / 1000;
291
295
  }
292
296
  }
293
297
  else {
294
- this.rtspEntry = this.protectCamera.findRtsp(request.video.width, request.video.height);
298
+ rtspEntry = this.protectCamera.findRtsp(overrideStream ? 3840 : request.video.width, overrideStream ? 2160 : request.video.height);
295
299
  }
296
- if (!this.rtspEntry) {
300
+ if (!rtspEntry) {
297
301
  const errorMessage = "Unable to start video stream: no valid RTSP stream profile was found.";
298
302
  this.log.error("%s %sx%s, %s fps, %s kbps.", errorMessage, request.video.width, request.video.height, request.video.fps, request.video.max_bit_rate.toLocaleString("en-US"));
299
303
  callback(new Error(this.protectCamera.name + ": " + errorMessage));
300
304
  return;
301
305
  }
302
- // Save our current bitrate before we modify it, but only if we're the first stream - we don't want to do this for concurrent streaming clients for this camera.
303
- if (!this.savedBitrate) {
304
- this.savedBitrate = this.protectCamera.getBitrate(this.rtspEntry.channel.id);
305
- if (this.savedBitrate < 0) {
306
- this.savedBitrate = 0;
307
- }
308
- }
309
- // Set the desired bitrate in Protect. We don't need to for this to return, because Protect
310
- // will adapt the stream once it processes the configuration change.
311
- await this.protectCamera.setBitrate(this.rtspEntry.channel.id, targetBitrate * 1000);
312
- // Set our packet size to be 564. Why? MPEG transport stream (TS) packets are 188 bytes in size each.
313
- // These packets transmit the video data that you ultimately see on your screen and are transmitted using
314
- // UDP. Each UDP packet is 1316 bytes in size, before being encapsulated in IP. We want to get as many
315
- // TS packets as we can, within reason, in those UDP packets. This translates to 1316 / 188 = 7 TS packets
316
- // as a limit of what can be pushed through a single UDP packet. Here's the problem...you need to have
317
- // enough data to fill that pipe, all the time. Network latency, FFmpeg overhead, and the speed / quality of
318
- // the original camera stream all play a role here, and as you can imagine, there's a nearly endless set of
319
- // combinations to decide how to best fill that pipe. Set it too low, and you're incurring extra overhead by
320
- // pushing less video data to clients in each packet, though you're increasing interactivity by getting
321
- // whatever data you have to the end user. Set it too high, and startup latency becomes unacceptable
322
- // when you begin a stream.
306
+ // If we have the timeshift buffer enabled, and it's the right quality channel, we use that as our livestream source. Otherwise, we revert to the RTSP stream from the
307
+ // Protect controller. Using the timeshift buffer has a few advantages.
323
308
  //
324
- // For audio, you have a latency problem and a packet size that's too big will force the audio to sound choppy
325
- // - so we opt to increase responsiveness at the risk of more overhead. This gives the end user a much better
326
- // audio experience, at a marginal cost in bandwidth overhead.
309
+ // - Typically, we have several seconds of video already queued up in the timeshift buffer, the FFmpeg startup process will get a significant speed up in performance.
310
+ // FFmpeg takes time at the beginning of each session to analyze the input before allowing you to perform any action. By using the timeshift buffer, we're able to
311
+ // give FFmpeg all that data right at the beginning, effectively reducing that startup time to the point of being imperceptible.
327
312
  //
328
- // Through experimentation, I've found a sweet spot of 188 * 3 = 564 for video on Protect cameras. In my testing,
329
- // adjusting the packet size beyond 564 did not have a material impact in improving the startup time, and often had
330
- // a negative impact.
331
- const videomtu = 188 * 3;
332
- const audiomtu = 188 * 1;
313
+ // - Since we are using an already existing connection to the Protect controller, we don't need to create another connection which incurs an additional delay, as well
314
+ // as a resource hit on the Protect controller.
315
+ const useApi = this.protectCamera.hints.apiStreaming && this.protectCamera.hints.timeshift &&
316
+ (!this.protectCamera.hints.streamingDefault || (this.protectCamera.hints.streamingDefault.toLowerCase() === this.hksv?.rtspEntry?.channel.name.toLowerCase()));
333
317
  // -hide_banner Suppress printing the startup banner in FFmpeg.
334
318
  // -nostats Suppress printing progress reports while encoding in FFmpeg.
335
319
  // -fflags flags Set format flags to discard any corrupt packets rather than exit.
336
- // -probesize number How many bytes should be analyzed for stream information.
337
320
  // -max_delay 500000 Set an upper limit on how much time FFmpeg can take in demuxing packets, in microseconds.
338
321
  // -flags low_delay Tell FFmpeg to optimize for low delay / realtime decoding.
339
- // -avioflags direct Tell FFmpeg to minimize buffering to reduce latency for more realtime processing.
340
- // -r fps Set the input frame rate for the video stream.
341
- // -rtsp_transport tcp Tell the RTSP stream handler that we're looking for a TCP connection.
342
- // -i this.rtspEntry.url RTSPS URL to get our input stream from.
343
- // -map 0:v:0 selects the first available video track from the stream. Protect actually maps audio
344
- // and video tracks in opposite locations from where FFmpeg typically expects them. This
345
- // setting is a more general solution than naming the track locations directly in case
346
- // Protect changes this in the future.
347
322
  //
348
323
  // Yes, we included these above as well: they need to be included for each I/O stream to maximize effectiveness it seems.
349
324
  const ffmpegArgs = [
350
325
  "-hide_banner",
351
326
  "-nostats",
352
- "-fflags", "+discardcorrupt",
327
+ "-fflags", "+discardcorrupt+genpts",
353
328
  ...this.ffmpegOptions.videoDecoder,
354
- "-probesize", this.probesize.toString(),
355
329
  "-max_delay", "500000",
356
330
  "-flags", "low_delay",
357
- "-avioflags", "direct",
358
- "-r", this.rtspEntry.channel.fps.toString(),
359
- "-rtsp_transport", "tcp",
360
- "-i", this.rtspEntry.url,
361
- "-map", "0:v:0"
331
+ "-copyts",
332
+ "-start_at_zero"
362
333
  ];
334
+ if (useApi) {
335
+ // -r fps Set the input frame rate for the video stream.
336
+ // -f mp4 Tell ffmpeg that it should expect an MP4-encoded input stream.
337
+ // -i pipe:0 Use standard input to get video data.
338
+ ffmpegArgs.push("-r", this.hksv?.rtspEntry?.channel.fps.toString() ?? "30", "-f", "mp4", "-i", "pipe:0");
339
+ }
340
+ else {
341
+ // -probesize number How many bytes should be analyzed for stream information.
342
+ // -avioflags direct Tell FFmpeg to minimize buffering to reduce latency for more realtime processing.
343
+ // -r fps Set the input frame rate for the video stream.
344
+ // -rtsp_transport tcp Tell the RTSP stream handler that we're looking for a TCP connection.
345
+ // -i rtspEntry.url RTSPS URL to get our input stream from.
346
+ ffmpegArgs.push("-probesize", this.probesize.toString(), "-avioflags", "direct", "-r", rtspEntry.channel.fps.toString(), "-rtsp_transport", "tcp", "-i", rtspEntry.url);
347
+ }
348
+ // -map 0:v:0 selects the first available video track from the stream. Protect actually maps audio
349
+ // and video tracks in opposite locations from where FFmpeg typically expects them. This
350
+ // setting is a more general solution than naming the track locations directly in case
351
+ // Protect changes this in the future.
352
+ ffmpegArgs.push("-map", "0:v:0");
363
353
  // Inform the user.
364
- this.log.info("Streaming request from %s%s: %sx%s@%sfps, %s kbps. %s %s, %s kbps.", sessionInfo.address, (request.audio.packet_time === 60) ? " (high latency connection)" : "", request.video.width, request.video.height, request.video.fps, targetBitrate.toLocaleString("en-US"), isTranscoding ? (this.protectCamera.hints.hardwareTranscoding ? "Hardware accelerated transcoding" : "Transcoding") : "Using", this.rtspEntry.name, (this.rtspEntry.channel.bitrate / 1000).toLocaleString("en-US"));
354
+ this.log.info("Streaming request from %s%s: %sx%s@%sfps, %s kbps. %s %s, %s kbps.", sessionInfo.address, (request.audio.packet_time === 60) ? " (high latency connection)" : "", request.video.width, request.video.height, request.video.fps, targetBitrate.toLocaleString("en-US"), isTranscoding ? (this.protectCamera.hints.hardwareTranscoding ? "Hardware accelerated transcoding" : "Transcoding") : "Using", rtspEntry.name + " [" + (useApi ? "API" : "RTSP") + "]", (rtspEntry.channel.bitrate / 1000).toLocaleString("en-US"));
365
355
  // Check to see if we're transcoding. If we are, set the right FFmpeg encoder options. If not, copy the video stream.
366
356
  if (isTranscoding) {
367
357
  // Configure our video parameters for transcoding.
368
358
  ffmpegArgs.push(...this.ffmpegOptions.streamEncoder({
369
359
  bitrate: targetBitrate,
370
- fps: this.rtspEntry.channel.fps,
360
+ fps: rtspEntry.channel.fps,
371
361
  height: request.video.height,
372
362
  idrInterval: PROTECT_HOMEKIT_IDR_INTERVAL,
373
- inputFps: this.rtspEntry.channel.fps,
363
+ inputFps: rtspEntry.channel.fps,
374
364
  level: request.video.level,
375
365
  profile: request.video.profile,
376
366
  width: request.video.width
@@ -379,9 +369,16 @@ export class ProtectStreamingDelegate {
379
369
  else {
380
370
  // Configure our video parameters for just copying the input stream from Protect - it tends to be quite solid in most cases:
381
371
  //
382
- // -vcodec copy Copy the stream withour reencoding it.
372
+ // -vcodec copy Copy the stream withour reencoding it.
383
373
  ffmpegArgs.push("-vcodec", "copy");
374
+ // The livestream API needs to be transmuxed before we use it directly.
375
+ if (useApi) {
376
+ // -r bsf:v h264_mp4toannexb Convert the livestream container format from MP4 to MPEG-TS.
377
+ ffmpegArgs.push("-bsf:v", "h264_mp4toannexb");
378
+ }
384
379
  }
380
+ // -reset_timestamps Reset timestamps for this stream instead of accepting what Protect gives us.
381
+ ffmpegArgs.push("-reset_timestamps", "1");
385
382
  // Add in any user-specified options for FFmpeg.
386
383
  if (this.platform.config.ffmpegOptions) {
387
384
  ffmpegArgs.push(...this.platform.config.ffmpegOptions);
@@ -394,7 +391,7 @@ export class ProtectStreamingDelegate {
394
391
  // -srtp_out_suite enc Specify the output encryption encoding suites.
395
392
  // -srtp_out_params params Specify the output encoding parameters. This is negotiated by HomeKit.
396
393
  ffmpegArgs.push("-payload_type", request.video.pt.toString(), "-ssrc", sessionInfo.videoSSRC.toString(), "-f", "rtp", "-srtp_out_suite", "AES_CM_128_HMAC_SHA1_80", "-srtp_out_params", sessionInfo.videoSRTP.toString("base64"), "srtp://" + sessionInfo.address + ":" + sessionInfo.videoPort.toString() + "?rtcpport=" + sessionInfo.videoPort.toString() +
397
- "&pkt_size=" + videomtu.toString());
394
+ "&pkt_size=" + request.video.mtu.toString());
398
395
  // Configure the audio portion of the command line, if we have a version of FFmpeg supports the audio codecs we need. Options we use are:
399
396
  //
400
397
  // -map 0:a:0? Selects the first available audio track from the stream, if it exists. Protect actually maps audio
@@ -448,8 +445,7 @@ export class ProtectStreamingDelegate {
448
445
  // -f rtp Specify that we're using the RTP protocol.
449
446
  // -srtp_out_suite enc Specify the output encryption encoding suites.
450
447
  // -srtp_out_params params Specify the output encoding parameters. This is negotiated by HomeKit.
451
- ffmpegArgs.push("-payload_type", request.audio.pt.toString(), "-ssrc", sessionInfo.audioSSRC.toString(), "-f", "rtp", "-srtp_out_suite", "AES_CM_128_HMAC_SHA1_80", "-srtp_out_params", sessionInfo.audioSRTP.toString("base64"), "srtp://" + sessionInfo.address + ":" + sessionInfo.audioPort.toString() + "?rtcpport=" + sessionInfo.audioPort.toString() +
452
- "&pkt_size=" + audiomtu.toString());
448
+ ffmpegArgs.push("-payload_type", request.audio.pt.toString(), "-ssrc", sessionInfo.audioSSRC.toString(), "-f", "rtp", "-srtp_out_suite", "AES_CM_128_HMAC_SHA1_80", "-srtp_out_params", sessionInfo.audioSRTP.toString("base64"), "srtp://" + sessionInfo.address + ":" + sessionInfo.audioPort.toString() + "?rtcpport=" + sessionInfo.audioPort.toString() + "&pkt_size=188");
453
449
  }
454
450
  // Additional logging, but only if we're debugging.
455
451
  if (this.platform.verboseFfmpeg || this.verboseFfmpeg) {
@@ -461,6 +457,42 @@ export class ProtectStreamingDelegate {
461
457
  // Combine everything and start an instance of FFmpeg.
462
458
  const ffmpegStream = new FfmpegStreamingProcess(this, request.sessionID, ffmpegArgs, (sessionInfo.hasAudioSupport && this.protectCamera.hints.twoWayAudio) ? undefined :
463
459
  { addressVersion: sessionInfo.addressVersion, port: sessionInfo.videoReturnPort }, callback);
460
+ if (useApi) {
461
+ const livestream = this.protectCamera.livestream.acquire(rtspEntry.channel.id, rtspEntry.lens);
462
+ let seenInitSegment = false;
463
+ // If we're using a timeshift buffer, let's use that to livestream. It has the dual benefit of reducing the workload on the Protect controller since it's already
464
+ // providing a livestream to us and it also improves performance by ensuring there's several seconds of video ready to immediately transmit.
465
+ const livestreamListener = async (segment) => {
466
+ if (!seenInitSegment) {
467
+ if (this.hksv?.timeshift.isStarted && (this.hksv?.timeshift.channel === rtspEntry.channel.id) && (this.hksv?.timeshift.lens === rtspEntry.lens)) {
468
+ ffmpegStream.stdin?.write(this.hksv?.timeshift.getLast(100) ?? (await livestream.getInitSegment()));
469
+ seenInitSegment = true;
470
+ }
471
+ else {
472
+ ffmpegStream.stdin?.write(await livestream.getInitSegment());
473
+ seenInitSegment = true;
474
+ }
475
+ }
476
+ // Send the segment to FFmpeg for processing.
477
+ ffmpegStream.stdin?.write(segment);
478
+ };
479
+ const closeListener = () => void ffmpegStream.ffmpegProcess?.stdin.end();
480
+ livestream.on("close", closeListener);
481
+ // Ensure we cleanup on exit.
482
+ ffmpegStream.ffmpegProcess?.once("exit", () => {
483
+ this.protectCamera.livestream.stop(rtspEntry.channel.id, rtspEntry.lens);
484
+ livestream.off("segment", livestreamListener);
485
+ livestream.off("close", closeListener);
486
+ });
487
+ // Transmit video from our livestream as soon as it arrives.
488
+ livestream.on("segment", livestreamListener);
489
+ // Kickoff our livestream.
490
+ if (!(await this.protectCamera.livestream.start(rtspEntry.channel.id, rtspEntry.lens))) {
491
+ livestream.off("segment", livestreamListener);
492
+ livestream.off("close", closeListener);
493
+ return;
494
+ }
495
+ }
464
496
  // Some housekeeping for our FFmpeg and demuxer sessions.
465
497
  this.ongoingSessions[request.sessionID] = {
466
498
  ffmpeg: [ffmpegStream],
@@ -544,6 +576,12 @@ export class ProtectStreamingDelegate {
544
576
  let isTalkbackLive = false;
545
577
  let dataListener;
546
578
  let openListener;
579
+ const wsCleanup = () => {
580
+ // Close the websocket.
581
+ if (ws?.readyState !== WebSocket.CLOSED) {
582
+ ws?.terminate();
583
+ }
584
+ };
547
585
  if (sessionInfo.talkBack) {
548
586
  // Open the talkback connection.
549
587
  ws = new WebSocket(sessionInfo.talkBack, { rejectUnauthorized: false });
@@ -551,16 +589,19 @@ export class ProtectStreamingDelegate {
551
589
  // Catch any errors and inform the user, if needed.
552
590
  ws?.once("error", (error) => {
553
591
  // Ignore timeout errors, but notify the user about anything else.
554
- if (error.code !== "ETIMEDOUT") {
592
+ if ((error.code !== "ETIMEDOUT") &&
593
+ !error.toString().startsWith("Error: WebSocket was closed before the connection was established")) {
555
594
  this.log.error("Error in communicating with the return audio channel: %s", error);
556
595
  }
557
- ws?.terminate();
596
+ // Clean up our talkback websocket.
597
+ wsCleanup();
558
598
  });
559
599
  // Catch any stray open events after we've closed.
560
600
  ws?.on("open", openListener = () => {
561
601
  // If we've somehow opened after we've wrapped up talkback, terminate the connection.
562
602
  if (!isTalkbackLive) {
563
- ws?.terminate();
603
+ // Clean up our talkback websocket.
604
+ wsCleanup();
564
605
  }
565
606
  });
566
607
  // Cleanup after ourselves on close.
@@ -574,7 +615,7 @@ export class ProtectStreamingDelegate {
574
615
  // If we've already closed the RTP demuxer, we're done here,
575
616
  if (!sessionInfo.rtpDemuxer.isRunning) {
576
617
  // Clean up our talkback websocket.
577
- ws?.terminate();
618
+ wsCleanup();
578
619
  return;
579
620
  }
580
621
  }
@@ -587,10 +628,9 @@ export class ProtectStreamingDelegate {
587
628
  // Send the audio.
588
629
  ffmpegReturnAudio.stdout?.on("data", dataListener = (data) => {
589
630
  ws?.send(data, (error) => {
590
- // This happens when an error condition is encountered on sending data to the websocket.
591
- // We assume the worst and close our talkback channel.
631
+ // This happens when an error condition is encountered on sending data to the websocket. We assume the worst and close our talkback channel.
592
632
  if (error) {
593
- ws?.terminate();
633
+ wsCleanup();
594
634
  }
595
635
  });
596
636
  });
@@ -598,10 +638,8 @@ export class ProtectStreamingDelegate {
598
638
  ffmpegReturnAudio.ffmpegProcess?.once("exit", () => {
599
639
  // Make sure we catch any stray connections that may be too slow to open.
600
640
  isTalkbackLive = false;
601
- // Close the websocket.
602
- if ((ws?.readyState === WebSocket.CLOSING) || (ws?.readyState === WebSocket.OPEN)) {
603
- ws?.terminate();
604
- }
641
+ // Clean up our talkback websocket.
642
+ wsCleanup();
605
643
  ffmpegReturnAudio.stdout?.off("data", dataListener);
606
644
  });
607
645
  }
@@ -618,10 +656,6 @@ export class ProtectStreamingDelegate {
618
656
  case "reconfigure" /* StreamRequestTypes.RECONFIGURE */:
619
657
  // Once FFmpeg is updated to support this, we'll enable this one.
620
658
  this.log.debug("Streaming parameters adjustment requested by HomeKit: %sx%s, %s fps, %s kbps.", request.video.width, request.video.height, request.video.fps, request.video.max_bit_rate.toLocaleString("en-US"));
621
- // Set the desired bitrate in Protect.
622
- if (this.rtspEntry) {
623
- await this.protectCamera.setBitrate(this.rtspEntry.channel.id, request.video.max_bit_rate * 1000);
624
- }
625
659
  callback();
626
660
  break;
627
661
  case "stop" /* StreamRequestTypes.STOP */:
@@ -636,9 +670,7 @@ export class ProtectStreamingDelegate {
636
670
  try {
637
671
  // Stop any FFmpeg instances we have running.
638
672
  if (this.ongoingSessions[sessionId]) {
639
- for (const ffmpegProcess of this.ongoingSessions[sessionId].ffmpeg) {
640
- ffmpegProcess.stop();
641
- }
673
+ this.ongoingSessions[sessionId].ffmpeg.map(ffmpegProcess => ffmpegProcess.stop());
642
674
  // Close the demuxer, if we have one.
643
675
  this.ongoingSessions[sessionId].rtpDemuxer?.close();
644
676
  // Inform the user.
@@ -654,20 +686,6 @@ export class ProtectStreamingDelegate {
654
686
  // Delete the entries.
655
687
  delete this.pendingSessions[sessionId];
656
688
  delete this.ongoingSessions[sessionId];
657
- // If we've completed all streaming sessions, restore any changed settings, such as bitrate, for HomeKit Secure Video.
658
- if (!this.ongoingSessions.length) {
659
- if (this.hksv?.isRecording) {
660
- // Restart the timeshift buffer now that we've stopped streaming.
661
- await this.hksv.restartTimeshifting();
662
- }
663
- else if (this.savedBitrate) {
664
- // Restore our original bitrate.
665
- if (this.rtspEntry) {
666
- await this.protectCamera.setBitrate(this.rtspEntry.channel.id, this.savedBitrate);
667
- }
668
- this.savedBitrate = 0;
669
- }
670
- }
671
689
  }
672
690
  catch (error) {
673
691
  this.log.error("Error occurred while ending the FFmpeg video processes: %s.", error);