@camera.ui/server 0.0.48 → 0.0.50-internal.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore +12 -0
- package/.prettierrc.json +12 -0
- package/artillery.yaml +29 -0
- package/bin/cameraui-server.ts +11 -0
- package/dist/interface/assets/@xterm.DYP7pi_n.0.0.50-internal.0.css +32 -0
- package/dist/interface/assets/Adminpanel.BKek2EMH.0.0.50-internal.0.css +1 -0
- package/dist/interface/assets/Cameras.BDWZJqPN.0.0.50-internal.0.css +1 -0
- package/dist/interface/assets/Camview.BFUFMoNX.0.0.50-internal.0.css +1 -0
- package/dist/interface/assets/CuiConsole.DCYyxdVg.0.0.50-internal.0.css +1 -0
- package/dist/interface/assets/CuiPluginCard.yF8V0SZY.0.0.50-internal.0.css +1 -0
- package/dist/interface/assets/CuiTimeline.BkIwlYtw.0.0.50-internal.0.css +1 -0
- package/dist/interface/assets/Plugin.DJElsAn5.0.0.50-internal.0.css +1 -0
- package/dist/interface/assets/Plugins.0h77qnmN.0.0.50-internal.0.css +1 -0
- package/dist/interface/assets/Settings.CkgfRkQr.0.0.50-internal.0.css +1 -0
- package/dist/interface/assets/SettingsAccount.DeFul3eQ.0.0.50-internal.0.css +1 -0
- package/dist/interface/assets/main.Cip9LkS3.0.0.50-internal.0.css +1 -0
- package/dist/interface/assets/worker-base.jEXLGV2h.0.0.50-internal.0.js +1332 -0
- package/dist/interface/assets/worker-json.DgwNIOck.0.0.50-internal.0.js +1626 -0
- package/dist/interface/assets/worker-yaml.B3uUYINB.0.0.50-internal.0.js +5819 -0
- package/dist/interface/fonts/InterVariable.woff2 +0 -0
- package/dist/interface/index.html +48 -38
- package/dist/interface/js/@intlify.BkGPX90O.0.0.50-internal.0.js +15 -0
- package/dist/interface/js/@kurkle.D8fDXNIl.0.0.50-internal.0.js +6 -0
- package/dist/interface/js/@primeuix.BFAY2Bk9.0.0.50-internal.0.js +5722 -0
- package/dist/interface/js/@primevue.OhxoO3MD.0.0.50-internal.0.js +57 -0
- package/dist/interface/js/@tanstack.D1IL6eOv.0.0.50-internal.0.js +1 -0
- package/dist/interface/{@vee-validate.BEda0VqZ.0.0.48.js → js/@vee-validate.BGPyWWTh.0.0.50-internal.0.js} +2 -2
- package/dist/interface/js/@vue.B5vqhCp2.0.0.50-internal.0.js +17 -0
- package/dist/interface/js/@vueuse.BsKtqdiG.0.0.50-internal.0.js +1 -0
- package/dist/interface/{@xterm.Ct1qg4AD.0.0.48.js → js/@xterm.CAa7rpjv.0.0.50-internal.0.js} +8 -8
- package/dist/interface/js/Adminpanel.D93Kvbwp.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/Camera.DF2l3OMA.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/Cameras.YzvZccdv.0.0.50-internal.0.js +482 -0
- package/dist/interface/js/Cammesh.D-6dAROQ.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/Camview.CB7_HnoQ.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/Config.BwflsWTm.0.0.50-internal.0.js +2 -0
- package/dist/interface/js/Console.DZM8pN8Q.0.0.50-internal.0.js +4 -0
- package/dist/interface/js/CuiConsole.BXXU7Gth.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/CuiPluginCard.YFOrpbVD.0.0.50-internal.0.js +4 -0
- package/dist/interface/js/CuiTimeline.VV5KSJd5.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/FirstSteps.b-nvymgb.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/Plugin.BOMpVEwM.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/Plugins.DdPwaUDA.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/Recordings.DhxjIW7e.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/Settings.D24ttaPu.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/SettingsAccount.ms3aqz4E.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/SettingsAppearance.DsTjKXk1.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/SettingsAppearance.vue_vue_type_script_setup_true_lang.CBQ6lL3T.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/SettingsBackup.BPEc4Rjg.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/SettingsRecordings.DgW7M0jj.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/SettingsRemote.BL5nXbUT.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/SettingsSystem.D7T0AIpm.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/SettingsUsers.1u0vCOVG.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/VersionsHandler.vue_vue_type_script_setup_true_lang.xDishkkS.0.0.50-internal.0.js +4 -0
- package/dist/interface/js/ace-builds.D1nmvCwb.0.0.50-internal.0.js +1090 -0
- package/dist/interface/js/ace.config.G96T2z54.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/axios.DHr9lByg.0.0.50-internal.0.js +6 -0
- package/dist/interface/js/backup.B_Gzxtp_.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/chart.js.CP_nMnnf.0.0.50-internal.0.js +13 -0
- package/dist/interface/js/close-circle.DYLuVIOg.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/dnd-core.T9OeW7mu.0.0.50-internal.0.js +1 -0
- package/dist/interface/{draggabilly.PrP7w5-3.0.0.48.js → js/draggabilly.D3zGcBb3.0.0.50-internal.0.js} +1 -1
- package/dist/interface/js/engine.io-client.kITRnq-g.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/fast-deep-equal.Bpc9mIsj.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/highlight.js.BlSXU-Wb.0.0.50-internal.0.js +3 -0
- package/dist/interface/js/linkify-it.C3N1lWsJ.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/main.D0YR3Jat.0.0.50-internal.0.js +31 -0
- package/dist/interface/{markdown-it.DU7e183f.0.0.48.js → js/markdown-it.Dj0dt5s2.0.0.50-internal.0.js} +1 -1
- package/dist/interface/{nprogress.DTGXmkhG.0.0.48.js → js/nprogress.BwQWDcGj.0.0.50-internal.0.js} +1 -1
- package/dist/interface/js/perfect-debounce.l0sNRNKZ.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/pinia.DRh7plEC.0.0.50-internal.0.js +5 -0
- package/dist/interface/js/primelocale.Bga3dOQu.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/primevue.Cl58krXf.0.0.50-internal.0.js +142 -0
- package/dist/interface/{qrcode.Bdg1zKx6.0.0.48.js → js/qrcode.C1sDj6P8.0.0.50-internal.0.js} +1 -1
- package/dist/interface/js/react-dnd-touch-backend.BA4WhUJo.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/refresh-rounded.D_SmhhUf.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/rxjs.C-fTBwEO.0.0.50-internal.0.js +3 -0
- package/dist/interface/js/socket.io-client.DKrRxgjP.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/socket.io-parser.EXj3YDH2.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/system.CY8rGd-Q.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/trash-fill.CMnCN3Oy.0.0.50-internal.0.js +1 -0
- package/dist/interface/{unidragger.3FW7TOUy.0.0.48.js → js/unidragger.D0w6Tqtt.0.0.50-internal.0.js} +1 -1
- package/dist/interface/js/uuid.C6aID195.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/vee-validate.BeiObIH8.0.0.50-internal.0.js +5 -0
- package/dist/interface/js/vue-chartjs.DtdZdiYw.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/vue-i18n.BW2bx_6z.0.0.50-internal.0.js +5 -0
- package/dist/interface/js/vue-inline-svg.BJkQGmKz.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/vue-router.B2mOXHaC.0.0.50-internal.0.js +5 -0
- package/dist/interface/js/vue-zoomable.BKDyCJE7.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/vue.l0sNRNKZ.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/vue3-dnd.DRK24CBp.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/zod.SKKegNRO.0.0.50-internal.0.js +1 -0
- package/dist/interface/js/zoom-out.DxvzgVEo.0.0.50-internal.0.js +1 -0
- package/dist/interface/manifest.webmanifest +1 -1
- package/dist/interface/pwa/favicon-32.ico +0 -0
- package/dist/interface/pwa/favicon-48.ico +0 -0
- package/dist/interface/sw.js +1 -1
- package/dist/server/package.json +57 -45
- package/dist/server/requirements.txt +12 -11
- package/dist/server/src/__init__.py +0 -0
- package/dist/server/src/_camera_ui_tools/__init__.py +0 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_common/__init__.py +28 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_common/camera_utils/utils.py +52 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_common/common_utils/__init__.py +0 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_common/common_utils/object_path.py +198 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_common/common_utils/reactive.py +42 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_common/common_utils/signal_handler.py +92 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_common/common_utils/subscribed.py +21 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_common/common_utils/task.py +39 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_common/common_utils/thread.py +10 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_common/common_utils/utils.py +91 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_common/logger_service/__init__.py +0 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_common/logger_service/ansicolor.py +62 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_common/logger_service/logger.py +178 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_common/logger_service/test.py +116 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/__init__.py +350 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/base/__init__.py +0 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/base/base.py +237 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/base/client.py +256 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/base/connection.py +784 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/base/errors.py +745 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/base/messaging.py +57 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/base/rpc.py +227 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/base/rpc_generator.py +584 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/constants.py +96 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/typings.py +218 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/__init__.py +0 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/connection_state.py +86 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/logger.py +30 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/metrics.py +152 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/packer.py +20 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/routing.py +75 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/rpc.py +177 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/subscriptions.py +24 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/tasks.py +39 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/uid.py +37 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc_client/utils/validate.py +119 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_types/__init__.py +1360 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_types/hybrid_observer.py +338 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_types/test.py +196 -0
- package/dist/server/src/api/controllers/auth.controller.d.ts +2 -2
- package/dist/server/src/api/controllers/auth.controller.js +49 -43
- package/dist/server/src/api/controllers/auth.controller.js.map +1 -1
- package/dist/server/src/api/controllers/backup.controller.js +1 -2
- package/dist/server/src/api/controllers/backup.controller.js.map +1 -1
- package/dist/server/src/api/controllers/cameras.controller.d.ts +13 -11
- package/dist/server/src/api/controllers/cameras.controller.js +314 -105
- package/dist/server/src/api/controllers/cameras.controller.js.map +1 -1
- package/dist/server/src/api/controllers/plugins.controller.d.ts +8 -8
- package/dist/server/src/api/controllers/plugins.controller.js +208 -244
- package/dist/server/src/api/controllers/plugins.controller.js.map +1 -1
- package/dist/server/src/api/controllers/system.controller.d.ts +1 -0
- package/dist/server/src/api/controllers/system.controller.js +22 -8
- package/dist/server/src/api/controllers/system.controller.js.map +1 -1
- package/dist/server/src/api/controllers/users.controller.d.ts +2 -2
- package/dist/server/src/api/controllers/users.controller.js +13 -25
- package/dist/server/src/api/controllers/users.controller.js.map +1 -1
- package/dist/server/src/api/database/checks.js +2 -2
- package/dist/server/src/api/database/checks.js.map +1 -1
- package/dist/server/src/api/database/index.d.ts +4 -7
- package/dist/server/src/api/database/index.js +59 -86
- package/dist/server/src/api/database/index.js.map +1 -1
- package/dist/server/src/api/database/migration.js +5 -141
- package/dist/server/src/api/database/migration.js.map +1 -1
- package/dist/server/src/api/database/selfcheck.js +5 -5
- package/dist/server/src/api/database/selfcheck.js.map +1 -1
- package/dist/server/src/api/database/types.d.ts +17 -25
- package/dist/server/src/api/go2rtc/api/discover.d.ts +30 -0
- package/dist/server/src/api/go2rtc/api/discover.js +162 -0
- package/dist/server/src/api/go2rtc/api/discover.js.map +1 -0
- package/dist/server/src/api/go2rtc/api/index.d.ts +1 -1
- package/dist/server/src/api/go2rtc/api/index.js +15 -4
- package/dist/server/src/api/go2rtc/api/index.js.map +1 -1
- package/dist/server/src/api/go2rtc/api/streams.d.ts +3 -1
- package/dist/server/src/api/go2rtc/api/streams.js +66 -9
- package/dist/server/src/api/go2rtc/api/streams.js.map +1 -1
- package/dist/server/src/api/go2rtc/index.d.ts +2 -0
- package/dist/server/src/api/go2rtc/index.js +3 -0
- package/dist/server/src/api/go2rtc/index.js.map +1 -1
- package/dist/server/src/api/go2rtc/queue.js +3 -3
- package/dist/server/src/api/go2rtc/queue.js.map +1 -1
- package/dist/server/src/api/go2rtc/types.d.ts +66 -11
- package/dist/server/src/api/index.d.ts +4 -0
- package/dist/server/src/api/index.js +45 -9
- package/dist/server/src/api/index.js.map +1 -1
- package/dist/server/src/api/middlewares/authPermission.middleware.d.ts +1 -0
- package/dist/server/src/api/middlewares/authPermission.middleware.js +11 -2
- package/dist/server/src/api/middlewares/authPermission.middleware.js.map +1 -1
- package/dist/server/src/api/middlewares/authValidation.middleware.js +20 -12
- package/dist/server/src/api/middlewares/authValidation.middleware.js.map +1 -1
- package/dist/server/src/api/middlewares/pagination.middleware.js +45 -53
- package/dist/server/src/api/middlewares/pagination.middleware.js.map +1 -1
- package/dist/server/src/api/plugins/proxy.plugin.d.ts +14 -0
- package/dist/server/src/api/plugins/proxy.plugin.js +200 -0
- package/dist/server/src/api/plugins/proxy.plugin.js.map +1 -0
- package/dist/server/src/api/routes/cameras.routes.js +56 -30
- package/dist/server/src/api/routes/cameras.routes.js.map +1 -1
- package/dist/server/src/api/routes/plugins.routes.js +65 -63
- package/dist/server/src/api/routes/plugins.routes.js.map +1 -1
- package/dist/server/src/api/routes/system.routes.js +7 -1
- package/dist/server/src/api/routes/system.routes.js.map +1 -1
- package/dist/server/src/api/routes/users.routes.js +8 -8
- package/dist/server/src/api/routes/users.routes.js.map +1 -1
- package/dist/server/src/api/schemas/backup.schema.d.ts +3 -3
- package/dist/server/src/api/schemas/backup.schema.js +1 -1
- package/dist/server/src/api/schemas/backup.schema.js.map +1 -1
- package/dist/server/src/api/schemas/cameras.schema.d.ts +1413 -529
- package/dist/server/src/api/schemas/cameras.schema.js +229 -182
- package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
- package/dist/server/src/api/schemas/config.schema.d.ts +29 -41
- package/dist/server/src/api/schemas/config.schema.js +10 -21
- package/dist/server/src/api/schemas/config.schema.js.map +1 -1
- package/dist/server/src/api/schemas/go2rtc.schema.d.ts +194 -162
- package/dist/server/src/api/schemas/go2rtc.schema.js +33 -58
- package/dist/server/src/api/schemas/go2rtc.schema.js.map +1 -1
- package/dist/server/src/api/schemas/plugins.schema.d.ts +17 -17
- package/dist/server/src/api/schemas/plugins.schema.js +1 -1
- package/dist/server/src/api/schemas/plugins.schema.js.map +1 -1
- package/dist/server/src/api/schemas/storage.schema.d.ts +22 -0
- package/dist/server/src/api/schemas/storage.schema.js +5 -0
- package/dist/server/src/api/schemas/storage.schema.js.map +1 -0
- package/dist/server/src/api/schemas/system.schema.d.ts +171 -3
- package/dist/server/src/api/schemas/system.schema.js +30 -3
- package/dist/server/src/api/schemas/system.schema.js.map +1 -1
- package/dist/server/src/api/schemas/users.schema.d.ts +98 -254
- package/dist/server/src/api/schemas/users.schema.js +6 -6
- package/dist/server/src/api/schemas/users.schema.js.map +1 -1
- package/dist/server/src/api/services/auth.service.d.ts +5 -5
- package/dist/server/src/api/services/auth.service.js +26 -35
- package/dist/server/src/api/services/auth.service.js.map +1 -1
- package/dist/server/src/api/services/cameras.service.d.ts +11 -15
- package/dist/server/src/api/services/cameras.service.js +143 -274
- package/dist/server/src/api/services/cameras.service.js.map +1 -1
- package/dist/server/src/api/services/plugins.service.d.ts +3 -1
- package/dist/server/src/api/services/plugins.service.js +48 -50
- package/dist/server/src/api/services/plugins.service.js.map +1 -1
- package/dist/server/src/api/services/users.service.d.ts +1 -0
- package/dist/server/src/api/services/users.service.js +20 -14
- package/dist/server/src/api/services/users.service.js.map +1 -1
- package/dist/server/src/api/types/index.d.ts +57 -46
- package/dist/server/src/api/types/index.js +0 -4
- package/dist/server/src/api/types/index.js.map +1 -1
- package/dist/server/src/api/utils/cert.d.ts +5 -1
- package/dist/server/src/api/utils/cert.js +24 -26
- package/dist/server/src/api/utils/cert.js.map +1 -1
- package/dist/server/src/api/utils/constants.d.ts +4 -2
- package/dist/server/src/api/utils/constants.js +4 -2
- package/dist/server/src/api/utils/constants.js.map +1 -1
- package/dist/server/src/api/utils/fetch.d.ts +1 -1
- package/dist/server/src/api/utils/fetch.js +2 -2
- package/dist/server/src/api/utils/fetch.js.map +1 -1
- package/dist/server/src/api/websocket/index.d.ts +1 -0
- package/dist/server/src/api/websocket/index.js +14 -9
- package/dist/server/src/api/websocket/index.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/logs.d.ts +10 -2
- package/dist/server/src/api/websocket/nsp/logs.js +75 -27
- package/dist/server/src/api/websocket/nsp/logs.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/metrics.d.ts +20 -12
- package/dist/server/src/api/websocket/nsp/metrics.js +188 -117
- package/dist/server/src/api/websocket/nsp/metrics.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/plugins.d.ts +1 -1
- package/dist/server/src/api/websocket/nsp/plugins.js +3 -5
- package/dist/server/src/api/websocket/nsp/plugins.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/server.js +6 -0
- package/dist/server/src/api/websocket/nsp/server.js.map +1 -1
- package/dist/server/src/api/websocket/types.d.ts +4 -2
- package/dist/server/src/api.d.ts +3 -4
- package/dist/server/src/api.js +13 -13
- package/dist/server/src/api.js.map +1 -1
- package/dist/server/src/camera/classes.d.ts +2 -0
- package/dist/server/src/camera/classes.js +24 -0
- package/dist/server/src/camera/classes.js.map +1 -0
- package/dist/server/src/camera/controller.d.ts +30 -18
- package/dist/server/src/camera/controller.js +236 -202
- package/dist/server/src/camera/controller.js.map +1 -1
- package/dist/server/src/camera/device.d.ts +34 -0
- package/dist/server/src/camera/device.js +327 -0
- package/dist/server/src/camera/device.js.map +1 -0
- package/dist/server/src/camera/frameWorker.d.ts +32 -31
- package/dist/server/src/camera/frameWorker.js +257 -247
- package/dist/server/src/camera/frameWorker.js.map +1 -1
- package/dist/server/src/camera/index.d.ts +92 -0
- package/dist/server/src/camera/index.js +531 -0
- package/dist/server/src/camera/index.js.map +1 -0
- package/dist/server/src/camera/interfaces.d.ts +17 -0
- package/dist/server/src/camera/interfaces.js +99 -0
- package/dist/server/src/camera/interfaces.js.map +1 -0
- package/dist/server/src/camera/iou.d.ts +2 -0
- package/dist/server/src/camera/iou.js +123 -0
- package/dist/server/src/camera/iou.js.map +1 -0
- package/dist/server/src/camera/polygon.d.ts +4 -0
- package/dist/server/src/camera/polygon.js +192 -0
- package/dist/server/src/camera/polygon.js.map +1 -0
- package/dist/server/src/camera/python/__init__.py +0 -0
- package/dist/server/src/camera/python/classes.py +41 -0
- package/dist/server/src/camera/python/interfaces.py +130 -0
- package/dist/server/src/camera/python/iou.py +158 -0
- package/dist/server/src/camera/python/polygon.py +230 -0
- package/dist/server/src/camera/python/typings.py +50 -0
- package/dist/server/src/camera/python/video_frame.py +143 -0
- package/dist/server/src/camera/session.d.ts +37 -0
- package/dist/server/src/camera/session.js +160 -0
- package/dist/server/src/camera/session.js.map +1 -0
- package/dist/server/src/camera/streaming/fmp4-session.d.ts +17 -0
- package/dist/server/src/camera/streaming/fmp4-session.js +308 -0
- package/dist/server/src/camera/streaming/fmp4-session.js.map +1 -0
- package/dist/server/src/camera/streaming/peer-connection.d.ts +26 -0
- package/dist/server/src/camera/streaming/peer-connection.js +213 -0
- package/dist/server/src/camera/streaming/peer-connection.js.map +1 -0
- package/dist/server/src/camera/streaming/rtsp-session.d.ts +19 -0
- package/dist/server/src/camera/streaming/rtsp-session.js +253 -0
- package/dist/server/src/camera/streaming/rtsp-session.js.map +1 -0
- package/dist/server/src/camera/streaming/webrtc-connection.d.ts +44 -0
- package/dist/server/src/camera/streaming/webrtc-connection.js +177 -0
- package/dist/server/src/camera/streaming/webrtc-connection.js.map +1 -0
- package/dist/server/src/camera/streaming/werift-session.d.ts +19 -0
- package/dist/server/src/camera/streaming/werift-session.js +246 -0
- package/dist/server/src/camera/streaming/werift-session.js.map +1 -0
- package/dist/server/src/camera/types.d.ts +16 -10
- package/dist/server/src/camera/utils.d.ts +9 -0
- package/dist/server/src/camera/utils.js +416 -0
- package/dist/server/src/camera/utils.js.map +1 -0
- package/dist/server/src/camera/videoFrame.d.ts +18 -0
- package/dist/server/src/camera/videoFrame.js +88 -0
- package/dist/server/src/camera/videoFrame.js.map +1 -0
- package/dist/server/src/cloud/index.d.ts +12 -0
- package/dist/server/src/cloud/index.js +49 -0
- package/dist/server/src/cloud/index.js.map +1 -0
- package/dist/server/src/cloud/remote/cloudflare.d.ts +7 -0
- package/dist/server/src/cloud/remote/cloudflare.js +12 -0
- package/dist/server/src/cloud/remote/cloudflare.js.map +1 -0
- package/dist/server/src/cloud/remote/upnp.d.ts +7 -0
- package/dist/server/src/cloud/remote/upnp.js +12 -0
- package/dist/server/src/cloud/remote/upnp.js.map +1 -0
- package/dist/server/src/cloud/remote/utils.d.ts +3 -0
- package/dist/server/src/cloud/remote/utils.js +20 -0
- package/dist/server/src/cloud/remote/utils.js.map +1 -0
- package/dist/server/src/cloud/types.d.ts +15 -0
- package/dist/server/src/cloud/types.js +11 -0
- package/dist/server/src/cloud/types.js.map +1 -0
- package/dist/server/src/decoder/child.d.ts +1 -0
- package/dist/server/src/decoder/child.js +749 -0
- package/dist/server/src/decoder/child.js.map +1 -0
- package/dist/server/src/decoder/imageUtils.d.ts +22 -0
- package/dist/server/src/decoder/imageUtils.js +196 -0
- package/dist/server/src/decoder/imageUtils.js.map +1 -0
- package/dist/server/src/decoder/manager.d.ts +19 -0
- package/dist/server/src/decoder/manager.js +208 -0
- package/dist/server/src/decoder/manager.js.map +1 -0
- package/dist/server/src/decoder/python/__init__.py +0 -0
- package/dist/server/src/decoder/python/child.py +903 -0
- package/dist/server/src/decoder/python/image_utils.py +196 -0
- package/dist/server/src/decoder/python/pool.py +45 -0
- package/dist/server/src/decoder/python/typings.py +57 -0
- package/dist/server/src/decoder/python/utils.py +70 -0
- package/dist/server/src/decoder/types.d.ts +23 -0
- package/dist/server/src/decoder/types.js.map +1 -0
- package/dist/server/src/decoder/utils.d.ts +13 -0
- package/dist/server/src/decoder/utils.js +45 -0
- package/dist/server/src/decoder/utils.js.map +1 -0
- package/dist/server/src/decoder/wasm/build/decoder.d.ts +43 -0
- package/dist/server/src/decoder/wasm/build/decoder.js +108 -0
- package/dist/server/src/decoder/wasm/build/decoder.wasm +0 -0
- package/dist/server/src/decoder/worker.d.ts +1 -0
- package/dist/server/src/decoder/worker.js +79 -0
- package/dist/server/src/decoder/worker.js.map +1 -0
- package/dist/server/src/go2rtc/index.d.ts +1 -0
- package/dist/server/src/go2rtc/index.js +27 -9
- package/dist/server/src/go2rtc/index.js.map +1 -1
- package/dist/server/src/go2rtc/types.d.ts +5 -4
- package/dist/server/src/go2rtc/types.js +7 -2
- package/dist/server/src/go2rtc/types.js.map +1 -1
- package/dist/server/src/main.js +19 -5
- package/dist/server/src/main.js.map +1 -1
- package/dist/server/src/manager/coreManager.d.ts +16 -0
- package/dist/server/src/manager/coreManager.js +95 -0
- package/dist/server/src/manager/coreManager.js.map +1 -0
- package/dist/server/src/manager/deviceManager.d.ts +12 -0
- package/dist/server/src/manager/deviceManager.js +130 -0
- package/dist/server/src/manager/deviceManager.js.map +1 -0
- package/dist/server/src/manager/types.d.ts +15 -0
- package/dist/server/src/manager/types.js +2 -0
- package/dist/server/src/manager/types.js.map +1 -0
- package/dist/server/src/plugins/index.d.ts +3 -1
- package/dist/server/src/plugins/index.js +42 -21
- package/dist/server/src/plugins/index.js.map +1 -1
- package/dist/server/src/plugins/plugin.d.ts +3 -3
- package/dist/server/src/plugins/plugin.js +13 -20
- package/dist/server/src/plugins/plugin.js.map +1 -1
- package/dist/server/src/plugins/runtime/base.d.ts +54 -0
- package/dist/server/src/plugins/runtime/base.js +223 -0
- package/dist/server/src/plugins/runtime/base.js.map +1 -0
- package/dist/server/src/plugins/runtime/index.d.ts +5 -0
- package/dist/server/src/plugins/runtime/index.js +13 -0
- package/dist/server/src/plugins/runtime/index.js.map +1 -0
- package/dist/server/src/plugins/runtime/node/child.d.ts +22 -0
- package/dist/server/src/plugins/runtime/node/child.js +152 -0
- package/dist/server/src/plugins/runtime/node/child.js.map +1 -0
- package/dist/server/src/plugins/runtime/node/index.d.ts +7 -0
- package/dist/server/src/plugins/runtime/node/index.js +54 -0
- package/dist/server/src/plugins/runtime/node/index.js.map +1 -0
- package/dist/server/src/plugins/runtime/node/plugin.d.ts +24 -0
- package/dist/server/src/plugins/runtime/node/plugin.js +128 -0
- package/dist/server/src/plugins/runtime/node/plugin.js.map +1 -0
- package/dist/server/src/plugins/runtime/node/pluginApi.d.ts +16 -0
- package/dist/server/src/plugins/runtime/node/pluginApi.js +18 -0
- package/dist/server/src/plugins/runtime/node/pluginApi.js.map +1 -0
- package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.d.ts +25 -0
- package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js +230 -0
- package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js.map +1 -0
- package/dist/server/src/plugins/runtime/node/proxy/coreManager.d.ts +16 -0
- package/dist/server/src/plugins/runtime/node/proxy/coreManager.js +98 -0
- package/dist/server/src/plugins/runtime/node/proxy/coreManager.js.map +1 -0
- package/dist/server/src/plugins/runtime/node/proxy/deviceManager.d.ts +19 -0
- package/dist/server/src/plugins/runtime/node/proxy/deviceManager.js +144 -0
- package/dist/server/src/plugins/runtime/node/proxy/deviceManager.js.map +1 -0
- package/dist/server/src/plugins/runtime/node/storage.d.ts +34 -0
- package/dist/server/src/plugins/runtime/node/storage.js +313 -0
- package/dist/server/src/plugins/runtime/node/storage.js.map +1 -0
- package/dist/server/src/plugins/runtime/node/storageController.d.ts +18 -0
- package/dist/server/src/plugins/runtime/node/storageController.js +67 -0
- package/dist/server/src/plugins/runtime/node/storageController.js.map +1 -0
- package/dist/server/src/plugins/runtime/python/__init__.py +0 -0
- package/dist/server/src/plugins/runtime/python/child.py +248 -0
- package/dist/server/src/plugins/runtime/python/index.d.ts +9 -0
- package/dist/server/src/plugins/runtime/python/index.js +57 -0
- package/dist/server/src/plugins/runtime/python/index.js.map +1 -0
- package/dist/server/src/plugins/runtime/python/namespaces.py +101 -0
- package/dist/server/src/plugins/runtime/python/plugin.py +155 -0
- package/dist/server/src/plugins/runtime/python/plugin_api.py +29 -0
- package/dist/server/src/plugins/runtime/python/proxy/camera_device.py +1732 -0
- package/dist/server/src/plugins/runtime/python/proxy/core_manager.py +126 -0
- package/dist/server/src/plugins/runtime/python/proxy/device_manager.py +197 -0
- package/dist/server/src/plugins/runtime/python/schema.py +99 -0
- package/dist/server/src/plugins/runtime/python/storage.py +353 -0
- package/dist/server/src/plugins/runtime/python/storage_controller.py +102 -0
- package/dist/server/src/plugins/runtime/python/typings.py +195 -0
- package/dist/server/src/plugins/schema.d.ts +27 -34
- package/dist/server/src/plugins/schema.js +358 -369
- package/dist/server/src/plugins/schema.js.map +1 -1
- package/dist/server/src/plugins/types.d.ts +43 -1
- package/dist/server/src/plugins/types.js +16 -0
- package/dist/server/src/plugins/types.js.map +1 -1
- package/dist/server/src/plugins/worker.d.ts +12 -31
- package/dist/server/src/plugins/worker.js +89 -343
- package/dist/server/src/plugins/worker.js.map +1 -1
- package/dist/server/src/rpc/index.d.ts +32 -0
- package/dist/server/src/rpc/index.js +103 -0
- package/dist/server/src/rpc/index.js.map +1 -0
- package/dist/server/src/rpc/namespaces.d.ts +35 -0
- package/dist/server/src/rpc/namespaces.js +42 -0
- package/dist/server/src/rpc/namespaces.js.map +1 -0
- package/dist/server/src/{nats → rpc}/server.d.ts +6 -2
- package/dist/server/src/{nats → rpc}/server.js +76 -55
- package/dist/server/src/rpc/server.js.map +1 -0
- package/dist/server/src/rpc/types.d.ts +111 -0
- package/dist/server/src/rpc/types.js +2 -0
- package/dist/server/src/{nats → rpc}/types.js.map +1 -1
- package/dist/server/src/{nats → rpc}/utils.d.ts +1 -1
- package/dist/server/src/rpc/utils.js.map +1 -0
- package/dist/server/src/services/config/constants.js +12 -48
- package/dist/server/src/services/config/constants.js.map +1 -1
- package/dist/server/src/services/config/defaults.d.ts +12 -0
- package/dist/server/src/services/config/defaults.js +55 -0
- package/dist/server/src/services/config/defaults.js.map +1 -0
- package/dist/server/src/services/config/index.d.ts +57 -9
- package/dist/server/src/services/config/index.js +277 -130
- package/dist/server/src/services/config/index.js.map +1 -1
- package/dist/server/src/services/config/types.d.ts +10 -4
- package/dist/server/src/types.d.ts +3 -0
- package/dist/server/src/utils/path.d.ts +5 -0
- package/dist/server/src/utils/path.js +12 -0
- package/dist/server/src/utils/path.js.map +1 -0
- package/dist/server/src/utils/pythonInstaller.d.ts +46 -0
- package/dist/server/src/utils/pythonInstaller.js +463 -0
- package/dist/server/src/utils/pythonInstaller.js.map +1 -0
- package/eslint.config.js +103 -0
- package/localdeps.txt +10 -0
- package/mypy.ini +30 -0
- package/package.json +57 -45
- package/requirements.txt +15 -0
- package/ruff.toml +90 -0
- package/src/__init__.py +0 -0
- package/src/_camera_ui_tools/__init__.py +0 -0
- package/src/_camera_ui_tools/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/api/controllers/api.controller.ts +19 -0
- package/src/api/controllers/auth.controller.ts +294 -0
- package/src/api/controllers/backup.controller.ts +72 -0
- package/src/api/controllers/cameras.controller.ts +1029 -0
- package/src/api/controllers/config.controller.ts +102 -0
- package/src/api/controllers/files.controller.ts +35 -0
- package/src/api/controllers/frameWorkers.controller.ts +109 -0
- package/src/api/controllers/plugins.controller.ts +1206 -0
- package/src/api/controllers/system.controller.ts +273 -0
- package/src/api/controllers/users.controller.ts +648 -0
- package/src/api/database/checks.ts +268 -0
- package/src/api/database/constants.ts +8 -0
- package/src/api/database/index.ts +262 -0
- package/src/api/database/migration.ts +62 -0
- package/src/api/database/selfcheck.ts +492 -0
- package/src/api/database/types.ts +104 -0
- package/src/api/go2rtc/api/application.ts +48 -0
- package/src/api/go2rtc/api/config.ts +61 -0
- package/src/api/go2rtc/api/discover.ts +197 -0
- package/src/api/go2rtc/api/index.ts +49 -0
- package/src/api/go2rtc/api/snapshot.ts +44 -0
- package/src/api/go2rtc/api/streams.ts +168 -0
- package/src/api/go2rtc/index.ts +43 -0
- package/src/api/go2rtc/queue.ts +50 -0
- package/src/api/go2rtc/types.ts +174 -0
- package/src/api/index.ts +286 -0
- package/src/api/middlewares/authPermission.middleware.ts +46 -0
- package/src/api/middlewares/authValidation.middleware.ts +160 -0
- package/src/api/middlewares/pagination.middleware.ts +67 -0
- package/src/api/middlewares/socketAuth.middleware.ts +136 -0
- package/src/api/plugins/header.plugin.ts +15 -0
- package/src/api/plugins/logger.plugin.ts +44 -0
- package/src/api/plugins/proxy.plugin.ts +255 -0
- package/src/api/plugins/socket.plugin.ts +28 -0
- package/src/api/plugins/system.plugin.ts +48 -0
- package/src/api/plugins/useragent.plugin.ts +19 -0
- package/src/api/routes/api.routes.ts +10 -0
- package/src/api/routes/auth.routes.ts +56 -0
- package/src/api/routes/backup.routes.ts +28 -0
- package/src/api/routes/cameras.routes.ts +281 -0
- package/src/api/routes/config.routes.ts +66 -0
- package/src/api/routes/files.routes.ts +15 -0
- package/src/api/routes/frameWorkers.routes.ts +39 -0
- package/src/api/routes/index.ts +37 -0
- package/src/api/routes/plugins.routes.ts +420 -0
- package/src/api/routes/system.routes.ts +101 -0
- package/src/api/routes/users.routes.ts +167 -0
- package/src/api/schemas/backup.schema.ts +112 -0
- package/src/api/schemas/cameras.schema.ts +479 -0
- package/src/api/schemas/config.schema.ts +38 -0
- package/src/api/schemas/go2rtc.schema.ts +189 -0
- package/src/api/schemas/plugins.schema.ts +126 -0
- package/src/api/schemas/storage.schema.ts +11 -0
- package/src/api/schemas/system.schema.ts +45 -0
- package/src/api/schemas/users.schema.ts +185 -0
- package/src/api/services/auth.service.ts +210 -0
- package/src/api/services/backup.service.ts +144 -0
- package/src/api/services/cameras.service.ts +671 -0
- package/src/api/services/plugins.service.ts +470 -0
- package/src/api/services/system.service.ts +85 -0
- package/src/api/services/users.service.ts +276 -0
- package/src/api/types/index.ts +675 -0
- package/src/api/utils/cert.ts +254 -0
- package/src/api/utils/constants.ts +17 -0
- package/src/api/utils/fetch.ts +21 -0
- package/src/api/utils/moveFiles.ts +45 -0
- package/src/api/utils/parse.ts +17 -0
- package/src/api/websocket/index.ts +110 -0
- package/src/api/websocket/nsp/logs.ts +240 -0
- package/src/api/websocket/nsp/main.ts +27 -0
- package/src/api/websocket/nsp/metrics.ts +301 -0
- package/src/api/websocket/nsp/notifications.ts +43 -0
- package/src/api/websocket/nsp/plugins.ts +37 -0
- package/src/api/websocket/nsp/server.ts +220 -0
- package/src/api/websocket/nsp/status.ts +77 -0
- package/src/api/websocket/types.ts +55 -0
- package/src/api.ts +163 -0
- package/src/camera/classes.ts +32 -0
- package/src/camera/controller.ts +579 -0
- package/src/camera/device.ts +422 -0
- package/src/camera/frameWorker.ts +403 -0
- package/src/camera/index.ts +679 -0
- package/src/camera/interfaces.ts +95 -0
- package/src/camera/iou.ts +153 -0
- package/src/camera/polygon.ts +226 -0
- package/src/camera/python/__init__.py +0 -0
- package/src/camera/python/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/camera/python/__pycache__/classes.cpython-311.pyc +0 -0
- package/src/camera/python/__pycache__/delegate_controller.cpython-311.pyc +0 -0
- package/src/camera/python/__pycache__/interfaces.cpython-311.pyc +0 -0
- package/src/camera/python/__pycache__/iou.cpython-310.pyc +0 -0
- package/src/camera/python/__pycache__/iou.cpython-311.pyc +0 -0
- package/src/camera/python/__pycache__/iou2.cpython-310.pyc +0 -0
- package/src/camera/python/__pycache__/polygon.cpython-311.pyc +0 -0
- package/src/camera/python/__pycache__/typings.cpython-311.pyc +0 -0
- package/src/camera/python/__pycache__/video_frame.cpython-311.pyc +0 -0
- package/src/camera/python/classes.py +41 -0
- package/src/camera/python/interfaces.py +130 -0
- package/src/camera/python/iou.py +158 -0
- package/src/camera/python/polygon.py +230 -0
- package/src/camera/python/test/__pycache__/polygon.cpython-310.pyc +0 -0
- package/src/camera/python/test/iou_test.py +799 -0
- package/src/camera/python/test/polygon.py +238 -0
- package/src/camera/python/test/polygon_test.py +256 -0
- package/src/camera/python/test/polygon_test2.py +484 -0
- package/src/camera/python/typings.py +50 -0
- package/src/camera/python/video_frame.py +143 -0
- package/src/camera/session.ts +192 -0
- package/src/camera/streaming/fmp4-session.ts +390 -0
- package/src/camera/streaming/peer-connection.ts +273 -0
- package/src/camera/streaming/rtsp-session.ts +331 -0
- package/src/camera/streaming/webrtc-connection.ts +260 -0
- package/src/camera/streaming/werift-session.ts +317 -0
- package/src/camera/test/iou_test.ts +761 -0
- package/src/camera/test/polygon.test.ts +611 -0
- package/src/camera/test/polygon_test.ts +210 -0
- package/src/camera/types.ts +48 -0
- package/src/camera/utils.ts +489 -0
- package/src/camera/videoFrame.ts +123 -0
- package/src/cloud/index.ts +61 -0
- package/src/cloud/remote/cloudflare.ts +18 -0
- package/src/cloud/remote/upnp.ts +18 -0
- package/src/cloud/remote/utils.ts +24 -0
- package/src/cloud/types.ts +16 -0
- package/src/decoder/child.ts +883 -0
- package/src/decoder/imageUtils.ts +275 -0
- package/src/decoder/manager.ts +251 -0
- package/src/decoder/python/__init__.py +0 -0
- package/src/decoder/python/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/decoder/python/__pycache__/image_utils.cpython-311.pyc +0 -0
- package/src/decoder/python/__pycache__/typings.cpython-311.pyc +0 -0
- package/src/decoder/python/__pycache__/utils.cpython-311.pyc +0 -0
- package/src/decoder/python/child.py +903 -0
- package/src/decoder/python/image_utils.py +196 -0
- package/src/decoder/python/pool.py +45 -0
- package/src/decoder/python/test/group.py +62 -0
- package/src/decoder/python/test/motion.mp4 +0 -0
- package/src/decoder/python/test/motion2.mp4 +0 -0
- package/src/decoder/python/test/opencl.cl +70 -0
- package/src/decoder/python/test/opencl2.cl +130 -0
- package/src/decoder/python/test/test.py +427 -0
- package/src/decoder/python/test/test1.jpg +0 -0
- package/src/decoder/python/test/test1_resized.jpg +0 -0
- package/src/decoder/python/test/test2.jpg +0 -0
- package/src/decoder/python/test/test2.py +451 -0
- package/src/decoder/python/test/test2_resized.jpg +0 -0
- package/src/decoder/python/test/test3.jpg +0 -0
- package/src/decoder/python/test/utils.py +50 -0
- package/src/decoder/python/typings.py +57 -0
- package/src/decoder/python/utils.py +70 -0
- package/src/decoder/test/child.ts +117 -0
- package/src/decoder/test/ffmpeg.ts +371 -0
- package/src/decoder/test/test.ts +182 -0
- package/src/decoder/types.ts +27 -0
- package/src/decoder/utils.ts +64 -0
- package/src/decoder/wasm/asconfig.json +28 -0
- package/src/decoder/wasm/assembly/console.ts +1 -0
- package/src/decoder/wasm/assembly/index.ts +890 -0
- package/src/decoder/wasm/build/decoder.d.ts +43 -0
- package/src/decoder/wasm/build/decoder.js +108 -0
- package/src/decoder/wasm/build/decoder.wasm +0 -0
- package/src/decoder/wasm/tsconfig.json +5 -0
- package/src/decoder/worker.ts +113 -0
- package/src/go2rtc/index.ts +324 -0
- package/src/go2rtc/types.ts +88 -0
- package/src/main.ts +267 -0
- package/src/manager/coreManager.ts +78 -0
- package/src/manager/deviceManager.ts +132 -0
- package/src/manager/types.ts +17 -0
- package/src/plugins/index.ts +443 -0
- package/src/plugins/plugin.ts +177 -0
- package/src/plugins/runtime/base.ts +282 -0
- package/src/plugins/runtime/index.ts +15 -0
- package/src/plugins/runtime/node/child.ts +193 -0
- package/src/plugins/runtime/node/index.ts +67 -0
- package/src/plugins/runtime/node/plugin.ts +122 -0
- package/src/plugins/runtime/node/pluginApi.ts +27 -0
- package/src/plugins/runtime/node/proxy/cameraDevice.ts +299 -0
- package/src/plugins/runtime/node/proxy/coreManager.ts +128 -0
- package/src/plugins/runtime/node/proxy/deviceManager.ts +187 -0
- package/src/plugins/runtime/node/storage.ts +312 -0
- package/src/plugins/runtime/node/storageController.ts +91 -0
- package/src/plugins/runtime/python/__init__.py +0 -0
- package/src/plugins/runtime/python/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/camera_storage.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/config_service.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/constants.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/ipc.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/logger.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/message_queue.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/namespaces.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/plugin.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/plugin_api.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/plugin_logger.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/proxy_utils.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/schema.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/storage.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/storage_controller.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/__pycache__/typings.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/child.py +248 -0
- package/src/plugins/runtime/python/index.ts +73 -0
- package/src/plugins/runtime/python/namespaces.py +101 -0
- package/src/plugins/runtime/python/plugin.py +155 -0
- package/src/plugins/runtime/python/plugin_api.py +29 -0
- package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-310.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-38.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-39.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/constants.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/constants.cpython-39.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/core_manager.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-310.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-38.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-39.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-310.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-38.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-39.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-310.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-38.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-39.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-310.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-38.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-39.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-310.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-311.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-38.pyc +0 -0
- package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-39.pyc +0 -0
- package/src/plugins/runtime/python/proxy/camera_device.py +1732 -0
- package/src/plugins/runtime/python/proxy/core_manager.py +126 -0
- package/src/plugins/runtime/python/proxy/device_manager.py +197 -0
- package/src/plugins/runtime/python/schema.py +99 -0
- package/src/plugins/runtime/python/storage.py +353 -0
- package/src/plugins/runtime/python/storage_controller.py +102 -0
- package/src/plugins/runtime/python/typings.py +195 -0
- package/src/plugins/schema.ts +472 -0
- package/src/plugins/types.ts +60 -0
- package/src/plugins/worker.ts +250 -0
- package/src/rpc/index.ts +149 -0
- package/src/rpc/namespaces.ts +79 -0
- package/src/rpc/server.ts +422 -0
- package/src/rpc/types.ts +119 -0
- package/src/rpc/utils.ts +16 -0
- package/src/services/config/constants.ts +47 -0
- package/src/services/config/defaults.ts +57 -0
- package/src/services/config/index.ts +744 -0
- package/src/services/config/types.ts +211 -0
- package/src/services/logger/index.ts +96 -0
- package/src/types.ts +47 -0
- package/src/utils/path.ts +16 -0
- package/src/utils/pythonInstaller.ts +597 -0
- package/tsconfig.json +37 -0
- package/types/fastify.d.ts +14 -0
- package/updates.config.js +3 -0
- package/dist/interface/@intlify.Do1-T-x0.0.0.48.js +0 -15
- package/dist/interface/@mdi.CbjpODVZ.0.0.48.js +0 -1
- package/dist/interface/@tanstack.B7j0RsPf.0.0.48.js +0 -1
- package/dist/interface/@vue.DRcZ6uZO.0.0.48.js +0 -17
- package/dist/interface/@vueform.B6V1sb13.0.0.48.js +0 -1
- package/dist/interface/@vueuse.C65DwZuy.0.0.48.js +0 -1
- package/dist/interface/Account.SjrtJ2E-.0.0.48.js +0 -1
- package/dist/interface/Adminpanel.2cW-TEJR.0.0.48.js +0 -2
- package/dist/interface/Appearance.BCjcy9_6.0.0.48.js +0 -1
- package/dist/interface/Backup.DPajlOJy.0.0.48.js +0 -1
- package/dist/interface/Camera.DL2k_Ka4.0.0.48.js +0 -1
- package/dist/interface/Cameras.Dfo9jtEF.0.0.48.js +0 -1
- package/dist/interface/Camview.D65EW1lh.0.0.48.js +0 -1
- package/dist/interface/Config.CN7-dqYR.0.0.48.js +0 -1
- package/dist/interface/Console.CR82nS2O.0.0.48.js +0 -4
- package/dist/interface/FirstSteps.CB5GkCCn.0.0.48.js +0 -1
- package/dist/interface/NewCamera.DZmwbpbF.0.0.48.js +0 -448
- package/dist/interface/Plugin.CFkM1eRw.0.0.48.js +0 -1
- package/dist/interface/Plugins.LYJU4g0H.0.0.48.js +0 -1
- package/dist/interface/Recordings.BxmCtPDw.0.0.48.js +0 -1
- package/dist/interface/Recordings.UIpgTeCh.0.0.48.js +0 -1
- package/dist/interface/Settings.BxGxkxQ-.0.0.48.js +0 -1
- package/dist/interface/System.HucLWbQx.0.0.48.js +0 -4
- package/dist/interface/User.BB8i1tjm.0.0.48.js +0 -1
- package/dist/interface/VConfigEditor.vue_vue_type_script_setup_true_lang._4BVZ2To.0.0.48.js +0 -2
- package/dist/interface/VConsole.wv8VCqg-.0.0.48.js +0 -1
- package/dist/interface/VPlayer.DyeXezbn.0.0.48.js +0 -4
- package/dist/interface/VPluginCard.B_Gjjpzq.0.0.48.js +0 -4
- package/dist/interface/ace-builds.DPqPJOIH.0.0.48.js +0 -970
- package/dist/interface/apexcharts.C_nN6CT2.0.0.48.js +0 -838
- package/dist/interface/assets/@vueform.0.0.48.CroAHJs8.css +0 -1
- package/dist/interface/assets/@xterm.0.0.48.CFbL2ovg.css +0 -32
- package/dist/interface/assets/Account.0.0.48.Bnw6Lbtd.css +0 -1
- package/dist/interface/assets/Adminpanel.0.0.48.a3t1v3MB.css +0 -1
- package/dist/interface/assets/Camera.0.0.48.Br9s6-lM.css +0 -1
- package/dist/interface/assets/Cameras.0.0.48.Buf1Dgce.css +0 -1
- package/dist/interface/assets/Camview.0.0.48.B7Cja2ry.css +0 -1
- package/dist/interface/assets/Config.0.0.48.DNGo2krN.css +0 -1
- package/dist/interface/assets/Console.0.0.48.Bh8l9QnM.css +0 -1
- package/dist/interface/assets/FirstSteps.0.0.48.Mu8VPl13.css +0 -1
- package/dist/interface/assets/NewCamera.0.0.48.B36nuN1T.css +0 -1
- package/dist/interface/assets/Plugin.0.0.48.YIpAU1_n.css +0 -1
- package/dist/interface/assets/Plugins.0.0.48.DXSoO9M1.css +0 -1
- package/dist/interface/assets/Settings.0.0.48.CVmui2kE.css +0 -1
- package/dist/interface/assets/User.0.0.48.BiGtIFqt.css +0 -1
- package/dist/interface/assets/VConsole.0.0.48.BCqKHpmJ.css +0 -1
- package/dist/interface/assets/VPlayer.0.0.48.C4lm2rVR.css +0 -1
- package/dist/interface/assets/VPluginCard.0.0.48.C8Lj6X-J.css +0 -1
- package/dist/interface/assets/main.0.0.48.OJngntGT.css +0 -1
- package/dist/interface/assets/vue3-toastify.0.0.48.DHXAGmwn.css +0 -1
- package/dist/interface/assets/vuetify.0.0.48.Dua9WSqa.css +0 -5
- package/dist/interface/axios.DIsA03vz.0.0.48.js +0 -6
- package/dist/interface/backup.Bk4AzYLT.0.0.48.js +0 -1
- package/dist/interface/dnd-core.Dmh1w8XK.0.0.48.js +0 -1
- package/dist/interface/engine.io-client.DRzsVXts.0.0.48.js +0 -1
- package/dist/interface/fast-deep-equal.BuOg6xuK.0.0.48.js +0 -1
- package/dist/interface/fonts/Inter/Inter-Regular.ttf +0 -0
- package/dist/interface/highlight.js.Cg6c_cCL.0.0.48.js +0 -2
- package/dist/interface/hookable.B8xFkYCm.0.0.48.js +0 -1
- package/dist/interface/linkify-it.D_vNtISo.0.0.48.js +0 -1
- package/dist/interface/main.mlm94TYK.0.0.48.js +0 -4
- package/dist/interface/perfect-debounce.Cp2ysxOb.0.0.48.js +0 -1
- package/dist/interface/pinia.BL6apvtP.0.0.48.js +0 -5
- package/dist/interface/plugins.Ch_0cv_L.0.0.48.js +0 -1
- package/dist/interface/react-dnd-touch-backend.BVVlM5Mg.0.0.48.js +0 -1
- package/dist/interface/rxjs.MDPuHaHC.0.0.48.js +0 -3
- package/dist/interface/socket.io-client.Bc7OYr1V.0.0.48.js +0 -1
- package/dist/interface/socket.io-parser.DPrtWC9i.0.0.48.js +0 -1
- package/dist/interface/system.C-onsBEc.0.0.48.js +0 -1
- package/dist/interface/types.Cz9TaZAP.0.0.48.js +0 -1
- package/dist/interface/utils.mAKpSMLY.0.0.48.js +0 -1
- package/dist/interface/uuid.Ch9TGLTe.0.0.48.js +0 -1
- package/dist/interface/vee-validate.Dzj4dBd6.0.0.48.js +0 -5
- package/dist/interface/vue-i18n.DtBWXzdw.0.0.48.js +0 -5
- package/dist/interface/vue-inline-svg.CPcaXOwr.0.0.48.js +0 -1
- package/dist/interface/vue-router.S61oR9AT.0.0.48.js +0 -5
- package/dist/interface/vue3-apexcharts.Dvg57mTV.0.0.48.js +0 -1
- package/dist/interface/vue3-dnd.CA2xeH6p.0.0.48.js +0 -1
- package/dist/interface/vue3-toastify.nL-I4C--.0.0.48.js +0 -1
- package/dist/interface/vuetify.DlOnqSL1.0.0.48.js +0 -5
- package/dist/interface/zod.bkdEMpUp.0.0.48.js +0 -1
- package/dist/server/src/api/utils/cameraSource.d.ts +0 -6
- package/dist/server/src/api/utils/cameraSource.js +0 -51
- package/dist/server/src/api/utils/cameraSource.js.map +0 -1
- package/dist/server/src/api/websocket/go2rtc.d.ts +0 -21
- package/dist/server/src/api/websocket/go2rtc.js +0 -88
- package/dist/server/src/api/websocket/go2rtc.js.map +0 -1
- package/dist/server/src/api/websocket/nsp/proxy.d.ts +0 -27
- package/dist/server/src/api/websocket/nsp/proxy.js +0 -127
- package/dist/server/src/api/websocket/nsp/proxy.js.map +0 -1
- package/dist/server/src/nats/index.d.ts +0 -40
- package/dist/server/src/nats/index.js +0 -164
- package/dist/server/src/nats/index.js.map +0 -1
- package/dist/server/src/nats/proxy/cameraDevice.d.ts +0 -22
- package/dist/server/src/nats/proxy/cameraDevice.js +0 -249
- package/dist/server/src/nats/proxy/cameraDevice.js.map +0 -1
- package/dist/server/src/nats/proxy/coreManager.d.ts +0 -14
- package/dist/server/src/nats/proxy/coreManager.js +0 -68
- package/dist/server/src/nats/proxy/coreManager.js.map +0 -1
- package/dist/server/src/nats/proxy/deviceManager.d.ts +0 -14
- package/dist/server/src/nats/proxy/deviceManager.js +0 -101
- package/dist/server/src/nats/proxy/deviceManager.js.map +0 -1
- package/dist/server/src/nats/server.js.map +0 -1
- package/dist/server/src/nats/types.d.ts +0 -18
- package/dist/server/src/nats/utils.js.map +0 -1
- /package/dist/interface/assets/{Backup.0.0.48.CX0rT0QJ.css → SettingsBackup.CX0rT0QJ.0.0.50-internal.0.css} +0 -0
- /package/dist/interface/assets/{highlight.0.0.48.Ch2EwETz.css → highlight.Ch2EwETz.0.0.50-internal.0.css} +0 -0
- /package/dist/interface/assets/{logo-256.0.0.48.BCQk9H1-.png → logo-256.BCQk9H1-.0.0.50-internal.0.png} +0 -0
- /package/dist/interface/assets/{logo-512.0.0.48.DLKVOU2S.png → logo-512.DLKVOU2S.0.0.50-internal.0.png} +0 -0
- /package/dist/interface/assets/{logo.0.0.48.DmEiRk0z.png → logo.DmEiRk0z.0.0.50-internal.0.png} +0 -0
- /package/dist/interface/assets/{mode-json.0.0.48.Br7xisR1.js → mode-json.Br7xisR1.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/assets/{mode-yaml.0.0.48.CIYL8U3d.js → mode-yaml.CIYL8U3d.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/{@babel.l0sNRNKZ.0.0.48.js → js/@babel.l0sNRNKZ.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/{@react-dnd.CcwRs9xb.0.0.48.js → js/@react-dnd.CcwRs9xb.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/{@socket.io.Dkula2eQ.0.0.48.js → js/@socket.io.Dkula2eQ.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/{birpc.l0sNRNKZ.0.0.48.js → js/birpc.l0sNRNKZ.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/{compare-versions.DqEOhma6.0.0.48.js → js/compare-versions.DqEOhma6.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/{dijkstrajs.C00ieaqj.0.0.48.js → js/dijkstrajs.C00ieaqj.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/{engine.io-parser.BiEtp6m2.0.0.48.js → js/engine.io-parser.BiEtp6m2.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/{entities.C20TfXL6.0.0.48.js → js/entities.C20TfXL6.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/{ev-emitter.X5f1qa-c.0.0.48.js → js/ev-emitter.X5f1qa-c.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/{get-size.D1dS-IaP.0.0.48.js → js/get-size.D1dS-IaP.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/{vue.l0sNRNKZ.0.0.48.js → js/hookable.l0sNRNKZ.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/{mdurl.k9Sl0PQj.0.0.48.js → js/mdurl.k9Sl0PQj.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/{punycode.js.Dj65hjkv.0.0.48.js → js/punycode.js.Dj65hjkv.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/{react-dnd-html5-backend.1HQjlkwI.0.0.48.js → js/react-dnd-html5-backend.1HQjlkwI.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/{redux.BFxtlG_c.0.0.48.js → js/redux.BFxtlG_c.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/{tslib.9k7AwCpt.0.0.48.js → js/tslib.9k7AwCpt.0.0.50-internal.0.js} +0 -0
- /package/dist/interface/{uc.micro.kMc2yuuw.0.0.48.js → js/uc.micro.kMc2yuuw.0.0.50-internal.0.js} +0 -0
- /package/dist/server/src/{nats → decoder}/types.js +0 -0
- /package/dist/server/src/{nats → rpc}/utils.js +0 -0
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
import{L as De,r as Ee,l as Fe,e as qe,m as Ue,b as ke,a as to,M as no,N as ao,c as je,f as so,t as ro,u as io,v as co,k as lo,w as uo,p as mo,n as po,j as ho,O as fo}from"./primevue.Cl58krXf.0.0.50-internal.0.js";import{_ as We,a as go}from"./refresh-rounded.D_SmhhUf.0.0.50-internal.0.js";import{e as _o,s as vo,_ as bo,f as wo,h as Le,C as Ce,r as ye,d as Me,i as ze,j as yo,k as xo,c as Ne,a as Ke,l as ko,m as Co,n as Ye,o as So,p as $o,q as To,t as Ro,B as Po,b as we,v as Ao,S as Io,w as Ho}from"./main.D0YR3Jat.0.0.50-internal.0.js";import{i as Mo}from"./@vueuse.BsKtqdiG.0.0.50-internal.0.js";import{B as se,t as Ve,ac as de,r as F,k as J,o as Qe,c as p,d as s,e as n,h as e,X as ue,Z as me,R as o,I as w,i as Je,y as Xe,a7 as Eo,F as X,ab as jo,w as Ze,N as t,f as ne,M as _,L as B,O as g,m as Q,V as N,P as xe,H as Ge,a1 as Lo,a0 as Vo,W as Ie}from"./@vue.B5vqhCp2.0.0.50-internal.0.js";import{_ as Bo}from"./CuiConsole.BXXU7Gth.0.0.50-internal.0.js";import{F as eo,a as U,E as K}from"./vee-validate.BeiObIH8.0.0.50-internal.0.js";import{u as Be}from"./vue-i18n.BW2bx_6z.0.0.50-internal.0.js";import{s as Go}from"./pinia.DRh7plEC.0.0.50-internal.0.js";import"./@primeuix.BFAY2Bk9.0.0.50-internal.0.js";import"./@primevue.OhxoO3MD.0.0.50-internal.0.js";import"./@tanstack.D1IL6eOv.0.0.50-internal.0.js";import"./axios.DHr9lByg.0.0.50-internal.0.js";import"./vue-router.B2mOXHaC.0.0.50-internal.0.js";import"./vue-inline-svg.BJkQGmKz.0.0.50-internal.0.js";import"./@vee-validate.BGPyWWTh.0.0.50-internal.0.js";import"./zod.SKKegNRO.0.0.50-internal.0.js";import"./uuid.C6aID195.0.0.50-internal.0.js";import"./socket.io-client.DKrRxgjP.0.0.50-internal.0.js";import"./engine.io-client.kITRnq-g.0.0.50-internal.0.js";import"./engine.io-parser.BiEtp6m2.0.0.50-internal.0.js";import"./@socket.io.Dkula2eQ.0.0.50-internal.0.js";import"./socket.io-parser.EXj3YDH2.0.0.50-internal.0.js";import"./rxjs.C-fTBwEO.0.0.50-internal.0.js";import"./tslib.9k7AwCpt.0.0.50-internal.0.js";import"./highlight.js.BlSXU-Wb.0.0.50-internal.0.js";import"./@xterm.CAa7rpjv.0.0.50-internal.0.js";import"./markdown-it.Dj0dt5s2.0.0.50-internal.0.js";import"./mdurl.k9Sl0PQj.0.0.50-internal.0.js";import"./uc.micro.kMc2yuuw.0.0.50-internal.0.js";import"./entities.C20TfXL6.0.0.50-internal.0.js";import"./linkify-it.C3N1lWsJ.0.0.50-internal.0.js";import"./punycode.js.Dj65hjkv.0.0.50-internal.0.js";import"./qrcode.C1sDj6P8.0.0.50-internal.0.js";import"./dijkstrajs.C00ieaqj.0.0.50-internal.0.js";import"./draggabilly.D3zGcBb3.0.0.50-internal.0.js";import"./get-size.D1dS-IaP.0.0.50-internal.0.js";import"./unidragger.D0w6Tqtt.0.0.50-internal.0.js";import"./ev-emitter.X5f1qa-c.0.0.50-internal.0.js";import"./vue-zoomable.BKDyCJE7.0.0.50-internal.0.js";import"./primelocale.Bga3dOQu.0.0.50-internal.0.js";import"./nprogress.BwQWDcGj.0.0.50-internal.0.js";import"./@intlify.BkGPX90O.0.0.50-internal.0.js";const Oe=["bubble://","doorbird://","dvrip://","echo:","eseecloud://","exec:","expr:","ffmpeg:","flussonic://","gopro://","hass:","homekit://","http://","https://","httpx://","isapi://","ivideon:","kasa://","nest:","onvif://","ring:","roborock://","rtmp://","rtsp://","rtspx://","tapo://","tcp://","webrtc:","webtorrent:"],Oo=["#backchannel=","#header=","#media=audio","#media=video","#timeout=10","#timeout=20","#timeout=30","#transport="],He=["#audio=aac","#audio=aac/16000","#audio=mp3","#audio=opus","#audio=pcm","#audio=pcm/8000","#audio=pcm/16000","#audio=pcm/48000","#audio=pcma","#audio=pcma/8000","#audio=pcma/16000","#audio=pcma/48000","#audio=pcml","#audio=pcml/8000","#audio=pcml/44100","#audio=pcmu","#audio=pcmu/8000","#audio=pcmu/16000","#audio=pcmu/48000","#drawtext","#hardware","#hardware=cuda","#hardware=dxva2","#hardware=rkmpp","#hardware=v4l2m2m","#hardware=vaapi","#hardware=videotoolbox","#height=","#raw=","#rotate=-90","#rotate=90","#rotate=180","#rotate=270","#video=copy","#video=h264","#video=h265","#video=mjpeg","#width="],Do=["client_id=","client_private=","device_id=","device_public="],Fo=["#header="],qo=["client_id=","client_secret=","refresh_token=","project_id=","device_id="],Uo=["device_id=","refresh_token="],Wo=["#client_id=","#format=openipc","#format=wyze","#format=kinesis","#ice_servers="],zo={class:"relative h-[165px]"},No={key:0,class:"flex w-full h-full"},Ko={class:"flex w-full items-center justify-center mt-[5px]"},Yo={key:1,class:"flex w-full h-full"},Qo=["onClick"],Jo={class:"w-full text-center"},Xo={class:"text-xs text-muted"},Zo=se({__name:"CuiCameraEvents",props:{cameraId:{}},setup($){const{isTouch:i}=_o(),E=$,{cameraId:j}=Ve(E),R=de("scrollContainerRef"),G=F(!0);let P,T=!1;const L=Array.from({length:50},(m,C)=>({id:C.toString(),camera:"Kamera "+(C%5+1),title:"Event "+(C+1),type:"motion",image:"test",timestamp:Date.now()-C*6e4})),H=J(()=>j.value?L.filter(m=>m.camera===j.value):L),O=()=>{Mo(R,{disableTextSelect:!0,threshold:10,onSwipe:m=>{var C,M;(C=R.value)==null||C.classList.add("cursor-grabbing"),T=!0,(M=R.value)==null||M.scrollBy({left:-m.movementX,behavior:"smooth"})},onSwipeEnd:()=>{var m;(m=R.value)==null||m.classList.remove("cursor-grabbing"),clearTimeout(P),P=setTimeout(()=>{T=!1},10)}})},b=m=>new Date(m).toLocaleTimeString("de-DE",{hour:"2-digit",minute:"2-digit"}),y=m=>{T||console.log(m)};return Qe(async()=>{await vo(1500),G.value=!1,i.value||O()}),(m,C)=>{const M=De,u=bo;return s(),p("div",zo,[n("div",{ref_key:"scrollContainerRef",ref:R,class:"w-full max-w-full overflow-x-auto overflow-y-hidden snap-x snap-mandatory hide-scrollbar"},[e(G)?(s(),p("div",No,[(s(),p(ue,null,me(50,S=>n("div",{key:S,class:"flex-none w-[140px] mr-3 snap-start"},[o(M,{width:"140px",height:"140px"}),n("div",Ko,[o(M,{width:"40px",height:"12px"})])])),64))])):(s(),p("div",Yo,[(s(!0),p(ue,null,me(e(H),S=>(s(),p("div",{key:S.id,class:"flex-none w-[140px] mr-3 snap-start"},[n("div",{class:"bg-neutral-900 rounded overflow-hidden cursor-pointer w-[140px] h-[140px]",onClick:f=>y(S)},[o(u,{src:S.image,class:"pointer-events-none w-full h-full",cover:"",alt:"Event Vorschau",width:"140px",height:"140px","image-container-class":"w-full h-full"},null,8,["src"])],8,Qo),n("div",Jo,[n("span",Xo,w(b(S.timestamp)),1)])]))),128))]))],512),C[0]||(C[0]=n("div",{class:"absolute -top-[3px] right-0 w-10 h-[171px] pointer-events-none",style:{background:"linear-gradient(to right, transparent, var(--ground-background))"}},null,-1))])}}}),et=se({__name:"CameraConsole",props:{cameraName:{}},setup($,{expose:i}){const E=new Ce,j=wo(),{mdBreakpoint:R}=Le(),G=Je("dialogRefProps"),P=$,{cameraName:T}=Ve(P),L=de("consoleRef"),H=Xe(),{data:O,isFetching:b,suspense:y}=E.downloadLogQuery(T),m=J(()=>{var u;return!!((u=G.loading)!=null&&u.value||b.value)}),C=J(()=>({fontSize:R.value?12:14})),M=async()=>{try{if(E.toggleQueryActivator("downloadLogQuery",!0),await y(),O.value){const u=O.value,S=window.URL.createObjectURL(new Blob([u])),f=document.createElement("a");f.href=S,f.setAttribute("download",`camera.ui.${T.value}.log.txt`),document.body.appendChild(f),f.click(),f.remove()}}finally{E.toggleQueryActivator("downloadLogQuery",!1)}};return Qe(()=>{var u,S,f,W,oe;H.value=j.connectToNamespace("/logs"),(u=H.value)==null||u.socket.on(`stdout/${T.value}`,A=>{var Z;(Z=L.value)==null||Z.writeTerminal(A)}),(S=H.value)==null||S.socket.on("stdout",A=>{var Z;(Z=L.value)==null||Z.writeTerminal(A)}),(f=H.value)==null||f.socket.on("disconnect",()=>{var A;(A=L.value)==null||A.writeTerminal(`\r
|
|
2
|
+
Websocket failed to connect! Is the server running?\r
|
|
3
|
+
\r
|
|
4
|
+
`)}),(W=H.value)==null||W.socket.on("clear-log",()=>{var A;(A=L.value)==null||A.clearTerminal()}),(oe=H.value)==null||oe.socket.emit("get-camera-log",T.value,{sinceLastStart:!0})}),Eo(()=>{var u,S;(S=(u=H.value)==null?void 0:u.end)==null||S.call(u)}),i({isLoading:m,onConfirm:M}),(u,S)=>{const f=Bo;return s(),p("div",null,[o(f,{ref_key:"consoleRef",ref:L,options:e(C),class:"bg-black !w-full"},null,8,["options"])])}}}),ot={viewBox:"0 0 48 48",width:"1.2em",height:"1.2em"},tt=["id"],nt=["mask"];function at($,i){return s(),p("svg",ot,[n("defs",null,[n("mask",{id:$.idMap.ipSGopro0},i[0]||(i[0]=[jo('<g fill="none"><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" d="M5 7h13v34H5z"></path><rect width="19" height="22" x="24" y="13" fill="#fff" stroke="#fff" stroke-width="4" rx="3"></rect><circle cx="33.5" cy="24.5" r="3.5" fill="#000" stroke="#000" stroke-width="4"></circle><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" d="M18 24h6"></path><rect width="5" height="5" x="9" y="15" fill="#fff" rx="2.5"></rect></g>',1)]),8,tt)]),n("path",{fill:"currentColor",d:"M0 0h48v48H0z",mask:"url(#"+$.idMap.ipSGopro0+")"},null,8,nt)])}const st=X({name:"icon-park-solid-gopro",render:at,setup(){return{idMap:{ipSGopro0:"uicons-"+Math.random().toString(36).substr(2,10)}}}}),rt={viewBox:"0 0 256 295",width:"1.05em",height:"1.2em"};function it($,i){return s(),p("svg",rt,i[0]||(i[0]=[n("path",{fill:"#EB324B",d:"M125.331 293.51c-3.118-1.658-121.475-70.037-122.633-70.849c-2.463-1.729-2.297 3.704-2.297-75.23c0-78.936-.166-73.502 2.297-75.232c.61-.427 28.67-16.687 62.355-36.133C107.32 11.668 126.75.658 127.751.54c1.811-.214-4.43-3.711 67.33 37.72c42.38 24.468 59.226 34.391 59.85 35.255l.869 1.202v145.427l-.869 1.202c-.624.864-17.465 10.784-59.851 35.255c-67.06 38.716-65.522 37.846-66.92 37.853c-.573.004-1.846-.421-2.829-.944"},null,-1),n("path",{fill:"#333943",d:"M126.397 275.238c-.44-.188-24.952-14.3-54.47-31.361c-34.351-19.855-53.962-31.413-54.485-32.113c-.813-1.09-.816-1.326-.816-64.334c0-63.047.002-63.243.818-64.335c.525-.703 20.06-12.217 54.485-32.112c29.517-17.06 54.116-31.194 54.665-31.411s1.553-.29 2.232-.163c.967.181 104.484 59.604 108.805 62.458c.584.386 1.247 1.188 1.475 1.783c.276.722.456 22.028.54 64.05l.129 62.968l-.839 1.132c-.553.747-12.01 7.575-33.653 20.056c-81.042 46.735-75.862 43.807-77.41 43.75c-.37-.015-1.035-.18-1.476-.368m2.77-69.648c1.108-2.144 5.303-7.487 8.675-11.05c1.858-1.962 8.967-8.558 15.798-14.658c15.764-14.076 20.858-19.385 26.141-27.244c6.775-10.078 10.003-22.102 8.497-31.649c-1.65-10.458-8.018-19.169-17.411-23.816c-4.05-2.004-6.983-2.692-12.42-2.914c-3.993-.163-5.418-.051-8.413.66c-8.679 2.059-16.207 7.752-20.303 15.353c-.683 1.267-1.394 2.304-1.58 2.304s-.785-.883-1.332-1.962c-1.429-2.82-5.446-7.664-7.916-9.544c-6.925-5.274-12.884-7.18-21.304-6.817c-5.447.235-8.748 1.08-13.113 3.36c-7.469 3.9-13.574 11.516-15.849 19.77c-.893 3.24-.993 13.34-.169 17.027c1.92 8.59 6.36 17.046 13.251 25.24c3.87 4.6 11.215 11.695 22.243 21.481c13.554 12.028 18.433 17.105 22.404 23.312c.802 1.254 1.628 2.28 1.836 2.28s.642-.51.964-1.133"},null,-1),n("path",{fill:"#252A32",d:"M151.605 228.562c-12.322-11.157-22.463-20.551-22.536-20.877c-.146-.653 1.673-3.682 4.067-6.771c3.656-4.717 8.413-9.417 20.1-19.861c19.503-17.427 24.871-23.372 30.363-33.623c3.733-6.968 5.5-13.982 5.49-21.786c-.007-5.914-.768-9.263-3.275-14.435c-.632-1.303-1.099-2.488-1.037-2.635c.113-.268 52.387 48.13 53.696 49.715c.651.788.7 2.65.699 26.344c-.002 23.55-.056 25.582-.701 26.626c-.512.829-9.06 5.96-31.948 19.182c-17.187 9.928-31.534 18.13-31.882 18.228c-.41.115-8.524-6.968-23.036-20.107"},null,-1)]))}const ct=X({name:"logos-webtorrent",render:it}),lt={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100"},dt=["id"],ut=["id"],mt=["fill","mask"],pt=se({__name:"CuiOnvifIcon",setup($){const i=F(ye(10)),E=F(ye(10));return(j,R)=>(s(),p("svg",lt,[n("defs",null,[n("linearGradient",{id:e(i),x1:"0%",y1:"0%",x2:"100%",y2:"100%"},R[0]||(R[0]=[n("stop",{offset:"0%",style:{"stop-color":"#29abe2"}},null,-1),n("stop",{offset:"100%",style:{"stop-color":"#4f2d7f"}},null,-1)]),8,dt),n("mask",{id:e(E)},R[1]||(R[1]=[n("rect",{width:"100%",height:"100%",fill:"white"},null,-1),n("circle",{cx:"54",cy:"46",r:"32",fill:"black"},null,-1)]),8,ut)]),n("circle",{cx:"50",cy:"50",r:"40",fill:`url(#${e(i)})`,mask:`url(#${e(E)})`},null,8,mt)]))}}),ht={viewBox:"0 0 512 512",width:"1.2em",height:"1.2em"};function ft($,i){return s(),p("svg",ht,i[0]||(i[0]=[n("path",{fill:"currentColor",d:"M201.459 35.184L93.114 161.545v53.47L254.041 30.733L512 8.902L133.866 406.659l49.874 2.877l274.62-283.015v268.646l-30.716 28.864l78.027 4.612v74.455l-243.583-20.63l123.746-120.395v-59.74L209.185 478L0 460.29L336.764 93.876l-55.874 3.3L37.697 366.981V137.742l22.881-27.544l-56.254 3.326V51.871z"},null,-1)]))}const gt=X({name:"file-icons-ffmpeg",render:ft}),_t={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function vt($,i){return s(),p("svg",_t,i[0]||(i[0]=[n("path",{fill:"currentColor",d:"M11.971.302a.72.72 0 0 0-.444.155L.984 8.82a.7.7 0 0 0-.139.146c.11-.156.037-.046-.048.015c-.084.06-.2.136-.313.22a2 2 0 0 0-.178.141c-.064.057-.143.098-.24.32a.76.76 0 0 0-.026.549c.08.233.277.384.405.441c.253.114.353.079.463.071c.399.022.737-.019.922 0c.077.009.087.017.097.02c.032 3.58.004 7.167.014 10.76a1 1 0 0 0 .014.14c0-.002-.027.367-.033.764c-.003.199-.009.43.137.721c.147.29.565.551.909.559h14.717c1.148-.035 2.39.083 3.686-.07a.717.717 0 0 0 .632-.712v-1.493a2.7 2.7 0 0 0 0-.514v-.025c-.007-2.132-.002-4.268 0-6.406v-1.993l-.002.054c.059-.776-.031-1.39.053-1.803c.041-.01.1-.013.216-.014c.24-.002.601.065 1.055.008l.072-.013a.74.74 0 0 0 .33-.16a.83.83 0 0 0 .27-.524c.027-.383-.132-.498-.202-.58c-.14-.164-.237-.22-.344-.297c-.106-.078-.213-.15-.291-.207c-.08-.058-.143-.133-.076-.05a1 1 0 0 0-.064-.07c-.351-.334-.713-.553-.974-.76c-.23-.18-.358-.33-.434-.497V4.802a1.5 1.5 0 0 0 .023-.493a1.1 1.1 0 0 0-.344-.65c-.344-.297-.711-.293-1.036-.24c-.247-.027-.551.012-.779.23c-.294.28-.29.573-.291.748c-.002.174.017.304.026.398c.008.093-.009.152.012.066a.7.7 0 0 0-.007.313c.034.168-.022.475-.074.583l-.008-.004L12.416.456a.72.72 0 0 0-.445-.154m-.05 2.058c.18-.001.368.043.537.124c2.047 1.552 4.053 3.19 6.103 4.79l-.037-.031c.498.445 1.033.776 1.411 1.115c.375.336.575.614.615 1.025c.007.563.003 1.127.006 1.69q-.017.385.003.716c.004.891.012 1.781.01 2.673v6.867a1.2 1.2 0 0 1-.157.468c-.136.215-.272.314-.523.318c-5.108.018-10.22.003-15.332.008a1 1 0 0 0-.115.009a1.08 1.08 0 0 1-.758-.175c-.2-.143-.305-.31-.303-.562v-.008c-.016-3.27-.002-6.545-.007-9.822l-.002.05c.047-.678-.027-1.31-.004-1.836c.022-.51.11-.872.378-1.183c2.52-2.058 5.115-4.05 7.68-6.093a.84.84 0 0 1 .495-.143m.053 3.088a.72.72 0 0 0-.445.153L7.586 8.706l-.047.04c-.318.3-1.048.59-1.515 1.39a.7.7 0 0 0-.098.354c-.027 2.82-.004 5.633-.012 8.44a.717.717 0 0 0 .717.717h10.682a.717.717 0 0 0 .717-.716v-3.438c-.025-1.683.053-3.415-.042-5.166a.72.72 0 0 0-.26-.514c-.222-.184-.45-.358-.673-.539c-.06-.052-.118-.108-.177-.155c-.124-.102-.24-.184-.358-.272c-.64-.512-1.278-1.026-1.921-1.53q-.314-.253-.644-.505c-.513-.402-1.029-.803-1.536-1.208a.72.72 0 0 0-.445-.156m.016 1.89a.9.9 0 0 1 .325.06c.858.563 1.673 1.31 2.598 2.006l-.06-.05c.297.28.591.486.856.68l.356.283c.218.19.368.365.438.562c.063 1.936.01 3.9.029 5.886v.037c.023.358.006.751-.068.975c-.069.207-.078.248-.27.284c-2.468.053-4.956.008-7.458.023l-.041.002c-.365.023-.765.005-.985-.071c-.211-.073-.244-.069-.275-.297c-.05-1.596-.008-3.22-.023-4.863l-.002.063c.079-.997-.077-1.768.13-2.264c.794-.76 1.788-1.412 2.753-2.206l-.068.05c.436-.281.76-.606 1.047-.827c.284-.217.491-.321.718-.333M.84 9.283c.005 0 .025.009.03.01H.82c-.008 0-.007-.01.022-.01m11.131.79a.7.7 0 0 0-.43.143l-1.824 1.368a.72.72 0 0 0-.286.573v3.191a.717.717 0 0 0 .729.717L13.809 16a.717.717 0 0 0 .703-.717v-3.126a.72.72 0 0 0-.286-.573l-1.824-1.368a.7.7 0 0 0-.43-.144m-10.677.31c-.02.022-.03.023-.03.023zm10.679 1.446c.353.166.668.434.976.782c.107.485.045 1.12.048 1.86c-.006-.002-.022-.012-.088.005c-.141.037-.442.037-.748.026l.02.001c-.455-.029-.856.022-1.078-.007a.5.5 0 0 1-.157-.042l-.002-.006c-.004-.705-.052-1.323.045-1.81c.346-.349.682-.655.984-.809m1.036 2.57c-.012.062-.002.073-.006.072z"},null,-1)]))}const bt=X({name:"cbi-homekit",render:vt}),wt={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function yt($,i){return s(),p("svg",wt,i[0]||(i[0]=[n("path",{fill:"currentColor",d:"M22.939 10.627L13.061.749a1.505 1.505 0 0 0-2.121 0l-9.879 9.878C.478 11.21 0 12.363 0 13.187v9c0 .826.675 1.5 1.5 1.5h9.227l-4.063-4.062a2 2 0 0 1-.664.113c-1.13 0-2.05-.92-2.05-2.05s.92-2.05 2.05-2.05s2.05.92 2.05 2.05c0 .233-.041.456-.113.665l3.163 3.163V9.928a2.05 2.05 0 0 1-1.15-1.84c0-1.13.92-2.05 2.05-2.05s2.05.92 2.05 2.05a2.05 2.05 0 0 1-1.15 1.84v8.127l3.146-3.146A2.05 2.05 0 0 1 18 12.239c1.13 0 2.05.92 2.05 2.05s-.92 2.05-2.05 2.05a2 2 0 0 1-.709-.13L12.9 20.602v3.088h9.6c.825 0 1.5-.675 1.5-1.5v-9c0-.825-.477-1.977-1.061-2.561z"},null,-1)]))}const xt=X({name:"simple-icons-homeassistant",render:yt}),kt={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function Ct($,i){return s(),p("svg",kt,i[0]||(i[0]=[n("path",{fill:"currentColor",d:"M12 2C7.342 2 3.44 5.19 2.328 9.5h6.733A3.01 3.01 0 0 1 12 7.1a3.01 3.01 0 0 1 2.94 2.4h6.732C20.56 5.19 16.658 2 12 2m0 6.1c-1.11 0-2 .89-2 2s.89 2 2 2s2-.89 2-2s-.89-2-2-2m-9.875 2.4C2.051 10.99 2 11.489 2 12q.005.877.162 1.74l2.535-.451c.465 2.165 1.752 4.026 3.553 5.139a7.1 7.1 0 0 0 7.5 0c1.802-1.113 3.089-2.976 3.553-5.14l2.543.452A10 10 0 0 0 22 12c0-.511-.05-1.01-.125-1.5h-6.916c-.199 1.462-1.445 2.6-2.959 2.6s-2.76-1.138-2.959-2.6zm17.846 4.43a8.5 8.5 0 0 1-7.97 5.57a8.5 8.5 0 0 1-7.971-5.568l-1.495.267A10 10 0 0 0 12 22a10 10 0 0 0 9.463-6.803z"},null,-1)]))}const St=X({name:"cbi-roborock",render:Ct}),$t={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function Tt($,i){return s(),p("svg",$t,i[0]||(i[0]=[n("path",{fill:"currentColor",d:"M24 16.375a3.05 3.05 0 0 1-.246 1.231a3.1 3.1 0 0 1-1.672 1.66a3.1 3.1 0 0 1-1.225.247a3.7 3.7 0 0 1-.71-.073a4 4 0 0 1-.739-.218a3.2 3.2 0 0 1-.676-.37a2 2 0 0 1-.507-.515a.46.46 0 0 1-.08-.275a.44.44 0 0 1 .152-.346a.5.5 0 0 1 .346-.138a.6.6 0 0 1 .201.04a.4.4 0 0 1 .186.17a.05.05 0 0 0 .016.032l.064.065a1.8 1.8 0 0 0 .798.507a3 3 0 0 0 .943.154a2.1 2.1 0 0 0 .846-.17a2.2 2.2 0 0 0 1.16-1.16a2.1 2.1 0 0 0 .176-.841v-1.109a3.1 3.1 0 0 1-.985.637a3.1 3.1 0 0 1-1.193.234a3.05 3.05 0 0 1-1.231-.246a3.14 3.14 0 0 1-1.66-1.66a3 3 0 0 1-.247-1.232v-2.544a3.1 3.1 0 0 1 .247-1.225a3.2 3.2 0 0 1 .668-1a3.2 3.2 0 0 1 .986-.669a3.15 3.15 0 0 1 2.463 0a3.1 3.1 0 0 1 1.668 1.668a3.1 3.1 0 0 1 .246 1.225v5.92zm-.967-5.92a2.1 2.1 0 0 0-.17-.846a2.2 2.2 0 0 0-1.16-1.16a2.2 2.2 0 0 0-1.692 0a2.2 2.2 0 0 0-1.166 1.16a2.1 2.1 0 0 0-.168.845v2.531a2.1 2.1 0 0 0 .168.853a2.2 2.2 0 0 0 .468.693a2.2 2.2 0 0 0 .694.467a2.2 2.2 0 0 0 1.692 0a2.2 2.2 0 0 0 1.16-1.16a2.1 2.1 0 0 0 .174-.853zm-7.252 5.356a.44.44 0 0 1-.154.363a.51.51 0 0 1-.66 0a.43.43 0 0 1-.153-.363v-5.356a2.1 2.1 0 0 0-.17-.846a2.2 2.2 0 0 0-1.16-1.16a2.2 2.2 0 0 0-1.692 0a2.2 2.2 0 0 0-1.16 1.16a2.1 2.1 0 0 0-.17.846v5.356a.43.43 0 0 1-.152.363a.51.51 0 0 1-.661 0a.43.43 0 0 1-.153-.363v-5.356a3.1 3.1 0 0 1 .246-1.225a3.2 3.2 0 0 1 .67-1a3.2 3.2 0 0 1 .984-.669a3.15 3.15 0 0 1 2.464 0a3.1 3.1 0 0 1 1.667 1.668a3.1 3.1 0 0 1 .247 1.225zm-8.383 0a.44.44 0 0 1-.152.363a.51.51 0 0 1-.662 0a.43.43 0 0 1-.152-.363V7.956a.44.44 0 0 1 .152-.363a.51.51 0 0 1 .662 0a.44.44 0 0 1 .152.363zM4.982 8.44a.46.46 0 0 1-.145.338a.48.48 0 0 1-.355.142a.5.5 0 0 1-.339-.145l-.016-.017a.2.2 0 0 0-.032-.024a.1.1 0 0 1-.033-.025a1.9 1.9 0 0 0-1.24-.43q-.871 0-1.363.595q-.491.596-.492 1.693v5.243a.44.44 0 0 1-.153.363a.53.53 0 0 1-.33.123a.53.53 0 0 1-.33-.123a.43.43 0 0 1-.153-.363v-5.243A4.4 4.4 0 0 1 .18 9.303a3 3 0 0 1 .53-1.031a2.55 2.55 0 0 1 .878-.706a2.8 2.8 0 0 1 1.231-.257a3.1 3.1 0 0 1 1.065.209a2.6 2.6 0 0 1 .934.58a.48.48 0 0 1 .163.343zm2.76-3.128a.826.826 0 0 1-.826.827a.826.826 0 0 1-.827-.827a.826.826 0 0 1 .827-.826a.826.826 0 0 1 .826.826"},null,-1)]))}const Rt=X({name:"simple-icons-ring",render:Tt}),Pt={viewBox:"0 0 48 48",width:"1.2em",height:"1.2em"};function At($,i){return s(),p("svg",Pt,i[0]||(i[0]=[n("path",{fill:"#FFC107",d:"M43.611 20.083H42V20H24v8h11.303c-1.649 4.657-6.08 8-11.303 8c-6.627 0-12-5.373-12-12s5.373-12 12-12c3.059 0 5.842 1.154 7.961 3.039l5.657-5.657C34.046 6.053 29.268 4 24 4C12.955 4 4 12.955 4 24s8.955 20 20 20s20-8.955 20-20c0-1.341-.138-2.65-.389-3.917"},null,-1),n("path",{fill:"#FF3D00",d:"m6.306 14.691l6.571 4.819C14.655 15.108 18.961 12 24 12c3.059 0 5.842 1.154 7.961 3.039l5.657-5.657C34.046 6.053 29.268 4 24 4C16.318 4 9.656 8.337 6.306 14.691"},null,-1),n("path",{fill:"#4CAF50",d:"M24 44c5.166 0 9.86-1.977 13.409-5.192l-6.19-5.238A11.9 11.9 0 0 1 24 36c-5.202 0-9.619-3.317-11.283-7.946l-6.522 5.025C9.505 39.556 16.227 44 24 44"},null,-1),n("path",{fill:"#1976D2",d:"M43.611 20.083H42V20H24v8h11.303a12.04 12.04 0 0 1-4.087 5.571l.003-.002l6.19 5.238C36.971 39.205 44 34 44 24c0-1.341-.138-2.65-.389-3.917"},null,-1)]))}const It=X({name:"flat-color-icons-google",render:At}),Ht={class:"flex flex-col gap-6 w-full h-full"},Mt={class:"flex flex-col w-full h-full gap-6"},Et={class:"h-[70px]"},jt={class:"cui-label"},Lt={class:"flex flex-col w-full h-[calc(100%-70px-1.25rem)]"},Vt={key:0,class:"flex w-full h-full items-center justify-center"},Bt={key:1,class:"flex flex-col w-full h-full items-center justify-center gap-4"},Gt={class:"text-muted"},Ot={class:"flex flex-col"},Dt={class:"font-medium truncate"},Ft={key:0,class:"text-xs text-muted truncate"},qt={key:1,class:"text-xs text-muted truncate"},Ut={key:0,class:"flex flex-col w-full py-4 gap-6"},Wt={for:"name",class:"cui-label"},zt={for:"url",class:"cui-label"},Nt={for:"username",class:"cui-label"},Kt={for:"password",class:"cui-label"},Yt={for:"pin",class:"cui-label"},Qt=se({__name:"DiscoverCameras",setup($){const i=new Ce,E=Ne(),{t:j}=Be(),{data:R,isFetching:G,refetch:P,isRefetching:T}=i.discoverCamerasQuery(),{mutateAsync:L,isPending:H}=i.pairCameraQuery(),O=de("formRef"),b=F(""),y=F(),m=F({}),C=F(),M=F(),u=F(),S=F(),f=J(()=>G.value||T.value),W=J(()=>H.value),oe=J(()=>{var h;return!!((h=y.value)!=null&&h.url.includes("user:pass"))}),A=J(()=>{var h,v,V;return((h=y.value)==null?void 0:h.type)==="Google"||((v=y.value)==null?void 0:v.type)==="Roborock"||((V=y.value)==null?void 0:V.type)==="Ring"}),Z=J(()=>{var V,c;if(!((c=(V=R.value)==null?void 0:V.sources)!=null&&c.length))return[];let h=[{name:"Google Nest",type:"Google",url:"nest?:"},{name:"Ring",type:"Ring",url:"ring?:"},{name:"Roborock",type:"Roborock",url:"roborock://"},...Me(R.value.sources)];if(!b.value)return h;const v=b.value.toLowerCase();return h=R.value.sources.filter(a=>(a.name??a.id??"Unknown").toLowerCase().includes(v)||a.url.toLowerCase().includes(v)||a.type&&a.type.toLowerCase().includes(v)),h});Ze(y,h=>{C.value=void 0,M.value=void 0,u.value=void 0,S.value=void 0,re(h==null?void 0:h.url)});const re=h=>{if(!h){m.value={};return}m.value[h]?m.value={}:m.value={[h]:!0}},ie=async()=>{try{y.value=void 0,await P()}catch{}},ce=async()=>{var v;const h=await((v=O.value)==null?void 0:v.validate());if(h!=null&&h.valid&&h.values)try{await L({cameraData:h.values}),await P()}catch{}else E.add({severity:"error",summary:j("components.toast.title_error"),detail:j("components.toast.validation_failed"),life:3e3}),console.log("Validation failed",h)};return(h,v)=>{const V=qe,c=ze,a=ke,l=We,I=Ue,D=Fe,pe=to,ae=It,ee=Rt,Se=St,he=xt,ge=bt,_e=gt,ve=pt,fe=ct,$e=st,Te=yo,be=ao,Re=so,Pe=no,Ae=Ee,Y=je;return s(),p("div",Ht,[o(Ae,{class:"cui-card",pt:{body:{class:"h-full"},content:{class:"h-full"}}},{content:t(()=>{var le,x;return[n("div",Mt,[n("div",Et,[n("label",jt,w(h.$t("components.dialog.components.new_camera.search_camera")),1),o(D,null,{default:t(()=>[o(V,{modelValue:e(b),"onUpdate:modelValue":v[0]||(v[0]=r=>ne(b)?b.value=r:null),loading:e(f),type:"text"},null,8,["modelValue","loading"]),o(I,null,{default:t(()=>[o(a,{text:"",rounded:"",severity:"secondary",disabled:e(f),class:"border-right-color",onClick:v[1]||(v[1]=r=>b.value="")},{icon:t(()=>[o(c)]),_:1},8,["disabled"]),o(a,{text:"",rounded:"",severity:"secondary",disabled:e(f),onClick:ie},{icon:t(()=>[o(l)]),_:1},8,["disabled"])]),_:1})]),_:1})]),n("div",Lt,[e(f)?(s(),p("div",Vt,[o(pe,{class:"w-[30px] h-[30px] m-0","stroke-width":"5"})])):(x=(le=e(R))==null?void 0:le.sources)!=null&&x.length?(s(),_(Pe,{key:2,selection:e(y),"onUpdate:selection":v[6]||(v[6]=r=>ne(y)?y.value=r:null),"expanded-rows":e(m),"onUpdate:expandedRows":v[7]||(v[7]=r=>ne(m)?m.value=r:null),value:e(Z),"data-key":"url",loading:e(f),scrollable:"","selection-mode":"single",class:"h-full",pt:{root:{class:"h-full"},tableContainer:{class:"h-full"},table:{class:"table-fixed"}}},{expansion:t(r=>[e(A)?(s(),p("div",Ut,"WIP")):g("",!0),o(e(eo),{ref_key:"formRef",ref:O,class:"flex flex-col w-full py-4 gap-6","validation-schema":e(xo)},{default:t(()=>[e(A)?g("",!0):(s(),_(e(U),{key:0,modelValue:e(C),"onUpdate:modelValue":v[2]||(v[2]=d=>ne(C)?C.value=d:null),name:"name",as:"div",class:"flex flex-col field-gap"},{default:t(({field:d,errors:k})=>[n("label",Wt,w(h.$t("components.form.label.name")),1),o(D,null,{default:t(()=>[o(V,Q(d,{invalid:k.length>0,loading:e(W),type:"text"}),null,16,["invalid","loading"])]),_:2},1024),o(N,{name:"fade"},{default:t(()=>[o(e(K),{name:"name",class:"cui-input-error"})]),_:1})]),_:1},8,["modelValue"])),e(A)?g("",!0):(s(),_(e(U),{key:1,"model-value":r.data.url,name:"url",as:"div",class:"flex flex-col field-gap"},{default:t(({field:d,errors:k})=>[n("label",zt,w(h.$t("components.form.label.url")),1),o(D,null,{default:t(()=>[o(V,Q(d,{invalid:k.length>0,loading:e(W),type:"text",readonly:""}),null,16,["invalid","loading"])]),_:2},1024),o(N,{name:"fade"},{default:t(()=>[o(e(K),{name:"url",class:"cui-input-error"})]),_:1})]),_:2},1032,["model-value"])),e(oe)?(s(),_(e(U),{key:2,modelValue:e(u),"onUpdate:modelValue":v[3]||(v[3]=d=>ne(u)?u.value=d:null),name:"username",as:"div",class:"flex flex-col field-gap"},{default:t(({field:d,errors:k})=>[n("label",Nt,w(h.$t("components.form.label.username")),1),o(D,null,{default:t(()=>[o(V,Q(d,{invalid:k.length>0,loading:e(W),type:"text"}),null,16,["invalid","loading"])]),_:2},1024),o(N,{name:"fade"},{default:t(()=>[o(e(K),{name:"username",class:"cui-input-error"})]),_:1})]),_:1},8,["modelValue"])):g("",!0),e(oe)?(s(),_(e(U),{key:3,modelValue:e(S),"onUpdate:modelValue":v[4]||(v[4]=d=>ne(S)?S.value=d:null),name:"password",as:"div",class:"flex flex-col field-gap"},{default:t(({field:d,errors:k})=>[n("label",Kt,w(h.$t("components.form.label.password")),1),o(D,null,{default:t(()=>[o(Re,Q({invalid:k.length>0},d,{loading:e(W),feedback:!1,"toggle-mask":""}),null,16,["invalid","loading"])]),_:2},1024),o(N,{name:"fade"},{default:t(()=>[o(e(K),{name:"password",class:"cui-input-error"})]),_:1})]),_:1},8,["modelValue"])):g("",!0),r.data.type==="HomeKit"?(s(),_(e(U),{key:4,modelValue:e(M),"onUpdate:modelValue":v[5]||(v[5]=d=>ne(M)?M.value=d:null),name:"pin",as:"div",class:"flex flex-col field-gap"},{default:t(({field:d,errors:k})=>[n("label",Yt,w(h.$t("components.form.label.pin")),1),o(D,null,{default:t(()=>[o(V,Q(d,{invalid:k.length>0,loading:e(W),type:"text",maxlength:8}),null,16,["invalid","loading"])]),_:2},1024),o(N,{name:"fade"},{default:t(()=>[o(e(K),{name:"pin",class:"cui-input-error"})]),_:1})]),_:1},8,["modelValue"])):g("",!0),o(e(U),{modelValue:r.data.type,"onUpdate:modelValue":d=>r.data.type=d,name:"type",as:"div",class:"hidden"},null,8,["modelValue","onUpdate:modelValue"]),e(A)?g("",!0):(s(),_(a,{key:5,loading:e(W),label:h.$t("components.dialog.components.new_camera.add_camera"),class:"cui-button-md w-full md:w-auto md:ml-auto",onClick:ce},null,8,["loading","label"]))]),_:2},1032,["validation-schema"])]),default:t(()=>[o(be,{"header-class":"w-10"},{body:t(r=>[r.data.type==="Google"?B((s(),_(a,{key:0,text:"",rounded:"",class:"cui-icon-md"},{icon:t(()=>[o(ae,{width:"100%",height:"100%"})]),_:1})),[[Y,{value:"Google Nest"}]]):g("",!0),r.data.type==="Ring"?B((s(),_(a,{key:1,text:"",rounded:"",class:"cui-icon-md"},{icon:t(()=>[o(ee,{class:"text-blue-500",width:"100%",height:"100%"})]),_:1})),[[Y,{value:"Ring"}]]):g("",!0),r.data.type==="Roborock"?B((s(),_(a,{key:2,text:"",rounded:"",class:"cui-icon-md"},{icon:t(()=>[o(Se,{class:"text-red-500",width:"100%",height:"100%"})]),_:1})),[[Y,{value:"Roborock"}]]):g("",!0),r.data.type==="Hass"?B((s(),_(a,{key:3,text:"",rounded:"",class:"cui-icon-md"},{icon:t(()=>[o(he,{class:"text-sky-500",width:"100%",height:"100%"})]),_:1})),[[Y,{value:"Home Assistant"}]]):g("",!0),r.data.type==="HomeKit"?B((s(),_(a,{key:4,text:"",rounded:"",class:"cui-icon-md !bg-transparent"},{icon:t(()=>[o(ge,{class:"text-yellow-500",width:"100%",height:"100%"})]),_:1})),[[Y,{value:"HomeKit"}]]):g("",!0),r.data.type==="FFmpeg"?B((s(),_(a,{key:5,text:"",rounded:"",class:"cui-icon-md !bg-transparent"},{icon:t(()=>[o(_e,{class:"text-green-500",width:"100%",height:"100%"})]),_:1})),[[Y,{value:"FFmpeg"}]]):g("",!0),r.data.type==="Onvif"?B((s(),_(a,{key:6,text:"",rounded:"",class:"cui-icon-md !bg-transparent"},{icon:t(()=>[o(ve,{width:"100%",height:"100%"})]),_:1})),[[Y,{value:"Onvif"}]]):g("",!0),r.data.type==="Webtorrent"?B((s(),_(a,{key:7,text:"",rounded:"",class:"cui-icon-md !bg-transparent"},{icon:t(()=>[o(fe,{width:"100%",height:"100%"})]),_:1})),[[Y,{value:"WebTorrent"}]]):g("",!0),r.data.type==="GoPro"?B((s(),_(a,{key:8,text:"",rounded:"",class:"cui-icon-md !bg-transparent"},{icon:t(()=>[o($e,{width:"100%",height:"100%"})]),_:1})),[[Y,{value:"GoPro"}]]):g("",!0),r.data.type==="DVRip"?B((s(),_(a,{key:9,text:"",rounded:"",class:"cui-icon-md !bg-transparent"},{icon:t(()=>[o(Te,{width:"100%",height:"100%"})]),_:1})),[[Y,{value:"DVRip"}]]):g("",!0)]),_:1}),o(be,{field:"name",header:h.$t("components.form.label.camera")},{body:t(r=>[n("div",Ot,[n("span",Dt,w(r.data.name),1),r.data.type!=="Google"&&r.data.type!=="Roborock"&&r.data.type!=="Ring"?(s(),p("span",Ft,w(r.data.url),1)):g("",!0),r.data.info?(s(),p("span",qt,w(r.data.info),1)):g("",!0)])]),_:1},8,["header"])]),_:1},8,["selection","expanded-rows","value","loading"])):(s(),p("div",Bt,[n("span",Gt,w(h.$t("components.dialog.components.new_camera.no_cameras_found")),1),o(a,{severity:"primary",label:h.$t("components.dialog.components.new_camera.scan_again"),onClick:ie},null,8,["label"])]))])])]}),_:1})])}}}),Jt={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function Xt($,i){return s(),p("svg",Jt,i[0]||(i[0]=[n("path",{fill:"currentColor",d:"M12.5 9q-.275 0-.425-.25t0-.5L15 3.175q.2-.325.5-.387t.65.112q1.725.775 3.05 2.162T21.25 8.2q.125.325-.038.563T20.7 9zm-3.575 1.225l-3-5.2q-.2-.325-.1-.65t.4-.525Q7.425 3 8.888 2.5T12 2q.375 0 .825.038t.75.087q.35.05.463.3t-.063.55L9.8 10.225q-.15.25-.437.25t-.438-.25M2.85 14q-.275 0-.5-.187t-.275-.463t-.062-.6T2 12q0-1.575.513-3.137T4.1 5.9q.275-.35.638-.35t.562.375l4.2 7.325q.15.25-.012.5T9.05 14zm5 7.1q-1.65-.8-3.025-2.175T2.75 15.8q-.125-.325.05-.562T3.325 15h8.15q.275 0 .425.25t0 .5l-2.875 5.025q-.2.325-.5.425t-.675-.1M12 22q-.35 0-.788-.038t-.762-.087q-.35-.05-.475-.3t.05-.55l4.125-7.2q.15-.25.5-.25t.5.25l2.95 5.125q.175.275.113.6t-.413.6q-1.15.85-2.687 1.35T12 22m6.775-3.875l-4.25-7.375q-.15-.25.013-.5t.437-.25h6.175q.275 0 .5.188t.275.462t.062.6T22 12q0 1.575-.513 3.163T19.9 18.125q-.2.275-.575.288t-.55-.288"},null,-1)]))}const Zt=X({name:"material-symbols-camera-rounded",render:Xt}),en={viewBox:"0 0 12 12",width:"1.2em",height:"1.2em"};function on($,i){return s(),p("svg",en,i[0]||(i[0]=[n("path",{fill:"currentColor",d:"M2.22 4.47a.75.75 0 0 1 1.06 0L6 7.19l2.72-2.72a.75.75 0 0 1 1.06 1.06L6.53 8.78a.75.75 0 0 1-1.06 0L2.22 5.53a.75.75 0 0 1 0-1.06"},null,-1)]))}const tn=X({name:"fluent-chevron-down12-filled",render:on}),nn="#### Source: Bubble\n\nOther names: [ESeeCloud](http://www.eseecloud.com/), [dvr163](http://help.dvr163.com/).\n\n- you can skip `username`, `password`, `port`, `ch` and `stream` if they are default\n- setup separate streams for different channels and streams\n\n```yaml\nstreams:\n camera1: bubble://username:password@192.168.1.123:34567/bubble/live?ch=0&stream=0\n```\n\n_Source: [Go2Rtc Bubble](https://github.com/AlexxIT/go2rtc#source-bubble)_\n",an=`#### Source: Doorbird
|
|
5
|
+
|
|
6
|
+
[Doorbird](https://www.doorbird.com/) proprietary camera protocol with **two way audio** support.
|
|
7
|
+
|
|
8
|
+
\`\`\`yaml
|
|
9
|
+
streams:
|
|
10
|
+
video-audio:
|
|
11
|
+
- rtsp://user:pass@123.123.123.123:554/mpeg/media.amp
|
|
12
|
+
- doorbird://user:pass@123.123.123.123?media=audio
|
|
13
|
+
two-way:
|
|
14
|
+
- rtsp://user:pass@123.123.123.123:554/mpeg/media.amp
|
|
15
|
+
- doorbird://user:pass@123.123.123.123?media=audio
|
|
16
|
+
- doorbird://user:pass@123.123.123.123
|
|
17
|
+
mjpeg-video:
|
|
18
|
+
- doorbird://user:pass@123.123.123.123?media=video
|
|
19
|
+
\`\`\`
|
|
20
|
+
`,sn="#### Source: DVRIP\n\nOther names: DVR-IP, NetSurveillance, Sofia protocol (NETsurveillance ActiveX plugin XMeye SDK).\n\n- you can skip `username`, `password`, `port`, `channel` and `subtype` if they are default\n- setup separate streams for different channels\n- use `subtype=0` for Main stream, and `subtype=1` for Extra1 stream\n- only the TCP protocol is supported\n\n```yaml\nstreams:\n only_stream: dvrip://username:password@192.168.1.123:34567?channel=0&subtype=0\n only_tts: dvrip://username:password@192.168.1.123:34567?backchannel=1\n two_way_audio:\n - dvrip://username:password@192.168.1.123:34567?channel=0&subtype=0\n - dvrip://username:password@192.168.1.123:34567?backchannel=1\n```\n\n_Source: [Go2Rtc DVRIP](https://github.com/AlexxIT/go2rtc#source-dvrip)_\n",rn=`#### Source: Echo
|
|
21
|
+
|
|
22
|
+
Some sources may have a dynamic link. And you will need to get it using a bash or python script. Your script should echo a link to the source. RTSP, FFmpeg or any of the [supported sources](https://github.com/AlexxIT/go2rtc#module-streams).
|
|
23
|
+
|
|
24
|
+
**Docker** and **Hass Add-on** users has preinstalled \`python3\`, \`curl\`, \`jq\`.
|
|
25
|
+
Check examples in [wiki](https://github.com/AlexxIT/go2rtc/wiki/Source-Echo-examples).
|
|
26
|
+
|
|
27
|
+
\`\`\`yaml
|
|
28
|
+
streams:
|
|
29
|
+
apple_hls: echo:python3 hls.py https://developer.apple.com/streaming/examples/basic-stream-osx-ios5.html
|
|
30
|
+
\`\`\`
|
|
31
|
+
|
|
32
|
+
_Source: [Go2Rtc Echo](https://github.com/AlexxIT/go2rtc#source-echo)_
|
|
33
|
+
`,cn=`#### Source: Exec
|
|
34
|
+
|
|
35
|
+
Exec source can run any external application and expect data from it. Two transports are supported - **pipe** and **RTSP**.
|
|
36
|
+
|
|
37
|
+
If you want to use **RTSP** transport - the command must contain the \`{output}\` argument in any place. On launch, it will be replaced by the local address of the RTSP server.
|
|
38
|
+
|
|
39
|
+
**pipe** reads data from app stdout in different formats: **MJPEG**, **H.264/H.265 bitstream**, **MPEG-TS**. Also pipe can write data to app stdin in two formats: **PCMA** and **PCM/48000**.
|
|
40
|
+
|
|
41
|
+
The source can be used with:
|
|
42
|
+
|
|
43
|
+
- [FFmpeg](https://ffmpeg.org/) - go2rtc ffmpeg source just a shortcut to exec source
|
|
44
|
+
. [FFplay](https://ffmpeg.org/ffplay.html) - play audio on your server
|
|
45
|
+
- [GStreamer](https://gstreamer.freedesktop.org/)
|
|
46
|
+
- [Raspberry Pi Cameras](https://www.raspberrypi.com/documentation/computers/camera_software.html)
|
|
47
|
+
- any your own software
|
|
48
|
+
|
|
49
|
+
\`\`\`yaml
|
|
50
|
+
streams:
|
|
51
|
+
stream: exec:ffmpeg -re -i /media/BigBuckBunny.mp4 -c copy -rtsp_transport tcp -f rtsp {output}
|
|
52
|
+
picam_h264: exec:libcamera-vid -t 0 --inline -o -
|
|
53
|
+
picam_mjpeg: exec:libcamera-vid -t 0 --codec mjpeg -o -
|
|
54
|
+
pi5cam_h264: exec:libcamera-vid -t 0 --libav-format h264 -o -
|
|
55
|
+
canon: exec:gphoto2 --capture-movie --stdout#killsignal=2#killtimeout=5
|
|
56
|
+
play_pcma: exec:ffplay -fflags nobuffer -f alaw -ar 8000 -i -#backchannel=1
|
|
57
|
+
play_pcm48k: exec:ffplay -fflags nobuffer -f s16be -ar 48000 -i -#backchannel=1
|
|
58
|
+
\`\`\`
|
|
59
|
+
|
|
60
|
+
_Source: [Go2Rtc Exec](https://github.com/AlexxIT/go2rtc#source-exec)_
|
|
61
|
+
`,ln=`#### Source: Expr
|
|
62
|
+
|
|
63
|
+
[Expr](https://github.com/antonmedv/expr) - expression language and expression evaluation for Go.
|
|
64
|
+
|
|
65
|
+
- [language definition](https://expr.medv.io/docs/Language-Definition) - takes best from JS, Python, Jinja2 syntax
|
|
66
|
+
- your expression should return a link of any supported source
|
|
67
|
+
- expression supports multiple operation, but:
|
|
68
|
+
- all operations must be separated by a semicolon
|
|
69
|
+
- all operations, except the last one, must declare a new variable (\`let s = "abc";\`)
|
|
70
|
+
- the last operation should return a string
|
|
71
|
+
- go2rtc supports additional functions:
|
|
72
|
+
- \`fetch\` - JS-like HTTP requests
|
|
73
|
+
- \`match\` - JS-like RegExp queries
|
|
74
|
+
|
|
75
|
+
## Examples
|
|
76
|
+
|
|
77
|
+
**Two way audio for Dahua VTO**
|
|
78
|
+
|
|
79
|
+
\`\`\`yaml
|
|
80
|
+
streams:
|
|
81
|
+
dahua_vto: |
|
|
82
|
+
expr: let host = "admin:password@192.168.1.123";
|
|
83
|
+
fetch("http://"+host+"/cgi-bin/configManager.cgi?action=setConfig&Encode[0].MainFormat[0].Audio.Compression=G.711A&Encode[0].MainFormat[0].Audio.Frequency=8000").ok
|
|
84
|
+
? "rtsp://"+host+"/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif" : ""
|
|
85
|
+
\`\`\`
|
|
86
|
+
|
|
87
|
+
**dom.ru**
|
|
88
|
+
|
|
89
|
+
You can get credentials via:
|
|
90
|
+
|
|
91
|
+
- https://github.com/alexmorbo/domru (file \`/share/domru/accounts\`)
|
|
92
|
+
- https://github.com/ad/domru
|
|
93
|
+
|
|
94
|
+
\`\`\`yaml
|
|
95
|
+
streams:
|
|
96
|
+
dom_ru: |
|
|
97
|
+
expr: let camera = "99999999"; let token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; let operator = 99;
|
|
98
|
+
fetch("https://myhome.novotelecom.ru/rest/v1/forpost/cameras/"+camera+"/video", {
|
|
99
|
+
headers: {Authorization: "Bearer "+token, Operator: operator}
|
|
100
|
+
}).json().data.URL
|
|
101
|
+
\`\`\`
|
|
102
|
+
|
|
103
|
+
**Parse HLS files from Apple**
|
|
104
|
+
|
|
105
|
+
Same example in two languages - python and expr.
|
|
106
|
+
|
|
107
|
+
\`\`\`yaml
|
|
108
|
+
streams:
|
|
109
|
+
example_python: |
|
|
110
|
+
echo:python -c 'from urllib.request import urlopen; import re
|
|
111
|
+
|
|
112
|
+
# url1 = "https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_16x9/bipbop_16x9_variant.m3u8"
|
|
113
|
+
html1 = urlopen("https://developer.apple.com/streaming/examples/basic-stream-osx-ios5.html").read().decode("utf-8")
|
|
114
|
+
url1 = re.search(r"https.+?m3u8", html1)[0]
|
|
115
|
+
|
|
116
|
+
# url2 = "gear1/prog_index.m3u8"
|
|
117
|
+
html2 = urlopen(url1).read().decode("utf-8")
|
|
118
|
+
url2 = re.search(r"^[a-z0-1/_]+\\.m3u8$", html2, flags=re.MULTILINE)[0]
|
|
119
|
+
|
|
120
|
+
# url3 = "https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_16x9/gear1/prog_index.m3u8"
|
|
121
|
+
url3 = url1[:url1.rindex("/")+1] + url2
|
|
122
|
+
|
|
123
|
+
print("ffmpeg:" + url3 + "#video=copy")'
|
|
124
|
+
|
|
125
|
+
example_expr: |
|
|
126
|
+
expr:
|
|
127
|
+
|
|
128
|
+
let html1 = fetch("https://developer.apple.com/streaming/examples/basic-stream-osx-ios5.html").text;
|
|
129
|
+
let url1 = match(html1, "https.+?m3u8")[0];
|
|
130
|
+
|
|
131
|
+
let html2 = fetch(url1).text;
|
|
132
|
+
let url2 = match(html2, "^[a-z0-1/_]+\\\\.m3u8$", "m")[0];
|
|
133
|
+
|
|
134
|
+
let url3 = url1[:lastIndexOf(url1, "/")+1] + url2;
|
|
135
|
+
|
|
136
|
+
"ffmpeg:" + url3 + "#video=copy"
|
|
137
|
+
\`\`\`
|
|
138
|
+
|
|
139
|
+
## Comparsion
|
|
140
|
+
|
|
141
|
+
| expr | python | js |
|
|
142
|
+
| ---------------------------- | -------------------------- | ------------------------------ |
|
|
143
|
+
| let x = 1; | x = 1 | let x = 1 |
|
|
144
|
+
| {a: 1, b: 2} | {"a": 1, "b": 2} | {a: 1, b: 2} |
|
|
145
|
+
| let r = fetch(url, {method}) | r = request(method, url) | r = await fetch(url, {method}) |
|
|
146
|
+
| r.ok | r.ok | r.ok |
|
|
147
|
+
| r.status | r.status_code | r.status |
|
|
148
|
+
| r.text | r.text | await r.text() |
|
|
149
|
+
| r.json() | r.json() | await r.json() |
|
|
150
|
+
| r.headers | r.headers | r.headers |
|
|
151
|
+
| let m = match(text, "abc") | m = re.search("abc", text) | let m = text.match(/abc/) |
|
|
152
|
+
|
|
153
|
+
_Source: [Go2Rtc Expr](https://github.com/AlexxIT/go2rtc#source-expr)_
|
|
154
|
+
`,dn="#### Source: FFmpeg\n\nYou can get any stream or file or device via FFmpeg and push it to go2rtc. The app will automatically start FFmpeg with the proper arguments when someone starts watching the stream.\n\n- FFmpeg preistalled for **Docker** and **Hass Add-on** users\n- **Hass Add-on** users can target files from [/media](https://www.home-assistant.io/more-info/local-media/setup-media/) folder\n\nFormat: `ffmpeg:{input}#{param1}#{param2}#{param3}`. Examples:\n\n```yaml\nstreams:\n # [FILE] all tracks will be copied without transcoding codecs\n file1: ffmpeg:/media/BigBuckBunny.mp4\n\n # [FILE] video will be transcoded to H264, audio will be skipped\n file2: ffmpeg:/media/BigBuckBunny.mp4#video=h264\n\n # [FILE] video will be copied, audio will be transcoded to pcmu\n file3: ffmpeg:/media/BigBuckBunny.mp4#video=copy#audio=pcmu\n\n # [HLS] video will be copied, audio will be skipped\n hls: ffmpeg:https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_16x9/gear5/prog_index.m3u8#video=copy\n\n # [MJPEG] video will be transcoded to H264\n mjpeg: ffmpeg:http://185.97.122.128/cgi-bin/faststream.jpg#video=h264\n\n # [RTSP] video with rotation, should be transcoded, so select H264\n rotate: ffmpeg:rtsp://rtsp:12345678@192.168.1.123/av_stream/ch0#video=h264#rotate=90\n```\n\nAll trascoding formats has [built-in templates](https://github.com/AlexxIT/go2rtc/blob/master/internal/ffmpeg/ffmpeg.go): `h264`, `h265`, `opus`, `pcmu`, `pcmu/16000`, `pcmu/48000`, `pcma`, `pcma/16000`, `pcma/48000`, `aac`, `aac/16000`.\n\nBut you can override them via YAML config. You can also add your own formats to config and use them with source params.\n\n```yaml\nffmpeg:\n bin: ffmpeg # path to ffmpeg binary\n h264: '-codec:v libx264 -g:v 30 -preset:v superfast -tune:v zerolatency -profile:v main -level:v 4.1'\n mycodec: '-any args that supported by ffmpeg...'\n myinput: '-fflags nobuffer -flags low_delay -timeout 5000000 -i {input}'\n myraw: '-ss 00:00:20'\n```\n\n- You can use go2rtc stream name as ffmpeg input (ex. `ffmpeg:camera1#video=h264`)\n- You can use `video` and `audio` params multiple times (ex. `#video=copy#audio=copy#audio=pcmu`)\n- You can use `rotate` param with `90`, `180`, `270` or `-90` values, important with transcoding (ex. `#video=h264#rotate=90`)\n- You can use `width` and/or `height` params, important with transcoding (ex. `#video=h264#width=1280`)\n- You can use `drawtext` to add a timestamp (ex. `drawtext=x=2:y=2:fontsize=12:fontcolor=white:box=1:boxcolor=black`)\n - This will greatly increase the CPU of the server, even with hardware acceleration\n- You can use `raw` param for any additional FFmpeg arguments (ex. `#raw=-vf transpose=1`)\n- You can use `input` param to override default input template (ex. `#input=rtsp/udp` will change RTSP transport from TCP to UDP+TCP)\n - You can use raw input value (ex. `#input=-timeout 5000000 -i {input}`)\n - You can add your own input templates\n\nRead more about [hardware acceleration](https://github.com/AlexxIT/go2rtc/wiki/Hardware-acceleration).\n\n**PS.** It is recommended to check the available hardware in the WebUI add page.\n\n<hr>\n\n#### Source: FFmpeg Device\n\nYou can get video from any USB-camera or Webcam as RTSP or WebRTC stream. This is part of FFmpeg integration.\n\n- check available devices in Web interface\n- `video_size` and `framerate` must be supported by your camera!\n- for Linux supported only video for now\n- for macOS you can stream Facetime camera or whole Desktop!\n- for macOS important to set right framerate\n\nFormat: `ffmpeg:device?{input-params}#{param1}#{param2}#{param3}`\n\n```yaml\nstreams:\n linux_usbcam: ffmpeg:device?video=0&video_size=1280x720#video=h264\n windows_webcam: ffmpeg:device?video=0#video=h264\n macos_facetime: ffmpeg:device?video=0&audio=1&video_size=1280x720&framerate=30#video=h264#audio=pcma\n```\n\n**PS.** It is recommended to check the available devices in the WebUI add page.\n\n_Source: [Go2Rtc FFmpeg](https://github.com/AlexxIT/go2rtc#source-ffmpeg) & [Go2Rtc FFmpeg Device](https://github.com/AlexxIT/go2rtc#source-ffmpeg-device)_\n",un=`#### Source: GoPro
|
|
155
|
+
|
|
156
|
+
Supported models: HERO9, HERO10, HERO11, HERO12.
|
|
157
|
+
Supported OS: Linux, Mac, Windows, [HassOS](https://www.home-assistant.io/installation/)
|
|
158
|
+
|
|
159
|
+
The other camera models have different APIs. I will try to add them in the next versions.
|
|
160
|
+
|
|
161
|
+
## Config
|
|
162
|
+
|
|
163
|
+
- USB-connected cameras create a new network interface in the system
|
|
164
|
+
- Linux users do not need to install anything
|
|
165
|
+
- Windows users should install the [network driver](https://community.gopro.com/s/article/GoPro-Webcam)
|
|
166
|
+
- if the camera is detected but the stream does not start - you need to disable firewall
|
|
167
|
+
|
|
168
|
+
1. Discover camera address: WebUI > Add > GoPro
|
|
169
|
+
2. Add camera to config
|
|
170
|
+
|
|
171
|
+
\`\`\`yaml
|
|
172
|
+
streams:
|
|
173
|
+
hero12: gopro://172.20.100.51
|
|
174
|
+
\`\`\`
|
|
175
|
+
|
|
176
|
+
## Useful links
|
|
177
|
+
|
|
178
|
+
- https://gopro.github.io/OpenGoPro/
|
|
179
|
+
|
|
180
|
+
_Source: [Go2Rtc Hass](https://github.com/AlexxIT/go2rtc#source-hass)_
|
|
181
|
+
`,mn=`#### Source: Hass
|
|
182
|
+
|
|
183
|
+
Support import camera links from [Home Assistant](https://www.home-assistant.io/) config files:
|
|
184
|
+
|
|
185
|
+
- [Generic Camera](https://www.home-assistant.io/integrations/generic/), setup via GUI
|
|
186
|
+
- [HomeKit Camera](https://www.home-assistant.io/integrations/homekit_controller/)
|
|
187
|
+
- [ONVIF](https://www.home-assistant.io/integrations/onvif/)
|
|
188
|
+
- [Roborock](https://github.com/humbertogontijo/homeassistant-roborock) vacuums with camera
|
|
189
|
+
|
|
190
|
+
\`\`\`yaml
|
|
191
|
+
hass:
|
|
192
|
+
config: '/config' # skip this setting if you Hass Add-on user
|
|
193
|
+
|
|
194
|
+
streams:
|
|
195
|
+
generic_camera: hass:Camera1 # Settings > Integrations > Integration Name
|
|
196
|
+
aqara_g3: hass:Camera-Hub-G3-AB12
|
|
197
|
+
\`\`\`
|
|
198
|
+
|
|
199
|
+
**WebRTC Cameras**
|
|
200
|
+
|
|
201
|
+
Any cameras in WebRTC format are supported. But at the moment Home Assistant only supports some [Nest](https://www.home-assistant.io/integrations/nest/) cameras in this fomat.
|
|
202
|
+
|
|
203
|
+
The Nest API only allows you to get a link to a stream for 5 minutes. So every 5 minutes the stream will be reconnected.
|
|
204
|
+
|
|
205
|
+
\`\`\`yaml
|
|
206
|
+
streams:
|
|
207
|
+
# link to Home Assistant Supervised
|
|
208
|
+
hass-webrtc1: hass://supervisor?entity_id=camera.nest_doorbell
|
|
209
|
+
# link to external Hass with Long-Lived Access Tokens
|
|
210
|
+
hass-webrtc2: hass://192.168.1.123:8123?entity_id=camera.nest_doorbell&token=eyXYZ...
|
|
211
|
+
\`\`\`
|
|
212
|
+
|
|
213
|
+
**RTSP Cameras**
|
|
214
|
+
|
|
215
|
+
By default, the Home Assistant API does not allow you to get dynamic RTSP link to a camera stream. So more cameras, like [Tuya](https://www.home-assistant.io/integrations/tuya/), and possibly others can also be imported by using [this method](https://github.com/felipecrs/hass-expose-camera-stream-source#importing-home-assistant-cameras-to-go2rtc-andor-frigate).
|
|
216
|
+
|
|
217
|
+
_Source: [Go2Rtc Hass](https://github.com/AlexxIT/go2rtc#source-hass)_
|
|
218
|
+
`,pn=`#### Source: HomeKit
|
|
219
|
+
|
|
220
|
+
**Important:**
|
|
221
|
+
|
|
222
|
+
- You can use HomeKit Cameras **without Apple devices** (iPhone, iPad, etc.), it's just a yet another protocol
|
|
223
|
+
- HomeKit device can be paired with only one ecosystem. So, if you have paired it to an iPhone (Apple Home) - you can't pair it with Home Assistant or go2rtc. Or if you have paired it to go2rtc - you can't pair it with iPhone
|
|
224
|
+
- HomeKit device should be in same network with working [mDNS](https://en.wikipedia.org/wiki/Multicast_DNS) between device and go2rtc
|
|
225
|
+
|
|
226
|
+
go2rtc support import paired HomeKit devices from [Home Assistant](#source-hass). So you can use HomeKit camera with Hass and go2rtc simultaneously. If you using Hass, I recommend pairing devices with it, it will give you more options.
|
|
227
|
+
|
|
228
|
+
You can pair device with go2rtc on the HomeKit page. If you can't see your devices - reload the page. Also try reboot your HomeKit device (power off). If you still can't see it - you have a problems with mDNS.
|
|
229
|
+
|
|
230
|
+
If you see a device but it does not have a pair button - it is paired to some ecosystem (Apple Home, Home Assistant, HomeBridge etc). You need to delete device from that ecosystem, and it will be available for pairing. If you cannot unpair device, you will have to reset it.
|
|
231
|
+
|
|
232
|
+
**Important:**
|
|
233
|
+
|
|
234
|
+
- HomeKit audio uses very non-standard **AAC-ELD** codec with very non-standard params and specification violation
|
|
235
|
+
- Audio can't be played in \`VLC\` and probably any other player
|
|
236
|
+
- Audio should be transcoded for using with MSE, WebRTC, etc.
|
|
237
|
+
|
|
238
|
+
Recommended settings for using HomeKit Camera with WebRTC, MSE, MP4, RTSP:
|
|
239
|
+
|
|
240
|
+
\`\`\`
|
|
241
|
+
streams:
|
|
242
|
+
aqara_g3:
|
|
243
|
+
- hass:Camera-Hub-G3-AB12
|
|
244
|
+
- ffmpeg:aqara_g3#audio=aac#audio=opus
|
|
245
|
+
\`\`\`
|
|
246
|
+
|
|
247
|
+
RTSP link with "normal" audio for any player: \`rtsp://192.168.1.123:8554/aqara_g3?video&audio=aac\`
|
|
248
|
+
|
|
249
|
+
**This source is in active development!** Tested only with [Aqara Camera Hub G3](https://www.aqara.com/eu/product/camera-hub-g3) (both EU and CN versions).
|
|
250
|
+
|
|
251
|
+
_Source: [Go2Rtc HomeKit](https://github.com/AlexxIT/go2rtc#source-homekit)_
|
|
252
|
+
`,hn=`#### Source: HTTP
|
|
253
|
+
|
|
254
|
+
Support Content-Type:
|
|
255
|
+
|
|
256
|
+
- **HTTP-FLV** (\`video/x-flv\`) - same as RTMP, but over HTTP
|
|
257
|
+
- **HTTP-JPEG** (\`image/jpeg\`) - camera snapshot link, can be converted by go2rtc to MJPEG stream
|
|
258
|
+
- **HTTP-MJPEG** (\`multipart/x\`) - simple MJPEG stream over HTTP
|
|
259
|
+
- **MPEG-TS** (\`video/mpeg\`) - legacy [streaming format](https://en.wikipedia.org/wiki/MPEG_transport_stream)
|
|
260
|
+
|
|
261
|
+
Source also support HTTP and TCP streams with autodetection for different formats: **MJPEG**, **H.264/H.265 bitstream**, **MPEG-TS**.
|
|
262
|
+
|
|
263
|
+
\`\`\`yaml
|
|
264
|
+
streams:
|
|
265
|
+
# [HTTP-FLV] stream in video/x-flv format
|
|
266
|
+
http_flv: http://192.168.1.123:20880/api/camera/stream/780900131155/657617
|
|
267
|
+
|
|
268
|
+
# [JPEG] snapshots from Dahua camera, will be converted to MJPEG stream
|
|
269
|
+
dahua_snap: http://admin:password@192.168.1.123/cgi-bin/snapshot.cgi?channel=1
|
|
270
|
+
|
|
271
|
+
# [MJPEG] stream will be proxied without modification
|
|
272
|
+
http_mjpeg: https://mjpeg.sanford.io/count.mjpeg
|
|
273
|
+
|
|
274
|
+
# [MJPEG or H.264/H.265 bitstream or MPEG-TS]
|
|
275
|
+
tcp_magic: tcp://192.168.1.123:12345
|
|
276
|
+
|
|
277
|
+
# Add custom header
|
|
278
|
+
custom_header: 'https://mjpeg.sanford.io/count.mjpeg#header=Authorization: Bearer XXX'
|
|
279
|
+
\`\`\`
|
|
280
|
+
|
|
281
|
+
**PS.** Dahua camera has bug: if you select MJPEG codec for RTSP second stream - snapshot won't work.
|
|
282
|
+
|
|
283
|
+
_Source: [Go2Rtc Http](https://github.com/AlexxIT/go2rtc#source-http)_
|
|
284
|
+
`,fn=`#### Source: ISAPI
|
|
285
|
+
|
|
286
|
+
This source type support only backchannel audio for Hikvision ISAPI protocol. So it should be used as second source in addition to the RTSP protocol.
|
|
287
|
+
|
|
288
|
+
\`\`\`yaml
|
|
289
|
+
streams:
|
|
290
|
+
hikvision1:
|
|
291
|
+
- rtsp://admin:password@192.168.1.123:554/Streaming/Channels/101
|
|
292
|
+
- isapi://admin:password@192.168.1.123:80/
|
|
293
|
+
\`\`\`
|
|
294
|
+
|
|
295
|
+
_Source: [Go2Rtc Isapi](https://github.com/AlexxIT/go2rtc#source-isapi)_
|
|
296
|
+
`,gn=`#### Source: Ivideon
|
|
297
|
+
|
|
298
|
+
Support public cameras from service [Ivideon](https://tv.ivideon.com/).
|
|
299
|
+
|
|
300
|
+
\`\`\`yaml
|
|
301
|
+
streams:
|
|
302
|
+
quailcam: ivideon:100-tu5dkUPct39cTp9oNEN2B6/0
|
|
303
|
+
\`\`\`
|
|
304
|
+
|
|
305
|
+
_Source: [Go2Rtc Ivideon](https://github.com/AlexxIT/go2rtc#source-ivideon)_
|
|
306
|
+
`,_n="#### Source: Kasa\n\n[TP-Link Kasa](https://www.kasasmart.com/) non-standard protocol [more info](https://medium.com/@hu3vjeen/reverse-engineering-tp-link-kc100-bac4641bf1cd).\n\n- `username` - urlsafe email, `alex@gmail.com` -> `alex%40gmail.com`\n- `password` - base64password, `secret1` -> `c2VjcmV0MQ==`\n\n```yaml\nstreams:\n kc401: kasa://username:password@192.168.1.123:19443/https/stream/mixed\n```\n\nTested: KD110, KC200, KC401, KC420WS, EC71.\n\n_Source: [Go2Rtc Kasa](https://github.com/AlexxIT/go2rtc#source-kasa)_\n",vn=`#### Source: Nest
|
|
307
|
+
|
|
308
|
+
Currently only WebRTC cameras are supported.
|
|
309
|
+
|
|
310
|
+
For simplicity, it is recommended to connect the Nest/WebRTC camera to the [Home Assistant](#source-hass). But if you can somehow get the below parameters - Nest/WebRTC source will work without Hass.
|
|
311
|
+
|
|
312
|
+
\`\`\`yaml
|
|
313
|
+
streams:
|
|
314
|
+
nest-doorbell: nest:?client_id=***&client_secret=***&refresh_token=***&project_id=***&device_id=***
|
|
315
|
+
\`\`\`
|
|
316
|
+
|
|
317
|
+
_Source: [Go2Rtc Nest](https://github.com/AlexxIT/go2rtc#source-nest)_
|
|
318
|
+
`,bn=`#### Source: ONVIF
|
|
319
|
+
|
|
320
|
+
The source is not very useful if you already know RTSP and snapshot links for your camera. But it can be useful if you don't.
|
|
321
|
+
|
|
322
|
+
**WebUI > Add** webpage support ONVIF autodiscovery. Your server must be on the same subnet as the camera. If you use docker, you must use "network host".
|
|
323
|
+
|
|
324
|
+
\`\`\`yaml
|
|
325
|
+
streams:
|
|
326
|
+
dahua1: onvif://admin:password@192.168.1.123
|
|
327
|
+
reolink1: onvif://admin:password@192.168.1.123:8000
|
|
328
|
+
tapo1: onvif://admin:password@192.168.1.123:2020
|
|
329
|
+
\`\`\`
|
|
330
|
+
|
|
331
|
+
_Source: [Go2Rtc Onvif](https://github.com/AlexxIT/go2rtc#source-onvif)_
|
|
332
|
+
`,wn=`#### Source: Ring
|
|
333
|
+
|
|
334
|
+
This source type support Ring cameras.
|
|
335
|
+
|
|
336
|
+
- \`device_id\` - camera ID, you can get it from go2rtc WebUI > Add webpage via 2FA.
|
|
337
|
+
- \`refresh_token\` - refresh token, you can get it from go2rtc WebUI > Add webpage via 2FA.
|
|
338
|
+
|
|
339
|
+
\`\`\`yaml
|
|
340
|
+
streams:
|
|
341
|
+
ring: ring:?device_id=***&refresh_token=***
|
|
342
|
+
\`\`\`
|
|
343
|
+
`,yn=`#### Source: Roborock
|
|
344
|
+
|
|
345
|
+
This source type support Roborock vacuums with cameras. Known working models:
|
|
346
|
+
|
|
347
|
+
- Roborock S6 MaxV - only video (the vacuum has no microphone)
|
|
348
|
+
- Roborock S7 MaxV - video and two way audio
|
|
349
|
+
- Roborock Qrevo MaxV - video and two way audio
|
|
350
|
+
|
|
351
|
+
Source support load Roborock credentials from Home Assistant [custom integration](https://github.com/humbertogontijo/homeassistant-roborock) or the [core integration](https://www.home-assistant.io/integrations/roborock). Otherwise, you need to log in to your Roborock account (MiHome account is not supported). Go to: go2rtc WebUI > Add webpage. Copy \`roborock://...\` source for your vacuum and paste it to \`go2rtc.yaml\` config.
|
|
352
|
+
|
|
353
|
+
If you have graphic pin for your vacuum - add it as numeric pin (lines: 123, 456, 789) to the end of the roborock-link.
|
|
354
|
+
|
|
355
|
+
_Source: [Go2Rtc Roborock](https://github.com/AlexxIT/go2rtc#source-roborock)_
|
|
356
|
+
`,xn=`#### Source: RTMP
|
|
357
|
+
|
|
358
|
+
You can get stream from RTMP server, for example [Nginx with nginx-rtmp-module](https://github.com/arut/nginx-rtmp-module).
|
|
359
|
+
|
|
360
|
+
\`\`\`yaml
|
|
361
|
+
streams:
|
|
362
|
+
rtmp_stream: rtmp://192.168.1.123/live/camera1
|
|
363
|
+
\`\`\`
|
|
364
|
+
|
|
365
|
+
_Source: [Go2Rtc RTMP](https://github.com/AlexxIT/go2rtc#source-rtmp)_
|
|
366
|
+
`,kn=`#### Source: RTSP
|
|
367
|
+
|
|
368
|
+
\`\`\`yaml
|
|
369
|
+
streams:
|
|
370
|
+
sonoff_camera: rtsp://rtsp:12345678@192.168.1.123/av_stream/ch0
|
|
371
|
+
dahua_camera:
|
|
372
|
+
- rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif
|
|
373
|
+
- rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=1
|
|
374
|
+
amcrest_doorbell:
|
|
375
|
+
- rtsp://username:password@192.168.1.123:554/cam/realmonitor?channel=1&subtype=0#backchannel=0
|
|
376
|
+
unifi_camera: rtspx://192.168.1.123:7441/fD6ouM72bWoFijxK
|
|
377
|
+
glichy_camera: ffmpeg:rtsp://username:password@192.168.1.123/live/ch00_1
|
|
378
|
+
\`\`\`
|
|
379
|
+
|
|
380
|
+
**Recommendations**
|
|
381
|
+
|
|
382
|
+
- **Amcrest Doorbell** users may want to disable two way audio, because with an active stream you won't have a call button working. You need to add \`#backchannel=0\` to the end of your RTSP link in YAML config file
|
|
383
|
+
- **Dahua Doorbell** users may want to change backchannel [audio codec](https://github.com/AlexxIT/go2rtc/issues/52)
|
|
384
|
+
- **Reolink** users may want NOT to use RTSP protocol at all, some camera models have a very awful unusable stream implementation
|
|
385
|
+
- **Ubiquiti UniFi** users may want to disable HTTPS verification. Use \`rtspx://\` prefix instead of \`rtsps://\`. And don't use \`?enableSrtp\` [suffix](https://github.com/AlexxIT/go2rtc/issues/81)
|
|
386
|
+
- **TP-Link Tapo** users may skip login and password, because go2rtc support login [without them](https://drmnsamoliu.github.io/video.html)
|
|
387
|
+
- If your camera has two RTSP links - you can add both of them as sources. This is useful when streams has different codecs, as example AAC audio with main stream and PCMU/PCMA audio with second stream
|
|
388
|
+
- If the stream from your camera is glitchy, try using [ffmpeg source](#source-ffmpeg). It will not add CPU load if you won't use transcoding
|
|
389
|
+
- If the stream from your camera is very glitchy, try to use transcoding with [ffmpeg source](#source-ffmpeg)
|
|
390
|
+
|
|
391
|
+
**Other options**
|
|
392
|
+
|
|
393
|
+
Format: \`rtsp...#{param1}#{param2}#{param3}\`
|
|
394
|
+
|
|
395
|
+
- Add custom timeout \`#timeout=30\` (in seconds)
|
|
396
|
+
- Ignore audio - \`#media=video\` or ignore video - \`#media=audio\`
|
|
397
|
+
- Ignore two way audio API \`#backchannel=0\` - important for some glitchy cameras
|
|
398
|
+
- Use WebSocket transport \`#transport=ws...\`
|
|
399
|
+
|
|
400
|
+
**RTSP over WebSocket**
|
|
401
|
+
|
|
402
|
+
\`\`\`yaml
|
|
403
|
+
streams:
|
|
404
|
+
# WebSocket with authorization, RTSP - without
|
|
405
|
+
axis-rtsp-ws: rtsp://192.168.1.123:4567/axis-media/media.amp?overview=0&camera=1&resolution=1280x720&videoframeskipmode=empty&Axis-Orig-Sw=true#transport=ws://user:pass@192.168.1.123:4567/rtsp-over-websocket
|
|
406
|
+
# WebSocket without authorization, RTSP - with
|
|
407
|
+
dahua-rtsp-ws: rtsp://user:pass@192.168.1.123/cam/realmonitor?channel=1&subtype=1&proto=Private3#transport=ws://192.168.1.123/rtspoverwebsocket
|
|
408
|
+
\`\`\`
|
|
409
|
+
|
|
410
|
+
_Source: [Go2Rtc RTSP](https://github.com/AlexxIT/go2rtc#source-rtsp)_
|
|
411
|
+
`,Cn=`#### Source: Tapo
|
|
412
|
+
|
|
413
|
+
[TP-Link Tapo](https://www.tapo.com/) proprietary camera protocol with **two way audio** support.
|
|
414
|
+
|
|
415
|
+
- stream quality is the same as [RTSP protocol](https://www.tapo.com/en/faq/34/)
|
|
416
|
+
- use the **cloud password**, this is not the RTSP password! you do not need to add a login!
|
|
417
|
+
- you can also use UPPERCASE MD5 hash from your cloud password with \`admin\` username
|
|
418
|
+
- some new camera firmwares requires SHA256 instead of MD5
|
|
419
|
+
|
|
420
|
+
\`\`\`yaml
|
|
421
|
+
streams:
|
|
422
|
+
# cloud password without username
|
|
423
|
+
camera1: tapo://cloud-password@192.168.1.123
|
|
424
|
+
# admin username and UPPERCASE MD5 cloud-password hash
|
|
425
|
+
camera2: tapo://admin:UPPERCASE-MD5@192.168.1.123
|
|
426
|
+
# admin username and UPPERCASE SHA256 cloud-password hash
|
|
427
|
+
camera3: tapo://admin:UPPERCASE-SHA256@192.168.1.123
|
|
428
|
+
\`\`\`
|
|
429
|
+
|
|
430
|
+
\`\`\`bash
|
|
431
|
+
echo -n "cloud password" | md5 | awk '{print toupper($0)}'
|
|
432
|
+
echo -n "cloud password" | shasum -a 256 | awk '{print toupper($0)}'
|
|
433
|
+
\`\`\`
|
|
434
|
+
|
|
435
|
+
_Source: [Go2Rtc Tapo](https://github.com/AlexxIT/go2rtc#source-tapo)_
|
|
436
|
+
`,Sn=`#### Source: WebRTC
|
|
437
|
+
|
|
438
|
+
This source type support four connection formats.
|
|
439
|
+
|
|
440
|
+
**whep**
|
|
441
|
+
|
|
442
|
+
[WebRTC/WHEP](https://datatracker.ietf.org/doc/draft-murillo-whep/) - is replaced by [WebRTC/WISH](https://datatracker.ietf.org/doc/charter-ietf-wish/02/) standard for WebRTC video/audio viewers. But it may already be supported in some third-party software. It is supported in go2rtc.
|
|
443
|
+
|
|
444
|
+
**go2rtc**
|
|
445
|
+
|
|
446
|
+
This format is only supported in go2rtc. Unlike WHEP it supports asynchronous WebRTC connection and two way audio.
|
|
447
|
+
|
|
448
|
+
**openipc**
|
|
449
|
+
|
|
450
|
+
Support connection to [OpenIPC](https://openipc.org/) cameras.
|
|
451
|
+
|
|
452
|
+
**wyze**
|
|
453
|
+
|
|
454
|
+
Supports connection to [Wyze](https://www.wyze.com/) cameras, using WebRTC protocol. You can use [docker-wyze-bridge](https://github.com/mrlt8/docker-wyze-bridge) project to get connection credentials.
|
|
455
|
+
|
|
456
|
+
**kinesis**
|
|
457
|
+
|
|
458
|
+
Supports [Amazon Kinesis Video Streams](https://aws.amazon.com/kinesis/video-streams/), using WebRTC protocol. You need to specify signalling WebSocket URL with all credentials in query params, \`client_id\` and \`ice_servers\` list in [JSON format](https://developer.mozilla.org/en-US/docs/Web/API/RTCIceServer).
|
|
459
|
+
|
|
460
|
+
\`\`\`yaml
|
|
461
|
+
streams:
|
|
462
|
+
webrtc-whep: webrtc:http://192.168.1.123:1984/api/webrtc?src=camera1
|
|
463
|
+
webrtc-go2rtc: webrtc:ws://192.168.1.123:1984/api/ws?src=camera1
|
|
464
|
+
webrtc-openipc: webrtc:ws://192.168.1.123/webrtc_ws#format=openipc#ice_servers=[{"urls":"stun:stun.kinesisvideo.eu-north-1.amazonaws.com:443"}]
|
|
465
|
+
webrtc-wyze: webrtc:http://192.168.1.123:5000/signaling/camera1?kvs#format=wyze
|
|
466
|
+
webrtc-kinesis: webrtc:wss://...amazonaws.com/?...#format=kinesis#client_id=...#ice_servers=[{...},{...}]
|
|
467
|
+
\`\`\`
|
|
468
|
+
|
|
469
|
+
**PS.** For \`kinesis\` sources you can use [echo](#source-echo) to get connection params using \`bash\`/\`python\` or any other script language.
|
|
470
|
+
|
|
471
|
+
_Source: [Go2Rtc WebRTC](https://github.com/AlexxIT/go2rtc#source-webrtc)_
|
|
472
|
+
`,$n=`#### Source: WebTorrent
|
|
473
|
+
|
|
474
|
+
This source can get a stream from another go2rtc via [WebTorrent](#module-webtorrent) protocol.
|
|
475
|
+
|
|
476
|
+
\`\`\`yaml
|
|
477
|
+
streams:
|
|
478
|
+
webtorrent1: webtorrent:?share=huofssuxaty00izc&pwd=k3l2j9djeg8v8r7e
|
|
479
|
+
\`\`\`
|
|
480
|
+
|
|
481
|
+
_Source: [Go2Rtc Webtorrent](https://github.com/AlexxIT/go2rtc#source-webtorrent)_
|
|
482
|
+
`,oo={disabled:!1,name:"",info:{manufacturer:"",model:"",hardware:"",serialNumber:"",firmwareVersion:"",supportUrl:""},sources:[{_id:ye(8),name:"",role:"high-resolution",urls:[{protocol:"rtsp://",url:[]}],useForSnapshot:!1,hotMode:!1}],recording:{enabled:!1},interface:{streamingMode:"auto",streamingSource:"auto",aspectRatio:"16:9"},extensions:{hub:[],plugins:[]}},Tn={class:"card-title"},Rn={class:"flex flex-col gap-6"},Pn={for:"name",class:"cui-label"},An={class:"card-title"},In={class:"flex gap-2 items-center w-full"},Hn={class:"flex gap-2 items-center w-full"},Mn={class:"text-color text-sm"},En={class:"flex flex-col gap-6"},jn=["for"],Ln=["for"],Vn={class:"flex items-center gap-4"},Bn={class:"flex flex-col field-switch-gap"},Gn=["for"],On={class:"flex items-center gap-4"},Dn={class:"flex flex-col field-switch-gap"},Fn=["for"],qn={class:"flex flex-col gap-6"},Un=["for"],Wn={class:"w-full flex flex-row my-1"},zn={class:"w-full flex items-center justify-center"},Nn=se({__name:"AddCamera",props:{camera:{default:()=>oo}},setup($,{expose:i}){const E=new Ce,j=Ke(),R=Ne(),{t:G}=Be(),{xsBreakpoint:P}=Le(),T=$,{camera:L}=Ve(T),H=de("formRef"),O=F(["high-resolution","mid-resolution","low-resolution","snapshot"]),b=F([0]),y=F([]),m=F(Me(L.value)),{mutateAsync:C,isPending:M}=E.createCameraQuery(),{mutateAsync:u,isPending:S}=E.previewCameraQuery(),f=J(()=>M.value||S.value),W=c=>{m.value.sources[c].urls.push({protocol:"rtsp://",url:[]})},oe=(c,a)=>{m.value.sources[c].urls.splice(a,1)},A=()=>{m.value.sources.push({_id:ye(8),name:"",role:null,urls:[{protocol:"rtsp://",url:[]}],useForSnapshot:!1,hotMode:!1}),b.value=[m.value.sources.length]},Z=c=>{m.value.sources.splice(c,1)},re=c=>{let a,l,I;switch(c){case"bubble://":a=[],l=Object.assign({"../../../../../markdowns/bubble.md":nn});break;case"doorbird://":a=[],l=Object.assign({"../../../../../markdowns/doorbird.md":an});break;case"dvrip://":a=[],l=Object.assign({"../../../../../markdowns/dvrip.md":sn});break;case"echo:":a=[],l=Object.assign({"../../../../../markdowns/echo.md":rn});break;case"eseecloud://":a=[],l=Object.assign({});break;case"exec:":a=[],l=Object.assign({"../../../../../markdowns/exec.md":cn});break;case"expr:":a=[],l=Object.assign({"../../../../../markdowns/expr.md":ln});break;case"ffmpeg:":a=He,l=Object.assign({"../../../../../markdowns/ffmpeg.md":dn});break;case"flussonic://":a=He,l=Object.assign({});break;case"gopro://":a=He,l=Object.assign({"../../../../../markdowns/gopro.md":un});break;case"hass:":a=[],l=Object.assign({"../../../../../markdowns/hass.md":mn});break;case"homekit://":a=Do,l=Object.assign({"../../../../../markdowns/homekit.md":pn});break;case"http://":case"https://":case"httpx://":case"tcp://":a=Fo,l=Object.assign({"../../../../../markdowns/http.md":hn});break;case"isapi://":a=[],l=Object.assign({"../../../../../markdowns/isapi.md":fn});break;case"ivideon:":a=[],l=Object.assign({"../../../../../markdowns/ivideon.md":gn});break;case"kasa://":a=[],l=Object.assign({"../../../../../markdowns/kasa.md":_n});break;case"nest:":a=qo,l=Object.assign({"../../../../../markdowns/nest.md":vn});break;case"onvif://":a=[],l=Object.assign({"../../../../../markdowns/onvif.md":bn});break;case"ring:":a=Uo,l=Object.assign({"../../../../../markdowns/ring.md":wn});break;case"roborock://":a=[],l=Object.assign({"../../../../../markdowns/roborock.md":yn});break;case"rtmp://":a=[],l=Object.assign({"../../../../../markdowns/rtmp.md":xn});break;case"rtsp://":case"rtspx://":a=Oo,l=Object.assign({"../../../../../markdowns/rtsp.md":kn});break;case"tapo://":a=[],l=Object.assign({"../../../../../markdowns/tapo.md":Cn});break;case"webrtc:":a=Wo,l=Object.assign({"../../../../../markdowns/webrtc.md":Sn});break;case"webtorrent:":a=[],l=Object.assign({"../../../../../markdowns/webtorrent.md":$n});break;default:a=[],l=void 0;break}return l&&(I=Object.values(l)[0]),{presets:a,md:I}},ie=c=>{y.value=c},ce=(c,a)=>{a.protocol=c},h=async(c,a)=>{if(!(!c&&!a)){if(c){const l={url:v(c)};try{const I=await u({cameraData:l});j.openImageDialog({data:{title:G("components.dialog.title.preview"),src:`data:image/jpeg;base64,${I}`,hideConfirmButton:!0}})}catch{}}else if(a){const l=re(a);if(!l.md)return;j.openTextDialog({data:{title:G("components.dialog.title.information"),hideConfirmButton:!0,contentText:l.md,markdown:!0}})}}},v=c=>{let a=c.url.join("");switch(c.protocol){case"nest:":case"ring:":case"webtorrent:":!a.startsWith("?")&&!a.startsWith(c.protocol)&&(a=`?${a}`)}return a.startsWith(c.protocol)?a:`${c.protocol}${a}`};return i({isLoading:f,onSave:async()=>{var I;const c=await((I=H.value)==null?void 0:I.validate());if(!(c!=null&&c.valid))return R.add({severity:"error",summary:G("components.toast.title_error"),detail:G("components.toast.validation_failed"),life:3e3}),console.log("Validation failed",c),null;const a=Me(m.value),l={...a,pluginId:"native",type:"camera",isCloud:!1,snapshotTTL:600,detectionZones:[],detectionSettings:{motion:{timeout:60},object:{confidence:.7}},frameWorkerSettings:{decoder:"rust",fps:10,resolution:"320x180"},sources:a.sources.map(D=>{const pe=D.urls.map(ae=>{if(ae.url)return v(ae)}).filter(Boolean);return{...D,urls:pe}})};await C({cameraData:l})}}),(c,a)=>{const l=qe,I=Fe,D=Ee,pe=lo,ae=ze,ee=ke,Se=co,he=mo,ge=po,_e=ho,ve=Co,fe=Ue,$e=tn,Te=fo,be=Zt,Re=uo,Pe=io,Ae=ro,Y=Ye,le=je;return s(),p("div",null,[o(e(eo),{ref_key:"formRef",ref:H,class:"flex flex-col w-full gap-6","validation-schema":e(ko)},{default:t(()=>[n("div",null,[n("span",Tn,w(c.$t("components.dialog.components.new_camera.camera")),1),o(D,{class:"cui-card"},{content:t(()=>[n("div",Rn,[o(e(U),{modelValue:e(m).name,"onUpdate:modelValue":a[0]||(a[0]=x=>e(m).name=x),name:"name",as:"div",class:"flex flex-col field-gap"},{default:t(({field:x,errors:r})=>[n("label",Pn,w(c.$t("components.form.label.name")),1),o(I,null,{default:t(()=>[o(l,Q(x,{invalid:r.length>0,loading:e(f),type:"text"}),null,16,["invalid","loading"])]),_:2},1024),o(N,{name:"fade"},{default:t(()=>[o(e(K),{name:"name",class:"cui-input-error"})]),_:1})]),_:1},8,["modelValue"])])]),_:1})]),n("div",null,[n("span",An,w(c.$t("components.form.label.sources")),1),o(D,{class:"cui-card border-color-inner",pt:{body:{class:"pb-0"}}},{content:t(()=>[o(Ae,{value:e(b),"onUpdate:value":a[2]||(a[2]=x=>ne(b)?b.value=x:null),multiple:""},{default:t(()=>[(s(!0),p(ue,null,me(e(m).sources,(x,r)=>(s(),_(Pe,{key:r,value:r,class:xe({"border-b-0":r===e(m).sources.length-1})},{default:t(()=>[o(Se,{class:xe({"px-0 pt-0":r===0,"px-0":r!==0,"pb-5":r===e(m).sources.length-1})},{default:t(()=>[n("div",In,[n("div",Hn,[n("span",Mn,w(c.$t("components.dialog.components.new_camera.source")+": "),1),o(pe,{class:"text-color text-xs border-[1px] bg-primary-500/20 border-primary-500/30 py-2 px-3 rounded-full overflow-hidden",label:x.name!==""?x.name:c.$t("components.dialog.components.new_camera.unknown")},null,8,["label"])]),e(m).sources.length>1?(s(),_(ee,{key:0,text:"",rounded:"",severity:"danger",class:"cui-icon-md ml-auto mr-2",loading:e(f),onClick:d=>Z(r)},{icon:t(()=>[o(ae,{width:"100%",height:"100%"})]),_:2},1032,["loading","onClick"])):g("",!0)])]),_:2},1032,["class"]),o(Re,{pt:{content:{class:{"px-0":!0,"pb-5":r===e(m).sources.length-1}}}},{default:t(()=>[n("div",En,[o(e(U),{modelValue:x.name,"onUpdate:modelValue":d=>x.name=d,name:`sources[${r}].name`,as:"div",class:"flex flex-col field-gap"},{default:t(({field:d,errors:k})=>[n("label",{for:`sources[${r}].name`,class:"cui-label"},w(c.$t("components.form.label.source_name")),9,jn),o(I,null,{default:t(()=>[o(l,Q({ref_for:!0},d,{invalid:k.length>0,loading:e(f),type:"text"}),null,16,["invalid","loading"])]),_:2},1024),o(N,{name:"fade"},{default:t(()=>[o(e(K),{name:`sources[${r}].name`,class:"cui-input-error"},null,8,["name"])]),_:2},1024)]),_:2},1032,["modelValue","onUpdate:modelValue","name"]),o(e(U),{"model-value":x.role,name:`sources[${r}].role`,as:"div",class:"flex flex-col field-gap"},{default:t(({field:d,errors:k})=>[n("label",{for:`sources[${r}].role`,class:"cui-label"},w(c.$t("components.form.label.source_role")),9,Ln),o(I,null,{default:t(()=>[o(he,Q({"model-value":x.role,ref_for:!0},d,{options:e(O).filter(z=>!e(m).sources.some(te=>te.role===z&&te._id!==x._id)),invalid:k.length>0,loading:e(f),onValueChange:z=>x.role=z}),null,16,["model-value","options","invalid","loading","onValueChange"])]),_:2},1024),o(N,{name:"fade"},{default:t(()=>[o(e(K),{name:`sources[${r}].role`,class:"cui-input-error"},null,8,["name"])]),_:2},1024)]),_:2},1032,["model-value","name"]),x.role!=="snapshot"&&e(m).sources.length>1&&!e(m).sources.some(d=>(d.useForSnapshot||d.role==="snapshot")&&d._id!==x._id)?(s(),_(e(U),{key:0,"model-value":x.useForSnapshot,value:!0,"unchecked-value":!1,type:"checkbox",name:`sources[${r}].useForSnapshot`,as:"div",class:"flex flex-col field-gap"},{default:t(({field:d,errors:k})=>[n("div",Vn,[n("div",Bn,[n("label",{for:`sources[${r}].useForSnapshot`,class:"cui-label-switch"},w(c.$t("components.form.label.use_for_snapshot")),9,Gn),o(ge,{severity:"secondary",variant:"simple",size:"small",class:"cui-input-switch-hint"},{default:t(()=>[Ge(w(c.$t("components.form.hint.use_for_snapshot")),1)]),_:1}),o(N,{name:"fade"},{default:t(()=>[o(e(K),{name:`sources[${r}].useForSnapshot`,class:"cui-input-switch-error"},null,8,["name"])]),_:2},1024)]),o(_e,Q({"model-value":x.useForSnapshot,ref_for:!0},d,{invalid:k.length>0,loading:e(f),class:"ml-auto shrink-0",onValueChange:z=>x.useForSnapshot=z}),null,16,["model-value","invalid","loading","onValueChange"])])]),_:2},1032,["model-value","name"])):g("",!0),x.role!=="snapshot"?(s(),_(e(U),{key:1,"model-value":x.hotMode,value:!0,"unchecked-value":!1,type:"checkbox",name:`sources[${r}].hotMode`,as:"div",class:"flex flex-col field-gap"},{default:t(({field:d,errors:k})=>[n("div",On,[n("div",Dn,[n("label",{for:`sources[${r}].hotMode`,class:"cui-label-switch"},w(c.$t("components.form.label.hot_mode")),9,Fn),o(ge,{severity:"secondary",variant:"simple",size:"small",class:"cui-input-switch-hint"},{default:t(()=>[Ge(w(c.$t("components.form.hint.hot_mode")),1)]),_:1}),o(N,{name:"fade"},{default:t(()=>[o(e(K),{name:`sources[${r}].hotMode`,class:"cui-input-switch-error"},null,8,["name"])]),_:2},1024)]),o(_e,Q({"model-value":x.hotMode,ref_for:!0},d,{invalid:k.length>0,loading:e(f),class:"ml-auto shrink-0",onValueChange:z=>x.hotMode=z}),null,16,["model-value","invalid","loading","onValueChange"])])]),_:2},1032,["model-value","name"])):g("",!0),n("div",qn,[(s(!0),p(ue,null,me(x.urls,(d,k)=>(s(),p("div",{key:k},[n("label",{for:`sources[${r}].urls[]`,class:"cui-label"},w(c.$t("components.form.label.source")),9,Un),e(P)?(s(),_(e(U),{key:0,"model-value":d.protocol,name:`sources[${r}].urls[${k}].protocol`,as:"div",class:"flex flex-col field-gap"},{default:t(({field:z,errors:te})=>[o(I,null,{default:t(()=>[o(he,Q({"model-value":d.protocol,ref_for:!0},z,{options:e(Oe),invalid:te.length>0,loading:e(f),"onUpdate:modelValue":q=>ce(q,d)}),null,16,["model-value","options","invalid","loading","onUpdate:modelValue"]),o(fe,null,{default:t(()=>[B((s(),_(ee,{text:"",rounded:"",severity:"secondary",loading:e(f),onClick:q=>h(void 0,d.protocol)},{icon:t(()=>[o(ve)]),_:2},1032,["loading","onClick"])),[[le,{value:c.$t("components.dialog.components.new_camera.protocol_info")},void 0,{top:!0}]])]),_:2},1024)]),_:2},1024),o(N,{name:"fade"},{default:t(()=>[o(e(K),{name:`sources[${r}].urls[${k}].protocol`,class:"cui-input-error"},null,8,["name"])]),_:2},1024)]),_:2},1032,["model-value","name"])):g("",!0),n("div",Wn,[e(P)?g("",!0):(s(),_(e(U),{key:0,"model-value":d.protocol,name:`sources[${r}].urls[${k}].protocol`,as:"div",class:"flex flex-col field-gap"},{default:t(({field:z,errors:te})=>[o(I,null,{default:t(()=>[o(he,Q({"model-value":d.protocol,ref_for:!0},z,{options:e(Oe),invalid:te.length>0,loading:e(f),pt:{root:{class:"rounded-r-none"}},"onUpdate:modelValue":q=>ce(q,d)}),null,16,["model-value","options","invalid","loading","onUpdate:modelValue"])]),_:2},1024),o(N,{name:"fade"},{default:t(()=>[o(e(K),{name:`sources[${r}].urls[${k}].protocol`,class:"cui-input-error"},null,8,["name"])]),_:2},1024)]),_:2},1032,["model-value","name"])),o(e(U),{"model-value":d.url,name:`sources[${r}].urls[${k}].url`,as:"div",class:"flex flex-col field-gap w-full"},{default:t(({field:z,errors:te})=>[o(I,null,{default:t(()=>[o(Te,{"model-value":d.url,invalid:te.length>0,loading:e(f),multiple:"",fluid:"",typeahead:!1,suggestions:e(y),pt:{inputMultiple:{class:"rounded-none overflow-y-scroll max-h-[42px]"}},onComplete:q=>ie(re(d.protocol).presets),onHide:a[1]||(a[1]=q=>y.value=[]),onValueChange:q=>(z.value=q)&&(d.url=q)},{dropdown:t(({toggleCallback:q})=>[o(fe,null,{default:t(()=>[o(ee,{text:"",rounded:"",severity:"secondary",disabled:e(f),class:"border-right-color",onClick:q},{icon:t(()=>[e(f)?g("",!0):(s(),_($e,{key:0}))]),_:2},1032,["disabled","onClick"])]),_:2},1024)]),_:2},1032,["model-value","invalid","loading","suggestions","onComplete","onValueChange"]),o(fe,null,{default:t(()=>[e(P)?g("",!0):B((s(),_(ee,{key:0,text:"",rounded:"",severity:"secondary",disabled:e(f),class:"border-right-color",onClick:q=>h(void 0,d.protocol)},{icon:t(()=>[o(ve)]),_:2},1032,["disabled","onClick"])),[[le,{value:c.$t("components.dialog.components.new_camera.protocol_info")},void 0,{top:!0}]]),B((s(),_(ee,{text:"",rounded:"",severity:"secondary",disabled:!d.protocol||!d.url.length||e(f),class:"border-right-color",onClick:q=>h(d)},{icon:t(()=>[o(be,{width:"100%",height:"100%"})]),_:2},1032,["disabled","onClick"])),[[le,{value:c.$t("components.dialog.components.new_camera.test_source")},void 0,{top:!0}]]),x.urls.length>1?(s(),_(ee,{key:1,text:"",rounded:"",severity:"danger",disabled:e(f),onClick:Lo(q=>oe(r,k),["prevent"])},{icon:t(()=>[o(ae,{width:"100%",height:"100%"})]),_:2},1032,["disabled","onClick"])):g("",!0)]),_:2},1024)]),_:2},1024),o(N,{name:"fade"},{default:t(()=>[o(e(K),{name:`sources[${r}].urls[${k}].url`,class:"cui-input-error"},null,8,["name"])]),_:2},1024)]),_:2},1032,["model-value","name"])])]))),128)),o(ee,{loading:e(f),label:c.$t("components.form.button.add_source"),class:"ml-auto cui-button-medium",onClick:d=>W(r)},null,8,["loading","label","onClick"])])])]),_:2},1032,["pt"])]),_:2},1032,["value","class"]))),128))]),_:1},8,["value"])]),_:1})]),n("div",zn,[o(ee,{text:"",rounded:"",loading:e(f),class:"cui-icon-2xl",onClick:A},{icon:t(()=>[o(Y,{width:"100%",height:"100%"})]),_:1},8,["loading"])])]),_:1},8,["validation-schema"])])}}}),Kn={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function Yn($,i){return s(),p("svg",Kn,i[0]||(i[0]=[n("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.5",color:"currentColor"},[n("path",{d:"M2.5 12c0-4.478 0-6.718 1.391-8.109S7.521 2.5 12 2.5c4.478 0 6.718 0 8.109 1.391S21.5 7.521 21.5 12c0 4.478 0 6.718-1.391 8.109S16.479 21.5 12 21.5c-4.478 0-6.718 0-8.109-1.391S2.5 16.479 2.5 12"}),n("path",{d:"m15 15l2 2m-1-5.5a4.5 4.5 0 1 0-9 0a4.5 4.5 0 0 0 9 0"})],-1)]))}const Qn=X({name:"hugeicons-search-square",render:Yn}),Jn={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"};function Xn($,i){return s(),p("svg",Jn,i[0]||(i[0]=[n("path",{fill:"currentColor","fill-rule":"evenodd",d:"M9.451 3.25h.098c1.602 0 2.872 0 3.876.119c1.03.122 1.88.377 2.588.96q.361.296.659.658c.582.709.837 1.557.96 2.588q.04.348.064.739c.786-.392 1.452-.714 2.007-.896c.652-.213 1.343-.299 1.98.095s.87 1.05.97 1.728c.097.655.097 1.516.097 2.551v.416c0 1.035 0 1.896-.097 2.55c-.1.679-.333 1.335-.97 1.729s-1.328.308-1.98.095c-.555-.182-1.221-.504-2.007-.896q-.023.391-.065.739c-.122 1.03-.377 1.88-.96 2.588q-.296.361-.658.659c-.709.582-1.557.837-2.588.96c-1.005.118-2.274.118-3.876.118H9.45c-1.602 0-2.872 0-3.876-.119c-1.03-.122-1.88-.377-2.588-.96a5 5 0 0 1-.659-.658c-.582-.709-.837-1.557-.96-2.588c-.118-1.005-.118-2.274-.118-3.876V11.45c0-1.602 0-2.872.119-3.876c.122-1.03.377-1.88.96-2.588a5 5 0 0 1 .658-.659c.709-.582 1.557-.837 2.588-.96C6.58 3.25 7.85 3.25 9.451 3.25m6.799 9.25v-1c0-1.662-.001-2.843-.108-3.749c-.105-.889-.304-1.415-.63-1.813a3.3 3.3 0 0 0-.45-.45c-.398-.326-.924-.525-1.813-.63c-.906-.107-2.087-.108-3.749-.108s-2.843.001-3.749.108c-.889.105-1.415.304-1.813.63a3.3 3.3 0 0 0-.45.45c-.326.398-.525.924-.63 1.813c-.107.906-.108 2.087-.108 3.749v1c0 1.662.001 2.843.108 3.749c.105.889.304 1.415.63 1.813q.203.247.45.45c.398.326.924.525 1.813.63c.906.107 2.087.108 3.749.108s2.843-.001 3.749-.108c.889-.105 1.415-.304 1.813-.63q.247-.203.45-.45c.326-.398.525-.924.63-1.813c.107-.906.108-2.087.108-3.749m1.5 1.537l.244.121c.995.498 1.666.831 2.176.998c.499.163.65.1.724.055s.198-.153.275-.673c.079-.53.081-1.28.081-2.392v-.292c0-1.113-.002-1.862-.08-2.392c-.078-.52-.202-.627-.276-.673s-.225-.108-.724.055c-.51.167-1.18.5-2.176.998l-.244.122v4.072M9.5 8.75a.75.75 0 0 1 .75.75v1.75H12a.75.75 0 0 1 0 1.5h-1.75v1.75a.75.75 0 0 1-1.5 0v-1.75H7a.75.75 0 0 1 0-1.5h1.75V9.5a.75.75 0 0 1 .75-.75","clip-rule":"evenodd"},null,-1)]))}const Zn=X({name:"solar-videocamera-add-outline",render:Xn}),ea={key:0,class:"flex flex-col items-center justify-center rounded-md",style:{background:"color-mix(in srgb, var(--card-inner-background), transparent 50%)"}},oa={class:"font-semibold text-base text-color"},ta={class:"text-xs text-muted"},na={class:"font-semibold text-base text-color"},aa={class:"text-xs text-muted"},sa={key:1,class:"w-full h-full"},ra={key:2,class:"w-full h-full"},ia=se({__name:"NewCamera",setup($,{expose:i}){const E=Je("dialogRefProps"),j=de("addRef"),R=de("discoverRef"),G=F(oo),{currentTab:P,goToTab:T}=So(),L=J(()=>{var b,y;return!!((b=E.loading)!=null&&b.value||(y=j.value)!=null&&y.isLoading)});Ze(P,()=>{E.hideConfirmButton.value=P.value!=="add"},{immediate:!0});const H=b=>{G.value=b,T("add")};return i({isLoading:L,onConfirm:async()=>{var b;return(b=j.value)==null?void 0:b.onSave()}}),(b,y)=>{const m=Zn,C=ke,M=Qn,u=Nn,S=Qt;return s(),p("div",null,[e(P)?g("",!0):(s(),p("div",ea,[o(C,{text:"",fluid:"",severity:"secondary",class:"flex flex-col items-center justify-center gap-2 rounded-b-none pb-6 border-b-[1px] border-color",onClick:y[0]||(y[0]=f=>e(T)("add"))},{default:t(()=>[o(m,{width:"60px",height:"60px",class:"text-primary"}),n("span",oa,w(b.$t("components.dialog.components.new_camera.add_camera")),1),n("span",ta,w(b.$t("components.dialog.components.new_camera.add_camera_description")),1)]),_:1}),o(C,{text:"",fluid:"",severity:"secondary",class:"flex flex-col items-center justify-center gap-2 py-3 rounded-t-none border-[1px] border-t-0 border-color",onClick:y[1]||(y[1]=f=>e(T)("discover"))},{default:t(()=>[o(M,{width:"60px",height:"60px",class:"text-primary"}),n("span",na,w(b.$t("components.dialog.components.new_camera.discover_cameras")),1),n("span",aa,w(b.$t("components.dialog.components.new_camera.discover_cameras_description")),1)]),_:1})])),e(P)==="add"?(s(),p("div",sa,[o(u,{ref_key:"addRef",ref:j,camera:e(G)},null,8,["camera"])])):g("",!0),e(P)==="discover"?(s(),p("div",ra,[o(S,{ref_key:"discoverRef",ref:R,onAddCamera:H},null,512)])):g("",!0)])}}}),ca={class:"py-4 pb-1 sm:p-0"},la={key:0,class:"page-title pl-4 sm:pl-0"},da={class:"page-title pl-4 sm:pl-0"},ua={class:"w-full h-[60px] p-4 absolute bottom-0 z-1 flex items-center gap-1 justify-between pointer-events-none"},ma={class:"text-xs font-semibold p-2 bg-black/60 rounded-full text-white"},pa={key:0},ha={class:"flex items-center justify-center w-full h-full"},fa={key:1,class:"text-muted"},ss=se({__name:"Cameras",setup($){const i=new Ce,E=$o(),j=Ke(),R=To(),G=Ro(),{t:P}=Be(),{smBreakpoint:T}=Le(),{uiSettings:L}=Go(R),H=Xe({}),{data:O,isFetching:b}=i.getCamerasQuery({page:1,pageSize:-1}),y=J(()=>b.value),m=J(()=>G.showBottombar.value?Po.HEIGHT:0),C=u=>{j.openComponentDialog(et,{data:{title:P("components.dialog.title.log"),confirmText:P("components.form.button.download"),loading:y,stayActive:!0,contentProps:{cameraName:u},dialogContentClass:"not-md:px-0 h-full md:h-[50vh]"}})},M=()=>{j.openStepperDialog(ia,{data:{title:P("components.dialog.components.new_camera.title"),fullscreen:!0,tabs:[{id:"add",title:P("components.dialog.components.new_camera.add_camera")},{id:"discover",title:P("components.dialog.components.new_camera.discover_cameras")}],contentProps:{}}})};return(u,S)=>{const f=Zo,W=De,oe=We,A=ke,Z=Ao,re=Io,ie=Ho,ce=Ye,h=Ee,v=go,V=je;return s(),p("div",ca,[e(L).cameras.showEvents?(s(),p("h1",la,w(u.$t("views.cameras.events")),1)):g("",!0),e(L).cameras.showEvents?(s(),_(f,{key:1,class:"flex w-full mb-3 px-1 sm:px-0"})):g("",!0),n("h1",da,w(u.$t(`views.${String(u.$route.name).toLowerCase()}.title`)),1),o(Vo,{name:"fade-2"},{default:t(()=>{var c,a;return[e(y)?(s(),p("div",{key:"loading",class:"grid w-full gap-2",style:Ie({gridTemplateColumns:`repeat(auto-fill, minmax(${e(T)?"100%":"300px"}, 1fr))`})},[(s(),p(ue,null,me(15,l=>o(W,{key:l,class:xe(["aspect-video !h-auto cui-card",{"!rounded-none !border-0":e(T)}])},null,8,["class"])),64))],4)):(s(),p("div",{key:"cameraCards",class:"grid w-full gap-1",style:Ie({gridTemplateColumns:`repeat(auto-fill, minmax(${e(T)?"100%":"300px"}, 1fr)) ${!e(O)||e(O).result.length<2?"50%":""}`})},[(s(!0),p(ue,null,me((c=e(O))==null?void 0:c.result,l=>(s(),p("div",{key:l.name,class:xe(["dark-mode rounded-xl overflow-hidden border-[1px] border-color relative",{"!border-0 !rounded-none":e(T)}])},[n("div",ua,[n("span",ma,w(l.name),1),B((s(),_(A,{severity:"secondary",rounded:"",class:"cui-icon-md pointer-events-auto ml-auto",onClick:I=>{var D;return(D=e(H)[l.name])==null?void 0:D.refresh()}},{icon:t(()=>[o(oe,{width:"100%",height:"100%"})]),_:2},1032,["onClick"])),[[V,{value:u.$t("components.player.refresh_snapshot")},void 0,{top:!0}]]),("useCuiPermission"in u?u.useCuiPermission:e(we))(void 0,"admin")?B((s(),_(A,{key:0,severity:"secondary",rounded:"",class:"cui-icon-md pointer-events-auto",onClick:I=>C(l.name)},{icon:t(()=>[o(Z,{width:"100%",height:"100%"})]),_:2},1032,["onClick"])),[[V,{value:u.$t("components.player.log")},void 0,{top:!0}]]):g("",!0),("useCuiPermission"in u?u.useCuiPermission:e(we))(void 0,"admin")?B((s(),_(A,{key:1,rounded:"",severity:"secondary",class:"cui-icon-md pointer-events-auto",onClick:I=>e(E).open({cameraName:l.name})},{icon:t(()=>[o(re,{width:"100%",height:"100%"})]),_:2},1032,["onClick"])),[[V,{value:u.$t("components.player.settings")},void 0,{top:!0}]]):g("",!0)]),o(ie,{ref_for:!0,ref:I=>{e(H)[l.name]=I},"camera-name":l.name,class:"cursor-pointer","image-container-class":"w-full h-full",onClick:I=>u.$router.push(`/cameras/${l.name}`)},null,8,["camera-name","onClick"])],2))),128)),("useCuiPermission"in u?u.useCuiPermission:e(we))(void 0,"admin")&&!e(T)?(s(),p("div",pa,[o(h,{class:"cui-card aspect-video",pt:{root:{class:{"!rounded-none !border-0":e(T)}},body:{class:"h-full flex items-center justify-center"}}},{content:t(()=>[n("div",ha,[o(A,{text:"",rounded:"",class:"w-16 h-16 dark-mode",onClick:M},{icon:t(()=>[o(ce,{width:"100%",height:"100%"})]),_:1})])]),_:1},8,["pt"])])):!((a=e(O))!=null&&a.result.length)&&("useCuiPermission"in u?u.useCuiPermission:e(we))(void 0,"user",!0)?(s(),p("span",fa,w(u.$t("views.cameras.no_cameras")),1)):g("",!0)],4))]}),_:1}),e(T)?B((s(),_(A,{key:2,rounded:"",class:"transition-all cui-icon-3xl fixed right-safe-offset-5 z-10 shadow-lg text-white",style:Ie({bottom:`calc(${e(m)}px + 1.25rem + env(safe-area-inset-bottom, 0px))`}),onClick:M},{icon:t(()=>[o(v,{width:"30px",height:"30px"})]),_:1},8,["style"])),[[V,{value:u.$t("views.cameras.add_camera")},void 0,{top:!0}]]):g("",!0)])}}});export{ss as default};
|