camera.ui3 0.0.30-alpha.0 → 0.0.30-alpha.3

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 (390) hide show
  1. package/dist/interface/@camera.ui.DuwfK59t.0.0.30-alpha.3.js +3 -0
  2. package/dist/interface/@tanstack.DBBaUHTS.0.0.30-alpha.3.js +1 -0
  3. package/dist/interface/{@vee-validate.0Cv0x9aN.0.0.30-alpha.0.js → @vee-validate.BRR3_tWq.0.0.30-alpha.3.js} +1 -1
  4. package/dist/interface/@vue.BeJw0wEm.0.0.30-alpha.3.js +17 -0
  5. package/dist/interface/{@vueform.Du_niMHk.0.0.30-alpha.0.js → @vueform.Dcx-RQUw.0.0.30-alpha.3.js} +1 -1
  6. package/dist/interface/{@vueuse.Dv9U068T.0.0.30-alpha.0.js → @vueuse.Sz46sDez.0.0.30-alpha.3.js} +1 -1
  7. package/dist/interface/Account.hmetZWTc.0.0.30-alpha.3.js +1 -0
  8. package/dist/interface/Adminpanel.DxC80W0K.0.0.30-alpha.3.js +2 -0
  9. package/dist/interface/Appearance.BHZdWQlZ.0.0.30-alpha.3.js +1 -0
  10. package/dist/interface/Backup.petPSq60.0.0.30-alpha.3.js +1 -0
  11. package/dist/interface/Camera.DS7gbgwV.0.0.30-alpha.3.js +1 -0
  12. package/dist/interface/Cameras.eqceAkdR.0.0.30-alpha.3.js +1 -0
  13. package/dist/interface/Camview.DumV6nmv.0.0.30-alpha.3.js +1 -0
  14. package/dist/interface/Config.DQ5vyHcx.0.0.30-alpha.3.js +1 -0
  15. package/dist/interface/Console.CWp-LL5w.0.0.30-alpha.3.js +4 -0
  16. package/dist/interface/FirstSteps.DR2B1Gmx.0.0.30-alpha.3.js +1 -0
  17. package/dist/interface/{NewCamera.Kn9biZIb.0.0.30-alpha.0.js → NewCamera.CpENkWIP.0.0.30-alpha.3.js} +2 -2
  18. package/dist/interface/Plugin.KK2gWYUL.0.0.30-alpha.3.js +1 -0
  19. package/dist/interface/Plugins.Dy1rL-Pc.0.0.30-alpha.3.js +1 -0
  20. package/dist/interface/Recordings.Bny11D38.0.0.30-alpha.3.js +1 -0
  21. package/dist/interface/Recordings.IdGxswmI.0.0.30-alpha.3.js +1 -0
  22. package/dist/interface/Settings.D6l7BlOF.0.0.30-alpha.3.js +1 -0
  23. package/dist/interface/System.FIkCpF0A.0.0.30-alpha.3.js +4 -0
  24. package/dist/interface/User.By9sAd8k.0.0.30-alpha.3.js +1 -0
  25. package/dist/interface/VConfigEditor.vue_vue_type_script_setup_true_lang.C7ZcC7dX.0.0.30-alpha.3.js +2 -0
  26. package/dist/interface/{VConsole.BT0UxZb1.0.0.30-alpha.0.js → VConsole.BG4nEIk8.0.0.30-alpha.3.js} +1 -1
  27. package/dist/interface/VPlayer.CZqXCM-i.0.0.30-alpha.3.js +1 -0
  28. package/dist/interface/{VPluginCard.Bz3GmzAE.0.0.30-alpha.0.js → VPluginCard.B_M3puzM.0.0.30-alpha.3.js} +2 -2
  29. package/dist/interface/{ace-builds.SRW0xGs1.0.0.30-alpha.0.js → ace-builds.D4S-MJ6b.0.0.30-alpha.3.js} +1 -1
  30. package/dist/interface/{apexcharts.BV8prH5x.0.0.30-alpha.0.js → apexcharts.u0duws01.0.0.30-alpha.3.js} +1 -1
  31. package/dist/interface/{dnd-core.BdsXoke-.0.0.30-alpha.0.js → dnd-core.C4232Xyz.0.0.30-alpha.3.js} +1 -1
  32. package/dist/interface/{draggabilly.D9j4BYFu.0.0.30-alpha.0.js → draggabilly.Xgwn1bT3.0.0.30-alpha.3.js} +1 -1
  33. package/dist/interface/{engine.io-client.di4Pt8W8.0.0.30-alpha.0.js → engine.io-client.CUastNh3.0.0.30-alpha.3.js} +1 -1
  34. package/dist/interface/{ev-emitter.Dxl4QoSg.0.0.30-alpha.0.js → ev-emitter.BYRnnQXb.0.0.30-alpha.3.js} +1 -1
  35. package/dist/interface/{fast-deep-equal.BUna8KlC.0.0.30-alpha.0.js → fast-deep-equal.CqwdqDxW.0.0.30-alpha.3.js} +1 -1
  36. package/dist/interface/{highlight.js.CMosnU3p.0.0.30-alpha.0.js → highlight.js.sNLmnsuC.0.0.30-alpha.3.js} +1 -1
  37. package/dist/interface/index.html +34 -33
  38. package/dist/interface/{linkify-it.B9RFwlcp.0.0.30-alpha.0.js → linkify-it.8PrPWg7W.0.0.30-alpha.3.js} +1 -1
  39. package/dist/interface/main.gxLiydtV.0.0.30-alpha.3.js +2 -0
  40. package/dist/interface/{markdown-it.DAiultxC.0.0.30-alpha.0.js → markdown-it.Q4_2MGLy.0.0.30-alpha.3.js} +1 -1
  41. package/dist/interface/{nprogress.C2KbBHcZ.0.0.30-alpha.0.js → nprogress.DQYtKLt9.0.0.30-alpha.3.js} +1 -1
  42. package/dist/interface/{pinia.DRjp4GU7.0.0.30-alpha.0.js → pinia.DcgsdRJU.0.0.30-alpha.3.js} +2 -2
  43. package/dist/interface/{plugins.Ur_7V4x8.0.0.30-alpha.0.js → plugins.DZjXmoDp.0.0.30-alpha.3.js} +1 -1
  44. package/dist/interface/{qrcode.DrYVb5am.0.0.30-alpha.0.js → qrcode.XqSuoGPb.0.0.30-alpha.3.js} +1 -1
  45. package/dist/interface/{react-dnd-touch-backend.ByHGbrKq.0.0.30-alpha.0.js → react-dnd-touch-backend.VzlzWkdX.0.0.30-alpha.3.js} +1 -1
  46. package/dist/interface/{rxjs.Dl5P76vZ.0.0.30-alpha.0.js → rxjs.CXnJywSk.0.0.30-alpha.3.js} +1 -1
  47. package/dist/interface/{socket.io-client.Cf7ABgrO.0.0.30-alpha.0.js → socket.io-client.DiiooL5k.0.0.30-alpha.3.js} +1 -1
  48. package/dist/interface/{socket.io-parser.DHnwqfTj.0.0.30-alpha.0.js → socket.io-parser.Dsh2ZviN.0.0.30-alpha.3.js} +1 -1
  49. package/dist/interface/sw.js +1 -1
  50. package/dist/interface/{system.CRn9Cy3C.0.0.30-alpha.0.js → system.Bh4wNIkr.0.0.30-alpha.3.js} +1 -1
  51. package/dist/interface/{ui.C-XbEPHk.0.0.30-alpha.0.js → ui.B0YwbqBU.0.0.30-alpha.3.js} +1 -1
  52. package/dist/interface/{unidragger.zHlf1Df_.0.0.30-alpha.0.js → unidragger.DDL70rPA.0.0.30-alpha.3.js} +1 -1
  53. package/dist/interface/utils.mAKpSMLY.0.0.30-alpha.3.js +1 -0
  54. package/dist/interface/{v-calendar.CapJoEkJ.0.0.30-alpha.0.js → v-calendar.C8Yj7x1Q.0.0.30-alpha.3.js} +1 -1
  55. package/dist/interface/{vee-validate.DcgOEpak.0.0.30-alpha.0.js → vee-validate.BbcoErf-.0.0.30-alpha.3.js} +2 -2
  56. package/dist/interface/{vue-i18n.D2pqkMP3.0.0.30-alpha.0.js → vue-i18n.B7m8y9GA.0.0.30-alpha.3.js} +2 -2
  57. package/dist/interface/{vue-inline-svg.DorOTPIf.0.0.30-alpha.0.js → vue-inline-svg.DC2U7Qim.0.0.30-alpha.3.js} +1 -1
  58. package/dist/interface/{vue-router.BVs4qaVs.0.0.30-alpha.0.js → vue-router.B3QeItm5.0.0.30-alpha.3.js} +2 -2
  59. package/dist/interface/{vue3-apexcharts.CBV9x5vk.0.0.30-alpha.0.js → vue3-apexcharts.DVzl7xGy.0.0.30-alpha.3.js} +1 -1
  60. package/dist/interface/{vue3-dnd.CXMddGIZ.0.0.30-alpha.0.js → vue3-dnd.76cFMD9V.0.0.30-alpha.3.js} +1 -1
  61. package/dist/interface/{vue3-toastify.DE7YmDSX.0.0.30-alpha.0.js → vue3-toastify.B-AJ7WuP.0.0.30-alpha.3.js} +1 -1
  62. package/dist/interface/{vuetify.CYxxHEVN.0.0.30-alpha.0.js → vuetify.CYln2r6g.0.0.30-alpha.3.js} +1 -1
  63. package/dist/interface/zod.DnW1_kUe.0.0.30-alpha.3.js +1 -0
  64. package/dist/server/bin/cameraui.js +10 -7
  65. package/dist/server/bin/cameraui.js.map +1 -1
  66. package/dist/server/bin/fork.js +2 -2
  67. package/dist/server/bin/fork.js.map +1 -1
  68. package/dist/server/bin/installer/darwin.js +1 -1
  69. package/dist/server/bin/installer/darwin.js.map +1 -1
  70. package/dist/server/bin/installer/linux.js +1 -1
  71. package/dist/server/bin/installer/linux.js.map +1 -1
  72. package/dist/server/package.json +11 -15
  73. package/dist/server/src/api/controllers/backup.controller.js.map +1 -1
  74. package/dist/server/src/api/controllers/cameras.controller.js +1 -1
  75. package/dist/server/src/api/controllers/cameras.controller.js.map +1 -1
  76. package/dist/server/src/api/controllers/frameWorkers.controller.js +1 -1
  77. package/dist/server/src/api/controllers/frameWorkers.controller.js.map +1 -1
  78. package/dist/server/src/api/controllers/plugins.controller.js +1 -2
  79. package/dist/server/src/api/controllers/plugins.controller.js.map +1 -1
  80. package/dist/server/src/api/controllers/system.controller.js +1 -3
  81. package/dist/server/src/api/controllers/system.controller.js.map +1 -1
  82. package/dist/server/src/api/controllers/users.controller.js +2 -2
  83. package/dist/server/src/api/controllers/users.controller.js.map +1 -1
  84. package/dist/server/src/api/database/constants.d.ts +8 -0
  85. package/dist/server/src/api/database/constants.js +9 -0
  86. package/dist/server/src/api/database/constants.js.map +1 -0
  87. package/dist/server/src/api/database/index.d.ts +0 -8
  88. package/dist/server/src/api/database/index.js +14 -21
  89. package/dist/server/src/api/database/index.js.map +1 -1
  90. package/dist/server/src/api/database/migration.js +5 -4
  91. package/dist/server/src/api/database/migration.js.map +1 -1
  92. package/dist/server/src/api/database/types.d.ts +6 -6
  93. package/dist/server/src/api/go2rtc/api/application.js +1 -1
  94. package/dist/server/src/api/go2rtc/api/application.js.map +1 -1
  95. package/dist/server/src/api/index.js.map +1 -1
  96. package/dist/server/src/api/plugins/logger.plugin.js.map +1 -1
  97. package/dist/server/src/api/schemas/cameras.schema.d.ts +71 -71
  98. package/dist/server/src/api/schemas/config.schema.d.ts +6 -6
  99. package/dist/server/src/api/schemas/go2rtc.schema.d.ts +98 -98
  100. package/dist/server/src/api/schemas/users.schema.d.ts +116 -116
  101. package/dist/server/src/api/services/auth.service.js +1 -1
  102. package/dist/server/src/api/services/auth.service.js.map +1 -1
  103. package/dist/server/src/api/services/backup.service.js.map +1 -1
  104. package/dist/server/src/api/services/cameras.service.js +1 -1
  105. package/dist/server/src/api/services/cameras.service.js.map +1 -1
  106. package/dist/server/src/api/services/system.service.js +1 -1
  107. package/dist/server/src/api/services/system.service.js.map +1 -1
  108. package/dist/server/src/api/services/users.service.js +1 -1
  109. package/dist/server/src/api/services/users.service.js.map +1 -1
  110. package/dist/server/src/api/types/index.d.ts +2 -2
  111. package/dist/server/src/api/types/index.js.map +1 -1
  112. package/dist/server/src/api/utils/cert.js.map +1 -1
  113. package/dist/server/src/api/websocket/index.js.map +1 -1
  114. package/dist/server/src/api/websocket/nsp/notifications.js.map +1 -1
  115. package/dist/server/src/api/websocket/nsp/server.js +1 -1
  116. package/dist/server/src/api/websocket/nsp/server.js.map +1 -1
  117. package/dist/server/src/api.d.ts +1 -7
  118. package/dist/server/src/api.js.map +1 -1
  119. package/dist/server/src/camera/controller.d.ts +4 -6
  120. package/dist/server/src/camera/controller.js +5 -8
  121. package/dist/server/src/camera/controller.js.map +1 -1
  122. package/dist/server/src/camera/types.d.ts +140 -13
  123. package/dist/server/src/camera/types.js.map +1 -1
  124. package/dist/server/src/decoder/index.js.map +1 -1
  125. package/dist/server/src/decoder/types.d.ts +1 -18
  126. package/dist/server/src/decoder/worker.d.ts +3 -2
  127. package/dist/server/src/decoder/worker.js +10 -22
  128. package/dist/server/src/decoder/worker.js.map +1 -1
  129. package/dist/server/src/go2rtc/index.js +2 -3
  130. package/dist/server/src/go2rtc/index.js.map +1 -1
  131. package/dist/server/src/main.js +3 -3
  132. package/dist/server/src/main.js.map +1 -1
  133. package/dist/server/src/nats/index.d.ts +3 -4
  134. package/dist/server/src/nats/index.js +1 -3
  135. package/dist/server/src/nats/index.js.map +1 -1
  136. package/dist/server/src/nats/proxy/cameraDevice.d.ts +2 -2
  137. package/dist/server/src/nats/proxy/coreManager.d.ts +4 -2
  138. package/dist/server/src/nats/proxy/coreManager.js +7 -0
  139. package/dist/server/src/nats/proxy/coreManager.js.map +1 -1
  140. package/dist/server/src/nats/proxy/deviceManager.d.ts +5 -5
  141. package/dist/server/src/nats/proxy/deviceManager.js +4 -2
  142. package/dist/server/src/nats/proxy/deviceManager.js.map +1 -1
  143. package/dist/server/src/nats/server.js +2 -3
  144. package/dist/server/src/nats/server.js.map +1 -1
  145. package/dist/server/src/nats/types.d.ts +19 -32
  146. package/dist/server/src/nats/utils.d.ts +1 -1
  147. package/dist/server/src/nats/websocket.js.map +1 -1
  148. package/dist/server/src/plugins/index.js +11 -9
  149. package/dist/server/src/plugins/index.js.map +1 -1
  150. package/dist/server/src/plugins/interfaces/base.d.ts +1 -1
  151. package/dist/server/src/plugins/plugin.d.ts +1 -1
  152. package/dist/server/src/plugins/plugin.js +4 -4
  153. package/dist/server/src/plugins/plugin.js.map +1 -1
  154. package/dist/server/src/plugins/types.d.ts +36 -3
  155. package/dist/server/src/plugins/types.js.map +1 -1
  156. package/dist/server/src/plugins/worker.js +7 -16
  157. package/dist/server/src/plugins/worker.js.map +1 -1
  158. package/dist/server/src/services/config/constants.js +2 -2
  159. package/dist/server/src/services/config/constants.js.map +1 -1
  160. package/dist/server/src/services/config/index.d.ts +2 -0
  161. package/dist/server/src/services/config/index.js +10 -2
  162. package/dist/server/src/services/config/index.js.map +1 -1
  163. package/dist/server/src/services/logger/index.d.ts +4 -16
  164. package/dist/server/src/services/logger/index.js +4 -83
  165. package/dist/server/src/services/logger/index.js.map +1 -1
  166. package/dist/server/src/services/logger/types.d.ts +8 -0
  167. package/dist/server/src/services/logger/types.js +2 -0
  168. package/dist/server/src/services/logger/types.js.map +1 -0
  169. package/localdeps.txt +4 -0
  170. package/package.json +11 -15
  171. package/dist/interface/@tanstack.DYQ7Jj8U.0.0.30-alpha.0.js +0 -1
  172. package/dist/interface/@vue.CvjRlaU6.0.0.30-alpha.0.js +0 -17
  173. package/dist/interface/Account.Dm2FouAU.0.0.30-alpha.0.js +0 -1
  174. package/dist/interface/Adminpanel.B2Aiobnt.0.0.30-alpha.0.js +0 -2
  175. package/dist/interface/Appearance.EfH0tMdM.0.0.30-alpha.0.js +0 -1
  176. package/dist/interface/Backup.D8SRclhB.0.0.30-alpha.0.js +0 -1
  177. package/dist/interface/Camera.D-cOf4sS.0.0.30-alpha.0.js +0 -1
  178. package/dist/interface/Cameras.oolxbmXU.0.0.30-alpha.0.js +0 -1
  179. package/dist/interface/Camview.BHw8Pe3v.0.0.30-alpha.0.js +0 -1
  180. package/dist/interface/Config.DmPTI5iz.0.0.30-alpha.0.js +0 -1
  181. package/dist/interface/Console.Dq4khHFF.0.0.30-alpha.0.js +0 -4
  182. package/dist/interface/FirstSteps.Bo467abx.0.0.30-alpha.0.js +0 -1
  183. package/dist/interface/Plugin.BLTVcTt1.0.0.30-alpha.0.js +0 -1
  184. package/dist/interface/Plugins.Cp8mK__o.0.0.30-alpha.0.js +0 -1
  185. package/dist/interface/Recordings.B_JIFk_G.0.0.30-alpha.0.js +0 -1
  186. package/dist/interface/Recordings.gMbvwmk_.0.0.30-alpha.0.js +0 -1
  187. package/dist/interface/Settings.EhHJjGrl.0.0.30-alpha.0.js +0 -1
  188. package/dist/interface/System.VodoK0U6.0.0.30-alpha.0.js +0 -4
  189. package/dist/interface/User.DpcN7DEC.0.0.30-alpha.0.js +0 -1
  190. package/dist/interface/VConfigEditor.vue_vue_type_script_setup_true_lang.Br68bfQJ.0.0.30-alpha.0.js +0 -2
  191. package/dist/interface/VPlayer.DYua3Eh_.0.0.30-alpha.0.js +0 -1
  192. package/dist/interface/main.19pRAqPU.0.0.30-alpha.0.js +0 -4
  193. package/dist/interface/utils.BvINh1mj.0.0.30-alpha.0.js +0 -1
  194. package/dist/interface/zod.BaF2dDCd.0.0.30-alpha.0.js +0 -1
  195. package/dist/server/src/camera/device.d.ts +0 -29
  196. package/dist/server/src/camera/device.js +0 -20
  197. package/dist/server/src/camera/device.js.map +0 -1
  198. package/dist/server/src/camera/index.d.ts +0 -90
  199. package/dist/server/src/camera/index.js +0 -581
  200. package/dist/server/src/camera/index.js.map +0 -1
  201. package/dist/server/src/camera/interfaces/camera.d.ts +0 -10
  202. package/dist/server/src/camera/interfaces/camera.js +0 -23
  203. package/dist/server/src/camera/interfaces/camera.js.map +0 -1
  204. package/dist/server/src/camera/interfaces/prebuffer.d.ts +0 -11
  205. package/dist/server/src/camera/interfaces/prebuffer.js +0 -31
  206. package/dist/server/src/camera/interfaces/prebuffer.js.map +0 -1
  207. package/dist/server/src/camera/interfaces/ptz.d.ts +0 -13
  208. package/dist/server/src/camera/interfaces/ptz.js +0 -47
  209. package/dist/server/src/camera/interfaces/ptz.js.map +0 -1
  210. package/dist/server/src/camera/iou.d.ts +0 -2
  211. package/dist/server/src/camera/iou.js +0 -53
  212. package/dist/server/src/camera/iou.js.map +0 -1
  213. package/dist/server/src/camera/polygon.d.ts +0 -6
  214. package/dist/server/src/camera/polygon.js +0 -151
  215. package/dist/server/src/camera/polygon.js.map +0 -1
  216. package/dist/server/src/camera/streaming/peer-connection.d.ts +0 -55
  217. package/dist/server/src/camera/streaming/peer-connection.js +0 -203
  218. package/dist/server/src/camera/streaming/peer-connection.js.map +0 -1
  219. package/dist/server/src/camera/streaming/webrtc-connection.d.ts +0 -35
  220. package/dist/server/src/camera/streaming/webrtc-connection.js +0 -170
  221. package/dist/server/src/camera/streaming/webrtc-connection.js.map +0 -1
  222. package/dist/server/src/camera/streaming/werift-session.d.ts +0 -41
  223. package/dist/server/src/camera/streaming/werift-session.js +0 -179
  224. package/dist/server/src/camera/streaming/werift-session.js.map +0 -1
  225. package/dist/server/src/camera/videoFrame.d.ts +0 -24
  226. package/dist/server/src/camera/videoFrame.js +0 -104
  227. package/dist/server/src/camera/videoFrame.js.map +0 -1
  228. package/dist/server/src/index.d.ts +0 -18
  229. package/dist/server/src/index.js +0 -5
  230. package/dist/server/src/index.js.map +0 -1
  231. package/dist/server/src/nats/connection.d.ts +0 -17
  232. package/dist/server/src/nats/connection.js +0 -66
  233. package/dist/server/src/nats/connection.js.map +0 -1
  234. package/dist/server/src/nats/constants.d.ts +0 -1
  235. package/dist/server/src/nats/constants.js +0 -2
  236. package/dist/server/src/nats/constants.js.map +0 -1
  237. package/dist/server/src/nats/error.d.ts +0 -9
  238. package/dist/server/src/nats/error.js +0 -11
  239. package/dist/server/src/nats/error.js.map +0 -1
  240. package/dist/server/src/nats/messageQueue.d.ts +0 -20
  241. package/dist/server/src/nats/messageQueue.js +0 -132
  242. package/dist/server/src/nats/messageQueue.js.map +0 -1
  243. package/dist/server/src/nats/subscription.d.ts +0 -12
  244. package/dist/server/src/nats/subscription.js +0 -21
  245. package/dist/server/src/nats/subscription.js.map +0 -1
  246. package/dist/server/src/polyglot/node/decoder/child.d.ts +0 -1
  247. package/dist/server/src/polyglot/node/decoder/child.js +0 -644
  248. package/dist/server/src/polyglot/node/decoder/child.js.map +0 -1
  249. package/dist/server/src/polyglot/node/decoder/imageUtils.d.ts +0 -24
  250. package/dist/server/src/polyglot/node/decoder/imageUtils.js +0 -205
  251. package/dist/server/src/polyglot/node/decoder/imageUtils.js.map +0 -1
  252. package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.d.ts +0 -144
  253. package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.js +0 -65
  254. package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.wasm +0 -0
  255. package/dist/server/src/polyglot/node/decoder/wasm/test/imageUtils.py +0 -106
  256. package/dist/server/src/polyglot/node/plugins/cameraStorage.d.ts +0 -107
  257. package/dist/server/src/polyglot/node/plugins/cameraStorage.js +0 -292
  258. package/dist/server/src/polyglot/node/plugins/cameraStorage.js.map +0 -1
  259. package/dist/server/src/polyglot/node/plugins/child.d.ts +0 -28
  260. package/dist/server/src/polyglot/node/plugins/child.js +0 -222
  261. package/dist/server/src/polyglot/node/plugins/child.js.map +0 -1
  262. package/dist/server/src/polyglot/node/plugins/configService.d.ts +0 -104
  263. package/dist/server/src/polyglot/node/plugins/configService.js +0 -213
  264. package/dist/server/src/polyglot/node/plugins/configService.js.map +0 -1
  265. package/dist/server/src/polyglot/node/plugins/pluginApi.d.ts +0 -35
  266. package/dist/server/src/polyglot/node/plugins/pluginApi.js +0 -23
  267. package/dist/server/src/polyglot/node/plugins/pluginApi.js.map +0 -1
  268. package/dist/server/src/polyglot/node/plugins/pluginLogger.d.ts +0 -18
  269. package/dist/server/src/polyglot/node/plugins/pluginLogger.js +0 -89
  270. package/dist/server/src/polyglot/node/plugins/pluginLogger.js.map +0 -1
  271. package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.d.ts +0 -69
  272. package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.js +0 -423
  273. package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.js.map +0 -1
  274. package/dist/server/src/polyglot/node/plugins/proxy/coreManager.d.ts +0 -40
  275. package/dist/server/src/polyglot/node/plugins/proxy/coreManager.js +0 -105
  276. package/dist/server/src/polyglot/node/plugins/proxy/coreManager.js.map +0 -1
  277. package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.d.ts +0 -47
  278. package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.js +0 -164
  279. package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.js.map +0 -1
  280. package/dist/server/src/polyglot/node/plugins/schema.d.ts +0 -293
  281. package/dist/server/src/polyglot/node/plugins/schema.js +0 -740
  282. package/dist/server/src/polyglot/node/plugins/schema.js.map +0 -1
  283. package/dist/server/src/polyglot/node/plugins/storageController.d.ts +0 -30
  284. package/dist/server/src/polyglot/node/plugins/storageController.js +0 -40
  285. package/dist/server/src/polyglot/node/plugins/storageController.js.map +0 -1
  286. package/dist/server/src/polyglot/python/camera/interfaces/camera.py +0 -20
  287. package/dist/server/src/polyglot/python/camera/interfaces/prebuffer.py +0 -28
  288. package/dist/server/src/polyglot/python/camera/interfaces/ptz.py +0 -38
  289. package/dist/server/src/polyglot/python/camera/iou.py +0 -80
  290. package/dist/server/src/polyglot/python/camera/polygon.py +0 -173
  291. package/dist/server/src/polyglot/python/camera/video_frame.py +0 -188
  292. package/dist/server/src/polyglot/python/camera_ui_types/__init__.py +0 -1200
  293. package/dist/server/src/polyglot/python/decoder/child.py +0 -882
  294. package/dist/server/src/polyglot/python/decoder/image_utils.py +0 -149
  295. package/dist/server/src/polyglot/python/decoder/typings.py +0 -99
  296. package/dist/server/src/polyglot/python/plugins/camera_storage.py +0 -391
  297. package/dist/server/src/polyglot/python/plugins/child.py +0 -394
  298. package/dist/server/src/polyglot/python/plugins/config_service.py +0 -187
  299. package/dist/server/src/polyglot/python/plugins/constants.py +0 -1
  300. package/dist/server/src/polyglot/python/plugins/message_queue.py +0 -182
  301. package/dist/server/src/polyglot/python/plugins/plugin_api.py +0 -34
  302. package/dist/server/src/polyglot/python/plugins/plugin_logger.py +0 -111
  303. package/dist/server/src/polyglot/python/plugins/proxy/camera_device.py +0 -1599
  304. package/dist/server/src/polyglot/python/plugins/proxy/core_manager.py +0 -145
  305. package/dist/server/src/polyglot/python/plugins/proxy/device_manager.py +0 -226
  306. package/dist/server/src/polyglot/python/plugins/schema.py +0 -181
  307. package/dist/server/src/polyglot/python/plugins/storage_controller.py +0 -58
  308. package/dist/server/src/polyglot/python/plugins/typings.py +0 -253
  309. package/dist/server/src/polyglot/python/utilities/connection.py +0 -86
  310. package/dist/server/src/polyglot/python/utilities/json_lmdb.py +0 -19
  311. package/dist/server/src/polyglot/python/utilities/object_path.py +0 -195
  312. package/dist/server/src/polyglot/python/utilities/packer.py +0 -11
  313. package/dist/server/src/polyglot/python/utilities/subscriptions.py +0 -22
  314. package/dist/server/src/polyglot/python/utilities/task.py +0 -35
  315. package/dist/server/src/polyglot/python/utilities/thread.py +0 -10
  316. package/dist/server/src/polyglot/python/utilities/utils.py +0 -73
  317. package/dist/server/src/utils/ffmpeg.d.ts +0 -2
  318. package/dist/server/src/utils/ffmpeg.js +0 -61
  319. package/dist/server/src/utils/ffmpeg.js.map +0 -1
  320. package/dist/server/src/utils/network.d.ts +0 -12
  321. package/dist/server/src/utils/network.js +0 -92
  322. package/dist/server/src/utils/network.js.map +0 -1
  323. package/dist/server/src/utils/npm.d.ts +0 -4
  324. package/dist/server/src/utils/npm.js +0 -128
  325. package/dist/server/src/utils/npm.js.map +0 -1
  326. package/dist/server/src/utils/packer.d.ts +0 -2
  327. package/dist/server/src/utils/packer.js +0 -17
  328. package/dist/server/src/utils/packer.js.map +0 -1
  329. package/dist/server/src/utils/pythonInstaller.d.ts +0 -48
  330. package/dist/server/src/utils/pythonInstaller.js +0 -494
  331. package/dist/server/src/utils/pythonInstaller.js.map +0 -1
  332. package/dist/server/src/utils/reader.d.ts +0 -5
  333. package/dist/server/src/utils/reader.js +0 -41
  334. package/dist/server/src/utils/reader.js.map +0 -1
  335. package/dist/server/src/utils/subscribed.d.ts +0 -9
  336. package/dist/server/src/utils/subscribed.js +0 -17
  337. package/dist/server/src/utils/subscribed.js.map +0 -1
  338. package/dist/server/src/utils/utils.d.ts +0 -10
  339. package/dist/server/src/utils/utils.js +0 -165
  340. package/dist/server/src/utils/utils.js.map +0 -1
  341. /package/dist/interface/{@babel.l0sNRNKZ.0.0.30-alpha.0.js → @babel.l0sNRNKZ.0.0.30-alpha.3.js} +0 -0
  342. /package/dist/interface/{@intlify.YW_pt133.0.0.30-alpha.0.js → @intlify.YW_pt133.0.0.30-alpha.3.js} +0 -0
  343. /package/dist/interface/{@mdi.DnMbZhUH.0.0.30-alpha.0.js → @mdi.DnMbZhUH.0.0.30-alpha.3.js} +0 -0
  344. /package/dist/interface/{@popperjs.BQBsAJpH.0.0.30-alpha.0.js → @popperjs.BQBsAJpH.0.0.30-alpha.3.js} +0 -0
  345. /package/dist/interface/{@react-dnd.CcwRs9xb.0.0.30-alpha.0.js → @react-dnd.CcwRs9xb.0.0.30-alpha.3.js} +0 -0
  346. /package/dist/interface/{@socket.io.Dkula2eQ.0.0.30-alpha.0.js → @socket.io.Dkula2eQ.0.0.30-alpha.3.js} +0 -0
  347. /package/dist/interface/{@xterm.CnserxUX.0.0.30-alpha.0.js → @xterm.-WsTvn6n.0.0.30-alpha.3.js} +0 -0
  348. /package/dist/interface/assets/{@vueform.0.0.30-alpha.0.h7tNX9p6.css → @vueform.0.0.30-alpha.3.h7tNX9p6.css} +0 -0
  349. /package/dist/interface/assets/{@xterm.0.0.30-alpha.0.CGrrDQr5.css → @xterm.0.0.30-alpha.3.CGrrDQr5.css} +0 -0
  350. /package/dist/interface/assets/{Account.0.0.30-alpha.0.Ce3OmKrC.css → Account.0.0.30-alpha.3.Ce3OmKrC.css} +0 -0
  351. /package/dist/interface/assets/{Adminpanel.0.0.30-alpha.0.CXsTAXPL.css → Adminpanel.0.0.30-alpha.3.CXsTAXPL.css} +0 -0
  352. /package/dist/interface/assets/{Backup.0.0.30-alpha.0.BIwaSlv3.css → Backup.0.0.30-alpha.3.BIwaSlv3.css} +0 -0
  353. /package/dist/interface/assets/{Camera.0.0.30-alpha.0.BDtUJ-lA.css → Camera.0.0.30-alpha.3.BDtUJ-lA.css} +0 -0
  354. /package/dist/interface/assets/{Cameras.0.0.30-alpha.0.Djx0F2MM.css → Cameras.0.0.30-alpha.3.Djx0F2MM.css} +0 -0
  355. /package/dist/interface/assets/{Camview.0.0.30-alpha.0.Ce_V-Nxj.css → Camview.0.0.30-alpha.3.Ce_V-Nxj.css} +0 -0
  356. /package/dist/interface/assets/{Config.0.0.30-alpha.0.k4QpWumg.css → Config.0.0.30-alpha.3.k4QpWumg.css} +0 -0
  357. /package/dist/interface/assets/{Console.0.0.30-alpha.0.DWrfRWs9.css → Console.0.0.30-alpha.3.DWrfRWs9.css} +0 -0
  358. /package/dist/interface/assets/{FirstSteps.0.0.30-alpha.0.B3-pv8-a.css → FirstSteps.0.0.30-alpha.3.B3-pv8-a.css} +0 -0
  359. /package/dist/interface/assets/{NewCamera.0.0.30-alpha.0.DJ3tUBT_.css → NewCamera.0.0.30-alpha.3.DJ3tUBT_.css} +0 -0
  360. /package/dist/interface/assets/{Plugin.0.0.30-alpha.0.BtRA6zDt.css → Plugin.0.0.30-alpha.3.BtRA6zDt.css} +0 -0
  361. /package/dist/interface/assets/{Plugins.0.0.30-alpha.0.Cwu0aGUO.css → Plugins.0.0.30-alpha.3.Cwu0aGUO.css} +0 -0
  362. /package/dist/interface/assets/{Settings.0.0.30-alpha.0.DC_-E3CR.css → Settings.0.0.30-alpha.3.DC_-E3CR.css} +0 -0
  363. /package/dist/interface/assets/{User.0.0.30-alpha.0.DPDcJbx8.css → User.0.0.30-alpha.3.DPDcJbx8.css} +0 -0
  364. /package/dist/interface/assets/{VConsole.0.0.30-alpha.0.BZT1WyS-.css → VConsole.0.0.30-alpha.3.BZT1WyS-.css} +0 -0
  365. /package/dist/interface/assets/{VPlayer.0.0.30-alpha.0.CZXlTn4I.css → VPlayer.0.0.30-alpha.3.CZXlTn4I.css} +0 -0
  366. /package/dist/interface/assets/{VPluginCard.0.0.30-alpha.0.CIL48ca_.css → VPluginCard.0.0.30-alpha.3.CIL48ca_.css} +0 -0
  367. /package/dist/interface/assets/{highlight.0.0.30-alpha.0.DgoK_Xib.css → highlight.0.0.30-alpha.3.DgoK_Xib.css} +0 -0
  368. /package/dist/interface/assets/{logo-256.0.0.30-alpha.0.BCQk9H1-.png → logo-256.0.0.30-alpha.3.BCQk9H1-.png} +0 -0
  369. /package/dist/interface/assets/{logo-512.0.0.30-alpha.0.DLKVOU2S.png → logo-512.0.0.30-alpha.3.DLKVOU2S.png} +0 -0
  370. /package/dist/interface/assets/{logo.0.0.30-alpha.0.DmEiRk0z.png → logo.0.0.30-alpha.3.DmEiRk0z.png} +0 -0
  371. /package/dist/interface/assets/{main.0.0.30-alpha.0.BOf8IWhK.css → main.0.0.30-alpha.3.BOf8IWhK.css} +0 -0
  372. /package/dist/interface/assets/{mode-json.0.0.30-alpha.0.Br7xisR1.js → mode-json.0.0.30-alpha.3.Br7xisR1.js} +0 -0
  373. /package/dist/interface/assets/{mode-yaml.0.0.30-alpha.0.CIYL8U3d.js → mode-yaml.0.0.30-alpha.3.CIYL8U3d.js} +0 -0
  374. /package/dist/interface/assets/{v-calendar.0.0.30-alpha.0.CtSuDYZU.css → v-calendar.0.0.30-alpha.3.CtSuDYZU.css} +0 -0
  375. /package/dist/interface/assets/{vue3-toastify.0.0.30-alpha.0.DTY1DMRs.css → vue3-toastify.0.0.30-alpha.3.DTY1DMRs.css} +0 -0
  376. /package/dist/interface/assets/{vuetify.0.0.30-alpha.0.Cd1awv3t.css → vuetify.0.0.30-alpha.3.Cd1awv3t.css} +0 -0
  377. /package/dist/interface/{axios.C-n2IhIP.0.0.30-alpha.0.js → axios.C-n2IhIP.0.0.30-alpha.3.js} +0 -0
  378. /package/dist/interface/{compare-versions.DqEOhma6.0.0.30-alpha.0.js → compare-versions.DqEOhma6.0.0.30-alpha.3.js} +0 -0
  379. /package/dist/interface/{dijkstrajs.D_NXgYpA.0.0.30-alpha.0.js → dijkstrajs.D_NXgYpA.0.0.30-alpha.3.js} +0 -0
  380. /package/dist/interface/{engine.io-parser.BiEtp6m2.0.0.30-alpha.0.js → engine.io-parser.BiEtp6m2.0.0.30-alpha.3.js} +0 -0
  381. /package/dist/interface/{entities.C20TfXL6.0.0.30-alpha.0.js → entities.C20TfXL6.0.0.30-alpha.3.js} +0 -0
  382. /package/dist/interface/{get-size.D1dS-IaP.0.0.30-alpha.0.js → get-size.D1dS-IaP.0.0.30-alpha.3.js} +0 -0
  383. /package/dist/interface/{mdurl.k9Sl0PQj.0.0.30-alpha.0.js → mdurl.k9Sl0PQj.0.0.30-alpha.3.js} +0 -0
  384. /package/dist/interface/{punycode.js.Dj65hjkv.0.0.30-alpha.0.js → punycode.js.Dj65hjkv.0.0.30-alpha.3.js} +0 -0
  385. /package/dist/interface/{react-dnd-html5-backend.1HQjlkwI.0.0.30-alpha.0.js → react-dnd-html5-backend.1HQjlkwI.0.0.30-alpha.3.js} +0 -0
  386. /package/dist/interface/{redux.CuxFRhX_.0.0.30-alpha.0.js → redux.CuxFRhX_.0.0.30-alpha.3.js} +0 -0
  387. /package/dist/interface/{tslib.9k7AwCpt.0.0.30-alpha.0.js → tslib.9k7AwCpt.0.0.30-alpha.3.js} +0 -0
  388. /package/dist/interface/{uc.micro.kMc2yuuw.0.0.30-alpha.0.js → uc.micro.kMc2yuuw.0.0.30-alpha.3.js} +0 -0
  389. /package/dist/interface/{uuid.DvF23Exx.0.0.30-alpha.0.js → uuid.DvF23Exx.0.0.30-alpha.3.js} +0 -0
  390. /package/dist/interface/{vue.l0sNRNKZ.0.0.30-alpha.0.js → vue.l0sNRNKZ.0.0.30-alpha.3.js} +0 -0
