camera.ui3 0.0.30-alpha.0 → 0.0.30-alpha.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 (320) hide show
  1. package/dist/interface/@camera.ui.KA9bRSoR.0.0.30-alpha.0.js +3 -0
  2. package/dist/interface/@tanstack.CTzdjGxD.0.0.30-alpha.0.js +1 -0
  3. package/dist/interface/{@vee-validate.0Cv0x9aN.0.0.30-alpha.0.js → @vee-validate.BJKTyKHK.0.0.30-alpha.0.js} +1 -1
  4. package/dist/interface/@vue.BeJw0wEm.0.0.30-alpha.0.js +17 -0
  5. package/dist/interface/{@vueform.Du_niMHk.0.0.30-alpha.0.js → @vueform.DIw88mcs.0.0.30-alpha.0.js} +1 -1
  6. package/dist/interface/{@vueuse.Dv9U068T.0.0.30-alpha.0.js → @vueuse.DK7Mz0BT.0.0.30-alpha.0.js} +1 -1
  7. package/dist/interface/Account.D23CSQgK.0.0.30-alpha.0.js +1 -0
  8. package/dist/interface/Adminpanel.CbDtQWxn.0.0.30-alpha.0.js +2 -0
  9. package/dist/interface/Appearance.az1S-8rV.0.0.30-alpha.0.js +1 -0
  10. package/dist/interface/Backup.BxjbY7JO.0.0.30-alpha.0.js +1 -0
  11. package/dist/interface/Camera.CWxxie6C.0.0.30-alpha.0.js +1 -0
  12. package/dist/interface/Cameras.Cs1dXd-W.0.0.30-alpha.0.js +1 -0
  13. package/dist/interface/Camview.uyIq-pxm.0.0.30-alpha.0.js +1 -0
  14. package/dist/interface/Config.DnuL5NIv.0.0.30-alpha.0.js +1 -0
  15. package/dist/interface/Console.C1dI5f9x.0.0.30-alpha.0.js +4 -0
  16. package/dist/interface/FirstSteps.C_TTm4lX.0.0.30-alpha.0.js +1 -0
  17. package/dist/interface/{NewCamera.Kn9biZIb.0.0.30-alpha.0.js → NewCamera.DjMFd-OB.0.0.30-alpha.0.js} +2 -2
  18. package/dist/interface/Plugin.rLO6u13g.0.0.30-alpha.0.js +1 -0
  19. package/dist/interface/Plugins.Dr-sUa9o.0.0.30-alpha.0.js +1 -0
  20. package/dist/interface/Recordings.4iG-hK8g.0.0.30-alpha.0.js +1 -0
  21. package/dist/interface/Recordings.Dxh2d-IQ.0.0.30-alpha.0.js +1 -0
  22. package/dist/interface/Settings.DAletWZO.0.0.30-alpha.0.js +1 -0
  23. package/dist/interface/System.Pv01yz8u.0.0.30-alpha.0.js +4 -0
  24. package/dist/interface/User.VLcbTFm_.0.0.30-alpha.0.js +1 -0
  25. package/dist/interface/{VConfigEditor.vue_vue_type_script_setup_true_lang.Br68bfQJ.0.0.30-alpha.0.js → VConfigEditor.vue_vue_type_script_setup_true_lang.pXHIBxVl.0.0.30-alpha.0.js} +1 -1
  26. package/dist/interface/{VConsole.BT0UxZb1.0.0.30-alpha.0.js → VConsole.BUZLhyeb.0.0.30-alpha.0.js} +1 -1
  27. package/dist/interface/VPlayer.DW5rNren.0.0.30-alpha.0.js +1 -0
  28. package/dist/interface/{VPluginCard.Bz3GmzAE.0.0.30-alpha.0.js → VPluginCard.D5f85QIk.0.0.30-alpha.0.js} +2 -2
  29. package/dist/interface/index.html +15 -14
  30. package/dist/interface/main.CNzh1Rg5.0.0.30-alpha.0.js +2 -0
  31. package/dist/interface/{pinia.DRjp4GU7.0.0.30-alpha.0.js → pinia.BPnxDxQ3.0.0.30-alpha.0.js} +2 -2
  32. package/dist/interface/{plugins.Ur_7V4x8.0.0.30-alpha.0.js → plugins.DIEspWyc.0.0.30-alpha.0.js} +1 -1
  33. package/dist/interface/sw.js +1 -1
  34. package/dist/interface/{system.CRn9Cy3C.0.0.30-alpha.0.js → system.23ZKsQ9W.0.0.30-alpha.0.js} +1 -1
  35. package/dist/interface/{ui.C-XbEPHk.0.0.30-alpha.0.js → ui.9t-Av5-L.0.0.30-alpha.0.js} +1 -1
  36. package/dist/interface/{v-calendar.CapJoEkJ.0.0.30-alpha.0.js → v-calendar.u5cKUC4g.0.0.30-alpha.0.js} +1 -1
  37. package/dist/interface/{vee-validate.DcgOEpak.0.0.30-alpha.0.js → vee-validate.DLoDjJ2f.0.0.30-alpha.0.js} +2 -2
  38. package/dist/interface/{vue-i18n.D2pqkMP3.0.0.30-alpha.0.js → vue-i18n.1W5jhc7l.0.0.30-alpha.0.js} +2 -2
  39. package/dist/interface/{vue-inline-svg.DorOTPIf.0.0.30-alpha.0.js → vue-inline-svg.Cc6uL4nI.0.0.30-alpha.0.js} +1 -1
  40. package/dist/interface/{vue-router.BVs4qaVs.0.0.30-alpha.0.js → vue-router.CgUDt9kL.0.0.30-alpha.0.js} +2 -2
  41. package/dist/interface/{vue3-apexcharts.CBV9x5vk.0.0.30-alpha.0.js → vue3-apexcharts.D8ONfVUq.0.0.30-alpha.0.js} +1 -1
  42. package/dist/interface/{vue3-dnd.CXMddGIZ.0.0.30-alpha.0.js → vue3-dnd.V9l5pvP2.0.0.30-alpha.0.js} +1 -1
  43. package/dist/interface/{vue3-toastify.DE7YmDSX.0.0.30-alpha.0.js → vue3-toastify.CjNgo6aC.0.0.30-alpha.0.js} +1 -1
  44. package/dist/interface/{vuetify.CYxxHEVN.0.0.30-alpha.0.js → vuetify.Box3fVLm.0.0.30-alpha.0.js} +1 -1
  45. package/dist/interface/zod.DnW1_kUe.0.0.30-alpha.0.js +1 -0
  46. package/dist/server/bin/cameraui.js +10 -7
  47. package/dist/server/bin/cameraui.js.map +1 -1
  48. package/dist/server/bin/fork.js +2 -2
  49. package/dist/server/bin/fork.js.map +1 -1
  50. package/dist/server/bin/installer/darwin.js +1 -1
  51. package/dist/server/bin/installer/darwin.js.map +1 -1
  52. package/dist/server/bin/installer/linux.js +1 -1
  53. package/dist/server/bin/installer/linux.js.map +1 -1
  54. package/dist/server/package.json +11 -15
  55. package/dist/server/src/api/controllers/backup.controller.js.map +1 -1
  56. package/dist/server/src/api/controllers/cameras.controller.js +1 -1
  57. package/dist/server/src/api/controllers/cameras.controller.js.map +1 -1
  58. package/dist/server/src/api/controllers/frameWorkers.controller.js +1 -1
  59. package/dist/server/src/api/controllers/frameWorkers.controller.js.map +1 -1
  60. package/dist/server/src/api/controllers/plugins.controller.js +1 -2
  61. package/dist/server/src/api/controllers/plugins.controller.js.map +1 -1
  62. package/dist/server/src/api/controllers/system.controller.js +1 -3
  63. package/dist/server/src/api/controllers/system.controller.js.map +1 -1
  64. package/dist/server/src/api/controllers/users.controller.js +2 -2
  65. package/dist/server/src/api/controllers/users.controller.js.map +1 -1
  66. package/dist/server/src/api/database/constants.d.ts +8 -0
  67. package/dist/server/src/api/database/constants.js +9 -0
  68. package/dist/server/src/api/database/constants.js.map +1 -0
  69. package/dist/server/src/api/database/index.d.ts +0 -8
  70. package/dist/server/src/api/database/index.js +14 -21
  71. package/dist/server/src/api/database/index.js.map +1 -1
  72. package/dist/server/src/api/database/migration.js +5 -4
  73. package/dist/server/src/api/database/migration.js.map +1 -1
  74. package/dist/server/src/api/database/types.d.ts +6 -6
  75. package/dist/server/src/api/go2rtc/api/application.js +1 -1
  76. package/dist/server/src/api/go2rtc/api/application.js.map +1 -1
  77. package/dist/server/src/api/index.js.map +1 -1
  78. package/dist/server/src/api/plugins/logger.plugin.js.map +1 -1
  79. package/dist/server/src/api/schemas/cameras.schema.d.ts +71 -71
  80. package/dist/server/src/api/schemas/config.schema.d.ts +6 -6
  81. package/dist/server/src/api/schemas/go2rtc.schema.d.ts +98 -98
  82. package/dist/server/src/api/schemas/users.schema.d.ts +116 -116
  83. package/dist/server/src/api/services/auth.service.js +1 -1
  84. package/dist/server/src/api/services/auth.service.js.map +1 -1
  85. package/dist/server/src/api/services/backup.service.js.map +1 -1
  86. package/dist/server/src/api/services/cameras.service.js +1 -1
  87. package/dist/server/src/api/services/cameras.service.js.map +1 -1
  88. package/dist/server/src/api/services/system.service.js +1 -1
  89. package/dist/server/src/api/services/system.service.js.map +1 -1
  90. package/dist/server/src/api/services/users.service.js +1 -1
  91. package/dist/server/src/api/services/users.service.js.map +1 -1
  92. package/dist/server/src/api/types/index.d.ts +2 -2
  93. package/dist/server/src/api/types/index.js.map +1 -1
  94. package/dist/server/src/api/utils/cert.js.map +1 -1
  95. package/dist/server/src/api/websocket/index.js.map +1 -1
  96. package/dist/server/src/api/websocket/nsp/notifications.js.map +1 -1
  97. package/dist/server/src/api/websocket/nsp/server.js +1 -1
  98. package/dist/server/src/api/websocket/nsp/server.js.map +1 -1
  99. package/dist/server/src/api.d.ts +1 -7
  100. package/dist/server/src/api.js.map +1 -1
  101. package/dist/server/src/camera/controller.d.ts +4 -6
  102. package/dist/server/src/camera/controller.js +5 -8
  103. package/dist/server/src/camera/controller.js.map +1 -1
  104. package/dist/server/src/camera/types.d.ts +140 -13
  105. package/dist/server/src/camera/types.js.map +1 -1
  106. package/dist/server/src/decoder/index.js.map +1 -1
  107. package/dist/server/src/decoder/types.d.ts +1 -18
  108. package/dist/server/src/decoder/worker.d.ts +3 -2
  109. package/dist/server/src/decoder/worker.js +10 -22
  110. package/dist/server/src/decoder/worker.js.map +1 -1
  111. package/dist/server/src/go2rtc/index.js +2 -3
  112. package/dist/server/src/go2rtc/index.js.map +1 -1
  113. package/dist/server/src/main.js +3 -3
  114. package/dist/server/src/main.js.map +1 -1
  115. package/dist/server/src/nats/index.d.ts +3 -4
  116. package/dist/server/src/nats/index.js +1 -3
  117. package/dist/server/src/nats/index.js.map +1 -1
  118. package/dist/server/src/nats/proxy/cameraDevice.d.ts +2 -2
  119. package/dist/server/src/nats/proxy/coreManager.d.ts +4 -2
  120. package/dist/server/src/nats/proxy/coreManager.js +7 -0
  121. package/dist/server/src/nats/proxy/coreManager.js.map +1 -1
  122. package/dist/server/src/nats/proxy/deviceManager.d.ts +5 -5
  123. package/dist/server/src/nats/proxy/deviceManager.js +4 -2
  124. package/dist/server/src/nats/proxy/deviceManager.js.map +1 -1
  125. package/dist/server/src/nats/server.js +2 -3
  126. package/dist/server/src/nats/server.js.map +1 -1
  127. package/dist/server/src/nats/types.d.ts +19 -32
  128. package/dist/server/src/nats/utils.d.ts +1 -1
  129. package/dist/server/src/nats/websocket.js.map +1 -1
  130. package/dist/server/src/plugins/index.js +11 -9
  131. package/dist/server/src/plugins/index.js.map +1 -1
  132. package/dist/server/src/plugins/interfaces/base.d.ts +1 -1
  133. package/dist/server/src/plugins/plugin.d.ts +1 -1
  134. package/dist/server/src/plugins/plugin.js +4 -4
  135. package/dist/server/src/plugins/plugin.js.map +1 -1
  136. package/dist/server/src/plugins/types.d.ts +36 -3
  137. package/dist/server/src/plugins/types.js.map +1 -1
  138. package/dist/server/src/plugins/worker.js +7 -16
  139. package/dist/server/src/plugins/worker.js.map +1 -1
  140. package/dist/server/src/services/config/constants.js +2 -2
  141. package/dist/server/src/services/config/constants.js.map +1 -1
  142. package/dist/server/src/services/config/index.d.ts +2 -0
  143. package/dist/server/src/services/config/index.js +10 -2
  144. package/dist/server/src/services/config/index.js.map +1 -1
  145. package/dist/server/src/services/logger/index.d.ts +4 -16
  146. package/dist/server/src/services/logger/index.js +4 -83
  147. package/dist/server/src/services/logger/index.js.map +1 -1
  148. package/dist/server/src/services/logger/types.d.ts +8 -0
  149. package/dist/server/src/services/logger/types.js +2 -0
  150. package/dist/server/src/services/logger/types.js.map +1 -0
  151. package/localdeps.txt +4 -0
  152. package/package.json +11 -15
  153. package/dist/interface/@tanstack.DYQ7Jj8U.0.0.30-alpha.0.js +0 -1
  154. package/dist/interface/@vue.CvjRlaU6.0.0.30-alpha.0.js +0 -17
  155. package/dist/interface/Account.Dm2FouAU.0.0.30-alpha.0.js +0 -1
  156. package/dist/interface/Adminpanel.B2Aiobnt.0.0.30-alpha.0.js +0 -2
  157. package/dist/interface/Appearance.EfH0tMdM.0.0.30-alpha.0.js +0 -1
  158. package/dist/interface/Backup.D8SRclhB.0.0.30-alpha.0.js +0 -1
  159. package/dist/interface/Camera.D-cOf4sS.0.0.30-alpha.0.js +0 -1
  160. package/dist/interface/Cameras.oolxbmXU.0.0.30-alpha.0.js +0 -1
  161. package/dist/interface/Camview.BHw8Pe3v.0.0.30-alpha.0.js +0 -1
  162. package/dist/interface/Config.DmPTI5iz.0.0.30-alpha.0.js +0 -1
  163. package/dist/interface/Console.Dq4khHFF.0.0.30-alpha.0.js +0 -4
  164. package/dist/interface/FirstSteps.Bo467abx.0.0.30-alpha.0.js +0 -1
  165. package/dist/interface/Plugin.BLTVcTt1.0.0.30-alpha.0.js +0 -1
  166. package/dist/interface/Plugins.Cp8mK__o.0.0.30-alpha.0.js +0 -1
  167. package/dist/interface/Recordings.B_JIFk_G.0.0.30-alpha.0.js +0 -1
  168. package/dist/interface/Recordings.gMbvwmk_.0.0.30-alpha.0.js +0 -1
  169. package/dist/interface/Settings.EhHJjGrl.0.0.30-alpha.0.js +0 -1
  170. package/dist/interface/System.VodoK0U6.0.0.30-alpha.0.js +0 -4
  171. package/dist/interface/User.DpcN7DEC.0.0.30-alpha.0.js +0 -1
  172. package/dist/interface/VPlayer.DYua3Eh_.0.0.30-alpha.0.js +0 -1
  173. package/dist/interface/main.19pRAqPU.0.0.30-alpha.0.js +0 -4
  174. package/dist/interface/zod.BaF2dDCd.0.0.30-alpha.0.js +0 -1
  175. package/dist/server/src/camera/device.d.ts +0 -29
  176. package/dist/server/src/camera/device.js +0 -20
  177. package/dist/server/src/camera/device.js.map +0 -1
  178. package/dist/server/src/camera/index.d.ts +0 -90
  179. package/dist/server/src/camera/index.js +0 -581
  180. package/dist/server/src/camera/index.js.map +0 -1
  181. package/dist/server/src/camera/interfaces/camera.d.ts +0 -10
  182. package/dist/server/src/camera/interfaces/camera.js +0 -23
  183. package/dist/server/src/camera/interfaces/camera.js.map +0 -1
  184. package/dist/server/src/camera/interfaces/prebuffer.d.ts +0 -11
  185. package/dist/server/src/camera/interfaces/prebuffer.js +0 -31
  186. package/dist/server/src/camera/interfaces/prebuffer.js.map +0 -1
  187. package/dist/server/src/camera/interfaces/ptz.d.ts +0 -13
  188. package/dist/server/src/camera/interfaces/ptz.js +0 -47
  189. package/dist/server/src/camera/interfaces/ptz.js.map +0 -1
  190. package/dist/server/src/camera/iou.d.ts +0 -2
  191. package/dist/server/src/camera/iou.js +0 -53
  192. package/dist/server/src/camera/iou.js.map +0 -1
  193. package/dist/server/src/camera/polygon.d.ts +0 -6
  194. package/dist/server/src/camera/polygon.js +0 -151
  195. package/dist/server/src/camera/polygon.js.map +0 -1
  196. package/dist/server/src/camera/streaming/peer-connection.d.ts +0 -55
  197. package/dist/server/src/camera/streaming/peer-connection.js +0 -203
  198. package/dist/server/src/camera/streaming/peer-connection.js.map +0 -1
  199. package/dist/server/src/camera/streaming/webrtc-connection.d.ts +0 -35
  200. package/dist/server/src/camera/streaming/webrtc-connection.js +0 -170
  201. package/dist/server/src/camera/streaming/webrtc-connection.js.map +0 -1
  202. package/dist/server/src/camera/streaming/werift-session.d.ts +0 -41
  203. package/dist/server/src/camera/streaming/werift-session.js +0 -179
  204. package/dist/server/src/camera/streaming/werift-session.js.map +0 -1
  205. package/dist/server/src/camera/videoFrame.d.ts +0 -24
  206. package/dist/server/src/camera/videoFrame.js +0 -104
  207. package/dist/server/src/camera/videoFrame.js.map +0 -1
  208. package/dist/server/src/index.d.ts +0 -18
  209. package/dist/server/src/index.js +0 -5
  210. package/dist/server/src/index.js.map +0 -1
  211. package/dist/server/src/nats/connection.d.ts +0 -17
  212. package/dist/server/src/nats/connection.js +0 -66
  213. package/dist/server/src/nats/connection.js.map +0 -1
  214. package/dist/server/src/nats/constants.d.ts +0 -1
  215. package/dist/server/src/nats/constants.js +0 -2
  216. package/dist/server/src/nats/constants.js.map +0 -1
  217. package/dist/server/src/nats/error.d.ts +0 -9
  218. package/dist/server/src/nats/error.js +0 -11
  219. package/dist/server/src/nats/error.js.map +0 -1
  220. package/dist/server/src/nats/messageQueue.d.ts +0 -20
  221. package/dist/server/src/nats/messageQueue.js +0 -132
  222. package/dist/server/src/nats/messageQueue.js.map +0 -1
  223. package/dist/server/src/nats/subscription.d.ts +0 -12
  224. package/dist/server/src/nats/subscription.js +0 -21
  225. package/dist/server/src/nats/subscription.js.map +0 -1
  226. package/dist/server/src/polyglot/node/decoder/child.d.ts +0 -1
  227. package/dist/server/src/polyglot/node/decoder/child.js +0 -644
  228. package/dist/server/src/polyglot/node/decoder/child.js.map +0 -1
  229. package/dist/server/src/polyglot/node/decoder/imageUtils.d.ts +0 -24
  230. package/dist/server/src/polyglot/node/decoder/imageUtils.js +0 -205
  231. package/dist/server/src/polyglot/node/decoder/imageUtils.js.map +0 -1
  232. package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.d.ts +0 -144
  233. package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.js +0 -65
  234. package/dist/server/src/polyglot/node/decoder/wasm/build/decoder.wasm +0 -0
  235. package/dist/server/src/polyglot/node/decoder/wasm/test/imageUtils.py +0 -106
  236. package/dist/server/src/polyglot/node/plugins/cameraStorage.d.ts +0 -107
  237. package/dist/server/src/polyglot/node/plugins/cameraStorage.js +0 -292
  238. package/dist/server/src/polyglot/node/plugins/cameraStorage.js.map +0 -1
  239. package/dist/server/src/polyglot/node/plugins/child.d.ts +0 -28
  240. package/dist/server/src/polyglot/node/plugins/child.js +0 -222
  241. package/dist/server/src/polyglot/node/plugins/child.js.map +0 -1
  242. package/dist/server/src/polyglot/node/plugins/configService.d.ts +0 -104
  243. package/dist/server/src/polyglot/node/plugins/configService.js +0 -213
  244. package/dist/server/src/polyglot/node/plugins/configService.js.map +0 -1
  245. package/dist/server/src/polyglot/node/plugins/pluginApi.d.ts +0 -35
  246. package/dist/server/src/polyglot/node/plugins/pluginApi.js +0 -23
  247. package/dist/server/src/polyglot/node/plugins/pluginApi.js.map +0 -1
  248. package/dist/server/src/polyglot/node/plugins/pluginLogger.d.ts +0 -18
  249. package/dist/server/src/polyglot/node/plugins/pluginLogger.js +0 -89
  250. package/dist/server/src/polyglot/node/plugins/pluginLogger.js.map +0 -1
  251. package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.d.ts +0 -69
  252. package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.js +0 -423
  253. package/dist/server/src/polyglot/node/plugins/proxy/cameraDevice.js.map +0 -1
  254. package/dist/server/src/polyglot/node/plugins/proxy/coreManager.d.ts +0 -40
  255. package/dist/server/src/polyglot/node/plugins/proxy/coreManager.js +0 -105
  256. package/dist/server/src/polyglot/node/plugins/proxy/coreManager.js.map +0 -1
  257. package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.d.ts +0 -47
  258. package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.js +0 -164
  259. package/dist/server/src/polyglot/node/plugins/proxy/deviceManager.js.map +0 -1
  260. package/dist/server/src/polyglot/node/plugins/schema.d.ts +0 -293
  261. package/dist/server/src/polyglot/node/plugins/schema.js +0 -740
  262. package/dist/server/src/polyglot/node/plugins/schema.js.map +0 -1
  263. package/dist/server/src/polyglot/node/plugins/storageController.d.ts +0 -30
  264. package/dist/server/src/polyglot/node/plugins/storageController.js +0 -40
  265. package/dist/server/src/polyglot/node/plugins/storageController.js.map +0 -1
  266. package/dist/server/src/polyglot/python/camera/interfaces/camera.py +0 -20
  267. package/dist/server/src/polyglot/python/camera/interfaces/prebuffer.py +0 -28
  268. package/dist/server/src/polyglot/python/camera/interfaces/ptz.py +0 -38
  269. package/dist/server/src/polyglot/python/camera/iou.py +0 -80
  270. package/dist/server/src/polyglot/python/camera/polygon.py +0 -173
  271. package/dist/server/src/polyglot/python/camera/video_frame.py +0 -188
  272. package/dist/server/src/polyglot/python/camera_ui_types/__init__.py +0 -1200
  273. package/dist/server/src/polyglot/python/decoder/child.py +0 -882
  274. package/dist/server/src/polyglot/python/decoder/image_utils.py +0 -149
  275. package/dist/server/src/polyglot/python/decoder/typings.py +0 -99
  276. package/dist/server/src/polyglot/python/plugins/camera_storage.py +0 -391
  277. package/dist/server/src/polyglot/python/plugins/child.py +0 -394
  278. package/dist/server/src/polyglot/python/plugins/config_service.py +0 -187
  279. package/dist/server/src/polyglot/python/plugins/constants.py +0 -1
  280. package/dist/server/src/polyglot/python/plugins/message_queue.py +0 -182
  281. package/dist/server/src/polyglot/python/plugins/plugin_api.py +0 -34
  282. package/dist/server/src/polyglot/python/plugins/plugin_logger.py +0 -111
  283. package/dist/server/src/polyglot/python/plugins/proxy/camera_device.py +0 -1599
  284. package/dist/server/src/polyglot/python/plugins/proxy/core_manager.py +0 -145
  285. package/dist/server/src/polyglot/python/plugins/proxy/device_manager.py +0 -226
  286. package/dist/server/src/polyglot/python/plugins/schema.py +0 -181
  287. package/dist/server/src/polyglot/python/plugins/storage_controller.py +0 -58
  288. package/dist/server/src/polyglot/python/plugins/typings.py +0 -253
  289. package/dist/server/src/polyglot/python/utilities/connection.py +0 -86
  290. package/dist/server/src/polyglot/python/utilities/json_lmdb.py +0 -19
  291. package/dist/server/src/polyglot/python/utilities/object_path.py +0 -195
  292. package/dist/server/src/polyglot/python/utilities/packer.py +0 -11
  293. package/dist/server/src/polyglot/python/utilities/subscriptions.py +0 -22
  294. package/dist/server/src/polyglot/python/utilities/task.py +0 -35
  295. package/dist/server/src/polyglot/python/utilities/thread.py +0 -10
  296. package/dist/server/src/polyglot/python/utilities/utils.py +0 -73
  297. package/dist/server/src/utils/ffmpeg.d.ts +0 -2
  298. package/dist/server/src/utils/ffmpeg.js +0 -61
  299. package/dist/server/src/utils/ffmpeg.js.map +0 -1
  300. package/dist/server/src/utils/network.d.ts +0 -12
  301. package/dist/server/src/utils/network.js +0 -92
  302. package/dist/server/src/utils/network.js.map +0 -1
  303. package/dist/server/src/utils/npm.d.ts +0 -4
  304. package/dist/server/src/utils/npm.js +0 -128
  305. package/dist/server/src/utils/npm.js.map +0 -1
  306. package/dist/server/src/utils/packer.d.ts +0 -2
  307. package/dist/server/src/utils/packer.js +0 -17
  308. package/dist/server/src/utils/packer.js.map +0 -1
  309. package/dist/server/src/utils/pythonInstaller.d.ts +0 -48
  310. package/dist/server/src/utils/pythonInstaller.js +0 -494
  311. package/dist/server/src/utils/pythonInstaller.js.map +0 -1
  312. package/dist/server/src/utils/reader.d.ts +0 -5
  313. package/dist/server/src/utils/reader.js +0 -41
  314. package/dist/server/src/utils/reader.js.map +0 -1
  315. package/dist/server/src/utils/subscribed.d.ts +0 -9
  316. package/dist/server/src/utils/subscribed.js +0 -17
  317. package/dist/server/src/utils/subscribed.js.map +0 -1
  318. package/dist/server/src/utils/utils.d.ts +0 -10
  319. package/dist/server/src/utils/utils.js +0 -165
  320. package/dist/server/src/utils/utils.js.map +0 -1
@@ -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