@@ -1,644 +0,0 @@
1
- process.title = `camera.ui - ${process.argv[2]}`;
2
- import { ErrorCode, NatsError } from 'nats';
3
- import { spawn } from 'node:child_process';
4
- import { fileURLToPath } from 'node:url';
5
- import { ReplaySubject, firstValueFrom, fromEvent, timeout } from 'rxjs';
6
- import { first, takeUntil } from 'rxjs/operators';
7
- import { ProxyConnection } from '../../../nats/connection.js';
8
- import { pack, unpack } from '../../../utils/packer.js';
9
- import { readLength } from '../../../utils/reader.js';
10
- import { Subscribed } from '../../../utils/subscribed.js';
11
- import { sleep } from '../../../utils/utils.js';
12
- import { PluginLogger } from '../plugins/pluginLogger.js';
13
- import { ImageUtils } from './imageUtils.js';
14
- const PIX_FMT = 'yuv420p';
15
- class FrameWorkerChild extends Subscribed {
16
- clients = new Map();
17
- logger;
18
- config;
19
- subject;
20
- ipcSubject;
21
- imageSubject;
22
- signalingSubject;
23
- frameSubject;
24
- publisher;
25
- signalPublisher;
26
- imagePublisher;
27
- framePublisher;
28
- subscriber;
29
- imageSubscriber;
30
- signalSubscriber;
31
- maxDiffFrame = 3;
32
- stopped = false;
33
- closed = false;
34
- restarting = false;
35
- restartDelay = 5000;
36
- restartTimeout;
37
- closeDelay = 5000;
38
- closeTimeout;
39
- restartWatchdogDelay = 5000;
40
- imageUtils;
41
- ffmpegProcess;
42
- prebufferFull = false;
43
- prebufferDuration = 7000;
44
- prebufferContainer = [];
45
- metadataSubject = new ReplaySubject(1);
46
- get metadata() {
47
- return firstValueFrom(this.metadataSubject);
48
- }
49
- get logPrefix() {
50
- return `${this.config.cameraName}:`;
51
- }
52
- constructor() {
53
- super();
54
- this.config = {
55
- frameWorkerId: process.env.FRAME_WORKER_ID,
56
- cameraId: process.env.CAMERA_ID,
57
- cameraName: process.env.CAMERA_NAME,
58
- ffmpegPath: process.env.FFMPEG_PATH,
59
- logLevel: process.env.LOGGER_LEVEL ?? 'debug',
60
- disableTimestamps: process.env.LOGGER_DISABLE_TIMESTAMPS === 'true',
61
- auth: { user: process.env.PROXY_USER, password: process.env.PROXY_PASSWORD },
62
- proxyEndpoints: process.env.PROXY_ENDPOINTS.split(','),
63
- fps: parseInt(process.env.FPS),
64
- resolution: parseInt(process.env.RESOLUTION),
65
- };
66
- delete process.env.FRAME_WORKER_ID;
67
- delete process.env.CAMERA_ID;
68
- delete process.env.CAMERA_NAME;
69
- delete process.env.FFMPEG_PATH;
70
- delete process.env.PROXY_USER;
71
- delete process.env.PROXY_PASSWORD;
72
- delete process.env.PROXY_ENDPOINTS;
73
- delete process.env.FPS;
74
- delete process.env.RESOLUTION;
75
- this.logger = new PluginLogger('Frame Worker', this.config.disableTimestamps ?? false);
76
- this.logger.debugEnabled = this.config.logLevel === 'debug' || this.config.logLevel === 'trace';
77
- this.logger.traceEnabled = this.config.logLevel === 'trace';
78
- this.subject = `${this.config.frameWorkerId}.frameWorkerChild`;
79
- this.ipcSubject = `${this.config.frameWorkerId}.frameWorker`;
80
- this.signalingSubject = `${this.config.cameraId}.frameGenerator.signaling`;
81
- this.imageSubject = `${this.config.cameraId}.frameGenerator`;
82
- this.frameSubject = `${this.config.cameraId}.frameReceiver`;
83
- this.imageUtils = new ImageUtils(this.logger);
84
- this.signalHander();
85
- this.listen();
86
- }
87
- async listen() {
88
- const servers = this.config.proxyEndpoints.filter((endpoint) => endpoint.startsWith('nats://'));
89
- this.publisher = new ProxyConnection(this.subject, servers, this.config.auth);
90
- await this.publisher.connect();
91
- this.imagePublisher = new ProxyConnection(this.imageSubject, servers, this.config.auth);
92
- await this.imagePublisher.connect();
93
- this.framePublisher = new ProxyConnection(this.frameSubject, servers, this.config.auth);
94
- await this.framePublisher.connect();
95
- this.signalPublisher = new ProxyConnection(this.signalingSubject, servers, this.config.auth);
96
- await this.signalPublisher.connect();
97
- this.subscriber = this.publisher.subscribe(this.subject);
98
- this.subscriber.on('message', this.onWorkerMessage.bind(this));
99
- this.imageSubscriber = this.imagePublisher.subscribe(this.imageSubject);
100
- this.imageSubscriber.on('message', this.onImageRequest.bind(this));
101
- this.signalSubscriber = this.signalPublisher.subscribe(this.signalingSubject);
102
- this.signalSubscriber.on('message', this.onSignalingMessage.bind(this));
103
- await this.imageUtils.initiate();
104
- this.send('started');
105
- }
106
- async close() {
107
- this.closed = true;
108
- // await this.stop();
109
- await Promise.allSettled([this.publisher?.close(), this.imagePublisher?.close(), this.signalPublisher?.close(), this.framePublisher?.close()]);
110
- }
111
- async start() {
112
- try {
113
- this.closed = false;
114
- this.restarting = false;
115
- this.stopped = false;
116
- clearTimeout(this.closeTimeout);
117
- await this.startVideoSession();
118
- }
119
- catch (error) {
120
- this.logger.error(this.logPrefix, 'An error occurred while starting frame session:', error);
121
- await this.restartFFmpeg();
122
- }
123
- }
124
- async stop() {
125
- this.stopped = true;
126
- await this.disconnectAllClients();
127
- this.reset();
128
- }
129
- reset() {
130
- this.resetPrebuffer();
131
- this.resetMetadata();
132
- this.resetVideoSession();
133
- this.unsubscribe();
134
- }
135
- resetPrebuffer() {
136
- this.prebufferFull = false;
137
- this.prebufferContainer = [];
138
- }
139
- resetMetadata() {
140
- this.metadataSubject = new ReplaySubject(1);
141
- }
142
- resetVideoSession() {
143
- clearTimeout(this.restartTimeout);
144
- clearTimeout(this.closeTimeout);
145
- if (this.ffmpegProcess) {
146
- this.logger.debug(this.logPrefix, 'Stopping FFmpeg process...');
147
- this.ffmpegProcess.kill('SIGKILL');
148
- this.ffmpegProcess = undefined;
149
- }
150
- }
151
- async startVideoSession() {
152
- this.resetPrebuffer();
153
- this.resetVideoSession();
154
- this.unsubscribe();
155
- try {
156
- await this.spawnFFmpeg();
157
- await firstValueFrom(this.metadataSubject.pipe(timeout(15000)));
158
- this.logger.debug(this.logPrefix, 'Frame session started');
159
- }
160
- catch {
161
- throw new Error('FFmpeg process timed out');
162
- }
163
- }
164
- buildFfmpegArguments(cameraSource, ffmpegArgs) {
165
- return [
166
- '-hide_banner',
167
- // '-vsync',
168
- // '0',
169
- '-hwaccel',
170
- ffmpegArgs.hwaccel,
171
- ...ffmpegArgs.hwaccelArgs,
172
- '-fflags',
173
- 'nobuffer',
174
- '-flags',
175
- 'low_delay',
176
- '-analyzeduration',
177
- '0',
178
- '-probesize',
179
- '500000',
180
- '-reorder_queue_size',
181
- '0',
182
- '-user_agent',
183
- 'camera.ui/decoder',
184
- '-rtsp_transport',
185
- 'tcp',
186
- '-i',
187
- cameraSource,
188
- '-threads',
189
- ffmpegArgs.threads,
190
- '-vf',
191
- `showinfo=checksum=0,${ffmpegArgs.hwaccelFilter.replace('640', this.config.resolution.toString())},fps=fps=${this.config.fps}`,
192
- '-an',
193
- '-dn',
194
- '-sn',
195
- '-vcodec',
196
- 'rawvideo',
197
- '-f',
198
- 'rawvideo',
199
- '-pix_fmt',
200
- PIX_FMT,
201
- '-',
202
- ];
203
- }
204
- async spawnFFmpeg() {
205
- const response = (await this.send('getFFmpegArgs'));
206
- if (!response) {
207
- throw new Error('Error getting FFmpeg args from main process');
208
- }
209
- const args = this.buildFfmpegArguments(response.cameraSource, response.ffmpegArgs);
210
- this.logger.debug(this.logPrefix, 'Starting FFmpeg process:', this.config.ffmpegPath, args.join(' '));
211
- this.ffmpegProcess = spawn(this.config.ffmpegPath, args);
212
- this.addSubscriptions(this.handleFFmpegStderr(), this.handleFFmpegClose());
213
- this.handleFFmpegStdout();
214
- }
215
- async restartFFmpeg() {
216
- if (!this.stopped && !this.closed && !this.restarting && this.clients.size > 0) {
217
- this.restarting = true;
218
- this.logger.debug(this.logPrefix, `Restarting FFmpeg process in ${this.restartDelay / 1000} seconds...`);
219
- await sleep(this.restartDelay);
220
- if (!this.stopped && !this.closed && this.clients.size > 0) {
221
- await this.start();
222
- }
223
- else {
224
- this.restarting = false;
225
- }
226
- }
227
- }
228
- handleFFmpegStderr() {
229
- const stderrStream = fromEvent(this.ffmpegProcess.stderr, 'data');
230
- return stderrStream.pipe(takeUntil(this.metadataSubject.pipe(first()))).subscribe((data) => {
231
- const messageString = data.toString();
232
- const metadata = this.parseFrameInfo(messageString);
233
- if (metadata) {
234
- this.logger.debug(this.logPrefix, 'Metadata:', metadata);
235
- this.metadataSubject.next(metadata);
236
- }
237
- });
238
- }
239
- async handleFFmpegStdout() {
240
- const metadata = await this.metadata;
241
- let shifts = 0;
242
- let warned = false;
243
- const isClosed = () => this.stopped || this.closed || !this.framePublisher || !this.ffmpegProcess || !this.ffmpegProcess.stdout || this.ffmpegProcess.exitCode !== null;
244
- const restartWatchdog = () => {
245
- clearTimeout(this.restartTimeout);
246
- this.restartTimeout = setTimeout(() => {
247
- if (!this.stopped && !this.closed && !this.restarting) {
248
- const message = 'FFmpeg process is not producing frames, terminating...';
249
- if (!warned) {
250
- this.logger.debug(this.logPrefix, message);
251
- warned = true;
252
- }
253
- else {
254
- this.logger.error(this.logPrefix, message);
255
- }
256
- this.reset();
257
- this.restartFFmpeg();
258
- }
259
- }, this.restartWatchdogDelay);
260
- };
261
- while (!isClosed()) {
262
- try {
263
- restartWatchdog();
264
- const frame = await readLength(this.ffmpegProcess.stdout, metadata.frameSize);
265
- warned = false;
266
- if (isClosed()) {
267
- clearTimeout(this.restartTimeout);
268
- break;
269
- }
270
- const frameId = this.generateId();
271
- const now = Date.now();
272
- this.prebufferContainer.push({
273
- frameId: frameId,
274
- time: now,
275
- frame,
276
- });
277
- if (this.prebufferContainer.length > 0 && now - this.prebufferContainer[0].time >= this.prebufferDuration && !this.prebufferFull) {
278
- this.logger.debug(this.logPrefix, 'Prebuffer is full');
279
- this.prebufferFull = true;
280
- }
281
- while (this.prebufferContainer.length > 0 && this.prebufferContainer[0].time < now - this.prebufferDuration) {
282
- this.prebufferContainer.shift();
283
- shifts++;
284
- }
285
- if (shifts > 1000) {
286
- this.prebufferContainer = [...this.prebufferContainer];
287
- shifts = 0;
288
- }
289
- if (this.prebufferFull) {
290
- const frameData = {
291
- frameId,
292
- timestamp: now,
293
- };
294
- this.framePublisher.publish(this.frameSubject, frameData);
295
- }
296
- }
297
- catch (error) {
298
- clearTimeout(this.restartTimeout);
299
- if (!isClosed() && !this.restarting) {
300
- this.logger.error(this.logPrefix, 'An error occurred while reading ffmpeg stdout:', error);
301
- }
302
- break;
303
- }
304
- }
305
- }
306
- handleFFmpegClose() {
307
- const onClose = fromEvent(this.ffmpegProcess, 'exit');
308
- return onClose.subscribe(() => {
309
- if (this.ffmpegProcess) {
310
- if (this.ffmpegProcess.exitCode !== 0) {
311
- this.logger.error(this.logPrefix, 'FFmpeg process exited with non-zero code', this.ffmpegProcess.exitCode);
312
- }
313
- else {
314
- this.logger.debug(this.logPrefix, 'FFmpeg process exited with code', this.ffmpegProcess.exitCode);
315
- }
316
- }
317
- this.ffmpegProcess = undefined;
318
- this.reset();
319
- this.restartFFmpeg();
320
- });
321
- }
322
- parseFrameInfo(stderr) {
323
- const patterns = {
324
- s: /s:\s*(\d+x\d+)/,
325
- };
326
- const matches = Object.entries(patterns).reduce((acc, [key, pattern]) => {
327
- const match = stderr.match(pattern);
328
- if (match) {
329
- acc[key] = match[1];
330
- }
331
- return acc;
332
- }, {});
333
- if (!matches.s) {
334
- return;
335
- }
336
- const [width, height] = matches.s.split('x').map(Number);
337
- const newWidth = this.config.resolution;
338
- const newHeight = Math.round((newWidth * height) / width);
339
- const format = PIX_FMT === 'yuv420p' ? 'yuv' : 'rgb';
340
- const bytesPerPixel = format === 'yuv' ? 1.5 : 3; // YUV420P or RGB24
341
- const frameSize = newWidth * newHeight * bytesPerPixel;
342
- const metadata = {
343
- format,
344
- frameSize,
345
- width: newWidth,
346
- height: newHeight,
347
- origHeight: height,
348
- origWidth: width,
349
- };
350
- return metadata;
351
- }
352
- async send(message, data = {}) {
353
- if (!process.send) {
354
- throw new Error('Main Process not initialized');
355
- }
356
- if (!this.publisher) {
357
- throw new Error('Publisher not initialized');
358
- }
359
- const workerMessage = { message, data };
360
- const response = await this.publisher.request(this.ipcSubject, workerMessage, { timeout: 30000 });
361
- return response.response;
362
- }
363
- async addClient(pluginId, requestId) {
364
- if (!this.clients.has(pluginId)) {
365
- this.clients.set(pluginId, { pluginId, requestIds: [requestId] });
366
- }
367
- const client = this.clients.get(pluginId);
368
- if (!client.requestIds.includes(requestId)) {
369
- client.requestIds.push(requestId);
370
- }
371
- this.logger.trace(this.logPrefix, `New client ${this.clientIdentifier(pluginId, requestId)}`);
372
- clearTimeout(this.closeTimeout);
373
- await this.send('updateClient', client);
374
- if (this.clients.size > 0 && !this.ffmpegProcess && !this.restarting) {
375
- await this.start();
376
- }
377
- }
378
- async removeClient(pluginId, requestId) {
379
- const client = this.clients.get(pluginId);
380
- if (!client || !client.requestIds.includes(requestId)) {
381
- return;
382
- }
383
- this.logger.trace(this.logPrefix, `Removing client ${this.clientIdentifier(pluginId, requestId)}`);
384
- client.requestIds = client.requestIds.filter((id) => id !== requestId);
385
- if (client.requestIds.length === 0) {
386
- this.clients.delete(pluginId);
387
- await this.send('removeClient', client);
388
- }
389
- else {
390
- await this.send('updateClient', client);
391
- }
392
- if (this.clients.size === 0) {
393
- clearTimeout(this.closeTimeout);
394
- this.closeTimeout = setTimeout(() => this.stop(), this.closeDelay);
395
- }
396
- }
397
- async recoverClients(clients) {
398
- clients.forEach((client) => {
399
- client.requestIds.forEach((requestId) => this.logger.trace(this.logPrefix, `Recovering client: ${this.clientIdentifier(client.pluginId, requestId)}`));
400
- this.clients.set(client.pluginId, client);
401
- });
402
- if (this.clients.size > 0) {
403
- await this.start();
404
- }
405
- }
406
- disconnectClient(cameraId, pluginId, requestId) {
407
- const client = this.clients.get(pluginId);
408
- if (!this.signalPublisher || !client || !client.requestIds.includes(requestId)) {
409
- return;
410
- }
411
- const pingTargetSubject = `${pluginId}.camera.${cameraId}.signaling`;
412
- const response = { type: 'disconnect', requestId };
413
- this.signalPublisher.publish(pingTargetSubject, response);
414
- this.removeClient(pluginId, requestId);
415
- }
416
- async disconnectAllClients() {
417
- this.clients.forEach((client) => {
418
- client.requestIds.forEach(async (requestId) => {
419
- this.disconnectClient(this.config.cameraId, client.pluginId, requestId);
420
- });
421
- });
422
- }
423
- async handleConnectMessage(message) {
424
- await this.addClient(message.pluginId, message.requestId);
425
- this.startPingPongForClient(message.cameraId, message.pluginId, message.requestId);
426
- }
427
- async handleDisconnectMessage(message) {
428
- this.removeClient(message.pluginId, message.requestId);
429
- }
430
- async handleMetadataMessage(msg, message) {
431
- const { requestId } = message;
432
- const metadata = await this.metadata;
433
- const response = { type: 'metadata', requestId, metadata };
434
- msg.respond(pack(response));
435
- }
436
- async startPingPongForClient(cameraId, pluginId, requestId) {
437
- const pingTargetSubject = `${pluginId}.camera.${cameraId}.signaling`;
438
- const pingInterval = 3000;
439
- const pongTimeout = 2000;
440
- const requestIdExist = () => this.clients.has(pluginId) && this.clients.get(pluginId)?.requestIds.includes(requestId);
441
- while (this.signalPublisher && requestIdExist()) {
442
- try {
443
- const message = { type: 'ping', requestId };
444
- // this.logger.trace(`Sending ping to ${this.clientIdentifier(pluginId, requestId)}`);
445
- const response = await this.signalPublisher.request(pingTargetSubject, message, { timeout: pongTimeout });
446
- if (!requestIdExist()) {
447
- break;
448
- }
449
- if (response.type !== 'pong') {
450
- throw new Error('Invalid response to ping');
451
- }
452
- // this.logger.trace(`Received pong from ${this.clientIdentifier(pluginId, requestId)}`);
453
- await sleep(pingInterval);
454
- }
455
- catch (error) {
456
- if (requestIdExist()) {
457
- if (error instanceof NatsError && (error.code === ErrorCode.Timeout || error.code === ErrorCode.NoResponders)) {
458
- // this.logger.trace(`Ping/Pong timeout for ${this.clientIdentifier(pluginId, requestId)}`);
459
- this.removeClient(pluginId, requestId);
460
- }
461
- else {
462
- this.logger.error('Error during ping/pong:', error);
463
- }
464
- }
465
- break;
466
- }
467
- }
468
- }
469
- async onWorkerMessage(msg) {
470
- if (this.closed) {
471
- return;
472
- }
473
- this.respondOnIpcMessage(msg);
474
- }
475
- async onSignalingMessage(msg) {
476
- if (this.closed) {
477
- return;
478
- }
479
- this.respondOnSignalingMessage(msg);
480
- }
481
- async onImageRequest(msg) {
482
- if (this.closed) {
483
- return;
484
- }
485
- this.respondOnPrebufferedImageMessage(msg);
486
- }
487
- async respondOnIpcMessage(msg) {
488
- try {
489
- const mainMessage = unpack(msg.data);
490
- const response = {};
491
- const message = mainMessage.message;
492
- switch (message) {
493
- case 'setCameraName':
494
- this.config.cameraName = mainMessage.data.cameraName;
495
- break;
496
- case 'recoverClients':
497
- this.recoverClients(mainMessage.data.clients);
498
- break;
499
- }
500
- msg.respond(pack(response));
501
- }
502
- catch (error) {
503
- this.logger.error(this.logPrefix, 'Error while processing IPC respond:', error);
504
- }
505
- }
506
- async respondOnSignalingMessage(msg) {
507
- try {
508
- const message = unpack(msg.data);
509
- switch (message.type) {
510
- case 'connect':
511
- this.handleConnectMessage(message);
512
- break;
513
- case 'disconnect':
514
- this.handleDisconnectMessage(message);
515
- break;
516
- case 'metadata':
517
- this.handleMetadataMessage(msg, message);
518
- break;
519
- default:
520
- break;
521
- }
522
- }
523
- catch (error) {
524
- this.logger.error(this.logPrefix, 'Error while processing signaling respond:', error);
525
- }
526
- }
527
- async respondOnPrebufferedImageMessage(msg) {
528
- try {
529
- const message = unpack(msg.data);
530
- const { metadata, frameData, prebufferDuration, options } = message;
531
- const { width, height, format } = metadata;
532
- const targetFrame = this.findTargetFrame(frameData, prebufferDuration);
533
- if (!targetFrame) {
534
- this.logFrameNotFound();
535
- }
536
- else {
537
- const processedImage = await this.processFrame(targetFrame.frame, width, height, format, options);
538
- msg.respond(pack(processedImage));
539
- return;
540
- }
541
- msg.respond(pack(new Uint8Array(0)));
542
- }
543
- catch (error) {
544
- this.logger.error(this.logPrefix, 'Error while processing image respond:', error);
545
- }
546
- }
547
- findTargetFrame(frameData, prebufferDuration) {
548
- const targetIndex = this.prebufferContainer.findIndex((frame) => frame.frameId === frameData.frameId);
549
- if (targetIndex === -1) {
550
- return this.findNearestFrame(frameData);
551
- }
552
- if (prebufferDuration > 0) {
553
- const targetTime = this.prebufferContainer[targetIndex].time - prebufferDuration * 1000;
554
- const result = this.findNearestFrameByTime(targetTime);
555
- if (result) {
556
- return result;
557
- }
558
- }
559
- return this.prebufferContainer[targetIndex];
560
- }
561
- findNearestFrame(frameData) {
562
- const maxTimeDiff = this.maxDiffFrame * (1000 / this.config.fps);
563
- return this.prebufferContainer.reduce((nearest, current) => {
564
- const currentTimeDiff = Math.abs(current.time - frameData.timestamp);
565
- if (currentTimeDiff <= maxTimeDiff) {
566
- if (!nearest)
567
- return current;
568
- const nearestTimeDiff = Math.abs(nearest.time - frameData.timestamp);
569
- return currentTimeDiff < nearestTimeDiff ? current : nearest;
570
- }
571
- return nearest;
572
- }, undefined);
573
- }
574
- findNearestFrameByTime(targetTime) {
575
- const maxTimeDiff = (this.maxDiffFrame / this.config.fps) * 1000;
576
- return this.prebufferContainer.reduce((nearest, current) => {
577
- if (current.time <= targetTime && Math.abs(current.time - targetTime) <= maxTimeDiff) {
578
- if (!nearest || Math.abs(current.time - targetTime) < Math.abs(nearest.time - targetTime)) {
579
- return current;
580
- }
581
- }
582
- return nearest;
583
- }, undefined);
584
- }
585
- async processFrame(frame, width, height, format, options) {
586
- const newFrame = new Uint8Array(frame);
587
- return await this.imageUtils.processImage(newFrame, width, height, format, options);
588
- }
589
- logFrameNotFound() {
590
- if (this.prebufferContainer.length > 0) {
591
- this.logger.warn(this.logPrefix, 'Frame not found in prebuffer');
592
- }
593
- else {
594
- this.logger.warn(this.logPrefix, 'Prebuffer is empty! FFmpeg is not producing frames?');
595
- }
596
- }
597
- clientIdentifier(pluginId, requestId) {
598
- return `${pluginId}:${requestId}`;
599
- }
600
- generateId() {
601
- return Math.random().toString(36).slice(2, 9);
602
- }
603
- signalHander() {
604
- let closePromise;
605
- const gracefullyClose = async (signal, reason, error, promise) => {
606
- if (closePromise) {
607
- return closePromise;
608
- }
609
- if (error || (promise && reason)) {
610
- this.logger.debug(this.logPrefix, `is ungracefully closing from signal="${signal}" reason="${reason || 'unknown'}"...`);
611
- if (error) {
612
- if (typeof error === 'string') {
613
- this.logger.error(this.logPrefix, error);
614
- }
615
- else {
616
- this.logger.error(this.logPrefix, `${signal}`, error);
617
- }
618
- }
619
- else {
620
- this.logger.error(this.logPrefix, `${signal}: Unhandled promise rejection:`, reason || promise);
621
- }
622
- }
623
- else {
624
- this.logger.log(this.logPrefix, `is gracefully closing from signal="${signal}" reason="${reason || 'unknown'}"...`);
625
- }
626
- const shutdown = setTimeout(() => {
627
- this.logger.warn(this.logPrefix, 'Failed to gracefully close before timeout, force quit!');
628
- process.kill(process.pid, 'SIGKILL');
629
- }, 5000);
630
- closePromise = this.close();
631
- await closePromise;
632
- clearTimeout(shutdown);
633
- process.exit(0);
634
- };
635
- process.on('uncaughtException', (error) => gracefullyClose('uncaughtException', undefined, error));
636
- process.on('unhandledRejection', (reason, promise) => gracefullyClose('unhandledRejection', reason, undefined, promise));
637
- process.on('SIGTERM', gracefullyClose);
638
- process.on('SIGINT', gracefullyClose);
639
- }
640
- }
641
- if (process.argv[1] === fileURLToPath(import.meta.url)) {
642
- new FrameWorkerChild();
643
- }
644
- //# sourceMappingURL=child.js.map